<?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>179934</bug_id>
          
          <creation_ts>2017-11-21 20:47:15 -0800</creation_ts>
          <short_desc>GC constraint solving should be parallel</short_desc>
          <delta_ts>2017-12-16 07:04:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=180308</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>166826</blocked>
    
    <blocked>180906</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1374131</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-21 20:47:15 -0800</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374132</commentid>
    <comment_count>1</comment_count>
      <attachid>327441</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-21 20:48:35 -0800</bug_when>
    <thetext>Created attachment 327441
it&apos;s a start

I think that I have a plan for how to make this work.  We will run constraints in parallel.  Additionally, constraints will be able to do their own parallel work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374227</commentid>
    <comment_count>2</comment_count>
      <attachid>327460</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-22 10:19:26 -0800</bug_when>
    <thetext>Created attachment 327460
I think it&apos;s written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374498</commentid>
    <comment_count>3</comment_count>
      <attachid>327517</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-23 17:13:22 -0800</bug_when>
    <thetext>Created attachment 327517
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374509</commentid>
    <comment_count>4</comment_count>
      <attachid>327521</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-23 19:50:52 -0800</bug_when>
    <thetext>Created attachment 327521
I&apos;m starting to like the algorithm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374587</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-24 05:53:58 -0800</bug_when>
    <thetext>Attachment 327521 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:61:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:63:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:104:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:116:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:70:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:116:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:117:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:126:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:127:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.cpp:128:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 13 in 24 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>1374637</commentid>
    <comment_count>6</comment_count>
      <attachid>327556</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-24 14:23:25 -0800</bug_when>
    <thetext>Created attachment 327556
it can reliably run splay

Looks like it may be a regression though.  There is a lot about this algorithm that is imperfect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374641</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-24 14:50:01 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #6)
&gt; Created attachment 327556 [details]
&gt; it can reliably run splay
&gt; 
&gt; Looks like it may be a regression though.  There is a lot about this
&gt; algorithm that is imperfect.

I think that the regression is because of those times when the old solver would just run a single constraint to produce forward progress.  It&apos;s even good at picking which constraint to run.  Now we will run ~8 constraints on an 8 core machine.  The first one will be the only one we need to run.

The parallelism helps the most when we know we want to run multiple constraints.  I need to figure out a way of turning on the parallelism in exactly those cases where it is profitable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374699</commentid>
    <comment_count>8</comment_count>
      <attachid>327576</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-25 11:55:43 -0800</bug_when>
    <thetext>Created attachment 327576
taking a shot at a better load balancer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374710</commentid>
    <comment_count>9</comment_count>
      <attachid>327577</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-25 15:51:45 -0800</bug_when>
    <thetext>Created attachment 327577
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374711</commentid>
    <comment_count>10</comment_count>
      <attachid>327578</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-25 16:08:49 -0800</bug_when>
    <thetext>Created attachment 327578
a bit nicer

Put each new class into its own file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374715</commentid>
    <comment_count>11</comment_count>
      <attachid>327579</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-25 18:35:32 -0800</bug_when>
    <thetext>Created attachment 327579
made it more testable

This finally adds &quot;splay-latency&quot; to the &quot;Octane&quot; in run-jsc-benchmarks.  What that harness calls Octane was never Octane, so I went ahead and added the JetStream-style splay-latency, in the sense that it&apos;s the average above the 99.5% percentile.  However, it runs significantly longer and so should detect tinier changes in GC responsiveness.

The previous version of the patch is a 10% regression on this test.

The hope with this patch is that it gets to neutral on splay-latency and provides a speed-up on DOM-heavy code.  It&apos;s not going to do either of those things yet, but being within shooting distance of neutral on splay-latency is pretty good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374718</commentid>
    <comment_count>12</comment_count>
      <attachid>327581</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-25 19:02:58 -0800</bug_when>
    <thetext>Created attachment 327581
neutral on splay-latency</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375246</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-27 20:34:24 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #12)
&gt; Created attachment 327581 [details]
&gt; neutral on splay-latency

It was also neutral on Speedometer.  But I also confirmed that Speedometer spends a decent amount of time in constraint solving per GC cycle.  I don&apos;t know if that means a significant amount of time overall.  I think that the parallelism in this patch did not help because Speedometer GC cycles spend most of their time in one of the DOM constraints.  I think there are just two of them.

So, right now I&apos;m working on making those constraints parallel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375247</commentid>
    <comment_count>14</comment_count>
      <attachid>327723</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-27 20:35:08 -0800</bug_when>
    <thetext>Created attachment 327723
with parallel Wcoc constraint

I haven&apos;t even compiled this yet.  I&apos;m just starting to understand how to introduce parallelism into the innards of constraints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375439</commentid>
    <comment_count>15</comment_count>
      <attachid>327766</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-28 11:40:26 -0800</bug_when>
    <thetext>Created attachment 327766
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375535</commentid>
    <comment_count>16</comment_count>
      <attachid>327788</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-28 14:29:18 -0800</bug_when>
    <thetext>Created attachment 327788
a bit more

To make this make any sense, I needed to improve how the opaque root set works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375549</commentid>
    <comment_count>17</comment_count>
      <attachid>327794</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-28 14:58:18 -0800</bug_when>
    <thetext>Created attachment 327794
fix some compile errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375771</commentid>
    <comment_count>18</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-29 03:52:26 -0800</bug_when>
    <thetext>Attachment 327794 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/SlotVisitor.cpp:665:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:45:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:46:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:47:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:154:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.h:50:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:60:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:62:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 16 in 47 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>1376203</commentid>
    <comment_count>19</comment_count>
      <attachid>327951</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-29 21:33:10 -0800</bug_when>
    <thetext>Created attachment 327951
ConcurrentPtrHashSet unit tests pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376367</commentid>
    <comment_count>20</comment_count>
      <attachid>327984</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-30 10:00:36 -0800</bug_when>
    <thetext>Created attachment 327984
maybe 0.5% faster on Speedometer

I haven&apos;t even picked the EventTargetDataMap lock.  I haven&apos;t even made WeakSet processing parallel.

I think that I need to do those things for this patch to make sense.  I don&apos;t want to run the risk that the EventTargetDataMap lock contention is a regression on some systems.

The WeakSet part is just so trivial that it would be weird not to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376414</commentid>
    <comment_count>21</comment_count>
      <attachid>327996</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-30 11:15:53 -0800</bug_when>
    <thetext>Created attachment 327996
more

Removed the need to lock the event target data map lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376843</commentid>
    <comment_count>22</comment_count>
      <attachid>328103</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 09:30:01 -0800</bug_when>
    <thetext>Created attachment 328103
reduced reliance on nested classes

This patch still introduces a lot of new uses of nested classes, but earlier versions used them a bit too much.  I think that once a class is so big that it doesn&apos;t fit on the screen, it should probably be in a separate file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376912</commentid>
    <comment_count>23</comment_count>
      <attachid>328121</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 10:46:29 -0800</bug_when>
    <thetext>Created attachment 328121
it compiles again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376946</commentid>
    <comment_count>24</comment_count>
      <attachid>328129</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 11:39:32 -0800</bug_when>
    <thetext>Created attachment 328129
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376954</commentid>
    <comment_count>25</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-12-01 11:47:47 -0800</bug_when>
    <thetext>EWS doesn&apos;t like the patch.  Can you rebase?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376994</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 12:58:25 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #25)
&gt; EWS doesn&apos;t like the patch.  Can you rebase?

Yeah!  Also, I didn&apos;t mean to mark it r? yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376995</commentid>
    <comment_count>27</comment_count>
      <attachid>328129</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 12:58:40 -0800</bug_when>
    <thetext>Comment on attachment 328129
the patch

This is not yet ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377028</commentid>
    <comment_count>28</comment_count>
      <attachid>328149</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 13:36:36 -0800</bug_when>
    <thetext>Created attachment 328149
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377054</commentid>
    <comment_count>29</comment_count>
      <attachid>328156</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 14:08:21 -0800</bug_when>
    <thetext>Created attachment 328156
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377057</commentid>
    <comment_count>30</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-01 14:11:17 -0800</bug_when>
    <thetext>Attachment 328156 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/SlotVisitor.cpp:662:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:60:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:92:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:95:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:125:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:128:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:153:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:156:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:158:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:163:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:167:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:169:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:170:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:172:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:183:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:191:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:192:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:194:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:199:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:202:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:204:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:206:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:211:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:214:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:218:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:220:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:230:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:45:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:46:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:47:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:55:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:56:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:68:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.h:50:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:61:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:63:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 49 in 68 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>1377073</commentid>
    <comment_count>31</comment_count>
      <attachid>328158</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 14:34:49 -0800</bug_when>
    <thetext>Created attachment 328158
the patch

Made a few stylistic tweaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377076</commentid>
    <comment_count>32</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-01 14:36:53 -0800</bug_when>
    <thetext>Attachment 328158 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/SlotVisitor.cpp:662:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:45:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:46:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:47:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:55:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:56:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:68:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:60:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:92:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:95:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:125:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:128:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:153:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:156:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:158:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:163:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:167:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:169:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:170:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:172:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:183:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:191:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:192:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:194:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:199:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:202:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:204:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:206:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:211:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:214:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:218:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:220:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:230:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.h:53:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:62:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:64:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 49 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>1377239</commentid>
    <comment_count>33</comment_count>
      <attachid>328213</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 22:25:26 -0800</bug_when>
    <thetext>Created attachment 328213
latest

The previous patch was a slight regression on JetStream because of how we synchronized the worker threads.  This fixes that, but it regresses Speedometer.  It seems that the solver sometimes gets stuck in Speedometer now; I&apos;m investigating why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377257</commentid>
    <comment_count>34</comment_count>
      <attachid>328218</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-01 23:53:34 -0800</bug_when>
    <thetext>Created attachment 328218
back to progression on speedo

I think</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377261</commentid>
    <comment_count>35</comment_count>
      <attachid>328221</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-02 00:19:40 -0800</bug_when>
    <thetext>Created attachment 328221
updated changelog

I wasn&apos;t able to measure the progression on Speedometer, but I think that might be just measurement noise.

I confirmed that Speedometer sees a nice progression if I set concurrency to Sequential for the conservative root constraint. This version of the patch does not do that, and instead relies on some other defenses against weird behavior in that constraint. I&apos;m pretty sure I still have more work to do. For example, I think that ConservativeRoots will scan the main thread twice if it&apos;s invoked from a marking thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377276</commentid>
    <comment_count>36</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-02 04:31:09 -0800</bug_when>
    <thetext>Attachment 328221 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/SlotVisitor.cpp:282:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:66:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:109:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:163:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:173:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:185:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:187:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:221:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:223:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:225:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:230:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:237:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:239:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:251:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:64:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:66:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 30 in 72 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>1377289</commentid>
    <comment_count>37</comment_count>
      <attachid>328221</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-02 07:22:55 -0800</bug_when>
    <thetext>Comment on attachment 328221
updated changelog

Attachment 328221 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/5466603

New failing tests:
microbenchmarks/v8-regexp-search.js.no-cjit-collect-continuously
stress/v8-regexp-strict.js.ftl-eager
microbenchmarks/direct-construct.js.ftl-eager
stress/array-concat-spread-proxy-exception-check.js.dfg-eager-no-cjit-validate
stress/value-add-on-double-array-with-holes.js.no-cjit-collect-continuously
v8-v6/v8-regexp.js.ftl-eager
stress/proxy-all-the-parameters.js.dfg-eager-no-cjit-validate
stress/spread-calling.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.dfg-maximal-flush-validate-no-cjit
stress/proxy-all-the-parameters.js.no-ftl
microbenchmarks/v8-regexp-search.js.dfg-eager-no-cjit-validate
stress/proxy-all-the-parameters.js.ftl-no-cjit-no-put-stack-validate
v8-v6/v8-regexp.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.no-llint
stress/value-add-on-double-array-with-holes.js.ftl-eager-no-cjit
microbenchmarks/string-add-constant-folding.js.ftl-eager
stress/proxy-all-the-parameters.js.ftl-eager-no-cjit-b3o1
stress/array-slice-jettison-on-constructor-change.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.ftl-eager
v8-v6/v8-regexp.js.no-cjit-collect-continuously
stress/spread-capture-rest.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.ftl-no-cjit-b3o1
stress/proxy-all-the-parameters.js.ftl-no-cjit-small-pool
v8-v6/v8-regexp.js.dfg-eager
microbenchmarks/dont-confuse-structures-from-different-executable-as-poly-proto.js.dfg-eager-no-cjit-validate
microbenchmarks/rest-parameter-allocation-elimination.js.ftl-eager-no-cjit
stress/v8-regexp-strict.js.dfg-eager
stress/proxy-all-the-parameters.js.ftl-no-cjit-validate-sampling-profiler
microbenchmarks/v8-regexp-search.js.dfg-eager
stress/v8-regexp-strict.js.no-cjit-collect-continuously
stress/proxy-all-the-parameters.js.default
microbenchmarks/v8-regexp-search.js.ftl-eager
stress/proxy-all-the-parameters.js.ftl-no-cjit-no-inline-validate
stress/array-slice-osr-exit.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.ftl-eager-no-cjit
stress/put-direct-index-broken-2.js.dfg-eager
stress/value-add-on-double-array-with-holes.js.dfg-eager
stress/v8-regexp-strict.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.dfg-eager
stress/array-slice-osr-exit-2.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.no-cjit-collect-continuously
v8-v6/v8-regexp.js.dfg-eager-no-cjit-validate
stress/proxy-all-the-parameters.js.no-cjit-validate-phases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377295</commentid>
    <comment_count>38</comment_count>
      <attachid>328233</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-02 09:02:13 -0800</bug_when>
    <thetext>Created attachment 328233
more solid speedup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377296</commentid>
    <comment_count>39</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-02 09:04:35 -0800</bug_when>
    <thetext>Attachment 328233 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/SlotVisitor.cpp:282:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:112:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:166:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:176:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:188:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:190:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:226:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:228:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:236:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:240:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:242:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:254:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:64:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:66:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 30 in 75 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377301</commentid>
    <comment_count>40</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-02 09:43:32 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #38)
&gt; Created attachment 328233 [details]
&gt; more solid speedup

This totally has crashes when collecting continuously.  Investigating...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377304</commentid>
    <comment_count>41</comment_count>
      <attachid>328233</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-02 09:56:16 -0800</bug_when>
    <thetext>Comment on attachment 328233
more solid speedup

Attachment 328233 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/5467576

New failing tests:
stress/call-apply-exponential-bytecode-size.js.dfg-eager-no-cjit-validate
stress/v8-regexp-strict.js.ftl-eager
stress/spread-multi-layers.js.ftl-eager
stress/exit-after-int52-to-value.js.ftl-eager-no-cjit
stress/v8-regexp-strict.js.no-cjit-collect-continuously
stress/proxy-all-the-parameters.js.dfg-eager-no-cjit-validate
stress/spread-calling.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.default
microbenchmarks/call-spread-call.js.ftl-eager
stress/proxy-all-the-parameters.js.no-ftl
v8-v6/v8-regexp.js.no-cjit-collect-continuously
v8-v6/v8-regexp.js.ftl-eager-no-cjit
basic-tests.yaml/stress-test.js.ftl-eager-no-cjit
stress/value-add-on-double-array-with-holes.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.ftl-eager-no-cjit-b3o1
stress/array-slice-jettison-on-constructor-change.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.ftl-eager
v8-v6/v8-regexp.js.ftl-eager
airjs-tests.yaml/stress-test.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.ftl-no-cjit-b3o1
stress/proxy-all-the-parameters.js.ftl-no-cjit-small-pool
microbenchmarks/rest-parameter-allocation-elimination.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.ftl-no-cjit-no-inline-validate
stress/proxy-all-the-parameters.js.ftl-no-cjit-validate-sampling-profiler
stress/v8-regexp-strict.js.dfg-eager-no-cjit-validate
cdjs-tests.yaml/main.js.ftl-no-cjit
stress/proxy-all-the-parameters.js.dfg-eager
stress/proxy-all-the-parameters.js.dfg-maximal-flush-validate-no-cjit
stress/value-add-on-double-array-with-holes.js.ftl-eager
stress/proxy-all-the-parameters.js.no-llint
stress/array-slice-osr-exit.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.ftl-eager-no-cjit
stress/generator-fib-ftl-and-string.js.ftl-eager-no-cjit
stress/value-add-on-double-array-with-holes.js.dfg-eager
stress/proxy-all-the-parameters.js.ftl-no-cjit-no-put-stack-validate
stress/array-slice-osr-exit-2.js.ftl-eager-no-cjit
stress/proxy-all-the-parameters.js.no-cjit-collect-continuously
microbenchmarks/direct-construct-arity-mismatch.js.ftl-eager
microbenchmarks/rest-parameter-allocation-elimination.js.ftl-eager
v8-v6/v8-regexp.js.dfg-eager-no-cjit-validate
stress/proxy-all-the-parameters.js.no-cjit-validate-phases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377375</commentid>
    <comment_count>42</comment_count>
      <attachid>328258</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-02 15:14:22 -0800</bug_when>
    <thetext>Created attachment 328258
I think I fixed the crash bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377376</commentid>
    <comment_count>43</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-02 15:14:49 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #42)
&gt; Created attachment 328258 [details]
&gt; I think I fixed the crash bug

Now I have to check if the perf is still there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377377</commentid>
    <comment_count>44</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-02 15:17:43 -0800</bug_when>
    <thetext>Attachment 328258 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:380:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:112:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:166:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:176:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:188:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:190:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:226:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:228:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:236:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:240:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:242:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:254:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:64:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:66:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 29 in 81 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>1377397</commentid>
    <comment_count>45</comment_count>
      <attachid>328264</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-02 16:44:43 -0800</bug_when>
    <thetext>Created attachment 328264
trying to fix the regression from my bugfix

It looks as though acquiring a lock in isLive is not great.  I can fix that by using a StampedLock to protect the MarkedBlock data structures.  This is an attempt...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377418</commentid>
    <comment_count>46</comment_count>
      <attachid>328274</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-02 18:35:37 -0800</bug_when>
    <thetext>Created attachment 328274
an even better attempt

StampedLock combined with dependency chaining FTW.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377423</commentid>
    <comment_count>47</comment_count>
      <attachid>328276</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-02 19:31:01 -0800</bug_when>
    <thetext>Created attachment 328276
the patch

Still a speed-up on Speedometer.  No longer crashing.

Need to test ARM...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377424</commentid>
    <comment_count>48</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-02 19:34:42 -0800</bug_when>
    <thetext>Attachment 328276 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:410:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:415:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:416:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:410:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:415:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:416:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:64:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:66:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:112:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:166:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:176:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:188:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:190:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:226:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:228:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:236:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:240:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:242:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:254:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 35 in 86 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>1377430</commentid>
    <comment_count>49</comment_count>
      <attachid>328280</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-02 20:10:18 -0800</bug_when>
    <thetext>Created attachment 328280
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377431</commentid>
    <comment_count>50</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-02 20:13:16 -0800</bug_when>
    <thetext>Attachment 328280 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:410:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:415:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:416:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:410:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:415:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:416:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:64:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:66:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:112:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:166:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:176:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:188:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:190:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:226:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:228:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:236:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:240:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:242:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:254:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 35 in 86 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>1377481</commentid>
    <comment_count>51</comment_count>
      <attachid>328298</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-03 11:55:19 -0800</bug_when>
    <thetext>Created attachment 328298
more

Cleaned up some things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377483</commentid>
    <comment_count>52</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-03 11:57:52 -0800</bug_when>
    <thetext>Attachment 328298 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:396:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:398:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:396:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:398:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:64:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:66:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:112:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:166:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:176:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:188:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:190:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:226:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:228:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:236:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:240:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:242:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:254:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 34 in 87 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>1377567</commentid>
    <comment_count>53</comment_count>
      <attachid>328317</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-03 18:49:07 -0800</bug_when>
    <thetext>Created attachment 328317
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377570</commentid>
    <comment_count>54</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-03 18:51:11 -0800</bug_when>
    <thetext>Attachment 328317 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:396:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:398:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:396:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:398:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:64:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:66:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:112:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:166:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:176:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:188:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:190:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:226:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:228:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:236:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:240:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:242:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:254:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 34 in 87 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>1377730</commentid>
    <comment_count>55</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-04 09:48:44 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #47)
&gt; Created attachment 328276 [details]
&gt; the patch
&gt; 
&gt; Still a speed-up on Speedometer.  No longer crashing.
&gt; 
&gt; Need to test ARM...

Seems to work fine on ARM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377797</commentid>
    <comment_count>56</comment_count>
      <attachid>328317</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-12-04 11:36:40 -0800</bug_when>
    <thetext>Comment on attachment 328317
the patch

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

I know the code usually doesn&apos;t, but it would be nice to use `final` where you can.

I haven&apos;t really wrapped my mind around how the GC races are correct, so modulo that the code looks good module the union UB comments. r=me with that fixed.

&gt; Source/JavaScriptCore/heap/ConstraintConcurrency.h:41
&gt; +inline void printInternal(PrintStream&amp; out, JSC::ConstraintConcurrency concurrency)

I think this can be in the JSC namespace above, and be found through ADL?

&gt; Source/JavaScriptCore/heap/ConstraintParallelism.h:41
&gt; +inline void printInternal(PrintStream&amp; out, JSC::ConstraintParallelism parallelism)

Ditto.

&gt; Source/JavaScriptCore/heap/Heap.cpp:618
&gt; +            dataLog(&quot;FATAL: Visitor &quot;, RawPointer(&amp;visitor), &quot; is not empty!\n&quot;);

I don&apos;t know what to do if this fires. Could you make it more helpful? Also doesn&apos;t seem fatal as the message implies, since it doesn&apos;t actually kill anything.

&gt; Source/JavaScriptCore/heap/Heap.cpp:2599
&gt; +        [this, lastVersion = static_cast&lt;uint64_t&gt;(0)] (SlotVisitor&amp; slotVisitor) mutable {

Neat. I never use mutable lambdas, I totally should.

&gt; Source/JavaScriptCore/heap/Heap.cpp:2613
&gt; +            lastVersion = m_phaseVersion;

m_phaseVersion can be modified concurrently to this executing, right? Is it problematic if this read of m_phaseVersion is the same / different from the one at the top of the function? Seems like not but I want to make sure you don&apos;t need something like READ_ONCE.

&gt; Source/JavaScriptCore/heap/Heap.cpp:2865
&gt; +    }

I don&apos;t understand why you need to lock after setting and running the bonus task, and why you&apos;re waiting for the refcount this way. Could you add a comment?

&gt; Source/JavaScriptCore/heap/HeapInlines.h:269
&gt; +        func(*slotVisitor);

Is there some Science or Heuristic behind the order of the func() calls?

&gt; Source/JavaScriptCore/heap/MarkStackMergingConstraint.h:35
&gt; +    ~MarkStackMergingConstraint();

override

&gt; Source/JavaScriptCore/heap/MarkingConstraint.cpp:34
&gt; +static constexpr bool verbose = false;

With unified builds this needs to be localized, no?

&gt; Source/JavaScriptCore/heap/MarkingConstraint.cpp:71
&gt; +    return 0;

Why is that correct?

&gt; Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:126
&gt; +    if (order[index]-&gt;quickWorkEstimate(m_mainVisitor)) {

I find testing floating-point like this weird. Seems like you want quickWorkEstimate &gt; 0. here.

&gt; Source/JavaScriptCore/heap/SimpleMarkingConstraint.h:44
&gt; +    JS_EXPORT_PRIVATE ~SimpleMarkingConstraint();

override

&gt; Source/JavaScriptCore/heap/SlotVisitor.h:97
&gt; +    bool addOpaqueRoot(void*); // Returns true if the root was new.

Want to use a named enum class instead of a comment?

&gt; Source/WTF/wtf/Atomics.h:358
&gt; +    return opaqueMixture(arguments...) + u.copy;

Your usage of union is UB. You want to operate through bitwise_cast or memcpy / memset.

&gt; Source/WTF/wtf/Atomics.h:371
&gt; +    // phantom depenendency.

Typo &quot;dependency&quot;.

&gt; Source/WTF/wtf/ConcurrentPtrHashSet.cpp:82
&gt; +                return add(ptr);

You can exhaust the stack here if you&apos;re having a real bad time?

&gt; Source/WTF/wtf/ConcurrentPtrHashSet.h:99
&gt; +        Atomic&lt;void*&gt; array[1];

We can&apos;t use the C extension `Atomic&lt;void*&gt; array[];` ?

&gt; Source/WTF/wtf/ConcurrentPtrHashSet.h:119
&gt; +        return u.ptr;

As above, you want memset here, then u.value = value.

&gt; Source/WTF/wtf/CountingLock.h:55
&gt; +// The latter is important for us because some GC paths are known to be sensitive to fences on ARM.

This is neat. As we discussed on IRC in some cases seqlock might be more efficient. I have a  version here:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0690r0.html#seqlock</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378084</commentid>
    <comment_count>57</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-04 21:35:28 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #56)
&gt; Comment on attachment 328317 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=328317&amp;action=review
&gt; 
&gt; I know the code usually doesn&apos;t, but it would be nice to use `final` where
&gt; you can.
&gt; 
&gt; I haven&apos;t really wrapped my mind around how the GC races are correct, so
&gt; modulo that the code looks good module the union UB comments. r=me with that
&gt; fixed.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ConstraintConcurrency.h:41
&gt; &gt; +inline void printInternal(PrintStream&amp; out, JSC::ConstraintConcurrency concurrency)
&gt; 
&gt; I think this can be in the JSC namespace above, and be found through ADL?

What is ADL?  Is that the thing that works for operators in different namespaces?

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ConstraintParallelism.h:41
&gt; &gt; +inline void printInternal(PrintStream&amp; out, JSC::ConstraintParallelism parallelism)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:618
&gt; &gt; +            dataLog(&quot;FATAL: Visitor &quot;, RawPointer(&amp;visitor), &quot; is not empty!\n&quot;);
&gt; 
&gt; I don&apos;t know what to do if this fires. Could you make it more helpful? Also
&gt; doesn&apos;t seem fatal as the message implies, since it doesn&apos;t actually kill
&gt; anything.

It&apos;s sets ok to false, and we RELEASE_ASSERT(ok) below.  This error only comes up when you break the constraint solver, and if you touched that code, you&apos;d know about visitors.

I suppose it would be different if we were seeing this in the wild.  An earlier version of this patch did, before I added some of the changes to how SlotVisitor::isEmpty and didReachTermination work.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:2599
&gt; &gt; +        [this, lastVersion = static_cast&lt;uint64_t&gt;(0)] (SlotVisitor&amp; slotVisitor) mutable {
&gt; 
&gt; Neat. I never use mutable lambdas, I totally should.

Yeah.  I find that they are useful up to exactly 1 of these variables.  That&apos;s why there are so many nested classes in this patch.  I wrote a couple of those as lambdas initially, and it did not look very clear.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:2613
&gt; &gt; +            lastVersion = m_phaseVersion;
&gt; 
&gt; m_phaseVersion can be modified concurrently to this executing, right? Is it
&gt; problematic if this read of m_phaseVersion is the same / different from the
&gt; one at the top of the function? Seems like not but I want to make sure you
&gt; don&apos;t need something like READ_ONCE.

m_phaseVersion is modified by the GC before/after any of the parallel constrain solving starts.  Therefore, the constraints are allowed to read it.

There is a ton of stuff in the GC that works this way... locklessness because reasons.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:2865
&gt; &gt; +    }
&gt; 
&gt; I don&apos;t understand why you need to lock after setting and running the bonus
&gt; task, and why you&apos;re waiting for the refcount this way. Could you add a
&gt; comment?

Ah!  Because the constraint solver expects termination of this function to imply termination of the task in all threads.  I will add a comment.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/HeapInlines.h:269
&gt; &gt; +        func(*slotVisitor);
&gt; 
&gt; Is there some Science or Heuristic behind the order of the func() calls?

Nope.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkStackMergingConstraint.h:35
&gt; &gt; +    ~MarkStackMergingConstraint();
&gt; 
&gt; override

Why?  I didn&apos;t know we used override on destructors and there are many places where we don&apos;t.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkingConstraint.cpp:34
&gt; &gt; +static constexpr bool verbose = false;
&gt; 
&gt; With unified builds this needs to be localized, no?

Good point.  I renamed it to verboseMarkingConstraint.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkingConstraint.cpp:71
&gt; &gt; +    return 0;
&gt; 
&gt; Why is that correct?

Because quickWorkEstimate and workEstimate are regarded by callers as guesses.  They tell the constraint solver how much work you think you might create.  But the very nature of most constraints is that they cannot possibly know until they try.

workEstimate estimates by just remembering how much work the constraint generated last time, and adding that to quickWorkEstimate.

quickWorkEstimate is meant to be overridden by those constraints that have some way of predicting how much work they have.  There is one constraint right know that can do this - the MarkStackMergingConstraint.

By the way, this isn&apos;t new to the patch - it&apos;s just that once I turned MarkingConstraint into a base class with subclasses that override virtual methods, I no longer needed it to be a dumping ground for WTF::Functions.  So SimpleMarkingConstraint is for the case where you can sum yourself up as one lambda (the execute lambda), and everyone else - like those who have a quick work estimate - must subclass instead.  Hence, the quickWorkEstimate function stops being a WTF::Function and becomes a virtual function.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:126
&gt; &gt; +    if (order[index]-&gt;quickWorkEstimate(m_mainVisitor)) {
&gt; 
&gt; I find testing floating-point like this weird. Seems like you want
&gt; quickWorkEstimate &gt; 0. here.

Good point.  I will change it.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SimpleMarkingConstraint.h:44
&gt; &gt; +    JS_EXPORT_PRIVATE ~SimpleMarkingConstraint();
&gt; 
&gt; override
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SlotVisitor.h:97
&gt; &gt; +    bool addOpaqueRoot(void*); // Returns true if the root was new.
&gt; 
&gt; Want to use a named enum class instead of a comment?

True-if-new is so common for add methods in WebKit.  It&apos;s the default.  I just like to add a comment anyway since this is a rarely-seen add method.  I want callers that just be reassured that the bool means what it usually means.

&gt; 
&gt; &gt; Source/WTF/wtf/Atomics.h:358
&gt; &gt; +    return opaqueMixture(arguments...) + u.copy;
&gt; 
&gt; Your usage of union is UB. You want to operate through bitwise_cast or
&gt; memcpy / memset.

I think this is an area of union semantics that is so widely relied-upon that we are OK.

I checked a bunch of compilers.  They all generate what I want here.  Specifically, if the argument type is less than 4 bytes, they zero-extend it.

This kind of use of unions is a staple of binary format transformation code.  For as long as I&apos;ve written that kind of code I&apos;ve heard scary stories about what the compiler might do.  I think it&apos;s mostly because it&apos;s very difficult to specify what the compiler must really do, so compiler writers and compiler users have a number of implicit understandings in areas of the semantics that are hard to write down.  It&apos;s important for compiler writers to avoid turning this into an opportunity to &quot;steal&quot; semantics from users and turn them into performance opportunities.

&gt; 
&gt; &gt; Source/WTF/wtf/Atomics.h:371
&gt; &gt; +    // phantom depenendency.
&gt; 
&gt; Typo &quot;dependency&quot;.

Fixed.  I think.  I lose track of how many e&apos;s and n&apos;s there are in that word.

&gt; 
&gt; &gt; Source/WTF/wtf/ConcurrentPtrHashSet.cpp:82
&gt; &gt; +                return add(ptr);
&gt; 
&gt; You can exhaust the stack here if you&apos;re having a real bad time?

This is pretty sure to get TCO&apos;d, but even if it isn&apos;t, this loop-around happens on resize and resize is exponential, so the number of recursions here is log_2(set size).  That won&apos;t blow the stack.

&gt; 
&gt; &gt; Source/WTF/wtf/ConcurrentPtrHashSet.h:99
&gt; &gt; +        Atomic&lt;void*&gt; array[1];
&gt; 
&gt; We can&apos;t use the C extension `Atomic&lt;void*&gt; array[];` ?

This way is habit. :-)

&gt; 
&gt; &gt; Source/WTF/wtf/ConcurrentPtrHashSet.h:119
&gt; &gt; +        return u.ptr;
&gt; 
&gt; As above, you want memset here, then u.value = value.
&gt; 
&gt; &gt; Source/WTF/wtf/CountingLock.h:55
&gt; &gt; +// The latter is important for us because some GC paths are known to be sensitive to fences on ARM.
&gt; 
&gt; This is neat. As we discussed on IRC in some cases seqlock might be more
&gt; efficient. I have a  version here:
&gt; http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0690r0.html#seqlock

The way to make mine more efficient is to get rid of the branch on tryOptimisticRead.  We can do that by ^ing the loaded lock state with the mask in the tryOptimisticRead, rather than doing getStamp.

Or we could count on unlock.  I didn&apos;t do that because I wasn&apos;t sure if that would work with our fair unlock path.

I&apos;ll write a FIXME about what we could do here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378088</commentid>
    <comment_count>58</comment_count>
      <attachid>328438</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-04 21:49:56 -0800</bug_when>
    <thetext>Created attachment 328438
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378097</commentid>
    <comment_count>59</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-12-04 22:25:38 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Source/JavaScriptCore/heap/ConstraintConcurrency.h:41
&gt; &gt; &gt; +inline void printInternal(PrintStream&amp; out, JSC::ConstraintConcurrency concurrency)
&gt; &gt; 
&gt; &gt; I think this can be in the JSC namespace above, and be found through ADL?
&gt; 
&gt; What is ADL?  Is that the thing that works for operators in different
&gt; namespaces?

All functions, not just operators, will be looked up in the parameter&apos;s namespace when called unqualified. So boo(bar::baz, foo::doo) will lookup boo locally as well as in bar and in foo.


&gt; &gt; &gt; Source/WTF/wtf/ConcurrentPtrHashSet.h:99
&gt; &gt; &gt; +        Atomic&lt;void*&gt; array[1];
&gt; &gt; 
&gt; &gt; We can&apos;t use the C extension `Atomic&lt;void*&gt; array[];` ?
&gt; 
&gt; This way is habit. :-)

Yeah but C. You can&apos;t cling to C union semantics and not fully embrace C!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378119</commentid>
    <comment_count>60</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-05 01:30:50 -0800</bug_when>
    <thetext>Attachment 328438 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:396:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:398:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:396:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:398:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:408:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:74:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StackShotProfiler.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StackShotProfiler.h:86:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:35:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/SimpleMarkingConstraint.cpp:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:64:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkingConstraint.h:66:  The parameter name &quot;visitor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSMarkingConstraintPrivate.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ConcurrentPtrHashSet.h:157:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/MarkedBlock.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:112:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:166:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:176:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:188:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:190:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:226:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:228:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:233:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:236:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:240:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:242:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp:254:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/ForwardingHeaders/heap/SimpleMarkingConstraint.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 34 in 87 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>1378198</commentid>
    <comment_count>61</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-05 09:54:53 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/225524/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378199</commentid>
    <comment_count>62</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-05 09:55:32 -0800</bug_when>
    <thetext>&lt;rdar://problem/35857160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382187</commentid>
    <comment_count>63</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-15 10:13:28 -0800</bug_when>
    <thetext>I see some crashes in assertMarkStacksEmpty.

stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: FATAL: Visitor 0x7f4ecc076000 is not empty!
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 1   0x7f4f13548657 WTFCrash
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 2   0x7f4f12fafb70 JSC::Heap::gatherStackRoots(JSC::ConservativeRoots&amp;)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 3   0x7f4f12fb91b6 JSC::Heap::runFixpointPhase(JSC::GCConductor)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 4   0x7f4f12fb9409 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 5   0x7f4f12fbaf7a
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 6   0x7f4f12fc7b65 JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void (JSC::CurrentThreadState&amp;)&gt; const&amp;)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 7   0x7f4f12fb94d7 JSC::Heap::collectInMutatorThread()
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 8   0x7f4f12fb953c JSC::Heap::stopIfNecessarySlow(unsigned int)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 9   0x7f4f12fb957b JSC::Heap::stopIfNecessarySlow()
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 10  0x7f4f12fb9b93 JSC::Heap::collectIfNecessaryOrDefer(JSC::GCDeferralContext*)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 11  0x7f4f12fcd09f JSC::MarkedAllocator::allocateSlowCase(JSC::GCDeferralContext*, JSC::AllocationFailureMode)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 12  0x41a476 JSC::jsString(JSC::VM*, WTF::String const&amp;)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 13  0x7f4f133fb365 JSC::operationStringProtoFuncReplaceRegExpString(JSC::ExecState*, JSC::JSString*, JSC::RegExpObject*, JSC::JSString*)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 14  0x7f4ecea46104
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: Segmentation fault (core dumped)
stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: ERROR: Unexpected exit code: 139
stress/tail-call-profiler.js.profiler: &gt; quit
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: FATAL: Visitor 0x7f83f9d53000 is not empty!
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 1   0x7f83fe784657 WTFCrash
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 2   0x7f83fe1ebb70 JSC::Heap::gatherStackRoots(JSC::ConservativeRoots&amp;)
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 3   0x7f83fe1f51b6 JSC::Heap::runFixpointPhase(JSC::GCConductor)
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 4   0x7f83fe1f5409 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 5   0x7f83fe1f6f7a
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 6   0x7f83fe203b65 JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void (JSC::CurrentThreadState&amp;)&gt; const&amp;)
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 7   0x7f83fe1f54d7 JSC::Heap::collectInMutatorThread()
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 8   0x7f83fe1f553c JSC::Heap::stopIfNecessarySlow(unsigned int)
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 9   0x7f83fe1f557b JSC::Heap::stopIfNecessarySlow()
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 10  0x7f83fe1f5b93 JSC::Heap::collectIfNecessaryOrDefer(JSC::GCDeferralContext*)
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 11  0x7f83fe20909f JSC::MarkedAllocator::allocateSlowCase(JSC::GCDeferralContext*, JSC::AllocationFailureMode)
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 12  0x7f83fe511913 JSC::JSValue::toStringSlowCase(JSC::ExecState*, bool) const
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 13  0x7f83fe478bb1
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: 14  0x7f83b9cffaae
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: Segmentation fault (core dumped)
stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-validate: ERROR: Unexpected exit code: 139

After investigating, I found that this assertMarkStacksEmpty is this one.

  1331         if (converged &amp;&amp; slotVisitor.isEmpty()) {
  1332             assertMarkStacksEmpty();
  1333             return changePhase(conn, CollectorPhase::End);
  1334         }

I&apos;m still exploring... Do you have any ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382195</commentid>
    <comment_count>64</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-15 10:20:28 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #63)
&gt; I see some crashes in assertMarkStacksEmpty.
&gt; 
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: FATAL: Visitor 0x7f4ecc076000
&gt; is not empty!
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 1   0x7f4f13548657 WTFCrash
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 2   0x7f4f12fafb70
&gt; JSC::Heap::gatherStackRoots(JSC::ConservativeRoots&amp;)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 3   0x7f4f12fb91b6
&gt; JSC::Heap::runFixpointPhase(JSC::GCConductor)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 4   0x7f4f12fb9409
&gt; JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 5   0x7f4f12fbaf7a
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 6   0x7f4f12fc7b65
&gt; JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void
&gt; (JSC::CurrentThreadState&amp;)&gt; const&amp;)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 7   0x7f4f12fb94d7
&gt; JSC::Heap::collectInMutatorThread()
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 8   0x7f4f12fb953c
&gt; JSC::Heap::stopIfNecessarySlow(unsigned int)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 9   0x7f4f12fb957b
&gt; JSC::Heap::stopIfNecessarySlow()
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 10  0x7f4f12fb9b93
&gt; JSC::Heap::collectIfNecessaryOrDefer(JSC::GCDeferralContext*)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 11  0x7f4f12fcd09f
&gt; JSC::MarkedAllocator::allocateSlowCase(JSC::GCDeferralContext*,
&gt; JSC::AllocationFailureMode)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 12  0x41a476
&gt; JSC::jsString(JSC::VM*, WTF::String const&amp;)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 13  0x7f4f133fb365
&gt; JSC::operationStringProtoFuncReplaceRegExpString(JSC::ExecState*,
&gt; JSC::JSString*, JSC::RegExpObject*, JSC::JSString*)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: 14  0x7f4ecea46104
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: Segmentation fault (core dumped)
&gt; stress/v8-regexp-strict.js.ftl-no-cjit-b3o1: ERROR: Unexpected exit code: 139
&gt; stress/tail-call-profiler.js.profiler: &gt; quit
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: FATAL: Visitor 0x7f83f9d53000 is not empty!
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 1   0x7f83fe784657 WTFCrash
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 2   0x7f83fe1ebb70
&gt; JSC::Heap::gatherStackRoots(JSC::ConservativeRoots&amp;)
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 3   0x7f83fe1f51b6 JSC::Heap::runFixpointPhase(JSC::GCConductor)
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 4   0x7f83fe1f5409 JSC::Heap::runCurrentPhase(JSC::GCConductor,
&gt; JSC::CurrentThreadState*)
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 5   0x7f83fe1f6f7a
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 6   0x7f83fe203b65
&gt; JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void
&gt; (JSC::CurrentThreadState&amp;)&gt; const&amp;)
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 7   0x7f83fe1f54d7 JSC::Heap::collectInMutatorThread()
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 8   0x7f83fe1f553c JSC::Heap::stopIfNecessarySlow(unsigned int)
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 9   0x7f83fe1f557b JSC::Heap::stopIfNecessarySlow()
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 10  0x7f83fe1f5b93
&gt; JSC::Heap::collectIfNecessaryOrDefer(JSC::GCDeferralContext*)
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 11  0x7f83fe20909f
&gt; JSC::MarkedAllocator::allocateSlowCase(JSC::GCDeferralContext*,
&gt; JSC::AllocationFailureMode)
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 12  0x7f83fe511913 JSC::JSValue::toStringSlowCase(JSC::ExecState*,
&gt; bool) const
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 13  0x7f83fe478bb1
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: 14  0x7f83b9cffaae
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: Segmentation fault (core dumped)
&gt; stress/operation-in-may-have-negative-int32-int32-array.js.dfg-eager-no-cjit-
&gt; validate: ERROR: Unexpected exit code: 139
&gt; 
&gt; After investigating, I found that this assertMarkStacksEmpty is this one.
&gt; 
&gt;   1331         if (converged &amp;&amp; slotVisitor.isEmpty()) {
&gt;   1332             assertMarkStacksEmpty();
&gt;   1333             return changePhase(conn, CollectorPhase::End);
&gt;   1334         }
&gt; 
&gt; I&apos;m still exploring... Do you have any ideas?

Presumably that&apos;s a visitor for some parallel marker thread.  Figure out why we got `converged == true` with that visitor still active.  There are some other conditions (number of active visitors, etc) that are used by the GC to detect termination; those conditions should also prove that the mark stacks are empty.  But maybe I got it wrong!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382250</commentid>
    <comment_count>65</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-15 12:37:37 -0800</bug_when>
    <thetext>Thanks! Now investigating why it happens...
Basically, 1-6 tests fail randomly in run-javascriptcore-tests. If we disable parallel constraint solver by setting export JSC_useParallelMarkingConstraintSolver=false, we do not observe this failure.

I&apos;ve a bit instrumented the code to dump more information.

FATAL: Visitor 0x7f6800a67000 is not empty!1
Visitor 0x7f6844cfe090 is not empty!0 0 1
Visitor 0x7f6844cfe120 is not empty!0 0 1
Visitor 0x7f6800ada000 is not empty!0 0 1
Visitor 0x7f6800ad1000 is not empty!0 0 1
Visitor 0x7f6800afc000 is not empty!0 0 1
Visitor 0x7f6800a79000 is not empty!0 0 1
Visitor 0x7f6800a73000 is not empty!0 0 1
Visitor 0x7f6800a6d000 is not empty!0 0 1
Visitor 0x7f6800a67000 is not empty!0 16 1
1   0x7f68496d8967 WTFCrash
2   0x7f684913fe67 JSC::Heap::assertMarkStacksEmpty(int)
3   0x7f684914948d JSC::Heap::runFixpointPhase(JSC::GCConductor)
4   0x7f68491496d9 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
5   0x7f684914b24a
6   0x7f6849157e35 JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void (JSC::CurrentThreadState&amp;)&gt; const&amp;)
7   0x7f68491497a7 JSC::Heap::collectInMutatorThread()
8   0x7f684914980c JSC::Heap::stopIfNecessarySlow(unsigned int)
9   0x7f684914984b JSC::Heap::stopIfNecessarySlow()
10  0x7f6849149e63 JSC::Heap::collectIfNecessaryOrDefer(JSC::GCDeferralContext*)
11  0x7f684915d36f JSC::MarkedAllocator::allocateSlowCase(JSC::GCDeferralContext*, JSC::AllocationFailureMode)
12  0x7f68492259e7
13 0x7f6804c4f7a0

This `1` is

&gt;   1331         if (converged &amp;&amp; slotVisitor.isEmpty()) {
&gt;   1332             assertMarkStacksEmpty();
&gt;   1333             return changePhase(conn, CollectorPhase::End);
&gt;   1334         }

&apos;s code location. It seems that Visitor 0x7f6800a67000 has 16 cells in MutatorStack. I collected several crashes. It seems that non empty SlotVisitor is always in m_parallelSlotVisitors.

This is my rough thought: can # of m_parallelSlotVisitors increase between MarkingConstraintSolver&apos;s constructor and parallel run tasks?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382254</commentid>
    <comment_count>66</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-15 12:44:21 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #65)
&gt; This is my rough thought: can # of m_parallelSlotVisitors increase between
&gt; MarkingConstraintSolver&apos;s constructor and parallel run tasks?

We set up m_visitCounters in MarkingConstraintSolver. And we release m_parallelSlotVisitorLock.
And we decide converged state in MarkingConstaintSet::executeConvergenceImpl() based on this m_visitCounters.
After that, we iterate slot visitors in assertMarkStacksEmpty.
When executing executeConvergenceImpl&apos;s MarkingConstraintSolver::converge, m_parallelSlotVisitorLock is not held.
If SlotVisitor can increase during this, is the subsequent assertMarkStacksEmpty reasonable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382255</commentid>
    <comment_count>67</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-15 12:44:59 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #65)
&gt; Thanks! Now investigating why it happens...
&gt; Basically, 1-6 tests fail randomly in run-javascriptcore-tests. If we
&gt; disable parallel constraint solver by setting export
&gt; JSC_useParallelMarkingConstraintSolver=false, we do not observe this failure.
&gt; 
&gt; I&apos;ve a bit instrumented the code to dump more information.
&gt; 
&gt; FATAL: Visitor 0x7f6800a67000 is not empty!1
&gt; Visitor 0x7f6844cfe090 is not empty!0 0 1
&gt; Visitor 0x7f6844cfe120 is not empty!0 0 1
&gt; Visitor 0x7f6800ada000 is not empty!0 0 1
&gt; Visitor 0x7f6800ad1000 is not empty!0 0 1
&gt; Visitor 0x7f6800afc000 is not empty!0 0 1
&gt; Visitor 0x7f6800a79000 is not empty!0 0 1
&gt; Visitor 0x7f6800a73000 is not empty!0 0 1
&gt; Visitor 0x7f6800a6d000 is not empty!0 0 1
&gt; Visitor 0x7f6800a67000 is not empty!0 16 1
&gt; 1   0x7f68496d8967 WTFCrash
&gt; 2   0x7f684913fe67 JSC::Heap::assertMarkStacksEmpty(int)
&gt; 3   0x7f684914948d JSC::Heap::runFixpointPhase(JSC::GCConductor)
&gt; 4   0x7f68491496d9 JSC::Heap::runCurrentPhase(JSC::GCConductor,
&gt; JSC::CurrentThreadState*)
&gt; 5   0x7f684914b24a
&gt; 6   0x7f6849157e35 JSC::callWithCurrentThreadState(WTF::ScopedLambda&lt;void
&gt; (JSC::CurrentThreadState&amp;)&gt; const&amp;)
&gt; 7   0x7f68491497a7 JSC::Heap::collectInMutatorThread()
&gt; 8   0x7f684914980c JSC::Heap::stopIfNecessarySlow(unsigned int)
&gt; 9   0x7f684914984b JSC::Heap::stopIfNecessarySlow()
&gt; 10  0x7f6849149e63
&gt; JSC::Heap::collectIfNecessaryOrDefer(JSC::GCDeferralContext*)
&gt; 11  0x7f684915d36f
&gt; JSC::MarkedAllocator::allocateSlowCase(JSC::GCDeferralContext*,
&gt; JSC::AllocationFailureMode)
&gt; 12  0x7f68492259e7
&gt; 13 0x7f6804c4f7a0
&gt; 
&gt; This `1` is
&gt; 
&gt; &gt;   1331         if (converged &amp;&amp; slotVisitor.isEmpty()) {
&gt; &gt;   1332             assertMarkStacksEmpty();
&gt; &gt;   1333             return changePhase(conn, CollectorPhase::End);
&gt; &gt;   1334         }
&gt; 
&gt; &apos;s code location. It seems that Visitor 0x7f6800a67000 has 16 cells in
&gt; MutatorStack. I collected several crashes. It seems that non empty
&gt; SlotVisitor is always in m_parallelSlotVisitors.
&gt; 
&gt; This is my rough thought: can # of m_parallelSlotVisitors increase between
&gt; MarkingConstraintSolver&apos;s constructor and parallel run tasks?

Yes!  Because the parallel helper pool may realize as late as it likes how many threads to start. Sometimes a tread waits a long time before starting just because of weird OS jitter. Maybe this happens more on Linux. 

Won’t this cause an increase in number of active workers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382259</commentid>
    <comment_count>68</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-15 12:59:54 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #67)
&gt; Yes!  Because the parallel helper pool may realize as late as it likes how
&gt; many threads to start. Sometimes a tread waits a long time before starting
&gt; just because of weird OS jitter. Maybe this happens more on Linux. 
&gt; 
&gt; Won’t this cause an increase in number of active workers?

Yeah, it seems that # of SlotVisitors is increasing after setting up m_visitCounters.
I added the following code before `unsigned iteration = m_iterations++;` and after `solver.converge(m_ordered);` in MarkingConstraintSet::executeConvergenceImpl.

+    unsigned beforeCount = 0;
+    m_heap.forEachSlotVisitor([&amp;] (SlotVisitor&amp; visitor) {
+        ++beforeCount;
+    });

+    unsigned AfterCount = 0;
+    m_heap.forEachSlotVisitor([&amp;] (SlotVisitor&amp; visitor) {
+        ++afterCount;
+    });

And I inserted the following check just before `return !solver.didVisitSomething();`.

+    if (afterCount != beforeCount) {
+        dataLog(afterCount, &quot; &quot;, beforeCount, &quot;\n&quot;);
+        RELEASE_ASSERT_NOT_REACHED();
+    }

So, assertion hits so often. It seems that # of SlotVisitors can increase after m_visitCounters are created.
As a result, I think that the current `converged` result does not mean all the SlotVisitors are empty (this is checked in assertMarkStacksEmpty). Is my understanding correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382278</commentid>
    <comment_count>69</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-15 13:23:37 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #68)
&gt; (In reply to Filip Pizlo from comment #67)
&gt; &gt; Yes!  Because the parallel helper pool may realize as late as it likes how
&gt; &gt; many threads to start. Sometimes a tread waits a long time before starting
&gt; &gt; just because of weird OS jitter. Maybe this happens more on Linux. 
&gt; &gt; 
&gt; &gt; Won’t this cause an increase in number of active workers?
&gt; 
&gt; Yeah, it seems that # of SlotVisitors is increasing after setting up
&gt; m_visitCounters.
&gt; I added the following code before `unsigned iteration = m_iterations++;` and
&gt; after `solver.converge(m_ordered);` in
&gt; MarkingConstraintSet::executeConvergenceImpl.
&gt; 
&gt; +    unsigned beforeCount = 0;
&gt; +    m_heap.forEachSlotVisitor([&amp;] (SlotVisitor&amp; visitor) {
&gt; +        ++beforeCount;
&gt; +    });
&gt; 
&gt; +    unsigned AfterCount = 0;
&gt; +    m_heap.forEachSlotVisitor([&amp;] (SlotVisitor&amp; visitor) {
&gt; +        ++afterCount;
&gt; +    });
&gt; 
&gt; And I inserted the following check just before `return
&gt; !solver.didVisitSomething();`.
&gt; 
&gt; +    if (afterCount != beforeCount) {
&gt; +        dataLog(afterCount, &quot; &quot;, beforeCount, &quot;\n&quot;);
&gt; +        RELEASE_ASSERT_NOT_REACHED();
&gt; +    }
&gt; 
&gt; So, assertion hits so often. It seems that # of SlotVisitors can increase
&gt; after m_visitCounters are created.
&gt; As a result, I think that the current `converged` result does not mean all
&gt; the SlotVisitors are empty (this is checked in assertMarkStacksEmpty). Is my
&gt; understanding correct?

Yeah, it looks like if number of visitors changes, then MarkingConstraintSolver::didVisitSomething needs to return true.

That seems like it would solve the bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382483</commentid>
    <comment_count>70</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-16 06:16:38 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #69)
&gt; (In reply to Yusuke Suzuki from comment #68)
&gt; &gt; (In reply to Filip Pizlo from comment #67)
&gt; &gt; &gt; Yes!  Because the parallel helper pool may realize as late as it likes how
&gt; &gt; &gt; many threads to start. Sometimes a tread waits a long time before starting
&gt; &gt; &gt; just because of weird OS jitter. Maybe this happens more on Linux. 
&gt; &gt; &gt; 
&gt; &gt; &gt; Won’t this cause an increase in number of active workers?
&gt; &gt; 
&gt; &gt; Yeah, it seems that # of SlotVisitors is increasing after setting up
&gt; &gt; m_visitCounters.
&gt; &gt; I added the following code before `unsigned iteration = m_iterations++;` and
&gt; &gt; after `solver.converge(m_ordered);` in
&gt; &gt; MarkingConstraintSet::executeConvergenceImpl.
&gt; &gt; 
&gt; &gt; +    unsigned beforeCount = 0;
&gt; &gt; +    m_heap.forEachSlotVisitor([&amp;] (SlotVisitor&amp; visitor) {
&gt; &gt; +        ++beforeCount;
&gt; &gt; +    });
&gt; &gt; 
&gt; &gt; +    unsigned AfterCount = 0;
&gt; &gt; +    m_heap.forEachSlotVisitor([&amp;] (SlotVisitor&amp; visitor) {
&gt; &gt; +        ++afterCount;
&gt; &gt; +    });
&gt; &gt; 
&gt; &gt; And I inserted the following check just before `return
&gt; &gt; !solver.didVisitSomething();`.
&gt; &gt; 
&gt; &gt; +    if (afterCount != beforeCount) {
&gt; &gt; +        dataLog(afterCount, &quot; &quot;, beforeCount, &quot;\n&quot;);
&gt; &gt; +        RELEASE_ASSERT_NOT_REACHED();
&gt; &gt; +    }
&gt; &gt; 
&gt; &gt; So, assertion hits so often. It seems that # of SlotVisitors can increase
&gt; &gt; after m_visitCounters are created.
&gt; &gt; As a result, I think that the current `converged` result does not mean all
&gt; &gt; the SlotVisitors are empty (this is checked in assertMarkStacksEmpty). Is my
&gt; &gt; understanding correct?
&gt; 
&gt; Yeah, it looks like if number of visitors changes, then
&gt; MarkingConstraintSolver::didVisitSomething needs to return true.
&gt; 
&gt; That seems like it would solve the bug!

OK, opened a bug for that and uploaded the patch.
https://bugs.webkit.org/show_bug.cgi?id=180906</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327441</attachid>
            <date>2017-11-21 20:48:35 -0800</date>
            <delta_ts>2017-11-22 10:19:26 -0800</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35497</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJh
bGxlbGlzbS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnN0cmFpbnRQYXJhbGxlbGlzbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBDb25zdHJhaW50UGFyYWxsZWxpc20gOiB1
aW50OF90IHsKKyAgICBTZXF1ZW50aWFsLAorICAgIFBhcmFsbGVsCit9OworICAgIAorfSAvLyBu
YW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVs
aXNtKQoreworICAgIHN3aXRjaCAocGFyYWxsZWxpc20pIHsKKyAgICBjYXNlIEpTQzo6Q29uc3Ry
YWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOgorICAgICAgICBvdXQucHJpbnQoIlNlcXVlbnRp
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxp
c206OlBhcmFsbGVsOgorICAgICAgICBvdXQucHJpbnQoIlBhcmFsbGVsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU3OCw3ICsyNTc4LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAi
Q29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2Vu
Y2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAg
ICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAg
ICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CkBA
IC0yNTkyLDcgKzI1OTIsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBS
b290cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yKSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5h
bFJlbWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsy
NjEzLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAg
ICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAg
ICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAt
MjYyMSw3ICsyNjIxLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAog
ICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYg
RU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmls
ZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkp
OwpAQCAtMjY0MSwyMSArMjY0MSwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygp
CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0
dWIgUm91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwg
Y29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVj
dFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJz
IiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0
aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
IHsKICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1f
d2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVu
dC0+bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMo
c2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjY0LDcgQEAgdm9pZCBIZWFw
OjphZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAg
ICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVm
ZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2ODQsNyArMjY4NCw3IEBA
IHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAogICAg
ICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdz
IGJsYWNrLgpAQCAtMjY5Nyw3ICsyNjk3LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWlu
dHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXJtcyIsICJN
dXRhdG9yK1JhY2UgTWFyayBTdGFjayIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUg
Zml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAgICAgICBzaXplX3Qgc2l6
ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7
CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CkBAIC0yODQ3
LDQgKzI4NDcsMTkgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwog
ICAgIG1faGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAK
K3ZvaWQgSGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+
PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0ZXgpOwor
ICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuRnVuY3Rpb25JblBhcmFsbGVs
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2spCit7CisgICAgc2V0Qm9udXNWaXNpdG9y
VGFzayh0YXNrKTsKKyAgICB0YXNrLT5ydW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAg
IHNldEJvbnVzVmlzaXRvclRhc2sobnVsbHB0cik7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+d2FpdEZvclRlcm1pbmF0aW9uKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDYg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RpbWVDaGVja1Jlc29sdXRp
b24gPSAxNjsKIAogICAgIHN0YXRpYyBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKLSAgICBz
dGF0aWMgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKik7CiAgICAgc3RhdGlj
IGJvb2wgdGVzdEFuZFNldE1hcmtlZChIZWFwVmVyc2lvbiwgY29uc3Qgdm9pZCopOwogICAgIAog
ICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwpAQCAtMzU4LDcgKzM1Nyw5
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25z
dCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJD
YWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKLQorICAgIAorICAgIHZvaWQg
c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
Pik7CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CiAg
ICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTY0Miw2ICs2NDMsNyBAQCBwcml2YXRlOgog
ICAgIExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzOwogCiAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQgbV9oZWxwZXJD
bGllbnQ7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gbV9ib251
c1Zpc2l0b3JUYXNrOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIHNpemVfdCBt
X2Jsb2NrQnl0ZXNBbGxvY2F0ZWQgeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDIzICs3MCwxMSBA
QCBpbmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUCiAKIEFMV0FZU19JTkxJ
TkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFTU0VS
VChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwt
PmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRp
b24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJs
b2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgpLT5o
ZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdDZWxs
KQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2Vs
bCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBj
ZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBibG9j
ayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29uY3Vy
cmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1Zl
cnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCktPmhl
YXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlTX0lO
TElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNiBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFy
a2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBp
c01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9p
ZCopOwogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAgIGJv
b2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgICAgIApA
QCAtNDk4LDE4ICs0OTcsMTIgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmFyZU1hcmtzU3Rh
bGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21hcmtpbmdWZXJzaW9uOwogfQog
Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+IE1hcmtlZEJsb2NrOjphcmVNYXJr
c1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAg
SGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247Ci0gICAgcmV0dXJuIGRlcGVu
ZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24p
OwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxl
V2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShyZXN1bHQu
dmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAg
IGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRU
b01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7
CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQpAQCAtNTI0LDE1ICs1MTcsMTAg
QEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkUmF3KGNvbgogCiBpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0
IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pID8g
ZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Omlz
TWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lk
KiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1h
cmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVlKQorICAgIEhlYXBWZXJzaW9uIHZl
cnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1h
cmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtz
LmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIG1fbWFy
a3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVyc2lvbikpOwogfQogCiBpbmxpbmUg
Ym9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTYzLDE0ICs2NCw3MiBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAg
ICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhl
Y3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90
b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJraW5nQ29uc3RyYWlu
dDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcp
CiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coYWJicmV2aWF0
ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRvciwg
ZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0
b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5nVGlt
ZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlzaXRp
bmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAgIFZpc2l0Q291bnRlciB2
aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHJlc3VsdCA9
IGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworICAgIHNpemVfdCB2aXNpdENvdW50ID0gdmlzaXRDb3Vu
dGVyLnZpc2l0Q291bnQodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291
bnQ7CisgICAgZGlkVmlzaXRTb21ldGhpbmcgfD0gISF2aXNpdENvdW50OworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVjaWtXb3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUgTWFya2luZ0NvbnN0
cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICByZXR1cm4g
bGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOworfQorCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwg
Ym9vbCYgZGlkVmlzaXRTb21ldGhpbmcpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRl
cih2aXNpdG9yKTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgc2l6ZV90
IHZpc2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCh2aXNpdG9yKTsKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNp
dENvdW50OworICAgIGRpZFZpc2l0U29tZXRoaW5nIHw9ICEhbV9sYXN0VmlzaXRDb3VudDsKK30K
Kwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNvdG9y
JikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKworU2VxdWVudGlhbE1h
cmtpbmdDb25zdHJhaW50OjpTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmlu
ZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgOiBNYXJraW5nQ29uc3RyYWlu
dChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHkpCisg
ICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCit7Cit9CisK
K1NlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50
KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVG
dW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisg
ICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUo
bmFtZSksIHZvbGF0aWxpdHkpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1
dGVGdW5jdGlvbikpCisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShx
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2VxdWVudGlhbE1hcmtpbmdDb25z
dHJhaW50Ojp+U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKworZG91YmxlIFNl
cXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlz
aXRvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29uc3Ry
YWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIKICNp
bmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTQzLDE2
ICs0NCw3IEBAIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShNYXJraW5nQ29uc3RyYWludCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAg
IENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHkpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtp
bmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBu
YW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFy
a2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29u
c3RyYWludFZvbGF0aWxpdHkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5n
Q29uc3RyYWludCgpOwogICAgIApAQCAtNjUsMjEgKzU3LDE5IEBAIHB1YmxpYzoKICAgICAKICAg
ICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50
OyB9CiAgICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRT
b21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtIGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAg
CisgICAgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpOyAvLyBEZWZhdWx0cyB0byAwLgogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBt
X3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRv
dWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAg
IH0KKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAK
KyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21l
dGhpbmcpOwogICAgIAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25z
dCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQ29u
c3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsgLy8gRGVmYXVsdHMg
dG8gY3Jhc2hpbmcuCiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgpAQCAtODcsMTAgKzc3LDMxIEBA
IHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0cmlu
ZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4
ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgbV92b2xh
dGlsaXR5OwogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9s
b2NrOworfTsKKworY2xhc3MgU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50IDogcHVibGljIE1h
cmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTZXF1ZW50
aWFsTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAg
IAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludCgKKyAg
ICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAg
ICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TZXF1ZW50aWFsTWFy
a2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToKKyAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAgOjpGdW5jdGlv
bjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDEyICszMiwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gV2hh
dCB3ZSB3YW50IGhlcmUgaXMgYSBjbGFzcyB0aGF0IHdpbGwgaGFuZGxlIHNldHRpbmcgdXAgcGFy
YWxsZWwgZXhlY3V0aW9uIGluIEhlYXAuIEl0IHdpbGwgY29udGFpbgorLy8gYSBkcml2ZXIuIEl0
IHdpbGwgd2FpdCBmb3IgcGFyYWxsZWwgZXhlY3V0aW9uIHRvIGZpbmlzaCBpbiBpdHMgZGVzdHJ1
Y3Rvci4gVGhlIGRyaXZlciBsb29wIHdpbGwga25vdworLy8gdG8gaGFuZGxlIGV4ZWN1dGluZyBw
YXJhbGxlbCBjb25zdHJhaW50cy4gQnV0IHN1YmNsYXNzZXMgd2lsbCBkZXRlcm1pbmUgdGhlIHBy
b2Nlc3MgZm9yIGNob29zaW5nIHdoYXQKKy8vIE1hcmtpbmdDb25zdHJhaW50cyB0byB2aXNpdC4g
T25lIHBvbGljeSBpcyB0byBleGVjdXRlIGEgYmFnIG9mIHRoZW0gaW4gYW55IG9yZGVyLiBBbm90
aGVyIHBvbGljeSBpcyB0bworLy8gZXhlY3V0ZSB0aGVtIGluIHNvbWUgcHJpb3JpdHkgb3JkZXIg
dW50aWwgd2UgaGl0IHBheWRpcnQuCisKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVj
dXRpb25Db250ZXh0IHsKIHB1YmxpYzoKLSAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25z
dHJhaW50U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCisgICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0KQogICAg
ICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAg
LCBtX3RpbWVvdXQodGltZW91dCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNDYsNDAgKzUwLDc3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQot
ICAgIAotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0LgotICAgIGJvb2wgZHJh
aW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQorICAgIHZvaWQgZHJhaW4oQml0VmVjdG9yJiB1bmV4
ZWN1dGVkKQogICAgIHsKKyAgICAgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOwor
ICAgICAgICBhdXRvIGVuZCA9IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgICAgIExvY2sgbG9jazsK
KyAgICAgICAgbV9zZXQubV9oZWxwZXJDbGllbnQucnVuRnVuY3Rpb25JblBhcmFsbGVsKAorICAg
ICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhsb2NrKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4ID0gKml0ZXIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogYWN0dWFsbHksIHdlIGRvIHdhbnQg
ZWFjaCBvbmUgb2YgdGhlc2UgdG8gZ2V0IGl0cyBvd24gU2xvdFZpc2l0b3IuCisgICAgICAgICAg
ICAgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
IDogdW5leGVjdXRlZCkgewogICAgICAgICAgICAgZXhlY3V0ZShpbmRleCk7CiAgICAgICAgICAg
ICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0KIAotICAgIHZvaWQgZXhl
Y3V0ZShzaXplX3QgaW5kZXgpCisgICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBzaXplX3QgaW5kZXgpCiAgICAgewotICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1
dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOworICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBtX3NldC5tX3NldFtpbmRleF0tPmV4
ZWN1dGUodmlzaXRvciwgbV9kaWRWaXNpdFNvbWV0aGluZyk7CisgICAgICAgIAorICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGlu
ZGV4KTsKKyAgICAgICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWwpCisgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuc2V0KGluZGV4KTsK
ICAgICB9CiAgICAgCiBwcml2YXRlOgorICAgIHZvaWQgY29tcGxldGVQYXJhbGxlbENvbnN0cmFp
bnRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IDsgaW5kZXgrKykgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBpbmRleCA9IG1f
dG9FeGVjdXRlSW5QYXJhbGxlbC5maW5kQml0KGluZGV4LCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gbV90b0V4ZWN1dGVJblBhcmFsbGVsLnNpemUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX3NldC5tX3NldFtpbmRleF0tPmRvUGFyYWxsZWxXb3JrKHZpc2l0b3IpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5jbGVhcihp
bmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIG1fc2V0OwogICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAg
TW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7CiAgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CisgICAg
Qml0VmVjdG9yIG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBMb2NrIG1fbG9jazsKKyAgICBD
b25kaXRpb24gbV9jb25kaXRpb247CiAgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFs
c2UgfTsKIH07CiAKIE1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgp
CisgICAgOiBtX2hlbHBlckNsaWVudCgmaGVhcENvbnN0cmFpbnRTZXRIZWxwZXJQb29sKCkpCiB7
CiB9CiAKQEAgLTEwOSw3ICsxNTAsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRT
dGFydE1hcmtpCiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBj
b25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZv
bGF0aWxpdHkpCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+
KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlv
biksIHZvbGF0aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTZXF1ZW50aWFsTWFy
a2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwg
V1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKApAQCAtMTE4LDcgKzE1OSw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmFkZCgKICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uLAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCiB7
Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJi
cmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pLCBX
VEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7CisgICAgYWRk
KHN0ZDo6bWFrZV91bmlxdWU8U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFi
YnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwg
V1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOwogfQogCiB2
b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBAIC0xNDgsOSArMTg5LDkgQEAgYm9vbCBN
YXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90
VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3Is
IHRpbWVvdXQpOworICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywg
dmlzaXRvcik7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRpb24rKzsK
ICAgICAKQEAgLTIyMCwxNiArMjYxLDEwIEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4
ZWN1dGVDb252ZXIKICAgICAgICAgCiAgICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4
ZWN1dGUoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZXhlY3V0aW9uQ29udGV4
dC5leGVjdXRlKGkpOworICAgICAgICBleGVjdXRpb25Db250ZXh0LmV4ZWN1dGUodmlzaXRvciwg
aSk7CiAgICAgICAgIAogICAgICAgICAvLyBPbmNlIHdlJ3JlIGluIGNvbnZlcmdlbmNlLCBpdCBt
YWtlcyB0aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJraW5nIGhhcHBlbiBhbnl0aW1lCiAg
ICAgICAgIC8vIHdlIGZpbmQgd29yay4KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hv
dWxkIGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBpZiB0
aGF0J3MKLSAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVuIGJldHRlciBpcyB0
aGlzOgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5pbmcu
Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdzLCBy
ZXR1cm4uCi0gICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4KLSAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMgogICAgICAgICBp
ZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTI0MSw3ICsyNzYsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQWxsKFNsCiB7CiAgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZh
bHNlOwogICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJh
aW50LT5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNp
dFNvbWV0aGluZyk7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2co
IiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0
ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJik+LAogICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90Vmlz
aXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwogICAgIApAQCAtNjAsOSAr
NjAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0
ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBub25lIG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRo
aXMKICAgICAvLyBhc3N1bWVzIHRoYXQgeW91J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQg
ZHJhaW5lZCBmcm9tIHRoZXJlLgotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKAotICAgICAg
ICBTbG90VmlzaXRvciYsCi0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25p
Y1RpbWU6OmluZmluaXR5KCkpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNp
dG9yJik7CiAgICAgCiAgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQg
YW55IHNoZW5hbmlnYW5zLgogICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOwpAQCAt
NzEsOSArNjksOSBAQCBwcml2YXRlOgogICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAg
ZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgCi0gICAgYm9vbCBleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBi
b29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBib29s
IGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVk
LCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAgYm9v
bCBkcmFpbihTbG90VmlzaXRvciYsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBl
eGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOwogICAgIAogICAgIEJpdFZlY3RvciBt
X3VuZXhlY3V0ZWRSb290czsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3RoczsK
QEAgLTgxLDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQq
PiBtX29yZGVyZWQ7CiAgICAgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4gbV9vdXRncm93dGhz
OwogICAgIHVuc2lnbmVkIG1faXRlcmF0aW9uIHsgMSB9OworICAgIFBhcmFsbGVsSGVscGVyQ2xp
ZW50IG1faGVscGVyQ2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMjUwODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU4MywxMiArNTgzLDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBib251
c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZlKQogICAg
ICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLS07CiAg
ICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMrKzsKLQor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRy
YWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYzMSwzOSBAQCBORVZFUl9J
TkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAgICBhdXRv
IGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBo
YXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX2JvbnVz
VmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVs
TWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFy
a2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hl
YXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBt
X2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZdIChNYXJr
U3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
cnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2spIHsKKyAgICAgICAg
ICAgICAgICBmb3JFYWNoTWFya1N0YWNrKAorICAgICAgICAgICAgICAgICAgICBbJl0gKE1hcmtT
dGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2spLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1faGVh
cC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAgICAgICBtX2hlYXAu
bV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIGlmIChib251c1Rhc2spCisgICAgICAg
ICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRy
YWluKHRpbWVvdXQpOworICAgICAgICAKICAgICAgICAgaXNBY3RpdmUgPSB0cnVlOwogICAgIH0K
IH0KQEAgLTY3Niw5ICs2ODksMTMgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNs
b3RWaXNpdAogICAgICAgICByZXR1cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVvdXQpOwogICAgIH0K
IAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7Ci0gICAgZG9u
YXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9uYXRlQWxsKGhvbGRMb2NrKG1faGVhcC5tX21h
cmtpbmdNdXRleCkpOworICAgIHJldHVybiB3YWl0Rm9yVGVybWluYXRpb24odGltZW91dCk7Cit9
CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6d2FpdEZvclRl
cm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgZm9yICg7OykgewogICAgICAgICBp
ZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJl
c3VsdDo6VGltZWRPdXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBwdWJsaWM6CiAK
ICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0aW1l
b3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1bHQg
ZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25p
Y1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRGb3JU
ZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0
eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRyYWlu
aW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4gVGhp
cwogICAgIC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3MgdGhh
biB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZpc2l0Q291
bnRlciB7CitwdWJsaWM6CisgICAgVmlzaXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
ICAgICAgICA6IG1faW5pdGlhbFZpc2l0Q291bnQodmlzaXRvci52aXNpdENvdW50KCkpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICB7CisgICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1faW5pdGlh
bFZpc2l0Q291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzaXplX3QgbV9pbml0aWFs
VmlzaXRDb3VudCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWlj
cy5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0NiwxMSArMzQ2LDE2IEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBu
dWxsRGVwZW5kZW5jeSgKICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA4Pjo6dHlwZSogPSBudWxscHRy
PgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5k
ZW5jeShUIHZhbHVlKQogewogICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDY0X3Qg
Y29weSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUpOworICAgIHVuaW9uIHsKKyAgICAg
ICAgdWludDMyX3QgY29weTsKKyAgICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5
ID0gMDsKKyAgICB1LnZhbHVlID0gdmFsdWU7CiAjaWYgQ1BVKEFSTTY0KQogICAgIC8vIENyZWF0
ZSBhIG1hZ2ljYWwgemVybyB2YWx1ZSB0aHJvdWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29t
cHV0YXRpb24KICAgICAvLyBpc24ndCB2aXNpYmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVy
byBpcyB0aGVuIHVzYWJsZSBhcyBhbiBvZmZzZXQgaW4KQEAgLTM2MywxMSArMzY4LDExIEBAIEFM
V0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmEKICAgICAvLyBvciBhbiBhY3F1
aXJlIGxvYWQuCiAgICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgog
ICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAi
ciIoY29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2VsaWYgQ1BVKEFSTSkK
ICAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCiAgICAgICAgIDogW2Rl
cGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Cisg
ICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxzZQogICAgIC8vIE5vIGRlcGVuZGVuY3kg
aXMgbmVlZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KICAgICBsb2FkTG9hZEZlbmNlKCk7CkBA
IC0zNzcsNjYgKzM4Miw2IEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQg
dmEKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAotLy8gRklYTUU6IFRoaXMgY29kZSBpcyBh
bG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0vLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBl
KiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVl
KQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29weSA9IGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lmIENQVShBUk02NCkKLSAgICBhc20oImVvciAl
d1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9
ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJN
KQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBb
ZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsK
LSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwotICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVO
VVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5OwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09
IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5j
eShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90
Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERl
cGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0
YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
c3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5V2l0aCgpCi0g
ICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAsIHZhbHVlKCkK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5k
ZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQot
ICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19OwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRl
cGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBEZXBlbmRlbmN5V2l0aDxU
PihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUg
VCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9C
aXRWZWN0b3IuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsMTMgQEAgcHVibGljOiAKICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCisgICAgICAgIGl0ZXJhdG9yIG9wZXJhdG9y
KysoaW50KQorICAgICAgICB7CisgICAgICAgICAgICBpdGVyYXRvciByZXN1bHQgPSAqdGhpczsK
KyAgICAgICAgICAgICsrKCp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1dDsKKyAgICAg
ICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327460</attachid>
            <date>2017-11-22 10:19:26 -0800</date>
            <delta_ts>2017-11-23 17:13:22 -0800</delta_ts>
            <desc>I think it&apos;s written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40874</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJh
bGxlbGlzbS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnN0cmFpbnRQYXJhbGxlbGlzbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBDb25zdHJhaW50UGFyYWxsZWxpc20gOiB1
aW50OF90IHsKKyAgICBTZXF1ZW50aWFsLAorICAgIFBhcmFsbGVsCit9OworICAgIAorfSAvLyBu
YW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVs
aXNtKQoreworICAgIHN3aXRjaCAocGFyYWxsZWxpc20pIHsKKyAgICBjYXNlIEpTQzo6Q29uc3Ry
YWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOgorICAgICAgICBvdXQucHJpbnQoIlNlcXVlbnRp
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxp
c206OlBhcmFsbGVsOgorICAgICAgICBvdXQucHJpbnQoIlBhcmFsbGVsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgxLDcgKzI4MSw3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlx
dWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJrU3RhY2so
c3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3RyYWludFNl
dChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwgbV9jb25z
dHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0aGlzKSkK
ICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlx
dWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3Vu
aXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTI1NzgsNyArMjU3OCw3IEBAIHZvaWQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIFRpbWluZ1Njb3Bl
IHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRp
dmUgc2NhbiIpOwogICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0
aXZlU2NhbigpOwogICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9v
dHMoKnRoaXMpOwpAQCAtMjU5Miw3ICsyNTkyLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwg
Ik1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAg
ICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7CiAjZW5kaWYK
QEAgLTI2MTMsNyArMjYxMyw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAg
ICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5k
bGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IpIHsKICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90Vmlz
aXRvcik7CiAgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKICAg
ICAgICAgfSwKQEAgLTI2MjEsNyArMjYyMSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkQiLCAiRGVi
dWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgICAgIGlmIChT
YW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxl
cigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxl
ci0+Z2V0TG9jaygpKTsKQEAgLTI2NDEsMjEgKzI2NDEsMjEgQEAgdm9pZCBIZWFwOjphZGRDb3Jl
Q29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
SnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faml0U3R1YlJvdXRpbmVz
LT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAg
ICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
fSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAgICAg
CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcmgiLCAiV2VhayBSZWZlcmVu
Y2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIq
IGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAgICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdl
YWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKQEAgLTI2NjQsNyArMjY2NCw3
IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMi
LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRp
bmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikg
ewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygp
OyBpLS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkp
LnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgCkBAIC0yNjg0
LDcgKzI2ODQsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tzIiwKLSAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAg
ICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRp
bmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25zdHJhaW50
IG9ubHkgaWYgaXQncyBibGFjay4KQEAgLTI2OTcsNyArMjY5Nyw3IEBAIHZvaWQgSGVhcDo6YWRk
Q29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIk1ybXMiLCAiTXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgLy8gSW5k
aWNhdGUgdG8gdGhlIGZpeHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQogICAgICAgICAg
ICAgc2l6ZV90IHNpemUgPSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtT
dGFjay0+c2l6ZSgpOwogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNp
emUpOwpAQCAtMjg0Nyw0ICsyODQ3LDE5IEBAIHZvaWQgSGVhcDo6cmVtb3ZlSGVhcEZpbmFsaXpl
ckNhbGxiYWNrKGMKICAgICBtX2hlYXBGaW5hbGl6ZXJDYWxsYmFja3MucmVtb3ZlRmlyc3QoY2Fs
bGJhY2spOwogfQogCit2b2lkIEhlYXA6OnNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZCgpPj4gdGFzaykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFy
a2luZ011dGV4KTsKKyAgICBtX2JvbnVzVmlzaXRvclRhc2sgPSB0YXNrOworICAgIG1fbWFya2lu
Z0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworfQorCit2b2lkIEhlYXA6OnJ1bkZ1bmN0
aW9uSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrKQoreworICAgIHNl
dEJvbnVzVmlzaXRvclRhc2sodGFzayk7CisgICAgdGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RW
aXNpdG9yKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKG51bGxwdHIpOworICAgIG1fY29sbGVj
dG9yU2xvdFZpc2l0b3ItPndhaXRGb3JUZXJtaW5hdGlvbigpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNTA4NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc190aW1l
Q2hlY2tSZXNvbHV0aW9uID0gMTY7CiAKICAgICBzdGF0aWMgYm9vbCBpc01hcmtlZChjb25zdCB2
b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCop
OwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24sIGNvbnN0IHZv
aWQqKTsKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0IHZvaWQqKTsKQEAg
LTM1OCw2ICszNTcsMTQgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXpl
ckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQgcmVtb3Zl
SGVhcEZpbmFsaXplckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOworICAg
IAorICAgIHZvaWQgcnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4pOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBydW5GdW5jdGlvbkluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAg
IHJ1blRhc2tJblBhcmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPihm
dW5jKSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2Nv
cGU7CkBAIC01MjcsNiArNTM0LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFzc2VydFNo
YXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JUYXNrKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBjb25zdCBI
ZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAgICAgY29u
c3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTY0Miw2ICs2NTEsNyBAQCBwcml2YXRl
OgogICAgIExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3Vu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzOwogCiAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQgbV9oZWxw
ZXJDbGllbnQ7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gbV9i
b251c1Zpc2l0b3JUYXNrOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIHNpemVf
dCBtX2Jsb2NrQnl0ZXNBbGxvY2F0ZWQgeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDIzICs3MCwx
MSBAQCBpbmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUCiAKIEFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFT
U0VSVChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBD
ZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNl
bGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9j
YXRpb24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtl
ZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgp
LT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdD
ZWxsKQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3
Q2VsbCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVy
biBjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBi
bG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29u
Y3VycmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2lu
Z1ZlcnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCkt
PmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlT
X0lOTElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNiBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlz
TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9v
bCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qg
dm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAg
IGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgICAg
IApAQCAtNDk4LDE4ICs0OTcsMTIgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmFyZU1hcmtz
U3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21hcmtpbmdWZXJzaW9uOwog
fQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+IE1hcmtlZEJsb2NrOjphcmVN
YXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0g
ICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247Ci0gICAgcmV0dXJuIGRl
cGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24gIT0gbWFya2luZ1ZlcnNp
b24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0
YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShyZXN1
bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwor
ICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJv
dXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVu
Y3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9CiAKIGlubGluZSB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQpAQCAtNTI0LDE1ICs1MTcs
MTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkUmF3KGNvbgogCiBpbmxpbmUg
Ym9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNv
bnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24p
ID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6
OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2
b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5
KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVlKQorICAgIEhlYXBWZXJzaW9u
IHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9
IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21h
cmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIG1f
bWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVyc2lvbikpOwogfQogCiBpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTYzLDE0ICs2NCw3MiBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkK
ICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6
ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1v
bm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJraW5nQ29uc3Ry
YWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhp
bmcpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coYWJicmV2
aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRv
ciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZp
c2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5n
VGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlz
aXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAgIFZpc2l0Q291bnRl
ciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHJlc3Vs
dCA9IGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworICAgIHNpemVfdCB2aXNpdENvdW50ID0gdmlzaXRD
b3VudGVyLnZpc2l0Q291bnQodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0
Q291bnQ7CisgICAgZGlkVmlzaXRTb21ldGhpbmcgfD0gISF2aXNpdENvdW50OworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVjaWtXb3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUgTWFya2luZ0Nv
bnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICByZXR1
cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRv
ciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291
bnRlcih2aXNpdG9yKTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgc2l6
ZV90IHZpc2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCh2aXNpdG9yKTsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2
aXNpdENvdW50OworICAgIGRpZFZpc2l0U29tZXRoaW5nIHw9ICEhbV9sYXN0VmlzaXRDb3VudDsK
K30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNv
dG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKworU2VxdWVudGlh
bE1hcmtpbmdDb25zdHJhaW50OjpTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAor
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgOiBNYXJraW5nQ29uc3Ry
YWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHkp
CisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCit7Cit9
CisKK1NlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6U2VxdWVudGlhbE1hcmtpbmdDb25zdHJh
aW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1
dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dv
cmtFc3RpbWF0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkp
CisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1v
dmUobmFtZSksIHZvbGF0aWxpdHkpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4
ZWN1dGVGdW5jdGlvbikpCisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92
ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2VxdWVudGlhbE1hcmtpbmdD
b25zdHJhaW50Ojp+U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKworZG91Ymxl
IFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24o
dmlzaXRvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyMjUwODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29u
c3RyYWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIK
ICNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTQz
LDE2ICs0NCw3IEBAIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAg
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1h
cmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwg
Q29uc3RyYWludFZvbGF0aWxpdHkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJr
aW5nQ29uc3RyYWludCgpOwogICAgIApAQCAtNjUsMjEgKzU3LDE5IEBAIHB1YmxpYzoKICAgICAK
ICAgICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENv
dW50OyB9CiAgICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7Cisg
ICAgCisgICAgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpOyAvLyBEZWZhdWx0cyB0byAwLgogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3Rp
bWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dv
cmtFc3RpbWF0ZUZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAg
IGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAg
ICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwot
ICAgIH0KKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAg
ICAKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRT
b21ldGhpbmcpOwogICAgIAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBj
b25zdCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsgLy8gRGVmYXVs
dHMgdG8gY3Jhc2hpbmcuCiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5n
Q29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgpAQCAtODcsMTAgKzc3LDMx
IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0
cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBt
X2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBt
X3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgbV92
b2xhdGlsaXR5OwogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sg
bV9sb2NrOworfTsKKworY2xhc3MgU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50IDogcHVibGlj
IE1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTZXF1
ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwor
ICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludCgK
KyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAor
ICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TZXF1ZW50aWFs
TWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToKKyAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAgOjpGdW5j
dGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyMjUwODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDEyICszMiwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8g
V2hhdCB3ZSB3YW50IGhlcmUgaXMgYSBjbGFzcyB0aGF0IHdpbGwgaGFuZGxlIHNldHRpbmcgdXAg
cGFyYWxsZWwgZXhlY3V0aW9uIGluIEhlYXAuIEl0IHdpbGwgY29udGFpbgorLy8gYSBkcml2ZXIu
IEl0IHdpbGwgd2FpdCBmb3IgcGFyYWxsZWwgZXhlY3V0aW9uIHRvIGZpbmlzaCBpbiBpdHMgZGVz
dHJ1Y3Rvci4gVGhlIGRyaXZlciBsb29wIHdpbGwga25vdworLy8gdG8gaGFuZGxlIGV4ZWN1dGlu
ZyBwYXJhbGxlbCBjb25zdHJhaW50cy4gQSBsYW1iZGEgcGFzc2VkIGJ5IHRoZSBjYWxsZXIgd2ls
bCBjaG9vc2Ugd2hpY2gKKy8vIE1hcmtpbmdDb25zdHJhaW50cyB0byB2aXNpdC4gT25lIHBvbGlj
eSBpcyB0byBleGVjdXRlIGEgYmFnIG9mIHRoZW0gaW4gYW55IG9yZGVyLiBBbm90aGVyIHBvbGlj
eSBpcyB0bworLy8gZXhlY3V0ZSB0aGVtIGluIHNvbWUgcHJpb3JpdHkgb3JkZXIgdW50aWwgd2Ug
aGl0IHBheWRpcnQuCisKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250
ZXh0IHsKIHB1YmxpYzoKLSAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25zdHJhaW50U2V0
JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCisgICAg
RXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0KQogICAgICAgICA6IG1f
c2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3RpbWVv
dXQodGltZW91dCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNDYsNDAgKzUwLDk0IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7CiAgICAgfQogICAgIAotICAg
IGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlz
aXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAgIAotICAg
IC8vIFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0LgotICAgIGJvb2wgZHJhaW4oQml0VmVj
dG9yJiB1bmV4ZWN1dGVkKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBl
eGVjdXRlKGNvbnN0IEZ1bmMmIHBpY2tOZXh0KQogICAgIHsKLSAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggOiB1bmV4ZWN1dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAgICAg
ICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRp
bWVPdXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIG1fc2V0Lm1faGVhcC5ydW5GdW5jdGlvbkluUGFyYWxs
ZWwoCisgICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAg
ICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBib29sIGRvUGFyYWxsZWxXb3Jr
TW9kZTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhUb1J1bjsKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3Rv
RXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuZmlyc3QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBpY2tSZXN1bHQgPSBwaWNrTmV4
dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fYWN0aXZlVGhyZWFkcykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9k
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dLT5kb1Bh
cmFsbGVsV29yayh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIW1fZXhl
Y3V0ZWQuZ2V0KGluZGV4VG9SdW4pKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxp
c20gPSBtX3NldC5tX3NldFtpbmRleFRvUnVuXS0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNv
bWV0aGluZyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb1Bh
cmFsbGVsV29ya01vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhldXRl
SW5QYXJhbGxlbC50YWtlRmlyc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAodW5zaWduZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGluZGV4VG9SdW47IH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2V4ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RpZFZpc2l0U29tZXRoaW5nIHw9IGRpZFZpc2l0U29tZXRoaW5nOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUlu
UGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX251bUFj
dGl2ZVRocmVhZHMtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlm
eUFsbCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQotCi0gICAgdm9pZCBleGVj
dXRlKHNpemVfdCBpbmRleCkKKyAgICB2b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkK
ICAgICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1f
ZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGlu
ZGV4KTsKKyAgICAgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgICAgICBh
dXRvIGVuZCA9IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgICAgIGV4ZWN1dGUoCisgICAgICAgICAg
ICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAgICAgIGlm
IChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxvcHQ7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICppdGVyKys7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgdW5l
eGVjdXRlZC5jbGVhcigpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgTWFya2luZ0NvbnN0
cmFpbnRTZXQmIG1fc2V0OwotICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAgTW9ub3Rv
bmljVGltZSBtX3RpbWVvdXQ7CiAgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CisgICAgRGVxdWU8
dW5zaWduZWQ+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBMb2NrIG1fbG9jazsKKyAgICBD
b25kaXRpb24gbV9jb25kaXRpb247CisgICAgdW5zaWduZWQgbV9udW1BY3RpdmVUaHJlYWRzIHsg
MCB9OwogICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07CiB9OwogCi1NYXJr
aW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFp
bnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVh
cCkKKyAgICAsIG1faGVscGVyQ2xpZW50KCZoZWFwQ29uc3RyYWludFNldEhlbHBlclBvb2woKSkK
IHsKIH0KIApAQCAtMTA5LDcgKzE2Nyw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRp
ZFN0YXJ0TWFya2kKIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYs
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWlu
dD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0
aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNlcXVlbnRpYWxN
YXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjphZGQoCkBAIC0xMTgsNyArMTc2LDcgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6YWRkKAogICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29y
a0VzdGltYXRlRnVuY3Rpb24sCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkK
IHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShh
YmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiks
IFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKKyAgICBh
ZGQoc3RkOjptYWtlX3VuaXF1ZTxTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUo
YWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rpb24p
LCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7CiB9CiAK
IHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTE0OCw5ICsyMDYsOSBAQCBib29s
IE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdD
b25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewotICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRv
ciwgdGltZW91dCk7CisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlz
KTsKICAgICAKICAgICB1bnNpZ25lZCBpdGVyYXRpb24gPSBtX2l0ZXJhdGlvbisrOwogICAgIApA
QCAtMTU5LDE2ICsyMTcsMTQgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNv
bnZlcgogCiAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdlIGhhdmUg
bm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhlbgogICAgIC8vIHdlIHNo
b3VsZCBleGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4o
bV91bmV4ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXhlY3V0aW9u
Q29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cyk7CiAgICAgCiAgICAgLy8gRmlyc3QgaXRl
cmF0aW9uIGlzIGJlZm9yZSBhbnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQncyB1bmxpa2VseSB0
byB0cmlnZ2VyIGFueSBjb25zdHJhaW50cyBvdGhlcgogICAgIC8vIHRoYW4gcm9vdHMuCiAgICAg
aWYgKGl0ZXJhdGlvbiA9PSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYg
KCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRP
dXRncm93dGhzKTsKICAgICAKICAgICAvLyBXZSB3YW50IHRvIGtlZXAgcHJlZmVycmluZyB0aGUg
b3V0Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50
ZWQKICAgICAvLyBldmVuIGluIGEgc3RvcC10aGUtd29ybGQgR0MgLSB1bnRpbCB0aGV5IHN0b3Ag
cHJvZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBnbyB0b3RhbGx5CkBAIC0yMTUsMjQg
KzI3MSwxOCBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAg
ICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgpOwogICAgICAg
ICB9KTsKICAgICAKLSAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9v
cmRlcmVkKSB7Ci0gICAgICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOwotICAg
ICAgICAKLSAgICAgICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhl
IG1vc3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQotICAgICAgICAv
LyB3ZSBmaW5kIHdvcmsuCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVj
dXRlIGFsbCBjb25zdHJhaW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCi0g
ICAgICAgIC8vIGJldHRlciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKLSAg
ICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBydW5uaW5nLgotICAgICAg
ICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgot
ICAgICAgICAvLyAtIEVsc2UgcnVuIHVudGlsIHRpbWVvdXQuCi0gICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzIKLSAgICAgICAgaWYgKGV4ZWN1
dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgYXV0byBpdGVyID0gbV9vcmRlcmVkLmJlZ2luKCk7CisgICAgYXV0byBl
bmQgPSBtX29yZGVyZWQuZW5kKCk7CisgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKAorICAg
ICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAgaWYg
KGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5k
KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsb3B0OworICAgICAgICAgICAgCisgICAgICAg
ICAgICByZXR1cm4gKCppdGVyKyspLT5pbmRleCgpOworICAgICAgICB9KTsKICAgICAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTI0MSw3ICsyOTEsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQWxsKFNsCiB7CiAgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNl
OwogICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50
LT5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNv
bWV0aGluZyk7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAi
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgewogcHVi
bGljOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRT
ZXQoSGVhcCYpOwogICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgpOwogICAgIAogICAgIHZvaWQg
ZGlkU3RhcnRNYXJraW5nKCk7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFt
ZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCiAgICAg
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eSk7CiAgICAgCkBAIC02MCw5ICs2MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUg
b2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3Un
dmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RWaXNpdG9yJiwKLSAgICAgICAgTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBTaW1wbHkg
cnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAgICAgdm9pZCBl
eGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CkBAIC03MSwxNiArNjksMTggQEAgcHJpdmF0ZToKICAg
ICBjbGFzcyBFeGVjdXRpb25Db250ZXh0OwogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRpb25Db250
ZXh0OwogICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYs
IE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90
b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9v
bCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRW
ZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29t
ZXRoaW5nKTsKICAgICAKKyAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVj
dXRlZFJvb3RzOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKICAgICBWZWN0
b3I8TWFya2luZ0NvbnN0cmFpbnQqPiBtX29yZGVyZWQ7CiAgICAgVmVjdG9yPE1hcmtpbmdDb25z
dHJhaW50Kj4gbV9vdXRncm93dGhzOwogICAgIHVuc2lnbmVkIG1faXRlcmF0aW9uIHsgMSB9Owor
ICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MywxMiArNTgzLDE0IEBAIE5FVkVSX0lO
TElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBm
YWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7CiAgICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAg
ICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVk
RHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02Mjks
MjggKzYzMSwzOSBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAK
ICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAg
fTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53
YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAg
ICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAg
ICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRv
bmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAg
ICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1
cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtl
cnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFi
b251c1Rhc2spIHsKKyAgICAgICAgICAgICAgICBmb3JFYWNoTWFya1N0YWNrKAorICAgICAgICAg
ICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVz
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2sp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1Bh
cmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIGlm
IChib251c1Rhc2spCisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICAKICAgICAgICAgaXNB
Y3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAgLTY3Niw5ICs2ODksMTMgQEAgU2xvdFZpc2l0b3I6
OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgICAgICByZXR1cm4gZHJhaW5JblBhcmFs
bGVsKHRpbWVvdXQpOwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21h
cmtpbmdNdXRleCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9uYXRlQWxs
KGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3YWl0Rm9yVGVy
bWluYXRpb24odGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBT
bG90VmlzaXRvcjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAg
Zm9yICg7OykgewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAg
IHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2
ICsxMjEsOCBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxs
ZWwoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAg
ICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJl
ZERyYWluUmVzdWx0IHdhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBN
b25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0g
YW4gaW5jcmVtZW50IG9mIGRyYWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRl
c2Agd29ydGggb2YgZGF0YS4gVGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkg
d2FsayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRo
YW4gYnl0ZXMuIEl0IG1heQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRD
b3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRD
b3VudGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlz
aXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFZpc2l0Q291bnRlciB7CitwdWJsaWM6CisgICAgVmlzaXRDb3VudGVyKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1faW5pdGlhbFZpc2l0Q291bnQodmlzaXRv
ci52aXNpdENvdW50KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRDb3Vu
dChTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIHJldHVybiB2aXNpdG9yLnZp
c2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxMSArMzQ2LDE2IEBAIEFMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVwZW5kZW5jeSgKICAgICByZXR1cm4gMDsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9
PSA4Pjo6dHlwZSogPSBudWxscHRyPgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5M
SU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewogICAgIHVuc2lnbmVkIGRlcGVu
ZGVuY3k7Ci0gICAgdWludDY0X3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUp
OworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDMyX3QgY29weTsKKyAgICAgICAgVCB2YWx1ZTsK
KyAgICB9IHU7CisgICAgdS5jb3B5ID0gMDsKKyAgICB1LnZhbHVlID0gdmFsdWU7CiAjaWYgQ1BV
KEFSTTY0KQogICAgIC8vIENyZWF0ZSBhIG1hZ2ljYWwgemVybyB2YWx1ZSB0aHJvdWdoIGlubGlu
ZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRpb24KICAgICAvLyBpc24ndCB2aXNpYmxlIHRvIHRo
ZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVzYWJsZSBhcyBhbiBvZmZzZXQgaW4KQEAg
LTM2MywxMSArMzY4LDExIEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQg
dmEKICAgICAvLyBvciBhbiBhY3F1aXJlIGxvYWQuCiAgICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5j
eV0sICV3W2luXSwgJXdbaW5dIgogICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVu
Y3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29w
eSkpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwg
JVtpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAg
OiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxzZQog
ICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KICAg
ICBsb2FkTG9hZEZlbmNlKCk7CkBAIC0zNzcsNjYgKzM4Miw2IEBAIEFMV0FZU19JTkxJTkUgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmEKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAotLy8g
RklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBlbmRl
bmN5KCkgb3ZlcmxvYWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVu
Y3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAg
dWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lmIENQVShB
Uk02NCkKLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0gICAg
ICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihj
b3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5d
LCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAg
ICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwotICAgIGRl
cGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAgIHJldHVy
biBkZXBlbmRlbmN5OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c2l6ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5F
IERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5
KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51bGxw
dHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAg
IHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAg
ICBEZXBlbmRlbmN5V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgp
KQotICAgICAgICAsIHZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3lX
aXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDogZGVw
ZW5kZW5jeShkZXBlbmRlbmN5KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19OwotICAg
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRl
bmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJl
dHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRl
cGVuZGVuY3kpCiB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291
cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsMTMg
QEAgcHVibGljOiAKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCisgICAg
ICAgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7CisgICAgICAgICAgICBpdGVy
YXRvciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgICAgICsrKCp0aGlzKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1dDsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5z
aXplKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0Rl
cXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTEgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBhcHBlbmRBbmRCdWJi
bGUoVSYmLCBjb25zdCBGdW5jJik7CiAgICAgCisgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhl
IGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVy
bnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMg
cmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFQgdGFrZUZp
cnN0KGNvbnN0IEZ1bmMmKTsKKwogICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVs
ZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxs
IHZlcnNpb24gb2YKICAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBm
YWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTcxLDYgKzU3NiwyNSBAQCBp
bmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwCiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Citp
bmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdChjb25zdCBGdW5jJiBm
dW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gdGhp
cy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgVCBjYW5kaWRh
dGUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkgeworICAgICAg
ICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgcHJlcGVuZCh0YWtlTGFzdCgp
KTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAgIH0KKyAgICAgICAgY291
bnQrKzsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7CisgICAgfQorICAgIHJl
dHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgdW5zaWduZWQgY291bnQg
PSAwOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327517</attachid>
            <date>2017-11-23 17:13:22 -0800</date>
            <delta_ts>2017-11-23 19:50:52 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56858</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUwODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzExLDYgKzMxMSw4IEBACiAJCTBGNEEzOEZBMUM4RTEz
REYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBs
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMERE
MDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdp
bkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhD
NzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZp
c2l0Q291bnRlci5oICovOyB9OworCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3Ry
YWludFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0
REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNERFMUNEMUM0QzFCNTQwMDRE
NkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi87IH07CiAJCTBGNEYyOUUwMThCNkFEMUMw
MDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REUxOEI2QUQx
QzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi87
IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjI2NSw2ICsyMjY3LDggQEAKIAkJMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQw
M0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1wLmg7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFD
IC8qIFZpc2l0Q291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNp
dENvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzMxRkM3QTk3
NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb25zdHJhaW50UGFyYWxsZWxpc20uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0REUxQ0MxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGls
bHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyRml4T2J2aW91
c1NwaWxscy5jcHA7IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJG
aXhPYnZpb3VzU3BpbGxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZp
eE9idmlvdXNTcGlsbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBC
M09yaWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNP
cmlnaW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01NTAyLDYgKzU1MDYsNyBAQAogCQkJCTBGRDBFNUU2MUU0M0QzNDcw
MDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFC
RUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAw
ODNCMTJCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCisJCQkJMEY0RDhDNzMxRkM3QTk3NDAw
MUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcw
RDUwMDk1OTUxQiAvKiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLAogCQkJCTJBN0E1OEVFMTgw
OEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3
NUIzNTQgLyogRGVmZXJHQy5oICovLApAQCAtNTYyMiw2ICs1NjI3LDcgQEAKIAkJCQkwRjFGQjM4
QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1
bGVyLmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRl
ci5oICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRl
ci5oICovLAogCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQu
aCAqLywKIAkJCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAq
LywKIAkJCQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8sCkBA
IC04MTcyLDYgKzgxNzgsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRl
Y29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBC
eXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBC
QTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAw
MUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVC
ODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBI
ZWFkZXJzICovLApAQCAtODg4Nyw2ICs4ODk0LDcgQEAKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAz
QjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZp
c2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5
IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJD
QUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBD
N0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJl
dmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIGJvb2wgQWNjZXNzQ2Fz
ZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHko
bV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCht
X3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBy
ZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgwLDcgKzk4MCw3IEBA
IHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYKICAgICAKICAgICBtX3Zp
c2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRydWU7CiAKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmdseShsb2NrZXIpKSB7CkBAIC0x
MTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lVG9M
CiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRo
aXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1
ZVRvT2xkQWdlKCkpKQpAQCAtMTE0NywxMCArMTE0NywxMCBAQCBib29sIENvZGVCbG9jazo6c2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYgRU5BQkxFKERGR19KSVQpCiBzdGF0aWMgYm9vbCBz
aG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0
aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgIGlmICh0
cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWQodHJhbnNpdGlvbi5tX2Nv
ZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCisgICAg
aWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExODAsNyArMTE4MCw3IEBA
IHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAg
ICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsK
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CiAgICAgICAgICAgICAg
ICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7
Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG9sZFN0cnVj
dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG9sZFN0cnVjdHVyZSkp
CiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0
dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFsbEFyZU1h
cmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjU0LDE0ICsxMjU0LDE0IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBKU0NlbGwq
IHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7CiAgICAgICAg
IEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPigqcmVmZXJlbmNlLT52bSgpLCByZWZl
cmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShyZWZlcmVu
Y2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAg
ICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGRm
Z0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNb
aV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7CisgICAgU2VxdWVu
dGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1l
c3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAgICBzd2l0Y2gg
KHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2Vx
dWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDoKKyAgICAg
ICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
MSw3ICsyODEsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAg
LCBtX211dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhp
cywgIk0iKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtT
dGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFy
a1N0YWNrQXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtlX3VuaXF1ZTxN
YXJraW5nQ29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3RyYWludFNldChzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAgICAgLCBtX2hhbmRsZVNldCh2
bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9ja1NldD4oKSkK
ICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1YlJvdXRpbmVT
ZXQ+KCkpCkBAIC05MTEsNyArOTExLDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwogICAgIGlmIChtX211dGF0b3JT
aG91bGRCZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAg
aWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICBpZiAoIWlzTWFya2Vk
KGNlbGwpKSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxlY3Rpb24gYSBzdG9y
ZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQgcGFzdAogICAgICAg
ICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFy
a2VkIFBvc3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAgICAgICAgIC8vIG9iamVjdCBn
ZXRzIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwgZ28gZG93biB0
aGUgbm9ybWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTI0LDE1IEBAIHZvaWQgSGVhcDo6YWRkVG9S
ZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgcHJvdGVj
dCBhZ2FpbnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAg
IC8vICAgICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVubWFya2VkLgotICAgICAgICAg
ICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJyZW50bHkgaGVyZS4KKyAgICAg
ICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhlcmUuCiAgICAgICAgICAgICAg
ICAgLy8gICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXllZC4KICAgICAgICAgICAgICAg
ICAvLyAgICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNrZWQuCiAgICAgICAgICAgICAg
ICAgLy8gICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVTdHJvbmcg
aGVyZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2Fz
ZSB3ZSB3b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBhZ2FpbiwgZXZlbiB0aG91Z2gg
aXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2suIFRoaXMgY2hlY2sgbGV0cyB1
cyBjb3JyZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0Ci0gICAg
ICAgICAgICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29udmVyZ2VzIG1vbm90b25pY2Fs
bHkgdG8gdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWRDb25jdXJyZW50bHkoY2Vs
bCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252ZXJnZXMgbW9ub3RvbmljYWxs
eSB0byB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjZWxsKSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3JrIG91dCB3aGV0aGVyIHRoZSBv
YmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAgICAgICAgICAgICAgICAgLy8g
dGhpcyBwb2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5LgogICAgICAgICAgICAgICAg
ICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKTsKQEAgLTk0
OCw3ICs5NDgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJU
KEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICAgICAgQVNTRVJUKEhlYXA6
OmlzTWFya2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRoZSBvYmplY3Qgd2Fz
ICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yIG1heSBzZXQgdGhl
CiAgICAgLy8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRoZW4gdG8gUG9zc2libHlPbGRP
ckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwogICAgIC8vIHJhY2Ugd2l0aCB0
aGUgY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVz
ZSB0aGUgb2JqZWN0IF93aWxsXwpAQCAtMjU3OCw3ICsyNTc4LDcgQEAgdm9pZCBIZWFwOjphZGRD
b3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
Q3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29u
dmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2Fu
Iik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2Fu
KCk7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhp
cyk7CkBAIC0yNTkyLDcgKzI1OTIsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygp
CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBT
bWFsbCBSb290cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBj
b25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYx
Myw3ICsyNjEzLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
ICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsK
ICAgICAgICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9
LApAQCAtMjYyMSw3ICsyNjIxLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7
CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5n
UHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsK
ICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRM
b2NrKCkpOwpAQCAtMjY0MSwyMSArMjY0MSwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAi
SklUIFN0dWIgUm91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNl
TWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBt
X29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2
ZXN0ZXJzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpIHsKICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVu
dCA9IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVy
ZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjY0LDcgQEAgdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTsp
CiAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRX
ZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2ODQsNyArMjY4
NCw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikgewor
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAg
aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tz
KAogICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBp
ZiBpdCdzIGJsYWNrLgpAQCAtMjY5Nyw3ICsyNjk3LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXJt
cyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0
byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5z
aXplKCk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CkBA
IC0yODQ3LDQgKzI4NDcsMTkgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJh
Y2soYwogICAgIG1faGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7
CiB9CiAKK3ZvaWQgSGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKCk+PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0
ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuRnVuY3Rpb25JblBh
cmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2spCit7CisgICAgc2V0Qm9udXNW
aXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5ydW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVsbHB0cik7CisgICAgbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+d2FpdEZvclRlcm1pbmF0aW9uKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyAr
MTE0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RpbWVDaGVja1Jl
c29sdXRpb24gPSAxNjsKIAogICAgIHN0YXRpYyBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsK
LSAgICBzdGF0aWMgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKik7CiAgICAg
c3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChIZWFwVmVyc2lvbiwgY29uc3Qgdm9pZCopOwog
ICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwpAQCAtMzU4LDYg
KzM1NywxNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRIZWFwRmluYWxpemVyQ2FsbGJh
Y2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CiAgICAgdm9pZCByZW1vdmVIZWFwRmlu
YWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CisgICAgCisgICAg
dm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+Pik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIHJ1bkZ1
bmN0aW9uSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgcnVuVGFz
a0luUGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+KGZ1bmMpKTsK
KyAgICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpbmdTY29wZTsKQEAg
LTUyNyw2ICs1MzQsOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgYXNzZXJ0U2hhcmVkTWFy
a1N0YWNrc0VtcHR5KCk7CiAKKyAgICB2b2lkIHNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNo
YXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pOworICAgIAogICAgIGNvbnN0IEhlYXBUeXBl
IG1faGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXpl
X3QgbV9taW5CeXRlc1BlckN5Y2xlOwpAQCAtNjQyLDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAg
TGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVu
dDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlz
aXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxv
Y2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDE1IEBAIGlu
bGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFQKICAgICByZXR1cm4gbV9jb2xs
ZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJr
aW5nVmVyc2lvbigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qg
dm9pZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFk
VHlwZTo6SGVscGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2Vs
bCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAg
ICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRC
bG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01h
cmtlZCgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJz
aW9uKCksIGNlbGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25j
dXJyZW50bHkoY29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJp
dHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxs
b2NhdGlvbigpKQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJr
ZWQoKTsKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAg
IHJldHVybiBibG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+
aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBi
bG9jay5pc01hcmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNp
b24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFy
a2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRl
ci5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBTbmFwc2hvdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZv
aWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQgSGVhcFNuYXBzaG90
QnVpbGRlcjo6YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmls
ZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKEhlYXA6Omlz
TWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2Vs
bCkpOwogCiAgICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlv
bi5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJn
ZUFsbG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAg
ICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlz
TWFya2VkKEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2Vk
KCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZl
cnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtl
ZCgpOyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlB
bGxvY2F0ZWQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNWYWxpZENlbGw7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw2IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFy
a2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7
CiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgYm9vbCB0
ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICAgICAgCkBAIC00
OTgsMTggKzQ5NywxMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZShI
CiAgICAgcmV0dXJuIG1hcmtpbmdWZXJzaW9uICE9IG1fbWFya2luZ1ZlcnNpb247CiB9CiAKLUFM
V0FZU19JTkxJTkUgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gTWFya2VkQmxvY2s6OmFyZU1hcmtzU3Rh
bGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKLXsKLSAgICBIZWFw
VmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKLSAgICByZXR1cm4gZGVwZW5kZW5j
eVdpdGgoZGVwZW5kZW5jeSh2ZXJzaW9uKSwgdmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbik7Ci19
Ci0KIGlubGluZSBEZXBlbmRlbmN5IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRo
RGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHJlc3VsdC52YWx1
ZSkpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYg
KFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBhYm91dFRvTWFy
a1Nsb3cobWFya2luZ1ZlcnNpb24pOwotICAgIHJldHVybiByZXN1bHQuZGVwZW5kZW5jeTsKKyAg
ICByZXR1cm4gZGVwZW5kZW5jeSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMTUgKzUxNywxMCBAQCBp
bmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBib29sIE1h
cmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9p
ZCogcCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikgPyBmYWxz
ZSA6IGlzTWFya2VkUmF3KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHAp
Ci17Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2lu
Z1ZlcnNpb24pOwotICAgIGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24gdmVyc2lv
biA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2lu
Z1ZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0
KGF0b21OdW1iZXIocCksIHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJrcy5n
ZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSh2ZXJzaW9uKSk7CiB9CiAKIGlubGluZSBib29s
IE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnQuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjMs
MTQgKzY0LDk3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1f
bGFzdFZpc2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0KQorQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtpbmdDb25zdHJhaW50Ojpl
eGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZykKIHsK
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5h
bWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRW
aXNpdFNvbWV0aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwg
dmlzaXRpbmdUaW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0
LnZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1Rp
bWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAgcmV0dXJuIGRvQ29uc3RyYWlu
dEZ1bmN0aW9uKAorICAgICAgICB2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywKKyAgICAgICAg
WyZdICgpIC0+IENvbnN0cmFpbnRQYXJhbGxlbGlzbSB7IHJldHVybiBleGVjdXRlSW1wbCh2aXNp
dG9yKTsgfSk7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVjaWtXb3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUgTWFya2luZ0Nv
bnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICByZXR1
cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRv
ciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpCit7CisgICAgZG9Db25zdHJhaW50RnVuY3Rpb24o
CisgICAgICAgIHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLAorICAgICAgICBbJl0gKCkgeyBk
b1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7IH0pOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50OjpmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZp
c2l0U29tZXRoaW5nKQoreworICAgIGRvQ29uc3RyYWludEZ1bmN0aW9uKAorICAgICAgICB2aXNp
dG9yLCBkaWRWaXNpdFNvbWV0aGluZywKKyAgICAgICAgWyZdICgpIHsgZmluaXNoUGFyYWxsZWxX
b3JrSW1wbCh2aXNpdG9yKTsgfSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFy
YWxsZWxXb3JrSW1wbChTbG90Vmlzb3RvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0lt
cGwoU2xvdFZpc290b3ImKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorYXV0byBN
YXJraW5nQ29uc3RyYWludDo6ZG9Db25zdHJhaW50RnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIFZp
c2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgYXV0byByZXN1bHQgPSBmdW5j
KCk7CisgICAgc2l6ZV90IHZpc2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCh2aXNp
dG9yKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAg
ICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50OworICAgICAgICBkaWRWaXNpdFNv
bWV0aGluZyB8PSAhIW1fbGFzdFZpc2l0Q291bnQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1NlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6U2VxdWVudGlhbE1hcmtpbmdDb25z
dHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4
ZWN1dGVGdW5jdGlvbiwKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAg
IDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5h
bWUpLCB2b2xhdGlsaXR5KQorICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRl
RnVuY3Rpb24pKQoreworfQorCitTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ6OlNlcXVlbnRp
YWxNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZp
c2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKKyAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5KQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZp
YXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5KQorICAgICwgbV9leGVjdXRlRnVu
Y3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV9xdWlja1dvcmtFc3RpbWF0
ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikpCit7Cit9CisKK1Nl
cXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6flNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludCgp
Cit7Cit9CisKK2RvdWJsZSBTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0Vz
dGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICghbV9xdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9xdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gU2Vx
dWVudGlhbE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICByZXR1cm4gQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAko
cmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIgogI2luY2x1ZGUgIkNvbnN0
cmFpbnRWb2xhdGlsaXR5LmgiCiAjaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCiAjaW5jbHVk
ZSA8bGltaXRzLmg+CkBAIC00MywxNiArNDQsNyBAQCBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtp
bmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBu
YW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRv
dWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKICAgICAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB+TWFya2luZ0NvbnN0cmFpbnQoKTsKICAgICAKQEAgLTY1LDMyICs1Nyw1
OCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShTbG90Vmlz
aXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOwor
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlk
VmlzaXRTb21ldGhpbmcpOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0
ZUZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSB3
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1cm4g
bGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0KKyAg
ICB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7
CisgICAgCisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7Cisg
ICAgCisgICAgdm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0
U29tZXRoaW5nKTsKKyAgICB2b2lkIGZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYsIGJv
b2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2
b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRv
ciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9y
Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3Im
KTsKICAgICAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBhdXRv
IGRvQ29uc3RyYWludEZ1bmN0aW9uKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21ldGhp
bmcsIGNvbnN0IEZ1bmMmKTsKKyAgICAKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFp
bnRTZXQ7IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KICAgICAKICAgICB1bnNpZ25lZCBtX2lu
ZGV4IHsgVUlOVF9NQVggfTsKICAgICBDU3RyaW5nIG1fYWJicmV2aWF0ZWROYW1lOwogICAgIENT
dHJpbmcgbV9uYW1lOwotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYgdGltZW91dCk+IG1fZXhlY3V0ZUZ1bmN0aW9uOwotICAgIDo6RnVuY3Rp
b248ZG91YmxlKFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CiAgICAgc2l6ZV90IG1fbGFzdFZp
c2l0Q291bnQgeyAwIH07CisgICAgTG9jayBtX2xvY2s7Cit9OworCitjbGFzcyBTZXF1ZW50aWFs
TWFya2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgeworcHVibGljOgor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludCgKKyAgICAg
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2Vx
dWVudGlhbE1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBj
b25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RW
aXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgflNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludCgpOworICAgIAorICAg
IGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGU7
CisgICAgCitwcml2YXRlOgorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChT
bG90VmlzaXRvciYpIG92ZXJyaWRlOworCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
Jik+IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9y
Jik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiAr
MzIsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKy8vIFdoYXQgd2Ugd2FudCBoZXJlIGlzIGEg
Y2xhc3MgdGhhdCB3aWxsIGhhbmRsZSBzZXR0aW5nIHVwIHBhcmFsbGVsIGV4ZWN1dGlvbiBpbiBI
ZWFwLiBJdCB3aWxsIGNvbnRhaW4KKy8vIGEgZHJpdmVyLiBJdCB3aWxsIHdhaXQgZm9yIHBhcmFs
bGVsIGV4ZWN1dGlvbiB0byBmaW5pc2ggaW4gaXRzIGRlc3RydWN0b3IuIFRoZSBkcml2ZXIgbG9v
cCB3aWxsIGtub3cKKy8vIHRvIGhhbmRsZSBleGVjdXRpbmcgcGFyYWxsZWwgY29uc3RyYWludHMu
IEEgbGFtYmRhIHBhc3NlZCBieSB0aGUgY2FsbGVyIHdpbGwgY2hvb3NlIHdoaWNoCisvLyBNYXJr
aW5nQ29uc3RyYWludHMgdG8gdmlzaXQuIE9uZSBwb2xpY3kgaXMgdG8gZXhlY3V0ZSBhIGJhZyBv
ZiB0aGVtIGluIGFueSBvcmRlci4gQW5vdGhlciBwb2xpY3kgaXMgdG8KKy8vIGV4ZWN1dGUgdGhl
bSBpbiBzb21lIHByaW9yaXR5IG9yZGVyIHVudGlsIHdlIGhpdCBwYXlkaXJ0LgorCiBjbGFzcyBN
YXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6Ci0gICAgRXhl
Y3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlz
aXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIHNldCkKICAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICwgbV92
aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCiAgICAgewogICAg
IH0KICAgICAKQEAgLTQ2LDQwICs1MCwxMDQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9k
aWRWaXNpdFNvbWV0aGluZzsKICAgICB9CiAgICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZygpICYmIGhhc0Vs
YXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBp
dCB0aW1lcyBvdXQuCi0gICAgYm9vbCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGV4ZWN1dGUoY29uc3QgRnVuYyYgcGlj
a05leHQpCiAgICAgewotICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IHVuZXhlY3V0ZWQpIHsK
LSAgICAgICAgICAgIGV4ZWN1dGUoaW5kZXgpOwotICAgICAgICAgICAgdW5leGVjdXRlZC5jbGVh
cihpbmRleCk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGltZU91dCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgbV9zZXQubV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAgICAgICAgICAgIFsmXSAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleFRvUnVuOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9IG1f
dG9FeGVjdXRlSW5QYXJhbGxlbC5maXJzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gcGlja1Jlc3VsdCA9IHBpY2tOZXh0KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhUb1J1biA9ICpwaWNrUmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bV9hY3RpdmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jb25kaXRpb24ud2FpdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX251bUFjdGl2ZVRo
cmVhZHMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtID0gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworICAgICAgICAgICAgICAgICAgICBib29s
IGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3Nl
dFtpbmRleFRvUnVuXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGlmIChkb1BhcmFsbGVsV29ya01vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJh
aW50LmRvUGFyYWxsZWxXb3JrKHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
ICghbV9leGVjdXRlZC5nZXQoaW5kZXhUb1J1bikpCisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGlu
Zyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFsbGVs
V29ya01vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJ
blBhcmFsbGVsU2V0LmdldChpbmRleFRvUnVuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdHJhaW50LmZpbmlzaFBhcmFsbGVsV29yayh2aXNpdG9yLCBtX2RpZFZpc2l0
U29tZXRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC50YWtlRmlyc3QoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIHZhbHVlKSB7
IHJldHVybiB2YWx1ZSA9PSBpbmRleFRvUnVuOyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmNsZWFyKGluZGV4VG9SdW4pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXhUb1J1
bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaWRWaXNpdFNvbWV0aGluZyB8PSBk
aWRWaXNpdFNvbWV0aGluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYWxs
ZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9S
dW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWwuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzLS07CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKLSAgICBib29sIGRp
ZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRl
eCk7IH0KLQotICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCisgICAgdm9pZCBkcmFpbihC
aXRWZWN0b3ImIHVuZXhlY3V0ZWQpCiAgICAgewotICAgICAgICBtX3NldC5tX3NldFtpbmRleF0t
PmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAg
ICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgICAgIGF1dG8gaXRlciA9IHVuZXhlY3V0
ZWQuYmVnaW4oKTsKKyAgICAgICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVkLmVuZCgpOworICAgICAg
ICBleGVjdXRlKAorICAgICAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoKTsKICAgICB9CiAgICAgCiBwcml2
YXRlOgogICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKLSAgICBTbG90VmlzaXRvciYg
bV92aXNpdG9yOwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwogICAgIEJpdFZlY3RvciBt
X2V4ZWN1dGVkOworICAgIERlcXVlPHVuc2lnbmVkPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7Cisg
ICAgQml0VmVjdG9yIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldDsKKyAgICBMb2NrIG1fbG9jazsK
KyAgICBDb25kaXRpb24gbV9jb25kaXRpb247CisgICAgdW5zaWduZWQgbV9udW1BY3RpdmVUaHJl
YWRzIHsgMCB9OwogICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07CiB9Owog
Ci1NYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICAsIG1faGVscGVyQ2xpZW50KCZoZWFwQ29uc3RyYWludFNldEhlbHBlclBv
b2woKSkKIHsKIH0KIApAQCAtMTA5LDcgKzE3Nyw3IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmRpZFN0YXJ0TWFya2kKIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJp
bmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0
aWxpdHkgdm9sYXRpbGl0eSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29u
c3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3Zl
KGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNlcXVl
bnRpYWxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3Zl
KG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOwogfQogCiB2b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjphZGQoCkBAIC0xMTgsNyArMTg2LDcgQEAgdm9pZCBNYXJraW5nQ29u
c3RyYWludFNldDo6YWRkKAogICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RG
TW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVGdW5j
dGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsK
KyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ+KFdU
Rk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVu
Y3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7
CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTE0OCw5ICsyMTYsOSBA
QCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJ
bXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1h
cmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewotICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywg
dmlzaXRvciwgdGltZW91dCk7CisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0
KCp0aGlzKTsKICAgICAKICAgICB1bnNpZ25lZCBpdGVyYXRpb24gPSBtX2l0ZXJhdGlvbisrOwog
ICAgIApAQCAtMTU5LDE2ICsyMjcsMTQgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcgogCiAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdl
IGhhdmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhlbgogICAgIC8v
IHdlIHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQu
ZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXhl
Y3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cyk7CiAgICAgCiAgICAgLy8gRmly
c3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBhbnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQncyB1bmxp
a2VseSB0byB0cmlnZ2VyIGFueSBjb25zdHJhaW50cyBvdGhlcgogICAgIC8vIHRoYW4gcm9vdHMu
CiAgICAgaWYgKGl0ZXJhdGlvbiA9PSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhl
Y3V0ZWRPdXRncm93dGhzKTsKICAgICAKICAgICAvLyBXZSB3YW50IHRvIGtlZXAgcHJlZmVycmlu
ZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVkIHRvIGJlIGZp
eHBvaW50ZWQKICAgICAvLyBldmVuIGluIGEgc3RvcC10aGUtd29ybGQgR0MgLSB1bnRpbCB0aGV5
IHN0b3AgcHJvZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBnbyB0b3RhbGx5CkBAIC0y
MTUsMjQgKzI4MSwxOCBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVy
CiAgICAgICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgpOwog
ICAgICAgICB9KTsKICAgICAKLSAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50
IDogbV9vcmRlcmVkKSB7Ci0gICAgICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkp
OwotICAgICAgICAKLSAgICAgICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFr
ZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQotICAg
ICAgICAvLyB3ZSBmaW5kIHdvcmsuCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3Vs
ZCBleGVjdXRlIGFsbCBjb25zdHJhaW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhh
dCdzCi0gICAgICAgIC8vIGJldHRlciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhp
czoKLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBydW5uaW5nLgot
ICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0
dXJuLgotICAgICAgICAvLyAtIEVsc2UgcnVuIHVudGlsIHRpbWVvdXQuCi0gICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzIKLSAgICAgICAgaWYg
KGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgYXV0byBpdGVyID0gbV9vcmRlcmVkLmJlZ2luKCk7CisgICAg
YXV0byBlbmQgPSBtX29yZGVyZWQuZW5kKCk7CisgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRl
KAorICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAg
ICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGl0ZXIg
PT0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsb3B0OworICAgICAgICAgICAgCisg
ICAgICAgICAgICByZXR1cm4gKCppdGVyKyspLT5pbmRleCgpOworICAgICAgICB9KTsKICAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI0MSw3ICszMDEsNyBAQCB2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKFNsCiB7CiAgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9
IGZhbHNlOwogICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25z
dHJhaW50LT5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1l
OjppbmZpbml0eSgpKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRW
aXNpdFNvbWV0aGluZyk7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFM
b2coIiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQg
ewogcHVibGljOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KCk7CisgICAgTWFya2luZ0NvbnN0
cmFpbnRTZXQoSGVhcCYpOwogICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgpOwogICAgIAogICAg
IHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJp
bmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4s
CiAgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAogICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSk7CiAgICAgCkBAIC02MCw5ICs2MCw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5k
IG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhh
dCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0g
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RWaXNpdG9yJiwKLSAgICAg
ICAgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7Cisg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBT
aW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAgICAg
dm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CkBAIC03MSwxNiArNjksMTggQEAgcHJpdmF0
ZToKICAgICBjbGFzcyBFeGVjdXRpb25Db250ZXh0OwogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRp
b25Db250ZXh0OwogICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90Vmlz
aXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2Vu
Y2VJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYs
IE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRl
ZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3Im
LCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZp
c2l0U29tZXRoaW5nKTsKICAgICAKKyAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1f
dW5leGVjdXRlZFJvb3RzOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOwog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKICAg
ICBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiBtX29yZGVyZWQ7CiAgICAgVmVjdG9yPE1hcmtp
bmdDb25zdHJhaW50Kj4gbV9vdXRncm93dGhzOwogICAgIHVuc2lnbmVkIG1faXRlcmF0aW9uIHsg
MSB9OworICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250YWluZXJUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01h
cmtTdGFjayhDb250YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAK
ICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHByaXZhdGU6
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBK
U0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNl
bGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIAogICAgIFNldEN1
cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCkBAIC01
ODMsMTIgKzU4MywxNCBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVz
CiAKICAgICBib29sIGlzQWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gYm9udXNUYXNrOworICAg
ICAgICAKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1f
bWFya2luZ011dGV4KTsKICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSkKICAgICAgICAgICAgICAg
ICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICAgICAg
bV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKys7Ci0KKyAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHNoYXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbikgewogICAg
ICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNF
bGFwc2VkKHRpbWVvdXQpKQpAQCAtNjI5LDI4ICs2MzEsMzkgQEAgTkVWRVJfSU5MSU5FIFNsb3RW
aXNpdG9yOjpTaGFyZWREcmFpblJlcwogCiAgICAgICAgICAgICAgICAgYXV0byBpc1JlYWR5ID0g
WyZdICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yayhsb2Nr
ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNr
CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0OwogICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICBtX2hlYXAubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwg
dGltZW91dCwgaXNSZWFkeSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KCFoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fYm9udXNW
aXNpdG9yVGFzaykKKyAgICAgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbV9oZWFwLm1fYm9u
dXNWaXNpdG9yVGFzazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9o
ZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBmb3JFYWNoTWFya1N0YWNrKAotICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkm
IHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgICAgICAgICBzdGFjay5z
dGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5n
R2xvYmFsU3RhY2soc3RhY2spLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVt
YmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghYm9udXNUYXNrKSB7CisgICAgICAgICAgICAgICAgZm9y
RWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYg
c3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFj
ay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVz
cG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZX
YWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRy
YWluKHRpbWVvdXQpOworICAgICAgICBpZiAoYm9udXNUYXNrKQorICAgICAgICAgICAgYm9udXNU
YXNrLT5ydW4oKnRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmFpbih0aW1lb3V0
KTsKKyAgICAgICAgCiAgICAgICAgIGlzQWN0aXZlID0gdHJ1ZTsKICAgICB9CiB9CkBAIC02NzYs
OSArNjg5LDEzIEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAg
ICAgICAgcmV0dXJuIGRyYWluSW5QYXJhbGxlbCh0aW1lb3V0KTsKICAgICB9CiAKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwotICAgIGRvbmF0ZUFsbChsb2Nr
ZXIpOwotICAgIAorICAgIGRvbmF0ZUFsbChob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgp
KTsKKyAgICByZXR1cm4gd2FpdEZvclRlcm1pbmF0aW9uKHRpbWVvdXQpOworfQorCitTbG90Vmlz
aXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbihN
b25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hl
YXAubV9tYXJraW5nTXV0ZXgpOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKGhhc0VsYXBz
ZWQodGltZW91dCkpCiAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVk
T3V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZp
c2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDggQEAgcHVibGljOgogCiAgICAgU2hhcmVk
RHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOwogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJh
bGxlbFBhc3NpdmVseShNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKKyAgICAKKyAgICBTaGFyZWREcmFpblJlc3VsdCB3YWl0Rm9yVGVybWluYXRpb24o
TW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAg
ICAvLyBBdHRlbXB0cyB0byBwZXJmb3JtIGFuIGluY3JlbWVudCBvZiBkcmFpbmluZyB0aGF0IGlu
dm9sdmVzIG9ubHkgd2Fsa2luZyBgYnl0ZXNgIHdvcnRoIG9mIGRhdGEuIFRoaXMKICAgICAvLyBp
cyBsaWtlbHkgdG8gYWNjaWRlbnRhbGx5IHdhbGsgbW9yZSBvciBsZXNzIHRoYW4gdGhhdC4gSXQg
d2lsbCB1c3VhbGx5IG1hcmsgbW9yZSB0aGFuIGJ5dGVzLiBJdCBtYXkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNsb3RW
aXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgeworcHVi
bGljOgorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgOiBt
X2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgc2l6ZV90IHZpc2l0Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgewor
ICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdENvdW50KCkgLSBtX2luaXRpYWxWaXNpdENvdW50
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQg
eyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyAr
MTExLDcgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpz
VmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZENvbmN1cnJlbnRseShtYXJr
aW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChjb250YWluZXIuaXNN
YXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxK
U1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
MjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwMSwxNCArMTEwMSwxNCBAQCBib29sIFN0cnVjdHVyZTo6aXND
aGVhcER1cmluZ0dDKCkKICAgICAvLyBoYXMgYW55IGxhcmdlIHByb3BlcnR5IG5hbWVzLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTczMzQKICAgICAK
LSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAh
c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoc3Rv
cmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBI
ZWFwOjppc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAgICYmIChoYXNQb2x5
UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWQoc3Rv
cmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNDaGVhcER1cmluZ0dDKCkpCi0g
ICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKTsKKyAgICAgICAg
cmV0dXJuIEhlYXA6OmlzTWFya2VkKHRoaXMpOwogICAgIAogICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9B
dG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lv
biAyMjUwODQpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0NiwxMSArMzQ2LDE2IEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVwZW5kZW5j
eSgKICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA4Pjo6dHlwZSogPSBudWxscHRyPgordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVl
KQogewogICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDY0X3QgY29weSA9IGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4odmFsdWUpOworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDMyX3Qg
Y29weTsKKyAgICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5ID0gMDsKKyAgICB1
LnZhbHVlID0gdmFsdWU7CiAjaWYgQ1BVKEFSTTY0KQogICAgIC8vIENyZWF0ZSBhIG1hZ2ljYWwg
emVybyB2YWx1ZSB0aHJvdWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRpb24KICAg
ICAvLyBpc24ndCB2aXNpYmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVz
YWJsZSBhcyBhbiBvZmZzZXQgaW4KQEAgLTM2MywxMSArMzY4LDExIEBAIEFMV0FZU19JTkxJTkUg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmEKICAgICAvLyBvciBhbiBhY3F1aXJlIGxvYWQuCiAg
ICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgogICAgICAgICA6IFtk
ZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwor
ICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBhc20oImVv
ciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9
ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2lu
XSAiciIodS5jb3B5KSk7CiAjZWxzZQogICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZv
ciB0aGlzIGFyY2hpdGVjdHVyZS4KICAgICBsb2FkTG9hZEZlbmNlKCk7CkBAIC0zNzcsNjYgKzM4
Miw2IEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmEKICAgICByZXR1
cm4gZGVwZW5kZW5jeTsKIH0KIAotLy8gRklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRp
Y2FsIHRvIHRoZSBvdGhlciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0vLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+
Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHVu
c2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50
MzJfdD4odmFsdWUpOwotI2lmIENQVShBUk02NCkKLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5
XSwgJXdbaW5dLCAld1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5j
eSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgi
ZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0g
Ij1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAg
bG9hZExvYWRGZW5jZSgpOwotICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShj
b3B5KTsKLSNlbmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5OwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDI+Ojp0eXBlKiA9
IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQot
ewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9m
KFQpID09IDE+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVw
ZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVp
bnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IERlcGVu
ZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5V2l0aCgpCi0gICAgICAgIDogZGVw
ZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAsIHZhbHVlKCkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3Qg
VCYgdmFsdWUpCi0gICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQotICAgICAgICAsIHZh
bHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
OwotICAgIFQgdmFsdWU7Ci19OwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBE
ZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNv
bnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5
LCB2YWx1ZSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogY29uc3VtZShU
KiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAko
cmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwOCw2ICszMDgsMTMgQEAgcHVibGljOiAKICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgICAgfQogCisgICAgICAgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAg
ICAgICB7CisgICAgICAgICAgICBpdGVyYXRvciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgICAg
ICsrKCp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1dDsKKyAgICAgICAgfQorCiAgICAg
ICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIyNTA4
NCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsx
MDAsMTEgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+
CiAgICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25zdCBGdW5jJik7CiAgICAgCisgICAg
Ly8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxs
YmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlm
IGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgorICAgIFQgdGFrZUZpcnN0KGNvbnN0IEZ1bmMmKTsKKwogICAgIC8vIFJlbW92
ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1
cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKICAgICAvLyBUIGlmIGl0IHRoZSBj
YWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgpAQCAtNTcxLDYgKzU3NiwyNSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT46OmFwCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46
OnRha2VGaXJzdChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsK
KyAgICB1bnNpZ25lZCBzaXplID0gdGhpcy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8IHNp
emUpIHsKKyAgICAgICAgVCBjYW5kaWRhdGUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKGZ1
bmMoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAg
ICAgICAgcHJlcGVuZCh0YWtlTGFzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7
CisgICAgICAgIH0KKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUoY2Fu
ZGlkYXRlKSk7CisgICAgfQorICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBpbmxp
bmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMp
CiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327521</attachid>
            <date>2017-11-23 19:50:52 -0800</date>
            <delta_ts>2017-11-24 14:23:25 -0800</delta_ts>
            <desc>I&apos;m starting to like the algorithm</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>68059</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5n
Q29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKLSNpbmNsdWRlICJWaXNp
dGluZ1RpbWVvdXQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNzIsMTEgKzcxLDEx
IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgKICAgICAvLyBlbHNl
IGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkgPSBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAgIGF1dG8gY29uc3Ry
YWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAorICAgIGF1dG8gY29u
c3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50PigK
ICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAg
ICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwg
IiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykp
LCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRD
YWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgewogICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01h
cmtlZCA9IGlzTWFya2VkOwogICAgICAgICAgICAgbWFya2VyLk1hcmsgPSBtYXJrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5
NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91Ymxl
Rm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZCMzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMx
RTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZp
c2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3
RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdX
b3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJMEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87
IH07CkBAIC0zMTEsNiArMzEwLDggQEAKIAkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAw
NDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovOyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMy
QUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi87
IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzcz
MUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0
RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9i
dmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgx
RTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJG
RkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTc3LDcgKzE5
NzgsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5lcy5oOyBwYXRoID0gZGZn
L0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFG
QjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMjY1LDYgKzIyNjUsOCBAQAogCQkwRjRBMzhGODFDOEUxM0RGMDAxOTAz
MTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1
cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlG
MDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsgcGF0aCA9IGIzL0IzT3Jp
Z2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MjFGQzdBOTcz
MDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3
MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2
aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJG
aXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzEx
IC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2
QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MDIsNiArNTUwNCw3IEBACiAJCQkJMEZEMEU1RTYx
RTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmggKi8sCiAJCQkJMTQ2QjE0REIxMkVC
NUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFGMjEy
RUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKKwkJCQkwRjREOEM3MzFG
QzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJMEY3REYx
MkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJCQkJMkE3
QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRCMTc0
QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjIyLDcgKzU2MjUsNyBAQAogCQkJ
CTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJs
b29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlz
aXRpbmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
aCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04
MTcyLDYgKzgxNzUsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29k
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRl
Y29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1
IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAwMUQz
MkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5
MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFk
ZXJzICovLApAQCAtODg4Nyw2ICs4ODkxLDcgQEAKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3
MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8q
IEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFG
IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0Mw
MDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTky
NTMsNyArOTI1OCw2IEBACiAJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyRDFBQTkwOTU2MDBE
MzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0OTE0NjBDQkI3
MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjFGQjM5
MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKIAogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25j
dXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgwLDcg
Kzk4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYKICAgICAK
ICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRydWU7CiAKLSAgICBpZiAoSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmdseShsb2NrZXIp
KSB7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyB0aW1lVG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTE0NywxMCArMTE0NywxMCBAQCBib29sIENvZGVC
bG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYgRU5BQkxFKERGR19KSVQpCiBzdGF0
aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
JiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQor
ICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWQodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQo
KSkpCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExODAsNyAr
MTE4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAg
ICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVj
dHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CiAgICAg
ICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG9sZFN0
cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjU0LDE0ICsxMjU0LDE0IEBAIHZvaWQg
Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7
CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPigqcmVmZXJlbmNlLT52
bSgpLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocmVmZXJlbmNlKSkg
ewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJl
ZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFy
YWxsZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7Cisg
ICAgU2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAg
ICBzd2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bDoKKyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4MSw3ICsyODEsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgLCBtX211dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNp
dG9yPigqdGhpcywgIk0iKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0ZDo6bWFrZV91
bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtl
X3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3RyYWludFNldChz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAgICAgLCBtX2hh
bmRsZVNldCh2bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9j
a1NldD4oKSkKICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1
YlJvdXRpbmVTZXQ+KCkpCkBAIC05MTEsNyArOTExLDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwogICAgIGlmICht
X211dGF0b3JTaG91bGRCZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
LSAgICAgICAgaWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICBpZiAo
IWlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxlY3Rp
b24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQgcGFz
dAogICAgICAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRv
IGFuIHVubWFya2VkIFBvc3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAgICAgICAgIC8v
IG9iamVjdCBnZXRzIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwg
Z28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTI0LDE1IEBAIHZvaWQgSGVh
cDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAgICAvLyBOb3cg
d2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgIC8vICAgICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVubWFya2VkLgot
ICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJyZW50bHkgaGVy
ZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhlcmUuCiAgICAg
ICAgICAgICAgICAgLy8gICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXllZC4KICAgICAg
ICAgICAgICAgICAvLyAgICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNrZWQuCiAgICAg
ICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3Rh
dGVTdHJvbmcgaGVyZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIElu
IHRoaXMgY2FzZSB3ZSB3b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBhZ2FpbiwgZXZl
biB0aG91Z2ggaXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2suIFRoaXMgY2hl
Y2sgbGV0cyB1cyBjb3JyZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0
aGF0Ci0gICAgICAgICAgICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29udmVyZ2VzIG1v
bm90b25pY2FsbHkgdG8gdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWRDb25jdXJy
ZW50bHkoY2VsbCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252ZXJnZXMgbW9u
b3RvbmljYWxseSB0byB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjZWxsKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3JrIG91dCB3aGV0
aGVyIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpcyBwb2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5LgogICAgICAg
ICAgICAgICAgICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNr
KTsKQEAgLTk0OCw3ICs5NDgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25z
dCBKU0NlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAg
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICAgICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRoZSBv
YmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yIG1h
eSBzZXQgdGhlCiAgICAgLy8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRoZW4gdG8gUG9z
c2libHlPbGRPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwogICAgIC8vIHJh
Y2Ugd2l0aCB0aGUgY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJh
dGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXwpAQCAtMTMwNSw3ICsxMzA1LDcgQEAgTkVWRVJf
SU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAvLyBXb25kZXJpbmcg
d2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBE
T00gYW5kIG90aGVycyBjYW4gYWxzbwogICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhl
YXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCkuCiAgICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAg
ICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9y
LCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgICAgIG1fY29uc3RyYWludFNl
dC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKGNvbnZlcmdl
ZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFzc2VydFNoYXJlZE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwpAQCAtMjU3OCw3ICsyNTc4LDcgQEAgdm9pZCBIZWFwOjphZGRD
b3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
Q3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29u
dmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2Fu
Iik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2Fu
KCk7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhp
cyk7CkBAIC0yNTkyLDcgKzI1OTIsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygp
CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBT
bWFsbCBSb290cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBj
b25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYx
Myw3ICsyNjEzLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
ICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsK
ICAgICAgICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9
LApAQCAtMjYyMSw3ICsyNjIxLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7
CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5n
UHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsK
ICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRM
b2NrKCkpOwpAQCAtMjY0MSwyMSArMjY0MSwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAi
SklUIFN0dWIgUm91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNl
TWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBt
X29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2
ZXN0ZXJzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpIHsKICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVu
dCA9IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVy
ZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjY0LDcgQEAgdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1f
Y29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTsp
CiAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRX
ZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2ODQsNyArMjY4
NCw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikgewor
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAg
aXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tz
KAogICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBp
ZiBpdCdzIGJsYWNrLgpAQCAtMjY5Nyw3ICsyNjk3LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXJt
cyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0
byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5z
aXplKCk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CkBA
IC0yODQ3LDQgKzI4NDcsMTkgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJh
Y2soYwogICAgIG1faGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7
CiB9CiAKK3ZvaWQgSGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9tYXJraW5nTXV0ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVu
VGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFz
aykKK3sKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKHRhc2spOworICAgIHRhc2stPnJ1bigqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayhudWxscHRyKTsK
KyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT53YWl0Rm9yVGVybWluYXRpb24oKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZp
c2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNCw3ICsxMTQsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNN
YXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRpYyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5
KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJz
aW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25z
dCB2b2lkKik7CkBAIC0zNTgsNiArMzU3LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFk
ZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAg
ICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2Fs
bGJhY2smKTsKKyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisg
ICAgeworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4oZnVuYykpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
QWxsb2NhdGluZ1Njb3BlOwpAQCAtNTI3LDYgKzUzNCw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKIAorICAgIHZvaWQgc2V0Qm9udXNW
aXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisgICAg
CiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1T
aXplOwogICAgIGNvbnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CkBAIC02NDIsNiArNjUx
LDcgQEAgcHJpdmF0ZToKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZpbmFsaXpl
cj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKIAogICAgIFBhcmFsbGVsSGVscGVy
Q2xpZW50IG1faGVscGVyQ2xpZW50OworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IG1fYm9udXNWaXNpdG9yVGFzazsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FH
RSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2NhdGVkIHsgMCB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCwyNSArNjgsMTUgQEAgaW5saW5lIGJvb2wgSGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0
VAogICAgIHJldHVybiBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOwog
fQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLCBzbyB0aGF0
IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJzaW9uKCkgcXVpY2tseS4KKy8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5ODgKIEFMV0FZU19JTkxJTkUgYm9vbCBI
ZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFTU0VSVChtYXlCZUdD
VGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBDZWxsKiBjZWxsID0g
Yml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwtPmlzTGFyZ2VB
bGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01h
cmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0g
ICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVj
dFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9v
bCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdDZWxsKQotewotICAg
IEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7Ci0gICAg
aWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBjZWxsLT5sYXJn
ZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwt
Pm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29uY3VycmVudGx5KAot
ICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwg
Y2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCktPmhlYXAub2JqZWN0
U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29s
IEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0
IHZvaWQqIHJhd0NlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25h
cHNob3RCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjpidWlsZFNuYXBzaG90
KAogdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBBU1NFUlQobV9wcm9maWxlci5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIoKSA9PSB0aGlzKTsK
LSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VS
VChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAKICAgICBpZiAoaGFzRXhpc3RpbmdOb2RlRm9yQ2Vs
bChjZWxsKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTGFyZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3
ICs3Niw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJl
dHVybiBtX2lzTWFya2VkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgp
OyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBDZWxsKiwgRGVwZW5kZW5j
eSkgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtl
ZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgp
OyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uLCBIZWFwQ2Vs
bCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KICAgICBib29sIGlzTGl2ZSgpIHsgcmV0dXJuIGlz
TWFya2VkKCkgfHwgaXNOZXdseUFsbG9jYXRlZCgpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNWYWxp
ZENlbGwoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZhbGlkQ2VsbDsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTgsNyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKik7
CiAgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9p
ZCopOwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqLCBEZXBl
bmRlbmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVu
Y3kpOwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtzU3RhbGUo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lXaXRoPGJvb2w+IGFy
ZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAg
ICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
bik7CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxv
Y2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21hcmtp
bmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+IE1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247Ci0g
ICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24gIT0g
bWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YWJv
dXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtp
bmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkK
ICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1cm4gcmVz
dWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9CiAKIGlu
bGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQpAQCAt
NTI0LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkUmF3KGNv
bgogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24gbWFya2lu
Z1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUobWFy
a2luZ1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5lIGJvb2wg
TWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJz
aW9uLCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdp
dGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVlKQorICAg
IEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VM
WSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5jeSk7Cisg
ICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVyc2lvbikp
OwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywyOSArMjcsMjcgQEAKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAg
IENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlv
biwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQotICAgIDogbV9hYmJyZXZp
YXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQotICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0g
ICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBt
X3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CithdXRvIE1h
cmtpbmdDb25zdHJhaW50Ojpkb0NvbnN0cmFpbnRGdW5jdGlvbihTbG90VmlzaXRvciYgdmlzaXRv
ciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CisgICAgVmlz
aXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IGZ1bmMo
KTsKKyAgICBzaXplX3QgdmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNpdENvdW50KHZpc2l0
b3IpOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
ICAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnQ7CisgICAgICAgIGRpZFZpc2l0U29t
ZXRoaW5nIHw9ICEhbV9sYXN0VmlzaXRDb3VudDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6
OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
LAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCitNYXJraW5nQ29uc3RyYWlu
dDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKICAgICA6IG1fYWJicmV2aWF0ZWRO
YW1lKGFiYnJldmlhdGVkTmFtZSkKICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwg
bV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV9xdWlj
a1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikp
CiAgICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKIHsKIH0KQEAgLTYzLDE0ICs2MSw4OSBA
QCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENv
dW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRv
ciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91
dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90
VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpCiB7CiAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOwotICAg
IFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhp
bmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5nVGlt
ZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENvdW50
KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRpZFZp
c2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAgIHJldHVybiBkb0NvbnN0cmFpbnRGdW5jdGlvbigK
KyAgICAgICAgdmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsCisgICAgICAgIFsmXSAoKSAtPiBD
b25zdHJhaW50UGFyYWxsZWxpc20geyByZXR1cm4gZXhlY3V0ZUltcGwodmlzaXRvcik7IH0pOwor
fQorCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNp
dG9yJikKK3sKKyAgICByZXR1cm4gMDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgcmV0dXJuIGxhc3RWaXNp
dENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKK30KKwordm9pZCBNYXJraW5n
Q29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRp
ZFZpc2l0U29tZXRoaW5nKQoreworICAgIGRvQ29uc3RyYWludEZ1bmN0aW9uKAorICAgICAgICB2
aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywKKyAgICAgICAgWyZdICgpIC0+IGJvb2wgeworICAg
ICAgICAgICAgZG9QYXJhbGxlbFdvcmtJbXBsKHZpc2l0b3IpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0pOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQ
YXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5n
KQoreworICAgIGRvQ29uc3RyYWludEZ1bmN0aW9uKAorICAgICAgICB2aXNpdG9yLCBkaWRWaXNp
dFNvbWV0aGluZywKKyAgICAgICAgWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgZmluaXNo
UGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9KTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBs
KFNsb3RWaXNpdG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwor
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRv
ciYpCit7Cit9CisKK1NlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6U2VxdWVudGlhbE1hcmtp
bmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
CisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIDogTWFya2luZ0NvbnN0cmFp
bnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5KQor
ICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQoreworfQor
CitTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ6OlNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWlu
dCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlv
bjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKKyAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQo
V1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5KQorICAg
ICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV9x
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
bikpCit7Cit9CisKK1NlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6flNlcXVlbnRpYWxNYXJr
aW5nQ29uc3RyYWludCgpCit7Cit9CisKK2RvdWJsZSBTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFp
bnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICgh
bV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOworfQorCitDb25zdHJhaW50
UGFyYWxsZWxpc20gU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAg
ICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIgog
I2luY2x1ZGUgIkNvbnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1l
b3V0LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
ICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTQzLDE4ICs0Myw5IEBAIGNsYXNzIE1hcmtp
bmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWlu
dCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYs
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2
aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKICAgICAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9u
PGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwot
ICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAgICAgCiAgICAg
dW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCkBAIC02NSwz
MiArNTYsNTggQEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKLSAgICB2b2lkIGV4ZWN1dGUo
U2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1l
b3V0KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZShTbG90VmlzaXRvciYsIGJv
b2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICAKKyAgICB2aXJ0dWFsIGRvdWJsZSBxdWlja1dv
cmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CiAgICAgCi0gICAgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgaWYgKCFt
X3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbih2aXNpdG9yKTsKLSAgICB9Ci0g
ICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlz
aXRvcik7Ci0gICAgfQorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpOworICAgIAorICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImLCBib29sJiBk
aWRWaXNpdFNvbWV0aGluZyk7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0
b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CiAgICAgCiAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQorCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xv
dFZpc2l0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90
VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RW
aXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cisg
ICAgYXV0byBkb0NvbnN0cmFpbnRGdW5jdGlvbihTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0
U29tZXRoaW5nLCBjb25zdCBGdW5jJik7CisgICAgCiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWdu
ZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsK
ICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBj
b25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6
OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rp
b247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5OwogICAgIHNpemVfdCBt
X2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9sb2NrOworfTsKKworY2xhc3MgU2Vx
dWVudGlhbE1hcmtpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsKK3B1
YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQo
CisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNlcXVlbnRpYWxNYXJraW5nQ29u
c3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
KyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0
aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkp
OworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFp
bnQoKTsKKyAgICAKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToKKyAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPGRv
dWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsMTAgKzM0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0IHsKIHB1YmxpYzoKLSAgICBFeGVjdXRpb25D
b250ZXh0KE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQpCisgICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3Ry
YWludFNldCYgc2V0KQogICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3Io
dmlzaXRvcikKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKICAgICB7CiAgICAgfQogICAg
IApAQCAtNDUsNDEgKzQzLDExMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9k
aWRWaXNpdFNvbWV0aGluZzsKICAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZygpICYmIGhhc0Vs
YXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBp
dCB0aW1lcyBvdXQuCi0gICAgYm9vbCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCisKKyAg
ICAvLyBwaWNrTmV4dCgpIGlzIGNhbGxlZCB3aGlsZSBhIGxvY2sgaXMgaGVsZCwgc28gaXQgY2Fu
IHByZXRlbmQgbGlrZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBtYWluCisgICAgLy8gdGhy
ZWFkLiBGb3IgZXhhbXBsZSwgaXQncyB0b3RhbGx5IHNhZmUgZm9yIHRoYXQgbGFtYmRhIHRvIGNs
b3NlIG92ZXIgdGhlIHN0YWNrLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBleGVjdXRlKGNvbnN0IEZ1bmMmIHBpY2tOZXh0KQogICAgIHsKLSAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAg
ICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZFRpbWVPdXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIG1fc2V0Lm1faGVhcC5ydW5GdW5jdGlvbkluUGFy
YWxsZWwoCisgICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAg
ICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBib29sIGRvUGFyYWxsZWxX
b3JrTW9kZTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhUb1J1bjsKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuZmlyc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBpY2tSZXN1bHQgPSBwaWNr
TmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldCgqcGlja1Jl
c3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9ICpwaWNrUmVzdWx0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9udW1BY3RpdmVUaHJlYWRzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX2xvY2spOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX251bUFjdGl2ZVRocmVhZHMrKzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1
ZW50aWFsOworICAgICAgICAgICAgICAgICAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBNYXJraW5nQ29u
c3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFtpbmRleFRvUnVuXTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxsZWxXb3JrKHZpc2l0
b3IsIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRv
ciwgZGlkVmlzaXRTb21ldGhpbmcpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludC5maW5pc2hQYXJhbGxlbFdvcmso
dmlzaXRvciwgbV9kaWRWaXNpdFNvbWV0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFy
YWxsZWwudGFrZUZpcnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZd
ICh1bnNpZ25lZCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gaW5kZXhUb1J1bjsgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5jbGVh
cihpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXhl
Y3V0ZWQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlk
VmlzaXRTb21ldGhpbmcgfD0gZGlkVmlzaXRTb21ldGhpbmc7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxs
ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFs
bGVsLmFwcGVuZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcy0t
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKICAg
ICB9CiAgICAgCi0gICAgYm9vbCBkaWRFeGVjdXRlKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9leGVjdXRlZC5nZXQoaW5kZXgpOyB9Ci0KLSAgICB2b2lkIGV4ZWN1dGUoc2l6ZV90IGlu
ZGV4KQorICAgIHZvaWQgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQogICAgIHsKLSAgICAg
ICAgbV9zZXQubV9zZXRbaW5kZXhdLT5leGVjdXRlKG1fdmlzaXRvciwgbV9kaWRWaXNpdFNvbWV0
aGluZywgbV90aW1lb3V0KTsKLSAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgICAg
ICBhdXRvIGl0ZXIgPSB1bmV4ZWN1dGVkLmJlZ2luKCk7CisgICAgICAgIGF1dG8gZW5kID0gdW5l
eGVjdXRlZC5lbmQoKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICppdGVyKys7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgdW5leGVjdXRlZC5jbGVhckFsbCgp
OwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0
OwotICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVv
dXQ7CiAgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CisgICAgRGVxdWU8dW5zaWduZWQ+IG1fdG9F
eGVjdXRlSW5QYXJhbGxlbDsKKyAgICBCaXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0
OworICAgIExvY2sgbV9sb2NrOworICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1bnNp
Z25lZCBtX251bUFjdGl2ZVRocmVhZHMgeyAwIH07CiAgICAgYm9vbCBtX2RpZFZpc2l0U29tZXRo
aW5nIHsgZmFsc2UgfTsKIH07CiAKLU1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3Ry
YWludFNldCgpCitNYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoSGVh
cCYgaGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQogewogfQogCkBAIC0xMDcsMTggKzE3NCwxOCBA
QCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRp
b24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwg
Y29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2
b2xhdGlsaXR5KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2
aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBm
dW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKIHsKLSAgICBhZGQoc3Rk
OjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUp
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFk
ZChzdGQ6Om1ha2VfdW5pcXVlPFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShh
YmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRp
bGl0eSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgQ1N0cmlu
ZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCiAgICAgOjpG
dW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwK
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQogewotICAgIGFkZChzdGQ6Om1h
a2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdU
Rk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVl
PFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKApAQCAtMTMxLDkgKzE5OCw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmFkZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYg
dmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wg
cmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBi
b29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMTQ4LDkgKzIxNSw5IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZy
b250QWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1Rp
bWUgdGltZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5j
ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgRXhlY3V0aW9uQ29udGV4dCBleGVj
dXRpb25Db250ZXh0KCp0aGlzLCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBFeGVjdXRpb25Db250
ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMpOwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlv
biA9IG1faXRlcmF0aW9uKys7CiAgICAgCkBAIC0xNTksMTYgKzIyNiwxNCBAQCBib29sIE1hcmtp
bmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAKICAgICAvLyBJZiB0aGVyZSBhcmUgYW55
IGNvbnN0cmFpbnRzIHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlz
IGN5Y2xlLCB0aGVuCiAgICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlm
ICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3Rz
KTsKICAgICAKICAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRy
YWluaW5nLCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzIG90aGVy
CiAgICAgLy8gdGhhbiByb290cy4KICAgICBpZiAoaXRlcmF0aW9uID09IDEpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4
ZWN1dGVkT3V0Z3Jvd3RocykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBleGVjdXRpb25D
b250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpOwogICAgIAogICAgIC8vIFdlIHdh
bnQgdG8ga2VlcCBwcmVmZXJyaW5nIHRoZSBvdXRncm93dGggY29uc3RyYWludHMgLSB0aGUgb25l
cyB0aGF0IG5lZWQgdG8gYmUgZml4cG9pbnRlZAogICAgIC8vIGV2ZW4gaW4gYSBzdG9wLXRoZS13
b3JsZCBHQyAtIHVudGlsIHRoZXkgc3RvcCBwcm9kdWNpbmcuIFRoZXkgaGF2ZSBhIHRlbmRlbmN5
IHRvIGdvIHRvdGFsbHkKQEAgLTIxNSwyNCArMjgwLDE4IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICAgICAgICAgIHJldHVybiBhLT52b2xhdGlsaXR5KCkg
PiBiLT52b2xhdGlsaXR5KCk7CiAgICAgICAgIH0pOwogICAgIAotICAgIGZvciAoTWFya2luZ0Nv
bnN0cmFpbnQqIGNvbnN0cmFpbnQgOiBtX29yZGVyZWQpIHsKLSAgICAgICAgc2l6ZV90IGkgPSBj
b25zdHJhaW50LT5pbmRleCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRl
eHQuZGlkRXhlY3V0ZShpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBleGVjdXRp
b25Db250ZXh0LmV4ZWN1dGUoaSk7Ci0gICAgICAgIAotICAgICAgICAvLyBPbmNlIHdlJ3JlIGlu
IGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJraW5n
IGhhcHBlbiBhbnl0aW1lCi0gICAgICAgIC8vIHdlIGZpbmQgd29yay4KLSAgICAgICAgLy8gRklY
TUU6IE1heWJlIHRoaXMgc2hvdWxkIGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVv
dXQ/IE5vdCBjbGVhciBpZiB0aGF0J3MKLSAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXli
ZSBldmVuIGJldHRlciBpcyB0aGlzOgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVt
cHR5LCBrZWVwIHJ1bm5pbmcuCi0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0
IGxlYXN0IE4gdGhpbmdzLCByZXR1cm4uCi0gICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGlt
ZW91dC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NjgzMgotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBhdXRvIGl0ZXIgPSBtX29y
ZGVyZWQuYmVnaW4oKTsKKyAgICBhdXRvIGVuZCA9IG1fb3JkZXJlZC5lbmQoKTsKKyAgICBleGVj
dXRpb25Db250ZXh0LmV4ZWN1dGUoCisgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiB7CisgICAgICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0
aGluZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gKCppdGVyKysp
LT5pbmRleCgpOworICAgICAgICB9KTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI0
MSw3ICszMDAsNyBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsCiB7
CiAgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOwogICAgIGZvciAoYXV0byYgY29u
c3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IsIGRp
ZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgY29u
c3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZyk7CiAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNp
b24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgewogcHVibGljOgotICAgIE1hcmtpbmdDb25z
dHJhaW50U2V0KCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYpOwogICAgIH5NYXJr
aW5nQ29uc3RyYWludFNldCgpOwogICAgIAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CkBA
IC00MSwxMyArNDEsMTMgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKICAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiwKICAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0
b3ImKT4sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKICAgICAKQEAgLTYwLDkgKzYw
LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVk
IGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlz
CiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRy
YWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKLSAgICAgICAg
U2xvdFZpc2l0b3ImLAotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpKTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRv
ciYpOwogICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFu
eSBzaGVuYW5pZ2Fucy4KICAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKQEAgLTcx
LDEwICs2OSwxMSBAQCBwcml2YXRlOgogICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAg
ZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgCi0gICAgYm9vbCBleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBi
b29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBib29s
IGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVk
LCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAgYm9v
bCBkcmFpbihTbG90VmlzaXRvciYsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBl
eGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOwogICAgIAorICAgIEhlYXAmIG1faGVh
cDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9vdHM7CiAgICAgQml0VmVjdG9yIG1fdW5l
eGVjdXRlZE91dGdyb3d0aHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29u
c3RyYWludD4+IG1fc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNyArMjc3LDcgQEAgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZQogdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGFpbmVyVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9N
YXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAg
QVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAgICAg
CiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKQEAgLTM0Niw3ICszNDYsNyBAQCBwcml2YXRl
OgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3Qg
SlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShj
ZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAKICAgICBTZXRD
dXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwogICAgIApAQCAt
NTgzLDEyICs1ODMsMTQgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJl
cwogCiAgICAgYm9vbCBpc0FjdGl2ZSA9IGZhbHNlOwogICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGJvbnVzVGFzazsKKyAg
ICAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5t
X21hcmtpbmdNdXRleCk7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVh
cC5tX21hcmtpbmdNdXRleCk7CiAgICAgICAgICAgICBpZiAoaXNBY3RpdmUpCiAgICAgICAgICAg
ICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAg
ICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycysrOwotCisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4pIHsK
ICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzRWxhcHNlZCh0aW1lb3V0KSkKQEAgLTYyOSwyOCArNjMxLDQ3IEBAIE5FVkVSX0lOTElORSBT
bG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgICAgICAgICAgICAgIGF1dG8gaXNSZWFk
eSA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmso
bG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fYm9udXNWaXNpdG9y
VGFzawogICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJz
U2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgbV9oZWFw
Lm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChtX2hlYXAubV9tYXJraW5nTXV0
ZXgsIHRpbWVvdXQsIGlzUmVhZHkpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmICghaGFzV29yayhsb2NrZXIpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX2Jv
bnVzVmlzaXRvclRhc2spCisgICAgICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG1faGVhcC5t
X2JvbnVzVmlzaXRvclRhc2s7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZm9yRWFjaE1hcmtTdGFjaygKLSAgICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0Fy
cmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgICAgICAgICAgc3Rh
Y2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9u
ZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5t
X251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWJvbnVzVGFzaykgeworICAgICAgICAgICAgICAg
IGZvckVhY2hNYXJrU3RhY2soCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJy
YXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
cnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9oZWFwLm1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJl
ck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgaWYgKGJvbnVzVGFzaykgeworICAgICAgICAgICAg
Ym9udXNUYXNrLT5ydW4oKnRoaXMpOworCisgICAgICAgICAgICAvLyBUaGUgbWFpbiB0aHJlYWQg
Y291bGQgc3RpbGwgYmUgcnVubmluZywgYW5kIG1heSBydW4gZm9yIGEgd2hpbGUuIFVubGVzcyB3
ZSBjbGVhciB0aGUgdGFzaworICAgICAgICAgICAgLy8gb3Vyc2VsdmVzLCB3ZSB3aWxsIGtlZXAg
bG9vcGluZyBhcm91bmQgdHJ5aW5nIHRvIHJ1biB0aGUgdGFzay4KKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRl
eCk7CisgICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPT0gYm9u
dXNUYXNrKQorICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkcmFp
bih0aW1lb3V0KTsKKyAgICAgICAgCiAgICAgICAgIGlzQWN0aXZlID0gdHJ1ZTsKICAgICB9CiB9
CkBAIC02NzYsOSArNjk3LDEzIEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90
VmlzaXQKICAgICAgICAgcmV0dXJuIGRyYWluSW5QYXJhbGxlbCh0aW1lb3V0KTsKICAgICB9CiAK
LSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwotICAgIGRvbmF0
ZUFsbChsb2NrZXIpOwotICAgIAorICAgIGRvbmF0ZUFsbChob2xkTG9jayhtX2hlYXAubV9tYXJr
aW5nTXV0ZXgpKTsKKyAgICByZXR1cm4gd2FpdEZvclRlcm1pbmF0aW9uKHRpbWVvdXQpOworfQor
CitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OndhaXRGb3JUZXJt
aW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYg
KGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1
bHQ6OlRpbWVkT3V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDggQEAgcHVibGljOgogCiAg
ICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsKE1vbm90b25pY1RpbWUgdGltZW91
dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogICAgIFNoYXJlZERyYWluUmVzdWx0IGRy
YWluSW5QYXJhbGxlbFBhc3NpdmVseShNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAgICBTaGFyZWREcmFpblJlc3VsdCB3YWl0Rm9yVGVy
bWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CiAKICAgICAvLyBBdHRlbXB0cyB0byBwZXJmb3JtIGFuIGluY3JlbWVudCBvZiBkcmFpbmlu
ZyB0aGF0IGludm9sdmVzIG9ubHkgd2Fsa2luZyBgYnl0ZXNgIHdvcnRoIG9mIGRhdGEuIFRoaXMK
ICAgICAvLyBpcyBsaWtlbHkgdG8gYWNjaWRlbnRhbGx5IHdhbGsgbW9yZSBvciBsZXNzIHRoYW4g
dGhhdC4gSXQgd2lsbCB1c3VhbGx5IG1hcmsgbW9yZSB0aGFuIGJ5dGVzLiBJdCBtYXkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50
ZXIgeworcHVibGljOgorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAg
ICAgICAgOiBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgc2l6ZV90IHZpc2l0Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CisgICAgeworICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdENvdW50KCkgLSBtX2luaXRpYWxW
aXNpdENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1faW5pdGlhbFZp
c2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9uIDIyNTA4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25l
eGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBWaXNpdGluZ1RpbWVvdXQgewot
cHVibGljOgotICAgIFZpc2l0aW5nVGltZW91dCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBW
aXNpdGluZ1RpbWVvdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhp
bmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5n
KGRpZFZpc2l0U29tZXRoaW5nKQotICAgICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9y
LnZpc2l0Q291bnQoKSkKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIHNpemVfdCB2aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENv
dW50QmVmb3JlOwotICAgIH0KLQotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0
aGluZyB8fCB2aXNpdENvdW50KHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3Vs
ZFRpbWVPdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcikgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwot
ICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFs
c2UgfTsKLSAgICBzaXplX3QgbV92aXNpdENvdW50QmVmb3JlIHsgMCB9OwotICAgIE1vbm90b25p
Y1RpbWUgbV90aW1lb3V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTExLDcgKzExMSw3IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRh
aW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHdl
YWtJbXBsLT5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWRDb25jdXJy
ZW50bHkobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQorICAgICAgICBpZiAoY29u
dGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXIt
PmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNv
bnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRv
cikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDEsMTQgKzExMDEsMTQgQEAgYm9vbCBTdHJ1
Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQygpCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBu
YW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3
MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQotICAgICAgICAmJiAoaGFzUG9seVBy
b3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxP
YmplY3QgfHwgSGVhcDo6aXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAm
JiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6Omlz
TWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoIWlzQ2hlYXBEdXJp
bmdHQygpKQotICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcyk7
CisgICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZCh0aGlzKTsKICAgICAKICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNl
L1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F0b21pY3Mu
aAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL1dURi93dGYvQXRvbWljcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDYsMTEgKzM0NiwxNiBAQCBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgbnVs
bERlcGVuZGVuY3koCiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUqID0gbnVsbHB0cj4K
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3koVCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQ2NF90IGNv
cHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICB1bmlvbiB7CisgICAgICAg
IHVpbnQzMl90IGNvcHk7CisgICAgICAgIFQgdmFsdWU7CisgICAgfSB1OworICAgIHUuY29weSA9
IDA7CisgICAgdS52YWx1ZSA9IHZhbHVlOwogI2lmIENQVShBUk02NCkKICAgICAvLyBDcmVhdGUg
YSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNzZW1ibHksIHdob3NlIGNvbXB1
dGF0aW9uCiAgICAgLy8gaXNuJ3QgdmlzaWJsZSB0byB0aGUgb3B0aW1pemVyLiBUaGlzIHplcm8g
aXMgdGhlbiB1c2FibGUgYXMgYW4gb2Zmc2V0IGluCkBAIC0zNjMsODAgKzM2OCwyMCBAQCBBTFdB
WVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhCiAgICAgLy8gb3IgYW4gYWNxdWly
ZSBsb2FkLgogICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIKICAg
ICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIi
KGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbGlmIENQVShBUk0pCiAg
ICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5dIgogICAgICAgICA6IFtkZXBl
bmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAg
ICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2Vsc2UKICAgICAvLyBObyBkZXBlbmRlbmN5IGlz
IG5lZWRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCiAgICAgbG9hZExvYWRGZW5jZSgpOwogICAg
IGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKKyAgICBVTlVTRURfUEFS
QU0odS5jb3B5KTsKICNlbmRpZgogICAgIHJldHVybiBkZXBlbmRlbmN5OwogfQogCi0vLyBGSVhN
RTogVGhpcyBjb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIGRlcGVuZGVuY3ko
KSBvdmVybG9hZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Njk0MDUKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXpl
b2YoVCkgPT0gND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50
MzJfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSk7Ci0jaWYgQ1BVKEFSTTY0
KQotICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIKLSAgICAgICAg
OiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkp
KTsKLSNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVb
aW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDog
W2luXSAiciIoY29weSkpOwotI2Vsc2UKLSAgICBsb2FkTG9hZEZlbmNlKCk7Ci0gICAgZGVwZW5k
ZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOwotI2VuZGlmCi0gICAgcmV0dXJuIGRl
cGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUqID0gbnVsbHB0cj4K
LUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdpdGggewotcHVibGljOgotICAgIERl
cGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5KG51bGxEZXBlbmRlbmN5KCkpCi0g
ICAgICAgICwgdmFsdWUoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5jeVdpdGgo
RGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKLSAgICAgICAgOiBkZXBlbmRl
bmN5KGRlcGVuZGVuY3kpCi0gICAgICAgICwgdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7Ci0gICAgVCB2YWx1ZTsKLX07Ci0gICAgCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIERlcGVuZGVuY3lXaXRoPFQ+IGRlcGVuZGVuY3lX
aXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsKLX0KLQogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIGlubGluZSBUKiBjb25zdW1lKFQqIHBvaW50ZXIsIERlcGVuZGVuY3kgZGVwZW5k
ZW5jeSkKIHsKQEAgLTQ2OSwxMCArNDE0LDggQEAgQUxXQVlTX0lOTElORSBUJiBlbnN1cmVQb2lu
dGVyKEF0b21pYzxUKgogCiB1c2luZyBXVEY6OkF0b21pYzsKIHVzaW5nIFdURjo6RGVwZW5kZW5j
eTsKLXVzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmNvbnN1bWU7CiB1c2lu
ZyBXVEY6OmRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RG
OjplbnN1cmVQb2ludGVyOwogdXNpbmcgV1RGOjpudWxsRGVwZW5kZW5jeTsKIApJbmRleDogU291
cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDEzIEBAIHB1YmxpYzogCiAgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICBpdGVyYXRvciBvcGVyYXRvcisr
KGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0ID0gKnRoaXM7Cisg
ICAgICAgICAgICArKygqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisKICAgICAgICAgYm9vbCBpc0F0RW5kKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPj0gbV9iaXRWZWN0b3ItPnNpemUoKTsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2
aXNpb24gMjI1MDg0KQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlw
ZW5hbWUgRnVuYz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsK
ICAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hp
Y2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgor
ICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3QoY29uc3QgRnVuYyYpOworCiAg
ICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNh
bGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgogICAgIC8vIFQg
aWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQg
Y291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUg
KGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VGaXJzdCgpOworICAg
ICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkK
KyAgICAgICAgICAgICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOworICAgICAgICAgICAgcmV0dXJu
IGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOworICAgICAgICBhcHBlbmQo
V1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KIGlubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUxhc3QoY29uc3Qg
RnVuYyYgZnVuYykKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNp
b24gMjI1MDg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBKU1ZNQ2xpZW50
RGF0YTo6aW5pdE5vcm1hbFdvcmxkKFZNKgogICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFr
ZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAogICAgICAgICAiV2NvYyIsICJXZWJDb3JlIE91
dHB1dCBDb25zdHJhaW50cyIsCiAgICAgICAgIFt2bSwgY2xpZW50RGF0YSwgbGFzdEV4ZWN1dGlv
blZlcnNpb24gPSB2bS0+aGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpXQotICAgICAgICAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSBtdXRhYmxl
IHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24p
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327556</attachid>
            <date>2017-11-24 14:23:25 -0800</date>
            <delta_ts>2017-11-25 11:55:43 -0800</delta_ts>
            <desc>it can reliably run splay</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>72719</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5n
Q29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKLSNpbmNsdWRlICJWaXNp
dGluZ1RpbWVvdXQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNzIsMTEgKzcxLDEx
IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgKICAgICAvLyBlbHNl
IGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkgPSBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAgIGF1dG8gY29uc3Ry
YWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAorICAgIGF1dG8gY29u
c3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50PigK
ICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAg
ICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwg
IiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykp
LCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRD
YWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgewogICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01h
cmtlZCA9IGlzTWFya2VkOwogICAgICAgICAgICAgbWFya2VyLk1hcmsgPSBtYXJrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5
NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91Ymxl
Rm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZCMzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMx
RTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZp
c2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3
RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdX
b3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJMEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87
IH07CkBAIC0zMTEsNiArMzEwLDggQEAKIAkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAw
NDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovOyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMy
QUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi87
IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzcz
MUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0
RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9i
dmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgx
RTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJG
RkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTc3LDcgKzE5
NzgsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5lcy5oOyBwYXRoID0gZGZn
L0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFG
QjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMjY1LDYgKzIyNjUsOCBAQAogCQkwRjRBMzhGODFDOEUxM0RGMDAxOTAz
MTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1
cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlG
MDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsgcGF0aCA9IGIzL0IzT3Jp
Z2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MjFGQzdBOTcz
MDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3
MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2
aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJG
aXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzEx
IC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2
QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MDIsNiArNTUwNCw3IEBACiAJCQkJMEZEMEU1RTYx
RTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmggKi8sCiAJCQkJMTQ2QjE0REIxMkVC
NUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFGMjEy
RUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKKwkJCQkwRjREOEM3MzFG
QzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJMEY3REYx
MkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJCQkJMkE3
QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRCMTc0
QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjIyLDcgKzU2MjUsNyBAQAogCQkJ
CTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJs
b29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlz
aXRpbmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
aCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04
MTcyLDYgKzgxNzUsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29k
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRl
Y29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1
IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAwMUQz
MkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5
MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFk
ZXJzICovLApAQCAtODg4Nyw2ICs4ODkxLDcgQEAKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3
MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8q
IEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFG
IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0Mw
MDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTky
NTMsNyArOTI1OCw2IEBACiAJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyRDFBQTkwOTU2MDBE
MzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0OTE0NjBDQkI3
MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjFGQjM5
MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKIAogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25j
dXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgwLDcg
Kzk4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYKICAgICAK
ICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRydWU7CiAKLSAgICBpZiAoSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmdseShsb2NrZXIp
KSB7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyB0aW1lVG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTE0NywxMCArMTE0NywxMCBAQCBib29sIENvZGVC
bG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYgRU5BQkxFKERGR19KSVQpCiBzdGF0
aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
JiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQor
ICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWQodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQo
KSkpCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExODAsNyAr
MTE4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAg
ICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVj
dHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CiAgICAg
ICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG9sZFN0
cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjU0LDE0ICsxMjU0LDE0IEBAIHZvaWQg
Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7
CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPigqcmVmZXJlbmNlLT52
bSgpLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocmVmZXJlbmNlKSkg
ewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJl
ZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFy
YWxsZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7Cisg
ICAgU2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAg
ICBzd2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bDoKKyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4MSw3ICsyODEsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgLCBtX211dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNp
dG9yPigqdGhpcywgIk0iKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0ZDo6bWFrZV91
bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtl
X3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3RyYWludFNldChz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAgICAgLCBtX2hh
bmRsZVNldCh2bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9j
a1NldD4oKSkKICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1
YlJvdXRpbmVTZXQ+KCkpCkBAIC05MTEsNyArOTExLDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwogICAgIGlmICht
X211dGF0b3JTaG91bGRCZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
LSAgICAgICAgaWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICBpZiAo
IWlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxlY3Rp
b24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQgcGFz
dAogICAgICAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRv
IGFuIHVubWFya2VkIFBvc3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAgICAgICAgIC8v
IG9iamVjdCBnZXRzIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwg
Z28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTI0LDE1IEBAIHZvaWQgSGVh
cDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAgICAvLyBOb3cg
d2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgIC8vICAgICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVubWFya2VkLgot
ICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJyZW50bHkgaGVy
ZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhlcmUuCiAgICAg
ICAgICAgICAgICAgLy8gICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXllZC4KICAgICAg
ICAgICAgICAgICAvLyAgICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNrZWQuCiAgICAg
ICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3Rh
dGVTdHJvbmcgaGVyZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIElu
IHRoaXMgY2FzZSB3ZSB3b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBhZ2FpbiwgZXZl
biB0aG91Z2ggaXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2suIFRoaXMgY2hl
Y2sgbGV0cyB1cyBjb3JyZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0
aGF0Ci0gICAgICAgICAgICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29udmVyZ2VzIG1v
bm90b25pY2FsbHkgdG8gdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWRDb25jdXJy
ZW50bHkoY2VsbCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252ZXJnZXMgbW9u
b3RvbmljYWxseSB0byB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjZWxsKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3JrIG91dCB3aGV0
aGVyIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpcyBwb2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5LgogICAgICAg
ICAgICAgICAgICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNr
KTsKQEAgLTk0OCw3ICs5NDgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25z
dCBKU0NlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAg
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICAgICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRoZSBv
YmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yIG1h
eSBzZXQgdGhlCiAgICAgLy8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRoZW4gdG8gUG9z
c2libHlPbGRPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwogICAgIC8vIHJh
Y2Ugd2l0aCB0aGUgY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJh
dGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXwpAQCAtMTMwNSw3ICsxMzA1LDcgQEAgTkVWRVJf
SU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAvLyBXb25kZXJpbmcg
d2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBE
T00gYW5kIG90aGVycyBjYW4gYWxzbwogICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhl
YXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCkuCiAgICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAg
ICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9y
LCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgICAgIG1fY29uc3RyYWludFNl
dC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKGNvbnZlcmdl
ZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFzc2VydFNoYXJlZE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwpAQCAtMjU3OCw3ICsyNTc4LDcgQEAgdm9pZCBIZWFwOjphZGRD
b3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
Q3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29u
dmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2Fu
Iik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2Fu
KCk7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhp
cyk7CkBAIC0yNTg4LDExICsyNTg4LDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290
cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOwog
ICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisg
ICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVk
U2V0KCptX3ZtLCBzbG90VmlzaXRvcik7CiAjZW5kaWYKQEAgLTI2MDksMTkgKzI2MTAsMjEgQEAg
dm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgc2xvdFZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAg
fSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1f
aGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBt
X2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAg
ICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2Ft
cGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2Ft
cGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2MzcsMzQgKzI2NDAsMzggQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3Zt
LT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAotICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikgewor
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAg
bV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsK
ICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAor
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQo
CiAgICAgICAgICJXcmgiLCAiV2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAg
ICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsK
ICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2lu
Zyk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdv
cmtsaXN0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29y
a2xpc3RzKCk7IGktLTspCiAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9y
SW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAK
QEAgLTI2NzksMTIgKzI2ODYsMTMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQog
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7
CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtp
bmcpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICNlbmRpZgogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xk
aW5nTG9ja3MoCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewog
ICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWlu
dCBvbmx5IGlmIGl0J3MgYmxhY2suCkBAIC0yNjkzLDExICsyNzAxLDEyIEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9y
LnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOworICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkLAorICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKICAgICAgICAgIk1ybXMiLCAiTXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAg
ICAgLy8gSW5kaWNhdGUgdG8gdGhlIGZpeHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQog
ICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1f
cmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNp
dENvdW50KHNpemUpOwpAQCAtMjcxMSw3ICsyNzIwLDggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKICAg
ICAgICAgICAgIHJldHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtT
dGFjay0+c2l6ZSgpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVk
QnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwog
fQogCiB2b2lkIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJr
aW5nQ29uc3RyYWludD4gY29uc3RyYWludCkKQEAgLTI4NDcsNCArMjg1NywyNCBAQCB2b2lkIEhl
YXA6OnJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9oZWFwRmluYWxpemVyQ2Fs
bGJhY2tzLnJlbW92ZUZpcnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBIZWFwOjpzZXRCb251c1Zp
c2l0b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgbV9ib251
c1Zpc2l0b3JUYXNrID0gdGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3Rp
ZnlBbGwoKTsKK30KKwordm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxS
ZWZDb3VudCA9IHRhc2stPnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayh0YXNr
KTsKKyAgICB0YXNrLT5ydW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIHNldEJvbnVz
VmlzaXRvclRhc2sobnVsbHB0cik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbWFya2luZ011dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2stPnJlZkNvdW50KCkgPiBp
bml0aWFsUmVmQ291bnQpCisgICAgICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53
YWl0KG1fbWFya2luZ011dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0
LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RpbWVDaGVja1Jlc29s
dXRpb24gPSAxNjsKIAogICAgIHN0YXRpYyBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKLSAg
ICBzdGF0aWMgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKik7CiAgICAgc3Rh
dGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChIZWFwVmVyc2lvbiwgY29uc3Qgdm9pZCopOwogICAg
IAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwpAQCAtMzU4LDYgKzM1
NywxNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRIZWFwRmluYWxpemVyQ2FsbGJhY2so
Y29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CiAgICAgdm9pZCByZW1vdmVIZWFwRmluYWxp
emVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CisgICAgCisgICAgdm9p
ZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
Pik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIHJ1bkZ1bmN0
aW9uSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgcnVuVGFza0lu
UGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+KGZ1bmMpKTsKKyAg
ICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpbmdTY29wZTsKQEAgLTUy
Nyw2ICs1MzQsOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgYXNzZXJ0U2hhcmVkTWFya1N0
YWNrc0VtcHR5KCk7CiAKKyAgICB2b2lkIHNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pOworICAgIAogICAgIGNvbnN0IEhlYXBUeXBlIG1f
aGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3Qg
bV9taW5CeXRlc1BlckN5Y2xlOwpAQCAtNjQyLDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgTGlz
dGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25h
bEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsK
KyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlzaXRv
clRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxvY2tC
eXRlc0FsbG9jYXRlZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cElubGluZXMuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDE1IEBAIGlubGlu
ZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFQKICAgICByZXR1cm4gbV9jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5n
VmVyc2lvbigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9p
ZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlw
ZTo6SGVscGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+
KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICBy
ZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9j
ayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtl
ZCgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9u
KCksIGNlbGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkoY29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdp
c2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2Nh
dGlvbigpKQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQo
KTsKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJl
dHVybiBibG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVh
cC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9j
ay5pc01hcmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24o
KSwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2Vk
KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5j
cHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBT
bmFwc2hvdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQg
SGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQgSGVhcFNuYXBzaG90QnVp
bGRlcjo6YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZXIu
YWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkp
OwogCiAgICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5o
CShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFs
bG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAg
QUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFy
a2VkKEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7
IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNp
b24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgp
OyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxv
Y2F0ZWQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNWYWxpZENlbGw7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw2IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFya2Vk
Q29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAg
ICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgYm9vbCB0ZXN0
QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICAgICAgCkBAIC0yODAs
NyArMjc5LDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBhcmVNYXJr
c1N0YWxlKCk7CiAgICAgYm9vbCBhcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJz
aW9uKTsKLSAgICBEZXBlbmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVu
Y3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIAogICAgIERlcGVuZGVuY3kgYWJv
dXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKQEAgLTQ5OCwx
OCArNDk2LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKEgKICAg
ICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAotQUxXQVlT
X0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdp
dGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQotewotICAgIEhlYXBWZXJz
aW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwotICAgIHJldHVybiBkZXBlbmRlbmN5V2l0
aChkZXBlbmRlbmN5KHZlcnNpb24pLCB2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKTsKLX0KLQog
aW5saW5lIERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBl
bmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkocmVzdWx0LnZhbHVlKSkK
KyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5M
SUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFib3V0VG9NYXJrU2xv
dyhtYXJraW5nVmVyc2lvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRlbmN5OworICAgIHJl
dHVybiBkZXBlbmRlbmN5KHZlcnNpb24pOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjphc3NlcnRNYXJrc05vdFN0YWxlKCkKQEAgLTUyNCwxNSArNTE2LDEwIEBAIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyhjb24KIAogaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBw
KQogewotICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSA/IGZhbHNlIDog
aXNNYXJrZWRSYXcocCk7Ci19Ci0KLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZENv
bmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKLXsK
LSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVy
c2lvbik7Ci0gICAgaWYgKHJlc3VsdC52YWx1ZSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0g
bV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVy
c2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRv
bU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworICAgIHJldHVybiBtX21hcmtzLmdldChh
dG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KHZlcnNpb24pKTsKIH0KIAogaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dC5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3LDI4IEBACiAj
aW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLU1hcmtpbmdD
b25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0
aWxpdHkgdm9sYXRpbGl0eSkKLSAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFt
ZSkKLSAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24o
V1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9Db25z
dHJhaW50RnVuY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRo
aW5nLCBjb25zdCBGdW5jJiBmdW5jKQogeworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIo
dmlzaXRvcik7CisgICAgZnVuYygpOworICAgIHNpemVfdCB2aXNpdENvdW50ID0gdmlzaXRDb3Vu
dGVyLnZpc2l0Q291bnQodmlzaXRvcik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7CisgICAgICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudDsK
KyAgICAgICAgZGlkVmlzaXRTb21ldGhpbmcgfD0gISFtX2xhc3RWaXNpdENvdW50OworICAgIH0K
IH0KIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6
OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
LAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCitNYXJraW5nQ29uc3RyYWlu
dDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtKQogICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQog
ICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZN
b3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24o
V1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkKICAgICAsIG1fdm9sYXRpbGl0eSh2
b2xhdGlsaXR5KQorICAgICwgbV9wYXJhbGxlbGlzbShwYXJhbGxlbGlzbSkKIHsKIH0KIApAQCAt
NjMsMTQgKzYxLDg5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAg
IG1fbGFzdFZpc2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVj
dXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KQorQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtpbmdDb25zdHJhaW50
OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZykK
IHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRl
ZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBk
aWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRv
ciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1l
b3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGlu
Z1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZp
c2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcmVzdWx0ID0g
ZXhlY3V0ZUltcGwodmlzaXRvcik7CisgICAgc2l6ZV90IHZpc2l0Q291bnQgPSB2aXNpdENvdW50
ZXIudmlzaXRDb3VudCh2aXNpdG9yKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnQ7Cisg
ICAgICAgIGRpZFZpc2l0U29tZXRoaW5nIHw9ICEhdmlzaXRDb3VudDsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3Rp
bWF0ZShTbG90VmlzaXRvciYpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBNYXJraW5n
Q29uc3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHJl
dHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Cit9CisK
K3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZykKK3sKKyAgICBkb0NvbnN0cmFpbnRGdW5jdGlv
bigKKyAgICAgICAgdmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsCisgICAgICAgIFsmXSAoKSB7
IGRvUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsgfSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlk
VmlzaXRTb21ldGhpbmcpCit7CisgICAgZG9Db25zdHJhaW50RnVuY3Rpb24oCisgICAgICAgIHZp
c2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLAorICAgICAgICBbJl0gKCkgeyBmaW5pc2hQYXJhbGxl
bFdvcmtJbXBsKHZpc2l0b3IpOyB9KTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9Q
YXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExB
VEZPUk0oKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3Jr
SW1wbChTbG90VmlzaXRvciYpCit7Cit9CisKK1NlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6
U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1
dGVGdW5jdGlvbiwKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJh
aW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZN
b3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIHBhcmFsbGVs
aXNtKQorICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQor
eworfQorCitTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ6OlNlcXVlbnRpYWxNYXJraW5nQ29u
c3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpG
dW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwK
KyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxp
c20gcGFyYWxsZWxpc20pCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlh
dGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKQorICAgICwg
bV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV9xdWlj
a1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikp
Cit7Cit9CisKK1NlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6flNlcXVlbnRpYWxNYXJraW5n
Q29uc3RyYWludCgpCit7Cit9CisKK2RvdWJsZSBTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ6
OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICghbV9x
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOworfQorCitDb25zdHJhaW50UGFy
YWxsZWxpc20gU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICBy
ZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnQuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIgogI2lu
Y2x1ZGUgIkNvbnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0
LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTQzLDE4ICs0Myw5IEBAIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwot
ICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6
RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHksIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1hcmtpbmdD
b25zdHJhaW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWFya2luZ0NvbnN0
cmFpbnQoKTsKICAgICAKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXg7IH0KICAgICAKQEAgLTY1LDMyICs1Niw2MiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90
IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAg
IAotICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5n
LCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVj
dXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAgIAorICAgIHZp
cnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAg
ICAKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKICAgICAK
LSAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAg
ewotICAgICAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZp
c2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlj
a1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKLSAgICB9CisgICAgdm9pZCBkb1BhcmFsbGVsV29yayhT
bG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICB2b2lkIGZpbmlzaFBh
cmFsbGVsV29yayhTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAK
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92
b2xhdGlsaXR5OyB9CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBD
b25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2
YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBkb0NvbnN0cmFpbnRG
dW5jdGlvbihTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBjb25zdCBGdW5j
Jik7CisgICAgCiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBp
dCBjYW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFY
IH07CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsK
LSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
IHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90
VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFs
bGVsaXNtOwogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9s
b2NrOworfTsKKworY2xhc3MgU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50IDogcHVibGljIE1h
cmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTZXF1ZW50
aWFsTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9S
VF9QUklWQVRFIFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwK
KyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VY
UE9SVF9QUklWQVRFIH5TZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICBk
b3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlOwor
ICAgIAorcHJpdmF0ZToKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xv
dFZpc2l0b3ImKSBvdmVycmlkZTsKKworICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYp
PiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYp
PiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVj
dXRpb25Db250ZXh0IHsKIHB1YmxpYzoKLSAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25z
dHJhaW50U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCisgICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0KQogICAg
ICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAg
LCBtX3RpbWVvdXQodGltZW91dCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNDUsNDEgKzQzLDEy
OCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZzsK
ICAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZygpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCB0aW1lcyBvdXQuCi0gICAg
Ym9vbCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCisKKyAgICAvLyBwaWNrTmV4dCgpIGlz
IGNhbGxlZCB3aGlsZSBhIGxvY2sgaXMgaGVsZCwgc28gaXQgY2FuIHByZXRlbmQgbGlrZSBpdCdz
IGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBtYWluCisgICAgLy8gdGhyZWFkLiBGb3IgZXhhbXBsZSwg
aXQncyB0b3RhbGx5IHNhZmUgZm9yIHRoYXQgbGFtYmRhIHRvIGNsb3NlIG92ZXIgdGhlIHN0YWNr
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBleGVjdXRlKGNvbnN0IEZ1
bmMmIHBpY2tOZXh0KQogICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1
dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAgICAgICAgICAgIHVuZXhlY3V0
ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fc2V0Lm1faGVhcC5ydW5GdW5jdGlv
bkluUGFyYWxsZWwoCisgICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBib29sIGRvUGFy
YWxsZWxXb3JrTW9kZTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhUb1J1bjsK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuZmlyc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBpY2tSZXN1bHQg
PSBwaWNrTmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldCgq
cGlja1Jlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNv
bnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbKnBpY2tSZXN1bHRdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY29uc3RyYWludC5wYXJhbGxlbGlzbSgpID09IENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6U2VxdWVudGlhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNrUmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9Q
YXJhbGxlbFdvcmtNb2RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbnVtQWN0aXZl
VGhyZWFkcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBBbnkgd2FpdGluZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1c3QgcnVubmluZyB0aGUg
U2xvdFZpc2l0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSSB3b25kZXIgaWYg
dGhhdCB3b3VsZCBiZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1BY3RpdmVU
aHJlYWRzKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgICAgICAgICAgYm9v
bCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9z
ZXRbaW5kZXhUb1J1bl07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Ry
YWludC5kb1BhcmFsbGVsV29yayh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsaXNtID0g
Y29uc3RyYWludC5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQu
Z2V0KGluZGV4VG9SdW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
cmFpbnQuZmluaXNoUGFyYWxsZWxXb3JrKHZpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLnRha2VGaXJzdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAodW5zaWduZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVl
ID09IGluZGV4VG9SdW47IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rv
RXhlY3V0ZUluUGFyYWxsZWxTZXQuY2xlYXIoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2RpZFZpc2l0U29tZXRoaW5nIHw9IGRpZFZpc2l0U29tZXRo
aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5k
ZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX251bUFjdGl2ZVRocmVhZHMtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29u
ZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4VG9SdW4gOiBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseSkgeworICAgICAgICAgICAgaWYgKG1f
ZXhlY3V0ZWQuZ2V0KGluZGV4VG9SdW4pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbaW5k
ZXhUb1J1bl07CisgICAgICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20g
PSBjb25zdHJhaW50LmV4ZWN1dGUoCisgICAgICAgICAgICAgICAgbV9zZXQubV9oZWFwLmNvbGxl
Y3RvclNsb3RWaXNpdG9yKCksIG1fZGlkVmlzaXRTb21ldGhpbmcpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50
aWFsKTsKKyAgICAgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4VG9SdW4pOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBib29sIGRpZEV4ZWN1dGUo
c2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0KLQot
ICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCisgICAgdm9pZCBkcmFpbihCaXRWZWN0b3Im
IHVuZXhlY3V0ZWQpCiAgICAgewotICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUo
bV92aXNpdG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4
ZWN1dGVkLnNldChpbmRleCk7CisgICAgICAgIGF1dG8gaXRlciA9IHVuZXhlY3V0ZWQuYmVnaW4o
KTsKKyAgICAgICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVkLmVuZCgpOworICAgICAgICBpZiAoaXRl
ciA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGV4ZWN1dGUoCisgICAgICAg
ICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAgICAg
IGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB1bmV4ZWN1dGVkLmNsZWFyQWxsKCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBN
YXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsK
LSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKICAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsK
KyAgICBEZXF1ZTx1bnNpZ25lZD4gbV90b0V4ZWN1dGVJblBhcmFsbGVsOworICAgIEJpdFZlY3Rv
ciBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQ7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3RvRXhl
Y3V0ZVNlcXVlbnRpYWxseTsKKyAgICBMb2NrIG1fbG9jazsKKyAgICBDb25kaXRpb24gbV9jb25k
aXRpb247CisgICAgdW5zaWduZWQgbV9udW1BY3RpdmVUaHJlYWRzIHsgMCB9OwogICAgIGJvb2wg
bV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07CiB9OwogCi1NYXJraW5nQ29uc3RyYWludFNl
dDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdD
b25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsKIH0KIApAQCAt
MTA3LDE4ICsxOTIsMTkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlkU3RhcnRNYXJr
aQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlvbiwgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFk
ZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHks
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQoc3RkOjptYWtl
X3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFkZChzdGQ6
Om1ha2VfdW5pcXVlPFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZp
YXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwg
cGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAg
IENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlv
biwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAog
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKKyAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJh
bGxlbGlzbSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4o
V1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVG
dW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0aWxpdHkp
KTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ+
KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRl
RnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5
LCBwYXJhbGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBA
IC0xMzEsOSArMjE3LDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAgIG1f
c2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9u
aWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVy
Z2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBleGVjdXRl
Q29udmVyZ2VuY2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJvb2wgcmVzdWx0ID0gZXhl
Y3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
ICAgICAgICAgZGF0YUxvZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDgsOSArMjM0
LDkgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRo
aXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29u
dGV4dCgqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRpb24r
KzsKICAgICAKQEAgLTE1OSwxNiArMjQ1LDE0IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmV4ZWN1dGVDb252ZXIKIAogICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMgdGhh
dCB3ZSBoYXZlIG5vdCBleGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4KICAg
ICAvLyB3ZSBzaG91bGQgZXhlY3V0ZSB0aG9zZSBub3cuCi0gICAgaWYgKCFleGVjdXRpb25Db250
ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpOwogICAgIAogICAgIC8v
IEZpcnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3IgZHJhaW5pbmcsIHNvIGl0J3Mg
dW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMgb3RoZXIKICAgICAvLyB0aGFuIHJv
b3RzLgogICAgIGlmIChpdGVyYXRpb24gPT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhz
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91
bmV4ZWN1dGVkT3V0Z3Jvd3Rocyk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBrZWVwIHByZWZl
cnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRoYXQgbmVlZCB0byBi
ZSBmaXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxkIEdDIC0gdW50aWwg
dGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gZ28gdG90YWxseQpA
QCAtMjE1LDMzICsyOTksMjggQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNv
bnZlcgogICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGItPnZvbGF0aWxpdHko
KTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogY29uc3Ry
YWludCA6IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0cmFpbnQtPmluZGV4
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRFeGVjdXRlKGkp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0
ZShpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29udmVyZ2VuY2UsIGl0
IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFwcGVuIGFueXRpbWUK
LSAgICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBz
aG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8gTm90IGNsZWFyIGlm
IHRoYXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2ZW4gYmV0dGVyIGlz
IHRoaXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHksIGtlZXAgcnVubmlu
Zy4KLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVhc3QgTiB0aGluZ3Ms
IHJldHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0LgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMyCi0gICAgICAg
IGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGF1dG8gaXRlciA9IG1fb3JkZXJlZC5iZWdpbigpOwor
ICAgIGF1dG8gZW5kID0gbV9vcmRlcmVkLmVuZCgpOworICAgIGV4ZWN1dGlvbkNvbnRleHQuZXhl
Y3V0ZSgKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAg
ICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiAoKml0ZXIrKyktPmluZGV4KCk7CisgICAg
ICAgIH0pOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIFJldHVybiB0cnVlIGlmIHdl
J3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlmIHdlIGRpZCBub3QgdmlzaXQgYW55dGhpbmcu
CisgICAgcmV0dXJuICFleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAK
IHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOwogICAgIGZvciAoYXV0
byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0
b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAg
ICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZyk7CiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAko
cmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgewogcHVibGljOgotICAgIE1hcmtp
bmdDb25zdHJhaW50U2V0KCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYpOwogICAg
IH5NYXJraW5nQ29uc3RyYWludFNldCgpOwogICAgIAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5n
KCk7CkBAIC00MSwxNSArNDEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0g
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAg
ICAgCiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAg
ICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYs
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJik+LAogICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpQYXJhbGxlbCk7CiAgICAgCiAgICAgdm9pZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdD
b25zdHJhaW50Pik7CiAgICAgCkBAIC02MCw5ICs2Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUg
b2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3Un
dmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RWaXNpdG9yJiwKLSAgICAgICAgTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBTaW1wbHkg
cnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAgICAgdm9pZCBl
eGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CkBAIC03MSwxMCArNzEsMTEgQEAgcHJpdmF0ZToKICAg
ICBjbGFzcyBFeGVjdXRpb25Db250ZXh0OwogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRpb25Db250
ZXh0OwogICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYs
IE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90
b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9v
bCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRW
ZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29t
ZXRoaW5nKTsKICAgICAKKyAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVj
dXRlZFJvb3RzOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNTA4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFy
a1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmIGNv
bnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1
cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICBB
U1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2Vk
KCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NF
UlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2Vs
bFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAgLTU4MywxMiArNTgzLDE0IEBAIE5FVkVSX0lO
TElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBm
YWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAg
ICAgICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0
aXZlUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRp
bmdQYXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hh
cmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02
MjksMjggKzYzMSw1MyBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVz
CiAKICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAg
ICAgfTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJs
ZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAg
ICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAg
ICAgICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNT
aG91bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6
OkRvbmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0g
ICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0
YXR1cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1h
cmtlcnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFib251c1Rhc2spIHsKKyAgICAgICAgICAgICAgICBmb3JFYWNoTWFya1N0YWNrKAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3Rh
dHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3Rh
Y2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGlu
Z1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0
aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
Kys7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMt
LTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAg
IGlmIChib251c1Rhc2spIHsKKyAgICAgICAgICAgIGJvbnVzVGFzay0+cnVuKCp0aGlzKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHdvdWxkIG5vdCBo
YXZlIHRvIGRvIHRoaXMuIEhvd2V2ZXIsIHRoZSBwYXJhbGxlbCBtYXJraW5nIGFsZ29yaXRobSB3
aWxsCisgICAgICAgICAgICAvLyBnZXQgY29uZnVzZWQgaWYgd2UgaW5pdGlhdGUgaXQgd2l0aCB0
aGUgaGVscGVyIHZpc2l0b3JzIGhhdmluZyBhbnl0aGluZyBpbiB0aGVpciBzdGFja3MuCisgICAg
ICAgICAgICBkb25hdGVBbGwoKTsKKworICAgICAgICAgICAgLy8gVGhlIG1haW4gdGhyZWFkIGNv
dWxkIHN0aWxsIGJlIHJ1bm5pbmcsIGFuZCBtYXkgcnVuIGZvciBhIHdoaWxlLiBVbmxlc3Mgd2Ug
Y2xlYXIgdGhlIHRhc2sKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcywgd2Ugd2lsbCBrZWVwIGxv
b3BpbmcgYXJvdW5kIHRyeWluZyB0byBydW4gdGhlIHRhc2suCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgp
OworICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID09IGJvbnVz
VGFzaykKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZHJhaW4odGltZW91dCk7Cisg
ICAgICAgIAogICAgICAgICBpc0FjdGl2ZSA9IHRydWU7CiAgICAgfQogfQpAQCAtNjc2LDkgKzcw
MywxMyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgICAg
IHJldHVybiBkcmFpbkluUGFyYWxsZWwodGltZW91dCk7CiAgICAgfQogCi0gICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKLSAgICBkb25hdGVBbGwobG9ja2VyKTsK
LSAgICAKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KSk7Cisg
ICAgcmV0dXJuIHdhaXRGb3JUZXJtaW5hdGlvbih0aW1lb3V0KTsKK30KKworU2xvdFZpc2l0b3I6
OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24oTW9ub3Rv
bmljVGltZSB0aW1lb3V0KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1f
bWFya2luZ011dGV4KTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRp
bWVvdXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24g
MjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw4IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZERyYWlu
UmVzdWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWxQ
YXNzaXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CisgICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQgd2FpdEZvclRlcm1pbmF0aW9uKE1vbm90
b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgLy8g
QXR0ZW1wdHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQgb2YgZHJhaW5pbmcgdGhhdCBpbnZvbHZl
cyBvbmx5IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBkYXRhLiBUaGlzCiAgICAgLy8gaXMgbGlr
ZWx5IHRvIGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3IgbGVzcyB0aGFuIHRoYXQuIEl0IHdpbGwg
dXN1YWxseSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQgbWF5CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmlzaXRDb3VudGVyIHsKK3B1YmxpYzoK
KyAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDogbV9pbml0
aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHNpemVfdCB2aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV9pbml0aWFsVmlzaXRDb3VudDsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNsb3RW
aXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoKLSAgICBW
aXNpdGluZ1RpbWVvdXQoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCi0gICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0
aGluZykKLSAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkp
Ci0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBz
aXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKLSAg
ICB9Ci0KLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRD
b3VudCh2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29t
ZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1w
cml2YXRlOgotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6
ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEs
NyBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1
ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1hcmtpbmdW
ZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtl
ZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFs
dWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjUw
ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFw
RHVyaW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAg
IHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1f
Z2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9y
ZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQ
cm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6
OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90
bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQ
cm90b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAg
ICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAgICByZXR1
cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21p
Y3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIy
NTA4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2
LDExICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5KAog
ICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9IG51bGxwdHI+Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCiB7
CiAgICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50NjRfdCBjb3B5ID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5pb24geworICAgICAgICB1aW50MzJfdCBjb3B5
OworICAgICAgICBUIHZhbHVlOworICAgIH0gdTsKKyAgICB1LmNvcHkgPSAwOworICAgIHUudmFs
dWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAgICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJv
IHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgogICAgIC8v
IGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4gdXNhYmxl
IGFzIGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICszNjgsMjAgQEAgQUxXQVlTX0lOTElORSBEZXBl
bmRlbmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4KICAgICBh
c20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCiAgICAgICAgIDogW2RlcGVu
ZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAg
ICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxpZiBDUFUoQVJNKQogICAgIGFzbSgiZW9yICVb
ZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihk
ZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJy
Iih1LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVwZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRo
aXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVuY2UoKTsKICAgICBkZXBlbmRlbmN5ID0g
MDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgVU5VU0VEX1BBUkFNKHUuY29weSk7CiAj
ZW5kaWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAotLy8gRklYTUU6IFRoaXMgY29kZSBp
cyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0v
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0
eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZh
bHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29weSA9IGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lmIENQVShBUk02NCkKLSAgICBhc20oImVv
ciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ld
ICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUo
QVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAg
OiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkp
KTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwotICAgIGRlcGVuZGVuY3kgPSAwOwotICAg
IFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5OwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQp
ID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5k
ZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5F
IERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5
KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5V2l0aCgp
Ci0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAsIHZhbHVl
KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVw
ZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5
KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5k
ZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19OwotICAgIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5
IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBEZXBlbmRlbmN5V2l0
aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxp
bmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CkBAIC00
NjksMTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUgVCYgZW5zdXJlUG9pbnRlcihBdG9taWM8VCoK
IAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6OkRlcGVuZGVuY3k7Ci11c2luZyBXVEY6
OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpjb25zdW1lOwogdXNpbmcgV1RGOjpkZXBlbmRl
bmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKIHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRl
cjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jp
dFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZp
c2lvbiAyMjUwODQpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgKyso
KnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCiAgICAgICAg
IGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIyNTA4NCkK
KysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAs
MTEgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CiAg
ICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25zdCBGdW5jJik7CiAgICAgCisgICAgLy8g
UmVtb3ZlIGFuZCByZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFj
ayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlmIGl0
IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIFQgdGFrZUZpcnN0KGNvbnN0IEZ1bmMmKTsKKwogICAgIC8vIFJlbW92ZSBh
bmQgcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5z
IHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKICAgICAvLyBUIGlmIGl0IHRoZSBjYWxs
YmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpA
QCAtNTcxLDYgKzU3NiwyNSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46
OmFwCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRh
a2VGaXJzdChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAg
ICB1bnNpZ25lZCBzaXplID0gdGhpcy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8IHNpemUp
IHsKKyAgICAgICAgVCBjYW5kaWRhdGUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKGZ1bmMo
Y2FuZGlkYXRlKSkgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAg
ICAgcHJlcGVuZCh0YWtlTGFzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7Cisg
ICAgICAgIH0KKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUoY2FuZGlk
YXRlKSk7CisgICAgfQorICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBpbmxpbmUg
VCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgSlNWTUNsaWVudERhdGE6OmluaXROb3Jt
YWxXb3JsZChWTSoKICAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtp
bmdDb25zdHJhaW50PigKICAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29uc3RyYWlu
dHMiLAogICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9uID0gdm0t
PmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7CisgICAgICAgIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIG11dGFibGUgewogICAgICAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLT5oZWFwOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaGVhcC5tdXRhdG9y
RXhlY3V0aW9uVmVyc2lvbigpID09IGxhc3RFeGVjdXRpb25WZXJzaW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327576</attachid>
            <date>2017-11-25 11:55:43 -0800</date>
            <delta_ts>2017-11-25 15:51:45 -0800</delta_ts>
            <desc>taking a shot at a better load balancer</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>77912</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5n
Q29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKLSNpbmNsdWRlICJWaXNp
dGluZ1RpbWVvdXQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNzIsMTEgKzcxLDEx
IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgKICAgICAvLyBlbHNl
IGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkgPSBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAgIGF1dG8gY29uc3Ry
YWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAorICAgIGF1dG8gY29u
c3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50PigK
ICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAg
ICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwg
IiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykp
LCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRD
YWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgewogICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01h
cmtlZCA9IGlzTWFya2VkOwogICAgICAgICAgICAgbWFya2VyLk1hcmsgPSBtYXJrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5
NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91Ymxl
Rm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZCMzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMx
RTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZp
c2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3
RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdX
b3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJMEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87
IH07CkBAIC0zMTEsNiArMzEwLDggQEAKIAkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAw
NDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovOyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMy
QUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi87
IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzcz
MUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0
RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9i
dmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgx
RTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJG
RkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTc3LDcgKzE5
NzgsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5lcy5oOyBwYXRoID0gZGZn
L0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFG
QjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMjY1LDYgKzIyNjUsOCBAQAogCQkwRjRBMzhGODFDOEUxM0RGMDAxOTAz
MTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1
cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlG
MDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsgcGF0aCA9IGIzL0IzT3Jp
Z2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MjFGQzdBOTcz
MDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3
MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2
aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJG
aXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzEx
IC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2
QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MDIsNiArNTUwNCw3IEBACiAJCQkJMEZEMEU1RTYx
RTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmggKi8sCiAJCQkJMTQ2QjE0REIxMkVC
NUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFGMjEy
RUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKKwkJCQkwRjREOEM3MzFG
QzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJMEY3REYx
MkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJCQkJMkE3
QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRCMTc0
QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjIyLDcgKzU2MjUsNyBAQAogCQkJ
CTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJs
b29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlz
aXRpbmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
aCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04
MTcyLDYgKzgxNzUsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29k
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRl
Y29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1
IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAwMUQz
MkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5
MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFk
ZXJzICovLApAQCAtODg4Nyw2ICs4ODkxLDcgQEAKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3
MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8q
IEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFG
IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0Mw
MDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTky
NTMsNyArOTI1OCw2IEBACiAJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyRDFBQTkwOTU2MDBE
MzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0OTE0NjBDQkI3
MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjFGQjM5
MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKIAogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25j
dXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgwLDcg
Kzk4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYKICAgICAK
ICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRydWU7CiAKLSAgICBpZiAoSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmdseShsb2NrZXIp
KSB7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyB0aW1lVG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTE0NywxMCArMTE0NywxMCBAQCBib29sIENvZGVC
bG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYgRU5BQkxFKERGR19KSVQpCiBzdGF0
aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
JiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQor
ICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWQodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQo
KSkpCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExODAsNyAr
MTE4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAg
ICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVj
dHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CiAgICAg
ICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG9sZFN0
cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjU0LDE0ICsxMjU0LDE0IEBAIHZvaWQg
Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7
CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPigqcmVmZXJlbmNlLT52
bSgpLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocmVmZXJlbmNlKSkg
ewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJl
ZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFy
YWxsZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7Cisg
ICAgU2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAg
ICBzd2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bDoKKyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4MSw3ICsyODEsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgLCBtX211dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNp
dG9yPigqdGhpcywgIk0iKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0ZDo6bWFrZV91
bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtl
X3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3RyYWludFNldChz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAgICAgLCBtX2hh
bmRsZVNldCh2bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9j
a1NldD4oKSkKICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1
YlJvdXRpbmVTZXQ+KCkpCkBAIC05MTEsNyArOTExLDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwogICAgIGlmICht
X211dGF0b3JTaG91bGRCZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
LSAgICAgICAgaWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICBpZiAo
IWlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxlY3Rp
b24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQgcGFz
dAogICAgICAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRv
IGFuIHVubWFya2VkIFBvc3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAgICAgICAgIC8v
IG9iamVjdCBnZXRzIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwg
Z28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTI0LDE1IEBAIHZvaWQgSGVh
cDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAgICAvLyBOb3cg
d2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgIC8vICAgICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVubWFya2VkLgot
ICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJyZW50bHkgaGVy
ZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhlcmUuCiAgICAg
ICAgICAgICAgICAgLy8gICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXllZC4KICAgICAg
ICAgICAgICAgICAvLyAgICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNrZWQuCiAgICAg
ICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3Rh
dGVTdHJvbmcgaGVyZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIElu
IHRoaXMgY2FzZSB3ZSB3b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBhZ2FpbiwgZXZl
biB0aG91Z2ggaXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2suIFRoaXMgY2hl
Y2sgbGV0cyB1cyBjb3JyZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0
aGF0Ci0gICAgICAgICAgICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29udmVyZ2VzIG1v
bm90b25pY2FsbHkgdG8gdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWRDb25jdXJy
ZW50bHkoY2VsbCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252ZXJnZXMgbW9u
b3RvbmljYWxseSB0byB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjZWxsKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3JrIG91dCB3aGV0
aGVyIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpcyBwb2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5LgogICAgICAg
ICAgICAgICAgICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNr
KTsKQEAgLTk0OCw3ICs5NDgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25z
dCBKU0NlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAg
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICAgICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRoZSBv
YmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yIG1h
eSBzZXQgdGhlCiAgICAgLy8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRoZW4gdG8gUG9z
c2libHlPbGRPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwogICAgIC8vIHJh
Y2Ugd2l0aCB0aGUgY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJh
dGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXwpAQCAtMTMwNSw3ICsxMzA1LDcgQEAgTkVWRVJf
SU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAvLyBXb25kZXJpbmcg
d2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBE
T00gYW5kIG90aGVycyBjYW4gYWxzbwogICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhl
YXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCkuCiAgICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAg
ICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9y
LCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgICAgIG1fY29uc3RyYWludFNl
dC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKGNvbnZlcmdl
ZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFzc2VydFNoYXJlZE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwpAQCAtMjU3OCw3ICsyNTc4LDcgQEAgdm9pZCBIZWFwOjphZGRD
b3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
Q3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29u
dmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2Fu
Iik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2Fu
KCk7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhp
cyk7CkBAIC0yNTg4LDExICsyNTg4LDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290
cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOwog
ICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisg
ICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVk
U2V0KCptX3ZtLCBzbG90VmlzaXRvcik7CiAjZW5kaWYKQEAgLTI2MDksMTkgKzI2MTAsMjEgQEAg
dm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgc2xvdFZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAg
fSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1f
aGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBt
X2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAg
ICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2Ft
cGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2Ft
cGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2MzcsMzQgKzI2NDAsMzggQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3Zt
LT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAotICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikgewor
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAg
bV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsK
ICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAor
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQo
CiAgICAgICAgICJXcmgiLCAiV2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAg
ICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsK
ICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2lu
Zyk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdv
cmtsaXN0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29y
a2xpc3RzKCk7IGktLTspCiAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9y
SW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAK
QEAgLTI2NzksMTIgKzI2ODYsMTMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQog
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7
CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtp
bmcpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICNlbmRpZgogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xk
aW5nTG9ja3MoCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewog
ICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWlu
dCBvbmx5IGlmIGl0J3MgYmxhY2suCkBAIC0yNjkzLDExICsyNzAxLDE1IEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9y
LnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOworICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkLAorICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKICAgICAgICAgIk1ybXMiLCAiTXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZ3JhYiBsb2NrcyB0byBmaWRkbGUgd2l0aCB0aGUg
bXV0YXRvciBtYXJrIHN0YWNrIGFuZCB0aGUgcmFjZSBzdGFjay4KKyAgICAgICAgICAgIC8vIFRo
ZSBjaGFuY2VzIG9mIGNvbnRlbnRpb24gb24gdGhvc2UgbG9ja3MgYXJlIHNsaW0sIGJ1dCB3ZSBz
aG91bGQgZG8gaXQgYW55d2F5LgorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJbmRpY2F0
ZSB0byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAgICAgICBz
aXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNr
LT5zaXplKCk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7
CkBAIC0yNzExLDcgKzI3MjMsOCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewogICAgICAgICAgICAgcmV0
dXJuIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7
CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwK
KyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiB9CiAKIHZvaWQgSGVh
cDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50
PiBjb25zdHJhaW50KQpAQCAtMjg0Nyw0ICsyODYwLDI0IEBAIHZvaWQgSGVhcDo6cmVtb3ZlSGVh
cEZpbmFsaXplckNhbGxiYWNrKGMKICAgICBtX2hlYXBGaW5hbGl6ZXJDYWxsYmFja3MucmVtb3Zl
Rmlyc3QoY2FsbGJhY2spOwogfQogCit2b2lkIEhlYXA6OnNldEJvbnVzVmlzaXRvclRhc2soUmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKKyAgICBtX2JvbnVzVmlzaXRvclRhc2sg
PSB0YXNrOworICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworfQor
Cit2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgdW5zaWduZWQgaW5pdGlhbFJlZkNvdW50ID0gdGFz
ay0+cmVmQ291bnQoKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKHRhc2spOworICAgIHRhc2st
PnJ1bigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayhu
dWxscHRyKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5n
TXV0ZXgpOworICAgICAgICB3aGlsZSAodGFzay0+cmVmQ291bnQoKSA+IGluaXRpYWxSZWZDb3Vu
dCkKKyAgICAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQobV9tYXJraW5n
TXV0ZXgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9IDE2Owog
CiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRpYyBib29s
IGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9vbCB0ZXN0
QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAgc3RhdGlj
IHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0zNTgsNiArMzU3LDE0IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmlu
YWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhj
b25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBh
cmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVs
KGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVh
dGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAgIH0KIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2NhdGluZ1Njb3BlOwpAQCAtNTI3LDYgKzUzNCw4IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsK
IAorICAgIHZvaWQgc2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+Pik7CisgICAgCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAg
ICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwogICAgIGNvbnN0IHNpemVfdCBtX21pbkJ5dGVzUGVy
Q3ljbGU7CkBAIC02NDIsNiArNjUxLDcgQEAgcHJpdmF0ZToKICAgICBMaXN0YWJsZUhhbmRsZXI8
VW5jb25kaXRpb25hbEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsK
IAogICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OworICAgIFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IG1fYm9udXNWaXNpdG9yVGFzazsKIAogI2lm
IEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2NhdGVk
IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwyNSArNjgsMTUgQEAgaW5saW5lIGJvb2wgSGVhcDo6
Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VAogICAgIHJldHVybiBtX2NvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gaW5z
dGFuY2UgbWV0aG9kLCBzbyB0aGF0IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJzaW9uKCkgcXVp
Y2tseS4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5ODgK
IEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQog
ewotICAgIEFTU0VSVChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwog
ICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAg
ICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5s
YXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNl
bGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBi
bG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2
b2lkKiByYXdDZWxsKQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBD
ZWxsKj4ocmF3Q2VsbCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtl
ZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlz
TWFya2VkQ29uY3VycmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNl
KCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJs
b2NrLnZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0K
IAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkocmV2aXNpb24g
MjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBIZWFwU25hcHNob3RC
dWlsZGVyOjpidWlsZFNuYXBzaG90KAogdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmRO
b2RlKEpTQ2VsbCogY2VsbCkKIHsKICAgICBBU1NFUlQobV9wcm9maWxlci5hY3RpdmVTbmFwc2hv
dEJ1aWxkZXIoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAKICAgICBpZiAo
aGFzRXhpc3RpbmdOb2RlRm9yQ2VsbChjZWxsKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDIy
NTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQoc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwq
KSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2Vk
KEhlYXBDZWxsKiwgRGVwZW5kZW5jeSkgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQotICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiwgSGVhcENlbGwq
KSB7IHJldHVybiBpc01hcmtlZCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2Vk
KEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KICAgICBib29s
IGlzTGl2ZSgpIHsgcmV0dXJuIGlzTWFya2VkKCkgfHwgaXNOZXdseUFsbG9jYXRlZCgpOyB9CiAg
ICAgCiAgICAgYm9vbCBoYXNWYWxpZENlbGwoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZhbGlkQ2Vs
bDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZp
c2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c01hcmtlZChjb25zdCB2b2lkKik7CiAgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbiwgY29uc3Qgdm9pZCopOwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHko
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFy
a2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQo
Y29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBw
dWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAg
ICBib29sIGFyZU1hcmtzU3RhbGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERl
cGVuZGVuY3lXaXRoPGJvb2w+IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbik7CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAg
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJr
aW5nVmVyc2lvbiAhPSBtX21hcmtpbmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVu
ZGVuY3lXaXRoPGJvb2w+IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3ko
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9
IG1fbWFya2luZ1ZlcnNpb247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3ko
dmVyc2lvbiksIHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5k
ZW5jeSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24p
CiB7Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2lu
Z1ZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJz
aW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9u
ICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJz
aW9uKTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVu
Y3kodmVyc2lvbik7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2Vy
dE1hcmtzTm90U3RhbGUoKQpAQCAtNTI0LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OmlzTWFya2VkUmF3KGNvbgogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJr
ZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0
dXJuIGFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhw
KTsKLX0KLQotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVz
dWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBp
ZiAocmVzdWx0LnZhbHVlKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJz
aW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCBy
ZXN1bHQuZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCks
IGRlcGVuZGVuY3kodmVyc2lvbikpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNN
YXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNp
b24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywzMCArMjcsMjggQEAKICNpbmNsdWRlICJNYXJr
aW5nQ29uc3RyYWludC5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZp
c2l0Q291bnRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1h
cmtpbmdDb25zdHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGls
aXR5KQotICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQotICAgICwgbV9u
YW1lKFdURk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1
dGVGdW5jdGlvbikpCi0gICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb0NvbnN0cmFpbnRGdW5jdGlv
bihTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIGNvbnN0IEZ1
bmMmIGZ1bmMpCiB7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAg
ICBmdW5jKCk7CisgICAgc2l6ZV90IHZpc2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3Vu
dCh2aXNpdG9yKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50OworICAgICAgICBkaWRW
aXNpdFNvbWV0aGluZyB8PSAhIW1fbGFzdFZpc2l0Q291bnQ7CisgICAgfQogfQogCi1NYXJraW5n
Q29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIDo6RnVuY3Rpb248ZG91
YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK01hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29u
c3RyYWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20p
CiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCiAgICAgLCBtX25hbWUo
V1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1
bmN0aW9uKSkKLSAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24pKQogICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCisg
ICAgLCBtX3BhcmFsbGVsaXNtKHBhcmFsbGVsaXNtKQogewogfQogCkBAIC02MywxNCArNjEsOTAg
QEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0VmlzaXRD
b3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCitDb25zdHJhaW50UGFyYWxsZWxpc20gTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKQogewogICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKGFiYnJldmlhdGVkTmFtZSgpKTsKLSAg
ICBWaXNpdGluZ1RpbWVvdXQgdmlzaXRpbmdUaW1lb3V0KHZpc2l0b3IsIGRpZFZpc2l0U29tZXRo
aW5nLCB0aW1lb3V0KTsKLSAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yLCB2aXNpdGluZ1Rp
bWVvdXQpOwotICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNpdGluZ1RpbWVvdXQudmlzaXRDb3Vu
dCh2aXNpdG9yKTsKLSAgICBkaWRWaXNpdFNvbWV0aGluZyA9IHZpc2l0aW5nVGltZW91dC5kaWRW
aXNpdFNvbWV0aGluZyh2aXNpdG9yKTsKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZp
c2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSByZXN1bHQgPSBleGVjdXRlSW1wbCh2
aXNpdG9yKTsKKyAgICBzaXplX3QgdmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNpdENvdW50
KHZpc2l0b3IpOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRDb3VudDsKKyAgICAgICAgbV9sYXN0
RXhlY3V0ZVBhcmFsbGVsaXNtID0gcmVzdWx0OworICAgICAgICBkaWRWaXNpdFNvbWV0aGluZyB8
PSAhIXZpc2l0Q291bnQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBN
YXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQoreworICAg
IHJldHVybiAwOworfQorCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1
aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpk
b1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhp
bmcpCit7CisgICAgZG9Db25zdHJhaW50RnVuY3Rpb24oCisgICAgICAgIHZpc2l0b3IsIGRpZFZp
c2l0U29tZXRoaW5nLAorICAgICAgICBbJl0gKCkgeyBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRv
cik7IH0pOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmso
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKQoreworICAgIGRv
Q29uc3RyYWludEZ1bmN0aW9uKAorICAgICAgICB2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywK
KyAgICAgICAgWyZdICgpIHsgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsgfSk7Cit9
CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRv
ciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQoreworfQor
CitTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ6OlNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWlu
dCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNt
KQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZN
b3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0
aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2VxdWVudGlhbE1hcmtpbmdD
b25zdHJhaW50OjpTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9y
Jik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQorICAgIDogTWFy
a2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2
b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUo
ZXhlY3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZN
b3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQoreworfQorCitTZXF1ZW50aWFsTWFya2lu
Z0NvbnN0cmFpbnQ6On5TZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQoKQoreworfQorCitkb3Vi
bGUgU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
bih2aXNpdG9yKTsKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIFNlcXVlbnRpYWxNYXJraW5n
Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9l
eGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6U2VxdWVudGlhbDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDIyNTA4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJDb25zdHJhaW50UGFyYWxsZWxpc20uaCIKICNpbmNsdWRlICJDb25zdHJhaW50Vm9sYXRpbGl0
eS5oIgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBA
IC00MywxOCArNDMsOSBAQCBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAot
ICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0g
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENT
dHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRv
ciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIE1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20pOwogICAgIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAgICAgCiAgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCkBAIC02NCwzMyArNTUs
NjggQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRTdGF0cygpOwogICAgIAogICAgIHNpemVfdCBs
YXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KKyAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbTsgfQorICAgIAorICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOwor
ICAgIAorICAgIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKTsKICAgICAKLSAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRW
aXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBkb3VibGUgd29ya0Vz
dGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3Jr
RXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBpZiAoIW1fcXVp
Y2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBy
ZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOwotICAgIH0KLSAgICAK
LSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9y
KTsKLSAgICB9CisgICAgdm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYsIGJvb2wmIGRp
ZFZpc2l0U29tZXRoaW5nKTsKKyAgICB2b2lkIGZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRv
ciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisg
ICAgLy8gSWYgdGhpcyBpcyBTZXF1ZW50aWFsLCBpdCBtZWFucyB0aGF0IHRoZSBjb25zdHJhaW50
IGhhcyB0byBiZSBydW4gc2VxdWVudGlhbGx5LCB3aXRoIG5vIGNvbmN1cnJlbnQKKyAgICAvLyBj
b25zdHJhaW50cy4KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBjb25z
dCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVh
bCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZh
dGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGRvQ29uc3RyYWludEZ1
bmN0aW9uKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIGNvbnN0IEZ1bmMm
KTsKKyAgICAKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7IC8vIFNvIGl0
IGNhbiBzZXQgbV9pbmRleC4KICAgICAKICAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVgg
fTsKICAgICBDU3RyaW5nIG1fYWJicmV2aWF0ZWROYW1lOwogICAgIENTdHJpbmcgbV9uYW1lOwot
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYg
dGltZW91dCk+IG1fZXhlY3V0ZUZ1bmN0aW9uOwotICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RW
aXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIG1fcGFyYWxs
ZWxpc207CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlz
bSB7IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwgfTsgLy8gSXQncyBhIGhldXJpc3Rp
Yywgd2UgY2FuIGJlIHdyb25nLiBUaGlzIGd1ZXNzIG9ubHkgYWZmZWN0cyB0aGUgZmlyc3QgcnVu
LgogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9sb2NrOwor
fTsKKworY2xhc3MgU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdD
b25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTZXF1ZW50aWFsTWFy
a2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5n
IG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIH5TZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICBkb3VibGUg
cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlOworICAgIAor
cHJpdmF0ZToKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKKworICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4
ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNl
dC5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25D
b250ZXh0IHsKIHB1YmxpYzoKLSAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25zdHJhaW50
U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCisg
ICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0KQogICAgICAgICA6
IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3Rp
bWVvdXQodGltZW91dCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNDYsNDAgKzQ0LDIwOSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nOwogICAgIH0KICAgICAK
LSAgICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAorICAgIGVudW0gU2NoZWR1bGVyUHJlZmVy
ZW5jZSB7CisgICAgICAgIFBhcmFsbGVsV29ya0ZpcnN0LAorICAgICAgICBOZXh0Q29uc3RyYWlu
dEZpcnN0CisgICAgfTsKKworICAgIC8vIHBpY2tOZXh0KCkgaXMgY2FsbGVkIHdoaWxlIGEgbG9j
ayBpcyBoZWxkLCBzbyBpdCBjYW4gcHJldGVuZCBsaWtlIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20g
dGhlIG1haW4KKyAgICAvLyB0aHJlYWQuIEZvciBleGFtcGxlLCBpdCdzIHRvdGFsbHkgc2FmZSBm
b3IgdGhhdCBsYW1iZGEgdG8gY2xvc2Ugb3ZlciB0aGUgc3RhY2suCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJl
bmNlLCBjb25zdCBGdW5jJiBwaWNrTmV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBkaWRWaXNp
dFNvbWV0aGluZygpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKKyAgICAgICAgbV9zZXQubV9o
ZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAgICAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpIHsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleFRvUnVuOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIHRyeVBhcmFsbGVsV29yayA9IFsmXSAoKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleFRvUnVuID0gbV90b0V4ZWN1dGVJblBhcmFsbGVsLmZpcnN0KCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlOZXh0Q29uc3RyYWludCA9IFsmXSAo
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gcGlja1Jlc3VsdCA9IHBpY2tOZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXBpY2tSZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9leGVjdXRlZC5n
ZXQoKnBpY2tSZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWlu
dCA9ICptX3NldC5tX3NldFsqcGlja1Jlc3VsdF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY29uc3RyYWludC5wYXJhbGxlbGlzbSgpID09IENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6U2VxdWVudGlhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmFwcGVuZCgqcGlja1Jlc3VsdCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleFRvUnVuID0gKnBpY2tSZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZmVy
ZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodHJ5UGFyYWxsZWxXb3JrKCkgfHwgdHJ5TmV4dENvbnN0cmFpbnQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
cnlOZXh0Q29uc3RyYWludCgpIHx8IHRyeVBhcmFsbGVsV29yaygpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbV9udW1BY3RpdmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IEFueSB3YWl0aW5nIGNvdWxkIGJlIHJlcGxhY2VkIHdp
dGgganVzdCBydW5uaW5nIHRoZSBTbG90VmlzaXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJIHdvbmRlciBpZiB0aGF0IHdvdWxkIGJlIHByb2ZpdGFibGUuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX2xvY2spOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX251bUFjdGl2ZVRocmVhZHMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworICAg
ICAgICAgICAgICAgICAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29u
c3RyYWludCA9ICptX3NldC5tX3NldFtpbmRleFRvUnVuXTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxsZWxXb3JrKHZpc2l0b3IsIGRpZFZpc2l0
U29tZXRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRvciwgZGlkVmlzaXRT
b21ldGhpbmcpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9Q
YXJhbGxlbFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9F
eGVjdXRlSW5QYXJhbGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RyYWludC5maW5pc2hQYXJhbGxlbFdvcmsodmlzaXRvciwgbV9k
aWRWaXNpdFNvbWV0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwudGFrZUZp
cnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCB2
YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gaW5kZXhUb1J1bjsgfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5jbGVhcihpbmRleFRvUnVu
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGlu
ZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlkVmlzaXRTb21ldGhp
bmcgfD0gZGlkVmlzaXRTb21ldGhpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChp
bmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJ
blBhcmFsbGVsU2V0LnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcy0tOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5KQor
ICAgICAgICAgICAgZXhlY3V0ZSgqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0pOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5iaXRDb3VudCgpKTsKICAg
ICB9CiAgICAgCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCB0aW1lcyBvdXQuCi0gICAgYm9v
bCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCisgICAgdm9pZCBkcmFpbihCaXRWZWN0b3Im
IHVuZXhlY3V0ZWQpCiAgICAgewotICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IHVuZXhlY3V0
ZWQpIHsKLSAgICAgICAgICAgIGV4ZWN1dGUoaW5kZXgpOwotICAgICAgICAgICAgdW5leGVjdXRl
ZC5jbGVhcihpbmRleCk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGltZU91dCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgICAgICBhdXRvIGVu
ZCA9IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZXhlY3V0ZSgKKyAgICAgICAgICAgIE5leHRDb25zdHJhaW50
Rmlyc3QsCisgICAgICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gewor
ICAgICAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyQWxsKCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0
ZWQuZ2V0KGluZGV4KTsgfQorICAgIHZvaWQgY29udmVyZ2UoU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBvcmRlcikKKyAgICB7CisgICAgICAg
IGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAob3JkZXIuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKIAotICAgIHZv
aWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZXhlY3V0ZSB0
aGUgZmlyc3QgY29uc3RyYWludCBzZXF1ZW50aWFsbHkgaWYgd2UgdGhpbmsgaXQgd2lsbCBxdWlj
a2x5IGdpdmUgdXMgYQorICAgICAgICAvLyByZXN1bHQuIElmIHdlIHJhbiBpdCBpbiBwYXJhbGxl
bCB0byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3ZSBtaWdodCBlbmQgdXAgaGF2aW5nIHRvIHdh
aXQgZm9yCisgICAgICAgIC8vIHRob3NlIG90aGVyIGNvbnN0cmFpbnRzIHRvIGZpbmlzaCwgd2hp
Y2ggd291bGQgYmUgYSB3YXN0ZSBvZiB0aW1lIHNpbmNlIGR1cmluZyBjb252ZXJnZW5jZSBpdCdz
CisgICAgICAgIC8vIGVtcGlyaWNhbGx5IG1vc3Qgb3B0aW1hbCB0byByZXR1cm4gdG8gZHJhaW5p
bmcgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsuIE1vc3QKKyAgICAgICAg
Ly8gY29uc3RyYWludHMgZG9uJ3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9zdCBvZiB0aGUgdGltZSwg
YW5kIHdoZW4gdGhleSBkbyBnZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQKKyAgICAgICAgLy8gdG8g
Z2VuZXJhdGUgZW5vdWdoIG9mIGl0IHRvIGZlZWQgYSBkZWNlbnQgZHJhaW5pbmcgY3ljbGUuIFRo
ZXJlZm9yZSwgcGF1c2UgdGltZXMgYXJlIGxvd2VzdCBpZgorICAgICAgICAvLyB3ZSBnZXQgdGhl
IGhlY2sgb3V0IG9mIGhlcmUgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsu
IEkgdGhpbmsgdGhhdCBwYXJ0IG9mIHdoYXQKKyAgICAgICAgLy8gbWFrZXMgdGhpcyBvcHRpbWFs
IGlzIHRoYXQgd2UgYWxzbyBuZXZlciBhYm9ydCBydW5uaW5nIGEgY29uc3RyYWludCBlYXJseSwg
c28gd2hlbiB3ZSBkbyBydW4KKyAgICAgICAgLy8gb25lLCBpdCBoYXMgYW4gb3Bwb3J0dW5pdHkg
dG8gZ2VuZXJhdGUgYXMgbXVjaCB3b3JrIGFzIGl0IHBvc3NpYmx5IGNhbi4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gU2ltaWxhciByZWFzb25pbmcgYXBwbGllcyB0byBjb25zdHJhaW50cyB0aGF0
IHRlbmQgdG8gcmV0dXJuIENvc250cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwKKyAgICAgICAg
Ly8gZnJvbSBleGVjdXRlLiBUaG9zZSBjb25zdHJhaW50cyB0eXBpY2FsbHkgaGF2ZSBhIHZlcnkg
ZmFzdC1ydW5uaW5nIGV4ZWN1dGUgZnVuY3Rpb24sIHdoaWNoIHRoZW4KKyAgICAgICAgLy8gb2Zm
bG9hZHMgYWxtb3N0IGFsbCBvZiB0aGUgd29yayB0byBhIHBhcmFsbGVsIHdvcmtlci4gSW4gdGhh
dCBjYXNlLCBpdCBtYWtlcyBzZW5zZSB0byBydW4gdGhlCisgICAgICAgIC8vIGV4ZWN1dGUgZnVu
Y3Rpb24gc2VxdWVudGlhbGx5LgorICAgICAgICBpZiAob3JkZXJbaW5kZXhdLT53b3JrRXN0aW1h
dGUodmlzaXRvcikKKyAgICAgICAgICAgIHx8IG9yZGVyW2luZGV4XS0+bGFzdEV4ZWN1dGVQYXJh
bGxlbGlzbSgpID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAg
ICAgIGV4ZWN1dGUoKm9yZGVyW2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAo
b3JkZXIuaXNFbXB0eSgpICYmIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBleGVjdXRp
b25Db250ZXh0LmV4ZWN1dGUoCisgICAgICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAg
ICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAgICAg
ICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXIuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJl
dHVybiBvcmRlcltpbmRleCsrXS0+aW5kZXgoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiAgICAg
ewotICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZp
c2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7
CisgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldChjb25zdHJhaW50LmluZGV4KCkpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBh
cmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKAorICAgICAgICAgICAgbV9zZXQubV9oZWFw
LmNvbGxlY3RvclNsb3RWaXNpdG9yKCksIG1fZGlkVmlzaXRTb21ldGhpbmcpOworICAgICAgICBk
aWRFeGVjdXRlKHBhcmFsbGVsaXNtLCBjb25zdHJhaW50LmluZGV4KCkpOwogICAgIH0KICAgICAK
IHByaXZhdGU6CisgICAgdm9pZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJh
bGxlbGlzbSwgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBtX2V4ZWN1dGVkLnNldChp
bmRleCk7CisgICAgICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsKSB7CisgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGlu
ZGV4KTsKKyAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXgpOwor
ICAgICAgICB9CisgICAgfQorICAgIAogICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsK
LSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0
OwogICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOwotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGlu
ZyB7IGZhbHNlIH07CisgICAgRGVxdWU8dW5zaWduZWQ+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsK
KyAgICBCaXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNp
Z25lZD4gbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29u
ZGl0aW9uIG1fY29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlVGhyZWFkcyB7IDAg
fTsKKyAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OyAvLyBGSVhNRTogV2Ug
bmVlZCBhIG11Y2ggYmV0dGVyIHdheSBvZiBtYW5hZ2luZyB0aGlzIGZsYWcuIFdlIHdvdWxkIHBy
ZWZlciBpZiBTbG90VmlzaXRvciBzZXQgdGhpcyBpbiByZWFsIHRpbWUuCiB9OwogCi1NYXJraW5n
Q29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkK
IHsKIH0KIApAQCAtMTA3LDE4ICsyNzQsMTkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZGlkU3RhcnRNYXJraQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29u
c3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5j
dGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBh
ZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRl
ZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOwor
ICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludD4oV1RG
TW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwg
dm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6YWRkKAogICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4
ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0
ZUZ1bmN0aW9uLAogICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29y
a0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkK
KyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAorICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5n
Q29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiks
IHZvbGF0aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTZXF1ZW50aWFsTWFya2lu
Z0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24p
LCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjphZGQoCkBAIC0xMzEsOSArMjk5LDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
YWRkKAogICAgIG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpl
eGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCByZXN1
bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJvb2wg
cmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7CkBA
IC0xNDgsOSArMzE2LDkgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRB
ZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0
aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1w
bChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlv
bkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIEV4ZWN1dGlvbkNvbnRleHQg
ZXhlY3V0aW9uQ29udGV4dCgqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0g
bV9pdGVyYXRpb24rKzsKICAgICAKQEAgLTE1OSwxNiArMzI3LDE0IEBAIGJvb2wgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKIAogICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29u
c3RyYWludHMgdGhhdCB3ZSBoYXZlIG5vdCBleGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3lj
bGUsIHRoZW4KICAgICAvLyB3ZSBzaG91bGQgZXhlY3V0ZSB0aG9zZSBub3cuCi0gICAgaWYgKCFl
eGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpOwog
ICAgIAogICAgIC8vIEZpcnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3IgZHJhaW5p
bmcsIHNvIGl0J3MgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMgb3RoZXIKICAg
ICAvLyB0aGFuIHJvb3RzLgogICAgIGlmIChpdGVyYXRpb24gPT0gMSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0
ZWRPdXRncm93dGhzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4ZWN1dGlvbkNvbnRl
eHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocyk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0
byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRo
YXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxk
IEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8g
Z28gdG90YWxseQpAQCAtMjE1LDMzICszODEsMTcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUNvbnZlcgogICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGIt
PnZvbGF0aWxpdHkoKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3Ry
YWludCogY29uc3RyYWludCA6IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0
cmFpbnQtPmluZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5k
aWRFeGVjdXRlKGkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNv
bnRleHQuZXhlY3V0ZShpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29u
dmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFw
cGVuIGFueXRpbWUKLSAgICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTog
TWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8g
Tm90IGNsZWFyIGlmIHRoYXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2
ZW4gYmV0dGVyIGlzIHRoaXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHks
IGtlZXAgcnVubmluZy4KLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVh
c3QgTiB0aGluZ3MsIHJldHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
ODMyCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGV4ZWN1dGlvbkNvbnRleHQuY29u
dmVyZ2UobV9vcmRlcmVkKTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBSZXR1cm4g
dHJ1ZSBpZiB3ZSd2ZSBjb252ZXJnZWQuIFRoYXQgaGFwcGVucyBpZiB3ZSBkaWQgbm90IHZpc2l0
IGFueXRoaW5nLgorICAgIHJldHVybiAhZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGlu
ZygpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKICAg
ICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhl
Y3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlzaXRTb21ldGhp
bmcpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0IHsKIHB1YmxpYzoK
LSAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KEhl
YXAmKTsKICAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKICAgICAKICAgICB2b2lkIGRpZFN0
YXJ0TWFya2luZygpOwpAQCAtNDEsMTUgKzQxLDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgK
ICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwK
LSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisg
ICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiwKICAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0
b3ImKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0
cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIApAQCAtNjAsOSArNjIsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0cmFpbnRz
IGFuZCBub25lIG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBhc3N1bWVz
IHRoYXQgeW91J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJl
LgotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKAotICAgICAgICBTbG90VmlzaXRvciYsCi0g
ICAgICAgIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkp
OworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAg
Ly8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgog
ICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOwpAQCAtNzEsMTAgKzcxLDExIEBAIHBy
aXZhdGU6CiAgICAgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKICAgICBmcmllbmQgY2xhc3MgRXhl
Y3V0aW9uQ29udGV4dDsKICAgICAKLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xv
dFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZl
cmdlbmNlSW1wbChTbG90VmlzaXRvciYpOwogICAgIAotICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0
b3ImLCBNb25vdG9uaWNUaW1lLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhl
Y3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICBib29sIGRyYWluKFNsb3RWaXNp
dG9yJiwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBk
aWRWaXNpdFNvbWV0aGluZyk7CiAgICAgCisgICAgSGVhcCYgbV9oZWFwOwogICAgIEJpdFZlY3Rv
ciBtX3VuZXhlY3V0ZWRSb290czsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3Ro
czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZp
c2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgog
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhDb250YWlu
ZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNN
YXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxs
KSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAKICAgICBjb250YWluZXIu
bm90ZU1hcmtlZCgpOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHByaXZhdGU6CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7
Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NF
UlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUg
Y3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCkBAIC01NjEsMTcgKzU2MSwxNiBA
QCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlk
UmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFj
aFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRp
ZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBy
ZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFs
bGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFy
a2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9y
OjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5t
X3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5
KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCk7CiB9CiAKQEAgLTU4MywxMiArNTgyLDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6
U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBi
b251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZl
KQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
LS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMr
KzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1h
c3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYzMCw1NyBAQCBO
RVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAg
ICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5t
X2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3Bh
cmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFw
Lm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAm
JiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rh
c2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZd
IChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwog
ICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAo
Ym9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSB3b3VsZCBub3QgaGF2ZSB0
byBkbyB0aGlzLiBIb3dldmVyLCB0aGUgcGFyYWxsZWwgbWFya2luZyBhbGdvcml0aG0gd2lsbAor
ICAgICAgICAgICAgLy8gZ2V0IGNvbmZ1c2VkIGlmIHdlIGluaXRpYXRlIGl0IHdpdGggdGhlIGhl
bHBlciB2aXNpdG9ycyBoYXZpbmcgYW55dGhpbmcgaW4gdGhlaXIgc3RhY2tzLgorICAgICAgICAg
ICAgLy8gQWxzbywgdGhpcyBwcm90ZWN0cyBidWdzIHRoYXQgaW52b2x2ZSByYWNlcyBiZXR3ZWVu
IHZpc2l0Q2hpbGRyZW4gYW5kIG9uZSBvZiB0aGUKKyAgICAgICAgICAgIC8vIGNvbnN0cmFpbnRz
LgorICAgICAgICAgICAgLy9kb25hdGVBbGwoKTsKKworICAgICAgICAgICAgLy8gVGhlIG1haW4g
dGhyZWFkIGNvdWxkIHN0aWxsIGJlIHJ1bm5pbmcsIGFuZCBtYXkgcnVuIGZvciBhIHdoaWxlLiBV
bmxlc3Mgd2UgY2xlYXIgdGhlIHRhc2sKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcywgd2Ugd2ls
bCBrZWVwIGxvb3BpbmcgYXJvdW5kIHRyeWluZyB0byBydW4gdGhlIHRhc2suCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJr
aW5nTXV0ZXgpOworICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNr
ID09IGJvbnVzVGFzaykKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fYm9udXNWaXNpdG9y
VGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxs
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBpc0FjdGl2ZSA9IHRydWU7CiAgICAgfQogfQpAQCAtNjc2
LDkgKzcwNiwxMyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAg
ICAgICAgIHJldHVybiBkcmFpbkluUGFyYWxsZWwodGltZW91dCk7CiAgICAgfQogCi0gICAgTG9j
a0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKLSAgICBkb25hdGVBbGwobG9j
a2VyKTsKLSAgICAKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4
KSk7CisgICAgcmV0dXJuIHdhaXRGb3JUZXJtaW5hdGlvbih0aW1lb3V0KTsKK30KKworU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24o
TW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9o
ZWFwLm1fbWFya2luZ011dGV4KTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmIChoYXNFbGFw
c2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1l
ZE91dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2
aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw4IEBAIHB1YmxpYzoKIAogICAgIFNoYXJl
ZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25v
dG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFy
YWxsZWxQYXNzaXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5m
aW5pdHkoKSk7CisgICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQgd2FpdEZvclRlcm1pbmF0aW9u
KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAg
ICAgLy8gQXR0ZW1wdHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQgb2YgZHJhaW5pbmcgdGhhdCBp
bnZvbHZlcyBvbmx5IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBkYXRhLiBUaGlzCiAgICAgLy8g
aXMgbGlrZWx5IHRvIGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3IgbGVzcyB0aGFuIHRoYXQuIEl0
IHdpbGwgdXN1YWxseSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQgbWF5CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTbG90
VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmlzaXRDb3VudGVyIHsKK3B1
YmxpYzoKKyAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDog
bV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHNpemVfdCB2aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV9pbml0aWFsVmlzaXRDb3Vu
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50
IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoK
LSAgICBWaXNpdGluZ1RpbWVvdXQoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdU
aW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNp
dFNvbWV0aGluZykKLSAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENv
dW50KCkpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBzaXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9y
ZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwg
dmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZp
c2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0g
ICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1f
dGltZW91dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3
ICsxMTEsNyBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+
anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1h
cmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5p
c01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0
PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lv
biAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjpp
c0NoZWFwRHVyaW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAg
IAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8
ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShz
dG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8
IEhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1Bv
bHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChz
dG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkK
LSAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAg
ICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlz
aW9uIDIyNTA4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQ2LDExICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRl
bmN5KAogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9IG51bGxwdHI+Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFs
dWUpCiB7CiAgICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50NjRfdCBjb3B5ID0gYml0
d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5pb24geworICAgICAgICB1aW50MzJf
dCBjb3B5OworICAgICAgICBUIHZhbHVlOworICAgIH0gdTsKKyAgICB1LmNvcHkgPSAwOworICAg
IHUudmFsdWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAgICAgLy8gQ3JlYXRlIGEgbWFnaWNh
bCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgog
ICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4g
dXNhYmxlIGFzIGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICszNjgsMjAgQEAgQUxXQVlTX0lOTElO
RSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4K
ICAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCiAgICAgICAgIDog
W2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7
CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxpZiBDUFUoQVJNKQogICAgIGFzbSgi
ZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0g
Ij1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBb
aW5dICJyIih1LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVwZW5kZW5jeSBpcyBuZWVkZWQg
Zm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVuY2UoKTsKICAgICBkZXBlbmRl
bmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgVU5VU0VEX1BBUkFNKHUuY29w
eSk7CiAjZW5kaWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAotLy8gRklYTUU6IFRoaXMg
Y29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBlbmRlbmN5KCkgb3Zlcmxv
YWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09
IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5j
eShUIHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29w
eSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lmIENQVShBUk02NCkKLSAgICBh
c20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0gICAgICAgIDogW2RlcGVu
ZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxp
ZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAg
ICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIi
KGNvcHkpKTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwotICAgIGRlcGVuZGVuY3kgPSAw
OwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6
ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0
PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNf
SU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBl
bmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5
V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAs
IHZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVu
Y3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDogZGVwZW5kZW5jeShkZXBl
bmRlbmN5KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19OwotICAgIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRlbmN5V2l0aChEZXBl
bmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBEZXBlbmRl
bmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CiBpbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7
CkBAIC00NjksMTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUgVCYgZW5zdXJlUG9pbnRlcihBdG9t
aWM8VCoKIAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6OkRlcGVuZGVuY3k7Ci11c2lu
ZyBXVEY6OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpjb25zdW1lOwogdXNpbmcgV1RGOjpk
ZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKIHVzaW5nIFdURjo6ZW5zdXJl
UG9pbnRlcjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5o
CShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAg
ICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCiAg
ICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9E
ZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIy
NTA4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2
ICsxMDAsMTEgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1
bmM+CiAgICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25zdCBGdW5jJik7CiAgICAgCisg
ICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBj
YWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBU
IGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIFQgdGFrZUZpcnN0KGNvbnN0IEZ1bmMmKTsKKwogICAgIC8vIFJl
bW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayBy
ZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKICAgICAvLyBUIGlmIGl0IHRo
ZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgpAQCAtNTcxLDYgKzU3NiwyNSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT46OmFwCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT46OnRha2VGaXJzdChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKKyAgICB1bnNpZ25lZCBzaXplID0gdGhpcy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8
IHNpemUpIHsKKyAgICAgICAgVCBjYW5kaWRhdGUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYg
KGZ1bmMoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAg
ICAgICAgICAgcHJlcGVuZCh0YWtlTGFzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRh
dGU7CisgICAgICAgIH0KKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUo
Y2FuZGlkYXRlKSk7CisgICAgfQorICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBp
bmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1
bmMpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyNTA4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgSlNWTUNsaWVudERhdGE6Omlu
aXROb3JtYWxXb3JsZChWTSoKICAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtpbmdDb25zdHJhaW50PigKICAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29u
c3RyYWludHMiLAogICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9u
ID0gdm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7CisgICAg
ICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIG11dGFibGUgewogICAgICAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLT5oZWFwOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaGVhcC5t
dXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpID09IGxhc3RFeGVjdXRpb25WZXJzaW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327577</attachid>
            <date>2017-11-25 15:51:45 -0800</date>
            <delta_ts>2017-11-25 16:08:49 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>78721</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5n
Q29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKLSNpbmNsdWRlICJWaXNp
dGluZ1RpbWVvdXQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNzIsMTEgKzcxLDEx
IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgKICAgICAvLyBlbHNl
IGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkgPSBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAgIGF1dG8gY29uc3Ry
YWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAorICAgIGF1dG8gY29u
c3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50PigK
ICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAg
ICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwg
IiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykp
LCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRD
YWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgewogICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01h
cmtlZCA9IGlzTWFya2VkOwogICAgICAgICAgICAgbWFya2VyLk1hcmsgPSBtYXJrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5
NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91Ymxl
Rm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZCMzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMx
RTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZp
c2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3
RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdX
b3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJMEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87
IH07CkBAIC0zMTEsNiArMzEwLDggQEAKIAkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAw
NDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovOyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMy
QUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi87
IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzcz
MUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0
RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9i
dmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgx
RTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJG
RkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTc3LDcgKzE5
NzgsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbklubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5lcy5oOyBwYXRoID0gZGZn
L0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFG
QjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMjY1LDYgKzIyNjUsOCBAQAogCQkwRjRBMzhGODFDOEUxM0RGMDAxOTAz
MTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1
cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlG
MDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsgcGF0aCA9IGIzL0IzT3Jp
Z2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MjFGQzdBOTcz
MDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3
MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2
aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJG
aXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzEx
IC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2
QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MDIsNiArNTUwNCw3IEBACiAJCQkJMEZEMEU1RTYx
RTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmggKi8sCiAJCQkJMTQ2QjE0REIxMkVC
NUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFGMjEy
RUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKKwkJCQkwRjREOEM3MzFG
QzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJMEY3REYx
MkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJCQkJMkE3
QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRCMTc0
QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjIyLDcgKzU2MjUsNyBAQAogCQkJ
CTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJs
b29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlz
aXRpbmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
aCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04
MTcyLDYgKzgxNzUsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29k
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRl
Y29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1
IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAwMUQz
MkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5
MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFk
ZXJzICovLApAQCAtODg4Nyw2ICs4ODkxLDcgQEAKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3
MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8q
IEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFG
IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0Mw
MDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTky
NTMsNyArOTI1OCw2IEBACiAJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyRDFBQTkwOTU2MDBE
MzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0OTE0NjBDQkI3
MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjFGQjM5
MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKIAogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25j
dXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgwLDcg
Kzk4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYKICAgICAK
ICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRydWU7CiAKLSAgICBpZiAoSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmdseShsb2NrZXIp
KSB7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyB0aW1lVG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTE0NywxMCArMTE0NywxMCBAQCBib29sIENvZGVC
bG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYgRU5BQkxFKERGR19KSVQpCiBzdGF0
aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
JiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQor
ICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWQodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQo
KSkpCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExODAsNyAr
MTE4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAg
ICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVj
dHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CiAgICAg
ICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG9sZFN0
cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjU0LDE0ICsxMjU0LDE0IEBAIHZvaWQg
Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7
CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPigqcmVmZXJlbmNlLT52
bSgpLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocmVmZXJlbmNlKSkg
ewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJl
ZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFy
YWxsZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7Cisg
ICAgU2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAg
ICBzd2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bDoKKyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4MSw3ICsyODEsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgLCBtX211dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNp
dG9yPigqdGhpcywgIk0iKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0ZDo6bWFrZV91
bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtl
X3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3RyYWludFNldChz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAgICAgLCBtX2hh
bmRsZVNldCh2bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9j
a1NldD4oKSkKICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1
YlJvdXRpbmVTZXQ+KCkpCkBAIC05MTEsNyArOTExLDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwogICAgIGlmICht
X211dGF0b3JTaG91bGRCZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
LSAgICAgICAgaWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICBpZiAo
IWlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxlY3Rp
b24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQgcGFz
dAogICAgICAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRv
IGFuIHVubWFya2VkIFBvc3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAgICAgICAgIC8v
IG9iamVjdCBnZXRzIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwg
Z28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTI0LDE1IEBAIHZvaWQgSGVh
cDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAgICAvLyBOb3cg
d2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgIC8vICAgICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVubWFya2VkLgot
ICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJyZW50bHkgaGVy
ZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhlcmUuCiAgICAg
ICAgICAgICAgICAgLy8gICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXllZC4KICAgICAg
ICAgICAgICAgICAvLyAgICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNrZWQuCiAgICAg
ICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3Rh
dGVTdHJvbmcgaGVyZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIElu
IHRoaXMgY2FzZSB3ZSB3b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBhZ2FpbiwgZXZl
biB0aG91Z2ggaXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2suIFRoaXMgY2hl
Y2sgbGV0cyB1cyBjb3JyZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0
aGF0Ci0gICAgICAgICAgICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29udmVyZ2VzIG1v
bm90b25pY2FsbHkgdG8gdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWRDb25jdXJy
ZW50bHkoY2VsbCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252ZXJnZXMgbW9u
b3RvbmljYWxseSB0byB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjZWxsKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3JrIG91dCB3aGV0
aGVyIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpcyBwb2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5LgogICAgICAg
ICAgICAgICAgICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNr
KTsKQEAgLTk0OCw3ICs5NDgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25z
dCBKU0NlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAg
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICAgICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRoZSBv
YmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yIG1h
eSBzZXQgdGhlCiAgICAgLy8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRoZW4gdG8gUG9z
c2libHlPbGRPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwogICAgIC8vIHJh
Y2Ugd2l0aCB0aGUgY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJh
dGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXwpAQCAtMTMwNSw3ICsxMzA1LDcgQEAgTkVWRVJf
SU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAvLyBXb25kZXJpbmcg
d2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBE
T00gYW5kIG90aGVycyBjYW4gYWxzbwogICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhl
YXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCkuCiAgICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAg
ICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9y
LCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgICAgIG1fY29uc3RyYWludFNl
dC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKGNvbnZlcmdl
ZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFzc2VydFNoYXJlZE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwpAQCAtMjU3OCw3ICsyNTc4LDcgQEAgdm9pZCBIZWFwOjphZGRD
b3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
Q3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29u
dmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2Fu
Iik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2Fu
KCk7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhp
cyk7CkBAIC0yNTg4LDExICsyNTg4LDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290
cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOwog
ICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisg
ICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVk
U2V0KCptX3ZtLCBzbG90VmlzaXRvcik7CiAjZW5kaWYKQEAgLTI2MDksMTkgKzI2MTAsMjEgQEAg
dm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgc2xvdFZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAg
fSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1f
aGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBt
X2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAg
ICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2Ft
cGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2Ft
cGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2MzcsMzQgKzI2NDAsMzggQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3Zt
LT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAotICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikgewor
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAg
bV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsK
ICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAor
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2Nv
bnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQo
CiAgICAgICAgICJXcmgiLCAiV2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAg
ICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsK
ICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2lu
Zyk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdv
cmtsaXN0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29y
a2xpc3RzKCk7IGktLTspCiAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9y
SW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAK
QEAgLTI2NzksMTIgKzI2ODYsMTMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQog
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7
CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtp
bmcpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICNlbmRpZgogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xk
aW5nTG9ja3MoCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewog
ICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWlu
dCBvbmx5IGlmIGl0J3MgYmxhY2suCkBAIC0yNjkzLDExICsyNzAxLDE1IEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9y
LnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOworICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkLAorICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKICAgICAgICAgIk1ybXMiLCAiTXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZ3JhYiBsb2NrcyB0byBmaWRkbGUgd2l0aCB0aGUg
bXV0YXRvciBtYXJrIHN0YWNrIGFuZCB0aGUgcmFjZSBzdGFjay4KKyAgICAgICAgICAgIC8vIFRo
ZSBjaGFuY2VzIG9mIGNvbnRlbnRpb24gb24gdGhvc2UgbG9ja3MgYXJlIHNsaW0sIGJ1dCB3ZSBz
aG91bGQgZG8gaXQgYW55d2F5LgorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJbmRpY2F0
ZSB0byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAgICAgICBz
aXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNr
LT5zaXplKCk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7
CkBAIC0yNzExLDcgKzI3MjMsOCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewogICAgICAgICAgICAgcmV0
dXJuIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7
CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwK
KyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiB9CiAKIHZvaWQgSGVh
cDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50
PiBjb25zdHJhaW50KQpAQCAtMjc5NCwxNiArMjgwNyw2IEBAIHZvaWQgSGVhcDo6YWxsb3dDb2xs
ZWN0aW9uKCkKICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrLnVubG9jaygpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29u
c3QgRnVuYyYgZnVuYykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxT
bG90VmlzaXRvckxvY2spOwotICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwotICAg
IGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKLSAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9y
IDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOwot
fQotCiB2b2lkIEhlYXA6OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKQogewog
ICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3LDQgKzI4NTAsMjQg
QEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwogICAgIG1faGVhcEZp
bmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAKK3ZvaWQgSGVhcDo6
c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0ZXgpOwor
ICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICB1bnNpZ25l
ZCBpbml0aWFsUmVmQ291bnQgPSB0YXNrLT5yZWZDb3VudCgpOworICAgIHNldEJvbnVzVmlzaXRv
clRhc2sodGFzayk7CisgICAgdGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAg
ICBzZXRCb251c1Zpc2l0b3JUYXNrKG51bGxwdHIpOworICAgIHsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAgIHdoaWxlICh0YXNrLT5yZWZD
b3VudCgpID4gaW5pdGlhbFJlZkNvdW50KQorICAgICAgICAgICAgbV9tYXJraW5nQ29uZGl0aW9u
VmFyaWFibGUud2FpdChtX21hcmtpbmdNdXRleCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNTA4NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc190aW1l
Q2hlY2tSZXNvbHV0aW9uID0gMTY7CiAKICAgICBzdGF0aWMgYm9vbCBpc01hcmtlZChjb25zdCB2
b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCop
OwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24sIGNvbnN0IHZv
aWQqKTsKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0IHZvaWQqKTsKQEAg
LTM1OCw2ICszNTcsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXpl
ckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQgcmVtb3Zl
SGVhcEZpbmFsaXplckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOworICAg
IAorICAgIHZvaWQgcnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4pOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBydW5GdW5jdGlvbkluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAg
IHJ1blRhc2tJblBhcmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPihm
dW5jKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZv
ckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEFsbG9jYXRpbmdTY29wZTsKQEAgLTUyNyw2ICs1MzcsOCBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAKKyAgICB2b2lkIHNldEJv
bnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pOwor
ICAgIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1f
cmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwpAQCAtNTc5LDkg
KzU5MSw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4gbV9hdmFpbGFibGVQ
YXJhbGxlbFNsb3RWaXNpdG9yczsKICAgICBMb2NrIG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2s7
CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGZvckVhY2hTbG90
VmlzaXRvcihjb25zdCBGdW5jJik7Ci0KICAgICBIYW5kbGVTZXQgbV9oYW5kbGVTZXQ7CiAgICAg
SGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUJsb2Nr
U2V0PiBtX2NvZGVCbG9ja3M7CkBAIC02NDIsNiArNjUxLDcgQEAgcHJpdmF0ZToKICAgICBMaXN0
YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFs
RmluYWxpemVyczsKIAogICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50Owor
ICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IG1fYm9udXNWaXNpdG9y
VGFzazsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9ja0J5
dGVzQWxsb2NhdGVkIHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwyNSArNjgsMTUgQEAgaW5saW5l
IGJvb2wgSGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VAogICAgIHJldHVybiBtX2NvbGxlY3Rv
ckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLCBzbyB0aGF0IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdW
ZXJzaW9uKCkgcXVpY2tseS4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzk5ODgKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lk
KiByYXdDZWxsKQogewotICAgIEFTU0VSVChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBl
OjpIZWxwZXIpOwogICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4o
cmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2Nr
JiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2Vk
KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24o
KSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJl
bnRseShjb25zdCB2b2lkKiByYXdDZWxsKQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0
aW9uKCkpCi0gICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgp
OwotICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0
dXJuIGJsb2NrLmlzTWFya2VkQ29uY3VycmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFw
Lm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2Nr
LmlzTWFya2VkKGJsb2NrLnZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigp
LCBjZWxsKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkBAIC0yNjks
NCArMjU5LDE0IEBAIGlubGluZSB2b2lkIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeSgpCiAgICAgICAg
IHN0b3BJZk5lY2Vzc2FyeVNsb3coKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3Zv
aWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICBmdW5j
KCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICBmdW5jKCptX211dGF0b3JTbG90VmlzaXRv
cik7CisgICAgZm9yIChhdXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMp
CisgICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWls
ZGVyLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAg
dm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjpidWlsZFNuYXBzaG90KAogdm9pZCBIZWFwU25hcHNo
b3RCdWlsZGVyOjphcHBlbmROb2RlKEpTQ2VsbCogY2VsbCkKIHsKICAgICBBU1NFUlQobV9wcm9m
aWxlci5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlQoSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChj
ZWxsKSk7CiAKICAgICBpZiAoaGFzRXhpc3RpbmdOb2RlRm9yQ2VsbChjZWxsKSkKICAgICAgICAg
cmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0
aW9uLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xh
cmdlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoK
ICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgQUxXQVlTX0lO
TElORSBib29sIGlzTWFya2VkKEhlYXBDZWxsKiwgRGVwZW5kZW5jeSkgeyByZXR1cm4gaXNNYXJr
ZWQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFw
VmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CisgICAgQUxXQVlTX0lO
TElORSBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFy
a2VkKCk7IH0KICAgICBib29sIGlzTGl2ZSgpIHsgcmV0dXJuIGlzTWFya2VkKCkgfHwgaXNOZXds
eUFsbG9jYXRlZCgpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNWYWxpZENlbGwoKSBjb25zdCB7IHJl
dHVybiBtX2hhc1ZhbGlkQ2VsbDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDYgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKik7CiAgICAgYm9vbCBpc01hcmtl
ZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCopOwotICAgIGJvb2wgaXNN
YXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQq
KTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICBib29s
IHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAgICAgICAKQEAg
LTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGFy
ZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtzU3RhbGUoSGVhcFZlcnNpb24gbWFya2lu
Z1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lXaXRoPGJvb2w+IGFyZU1hcmtzU3RhbGVXaXRoRGVw
ZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgCiAgICAgRGVwZW5kZW5j
eSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgICAgIApAQCAt
NDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmFyZU1hcmtzU3RhbGUo
SAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21hcmtpbmdWZXJzaW9uOwogfQogCi1B
TFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0
YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAgSGVh
cFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247Ci0gICAgcmV0dXJuIGRlcGVuZGVu
Y3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pOwot
fQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0
aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShyZXN1bHQudmFs
dWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlm
IChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRUb01h
cmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7Cisg
ICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQpAQCAtNTI0LDE1ICs1MTYsMTAgQEAg
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkUmF3KGNvbgogCiBpbmxpbmUgYm9vbCBN
YXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZv
aWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pID8gZmFs
c2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFy
a2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBw
KQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtp
bmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVlKQorICAgIEhlYXBWZXJzaW9uIHZlcnNp
b24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtp
bmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdl
dChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIG1fbWFya3Mu
Z2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVyc2lvbikpOwogfQogCiBpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRl
bmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50LmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw1MCArMjcsMTA5
IEBACiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLU1h
cmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYs
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK01hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3Ry
YWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAg
ICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCiAgICAgLCBtX25hbWUoV1RG
TW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0
aW9uKSkKICAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorICAgICwgbV9wYXJhbGxlbGlz
bShwYXJhbGxlbGlzbSkKK3sKK30KKworTWFya2luZ0NvbnN0cmFpbnQ6On5NYXJraW5nQ29uc3Ry
YWludCgpCit7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQorewor
ICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gTWFy
a2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOwor
ICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtIHJlc3VsdCA9IGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0
Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIG1fbGFzdEV4ZWN1dGVQYXJh
bGxlbGlzbSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitkb3VibGUgTWFya2lu
Z0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3sKKyAgICByZXR1
cm4gMDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CisgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dv
cmtFc3RpbWF0ZSh2aXNpdG9yKTsKIH0KIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25z
dHJhaW50KAordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsK
KyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgeworICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OmZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNp
dENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGZpbmlzaFBhcmFsbGVsV29ya0lt
cGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0ltcGwo
U2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9y
JikKK3sKK30KKworU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50OjpTZXF1ZW50aWFsTWFya2lu
Z0NvbnN0cmFpbnQoCiAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
LSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBl
eGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29u
c3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQo
V1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBwYXJh
bGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9u
KSkKK3sKK30KKworU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50OjpTZXF1ZW50aWFsTWFya2lu
Z0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
KyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAogICAg
IDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rp
b24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKLSAgICA6IG1fYWJicmV2
aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKLSAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQor
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0
ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pCiAgICAgLCBt
X2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCiAgICAgLCBtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkK
LSAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQogewogfQogCi1NYXJraW5nQ29uc3RyYWlu
dDo6fk1hcmtpbmdDb25zdHJhaW50KCkKK1NlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6flNl
cXVlbnRpYWxNYXJraW5nQ29uc3RyYWludCgpCiB7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OnJlc2V0U3RhdHMoKQorZG91YmxlIFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludDo6cXVp
Y2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgbV9sYXN0VmlzaXRD
b3VudCA9IDA7CisgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRv
cik7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitD
b25zdHJhaW50UGFyYWxsZWxpc20gU2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
LSAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0
IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7Ci0g
ICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBtX2xh
c3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAg
ZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlz
aXRvcik7CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgcmV0dXJuIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJDb25zdHJhaW50UGFyYWxsZWxpc20uaCIKICNpbmNsdWRlICJDb25z
dHJhaW50Vm9sYXRpbGl0eS5oIgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgogI2luY2x1
ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uLmg+CkBAIC00MywxOCArNDMsOSBAQCBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtp
bmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBu
YW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRv
dWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxs
ZWxpc20pOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAg
ICAgCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAg
CkBAIC02NCwzMyArNTUsNjUgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRTdGF0cygpOwogICAg
IAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0
Q291bnQ7IH0KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbGFzdEV4ZWN1dGVQYXJhbGxlbGlz
bSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbTsgfQorICAgIAorICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7CisgICAgCisgICAg
dmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwog
ICAgIAotICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRo
aW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShT
bG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJs
ZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1
cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0K
KyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hQ
YXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisgICAg
Ly8gSWYgdGhpcyBpcyBTZXF1ZW50aWFsLCBpdCBtZWFucyB0aGF0IHRoZSBjb25zdHJhaW50IGhh
cyB0byBiZSBydW4gc2VxdWVudGlhbGx5LCB3aXRoIG5vIGNvbmN1cnJlbnQKKyAgICAvLyBjb25z
dHJhaW50cy4KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBjb25zdCB7
IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2
b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0
IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAg
Q1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQp
PiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYp
PiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
bV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVsaXNtOwor
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20geyBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsIH07IC8vIEl0J3MgYSBoZXVyaXN0aWMsIHdlIGNh
biBiZSB3cm9uZy4gVGhpcyBndWVzcyBvbmx5IGFmZmVjdHMgdGhlIGZpcnN0IHJ1bi4KICAgICBz
aXplX3QgbV9sYXN0VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKK307CisKK2Ns
YXNzIFNlcXVlbnRpYWxNYXJraW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWlu
dCB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2VxdWVudGlhbE1hcmtpbmdDb25z
dHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTZXF1
ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwK
KyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+
U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6
CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVu
Y3Rpb247CisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShy
ZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJWaXNpdENv
dW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKQEAgLTM0LDUyICszNiwyMjUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0IHsKIHB1
YmxpYzoKLSAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCisgICAgRXhlY3V0aW9u
Q29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0KQogICAgICAgICA6IG1fc2V0KHNldCkK
LSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91
dCkKICAgICB7CisgICAgICAgIG1fc2V0Lm1faGVhcC5mb3JFYWNoU2xvdFZpc2l0b3IoCisgICAg
ICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICAgICAgbV92
aXNpdENvdW50ZXJzLmFwcGVuZChWaXNpdENvdW50ZXIodmlzaXRvcikpOworICAgICAgICAgICAg
fSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7CisgICAgICAgIGZvciAoVmlz
aXRDb3VudGVyJiB2aXNpdENvdW50ZXIgOiBtX3Zpc2l0Q291bnRlcnMpIHsKKyAgICAgICAgICAg
IGlmICh2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAg
Ym9vbCBzaG91bGRUaW1lT3V0KCkgY29uc3QKKyAgICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2Ug
eworICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJz
dAorICAgIH07CisKKyAgICAvLyBwaWNrTmV4dCgpIGlzIGNhbGxlZCB3aGlsZSBhIGxvY2sgaXMg
aGVsZCwgc28gaXQgY2FuIHByZXRlbmQgbGlrZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBt
YWluCisgICAgLy8gdGhyZWFkLiBGb3IgZXhhbXBsZSwgaXQncyB0b3RhbGx5IHNhZmUgZm9yIHRo
YXQgbGFtYmRhIHRvIGNsb3NlIG92ZXIgdGhlIHN0YWNrLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CisgICAgdm9pZCBleGVjdXRlKFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwg
Y29uc3QgRnVuYyYgcGlja05leHQpCiAgICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21l
dGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7CisgICAgICAgIG1fc2V0Lm1faGVhcC5y
dW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBi
b29sIGRvUGFyYWxsZWxXb3JrTW9kZTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5k
ZXhUb1J1bjsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byB0cnlQYXJhbGxlbFdvcmsgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhUb1J1biA9IG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5maXJzdCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5TmV4dENvbnN0cmFpbnQgPSBbJl0gKCkgLT4g
Ym9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBp
Y2tSZXN1bHQgPSBwaWNrTmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFwaWNrUmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KCpw
aWNrUmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAq
bV9zZXQubV9zZXRbKnBpY2tSZXN1bHRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxp
c206OlNlcXVlbnRpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5hcHBlbmQoKnBpY2tSZXN1bHQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhUb1J1biA9ICpwaWNrUmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZlcmVuY2Ug
PT0gUGFyYWxsZWxXb3JrRmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRyeVBhcmFsbGVsV29yaygpIHx8IHRyeU5leHRDb25zdHJhaW50KCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJ5TmV4
dENvbnN0cmFpbnQoKSB8fCB0cnlQYXJhbGxlbFdvcmsoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fbnVtQWN0aXZlVGhyZWFkcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBBbnkgd2FpdGluZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1
c3QgcnVubmluZyB0aGUgU2xvdFZpc2l0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSSB3b25kZXIgaWYgdGhhdCB3b3VsZCBiZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9udW1BY3RpdmVUaHJlYWRzKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBw
YXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25z
dHJhaW50ID0gKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0cmFpbnQuZG9QYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsaXNtID0g
Y29uc3RyYWludC5leGVjdXRlKHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludC5maW5pc2hQYXJhbGxl
bFdvcmsodmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwudGFrZUZpcnN0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCB2YWx1
ZSkgeyByZXR1cm4gdmFsdWUgPT0gaW5kZXhUb1J1bjsgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4
VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbGlzbSA9PSBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQo
aW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX251bUFjdGl2ZVRocmVhZHMtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4VG9SdW4gOiBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseSkKKyAgICAgICAgICAgIGV4ZWN1
dGUoKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV90
b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuYml0Q291bnQoKSk7CiAgICAgfQogICAgIAotICAgIC8v
IFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0LgotICAgIGJvb2wgZHJhaW4oQml0VmVjdG9y
JiB1bmV4ZWN1dGVkKQorICAgIHZvaWQgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQogICAg
IHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7Ci0gICAgICAgICAg
ICBleGVjdXRlKGluZGV4KTsKLSAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOwot
ICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGF1dG8gaXRl
ciA9IHVuZXhlY3V0ZWQuYmVnaW4oKTsKKyAgICAgICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVkLmVu
ZCgpOworICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGV4ZWN1dGUoCisgICAgICAgICAgICBOZXh0Q29uc3RyYWludEZpcnN0LAorICAgICAgICAg
ICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgICAgICAgICAgICAgcmV0dXJuICppdGVyKys7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgdW5leGVjdXRlZC5jbGVhckFsbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGRpZEV4ZWN1
dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0K
KyAgICB2b2lkIGNvbnZlcmdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBWZWN0b3I8TWFy
a2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpCisgICAgeworICAgICAgICBpZiAoZGlkVmlzaXRTb21l
dGhpbmcoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChvcmRl
ci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXpl
X3QgaW5kZXggPSAwOwogCi0gICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKKyAgICAgICAg
Ly8gV2Ugd2FudCB0byBleGVjdXRlIHRoZSBmaXJzdCBjb25zdHJhaW50IHNlcXVlbnRpYWxseSBp
ZiB3ZSB0aGluayBpdCB3aWxsIHF1aWNrbHkgZ2l2ZSB1cyBhCisgICAgICAgIC8vIHJlc3VsdC4g
SWYgd2UgcmFuIGl0IGluIHBhcmFsbGVsIHRvIG90aGVyIGNvbnN0cmFpbnRzLCB0aGVuIHdlIG1p
Z2h0IGVuZCB1cCBoYXZpbmcgdG8gd2FpdCBmb3IKKyAgICAgICAgLy8gdGhvc2Ugb3RoZXIgY29u
c3RyYWludHMgdG8gZmluaXNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2Ug
ZHVyaW5nIGNvbnZlcmdlbmNlIGl0J3MKKyAgICAgICAgLy8gZW1waXJpY2FsbHkgbW9zdCBvcHRp
bWFsIHRvIHJldHVybiB0byBkcmFpbmluZyBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0
ZXMgd29yay4gTW9zdAorICAgICAgICAvLyBjb25zdHJhaW50cyBkb24ndCBnZW5lcmF0ZSBhbnkg
d29yayBtb3N0IG9mIHRoZSB0aW1lLCBhbmQgd2hlbiB0aGV5IGRvIGdlbmVyYXRlIHdvcmssIHRo
ZXkgdGVuZAorICAgICAgICAvLyB0byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRl
Y2VudCBkcmFpbmluZyBjeWNsZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlm
CisgICAgICAgIC8vIHdlIGdldCB0aGUgaGVjayBvdXQgb2YgaGVyZSBhcyBzb29uIGFzIGEgY29u
c3RyYWludCBnZW5lcmF0ZXMgd29yay4gSSB0aGluayB0aGF0IHBhcnQgb2Ygd2hhdAorICAgICAg
ICAvLyBtYWtlcyB0aGlzIG9wdGltYWwgaXMgdGhhdCB3ZSBhbHNvIG5ldmVyIGFib3J0IHJ1bm5p
bmcgYSBjb25zdHJhaW50IGVhcmx5LCBzbyB3aGVuIHdlIGRvIHJ1bgorICAgICAgICAvLyBvbmUs
IGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9z
c2libHkgY2FuLgorICAgICAgICAvLworICAgICAgICAvLyBTaW1pbGFyIHJlYXNvbmluZyBhcHBs
aWVzIHRvIGNvbnN0cmFpbnRzIHRoYXQgdGVuZCB0byByZXR1cm4gQ29zbnRyYWludFBhcmFsbGVs
aXNtOjpQYXJhbGxlbAorICAgICAgICAvLyBmcm9tIGV4ZWN1dGUuIFRob3NlIGNvbnN0cmFpbnRz
IHR5cGljYWxseSBoYXZlIGEgdmVyeSBmYXN0LXJ1bm5pbmcgZXhlY3V0ZSBmdW5jdGlvbiwgd2hp
Y2ggdGhlbgorICAgICAgICAvLyBvZmZsb2FkcyBhbG1vc3QgYWxsIG9mIHRoZSB3b3JrIHRvIGEg
cGFyYWxsZWwgd29ya2VyLiBJbiB0aGF0IGNhc2UsIGl0IG1ha2VzIHNlbnNlIHRvIHJ1biB0aGUK
KyAgICAgICAgLy8gZXhlY3V0ZSBmdW5jdGlvbiBzZXF1ZW50aWFsbHkuCisgICAgICAgIGlmIChv
cmRlcltpbmRleF0tPndvcmtFc3RpbWF0ZSh2aXNpdG9yKQorICAgICAgICAgICAgfHwgb3JkZXJb
aW5kZXhdLT5sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpQYXJhbGxlbCkgeworICAgICAgICAgICAgZXhlY3V0ZSgqb3JkZXJbaW5kZXgrK10pOworICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChvcmRlci5pc0VtcHR5KCkgJiYgbV90b0V4ZWN1dGVJblBh
cmFsbGVsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGV4ZWN1dGUoCisgICAgICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwK
KyAgICAgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAg
ICAgICAgICAgaWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KGluZGV4ID49IG9yZGVyLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gb3JkZXJb
aW5kZXgrK10tPmluZGV4KCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBleGVjdXRlKE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50KQogICAgIHsKLSAgICAgICAg
bV9zZXQubV9zZXRbaW5kZXhdLT5leGVjdXRlKG1fdmlzaXRvciwgbV9kaWRWaXNpdFNvbWV0aGlu
ZywgbV90aW1lb3V0KTsKLSAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgICAgICBp
ZiAobV9leGVjdXRlZC5nZXQoY29uc3RyYWludC5pbmRleCgpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9
IGNvbnN0cmFpbnQuZXhlY3V0ZSgKKyAgICAgICAgICAgIG1fc2V0Lm1faGVhcC5jb2xsZWN0b3JT
bG90VmlzaXRvcigpKTsKKyAgICAgICAgZGlkRXhlY3V0ZShwYXJhbGxlbGlzbSwgY29uc3RyYWlu
dC5pbmRleCgpKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgorICAgIHZvaWQgZGlkRXhlY3V0ZShD
b25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20sIHVuc2lnbmVkIGluZGV4KQorICAgIHsK
KyAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgICAgICBpZiAocGFyYWxsZWxpc20g
PT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAgICAgbV90b0V4
ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleCk7CisgICAgICAgICAgICBtX3RvRXhlY3V0ZUlu
UGFyYWxsZWxTZXQuc2V0KGluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBNYXJr
aW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAg
ICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKICAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKLSAg
ICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OworICAgIERlcXVlPHVuc2lnbmVk
LCAzMj4gbV90b0V4ZWN1dGVJblBhcmFsbGVsOworICAgIEJpdFZlY3RvciBtX3RvRXhlY3V0ZUlu
UGFyYWxsZWxTZXQ7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV90b0V4ZWN1dGVTZXF1ZW50
aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAg
IHVuc2lnbmVkIG1fbnVtQWN0aXZlVGhyZWFkcyB7IDAgfTsKKyAgICBWZWN0b3I8VmlzaXRDb3Vu
dGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOwogfTsKIAotTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1h
cmtpbmdDb25zdHJhaW50U2V0KCkKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3Ry
YWludFNldChIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCiB7CiB9CiAKQEAgLTEwNywx
OCArMjgyLDE5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAg
ICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRW
b2xhdGlsaXR5IHZvbGF0aWxpdHkpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25z
dHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlx
dWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShu
YW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtl
X3VuaXF1ZTxTZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWRO
YW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIHBhcmFs
bGVsaXNtKSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBDU3Ry
aW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCisg
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKICAgICA6
OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
LAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSwKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxp
c20pCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1v
dmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rp
b24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7Cisg
ICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2VxdWVudGlhbE1hcmtpbmdDb25zdHJhaW50PihXVEZN
b3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0
aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgcGFy
YWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKApAQCAtMTMx
LDkgKzMwNyw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBtX3NldC5h
cHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZl
cmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVD
b252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAg
ICAgIGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDkgKzMyNCw5IEBA
IGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUlt
cGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK2Jvb2wgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlzLCB2
aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQo
KnRoaXMpOwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlvbiA9IG1faXRlcmF0aW9uKys7CiAg
ICAgCkBAIC0xNTksMTYgKzMzNSwxNCBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVj
dXRlQ29udmVyCiAKICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFpbnRzIHRoYXQgd2Ug
aGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0aGVuCiAgICAgLy8g
d2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5k
cmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBleGVj
dXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKICAgICAKICAgICAvLyBGaXJz
dCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlr
ZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzIG90aGVyCiAgICAgLy8gdGhhbiByb290cy4K
ICAgICBpZiAoaXRlcmF0aW9uID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3RocykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVj
dXRlZE91dGdyb3d0aHMpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBwcmVmZXJyaW5n
IHRoZSBvdXRncm93dGggY29uc3RyYWludHMgLSB0aGUgb25lcyB0aGF0IG5lZWQgdG8gYmUgZml4
cG9pbnRlZAogICAgIC8vIGV2ZW4gaW4gYSBzdG9wLXRoZS13b3JsZCBHQyAtIHVudGlsIHRoZXkg
c3RvcCBwcm9kdWNpbmcuIFRoZXkgaGF2ZSBhIHRlbmRlbmN5IHRvIGdvIHRvdGFsbHkKQEAgLTIx
NSwzMyArMzg5LDE3IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIK
ICAgICAgICAgICAgIHJldHVybiBhLT52b2xhdGlsaXR5KCkgPiBiLT52b2xhdGlsaXR5KCk7CiAg
ICAgICAgIH0pOwogICAgIAotICAgIGZvciAoTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQg
OiBtX29yZGVyZWQpIHsKLSAgICAgICAgc2l6ZV90IGkgPSBjb25zdHJhaW50LT5pbmRleCgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkRXhlY3V0ZShpKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBleGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoaSk7
Ci0gICAgICAgIAotICAgICAgICAvLyBPbmNlIHdlJ3JlIGluIGNvbnZlcmdlbmNlLCBpdCBtYWtl
cyB0aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJraW5nIGhhcHBlbiBhbnl0aW1lCi0gICAg
ICAgIC8vIHdlIGZpbmQgd29yay4KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxk
IGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBpZiB0aGF0
J3MKLSAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVuIGJldHRlciBpcyB0aGlz
OgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5pbmcuCi0g
ICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdzLCByZXR1
cm4uCi0gICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMgotICAgICAgICBpZiAo
ZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KKyAgICBleGVjdXRpb25Db250ZXh0LmNvbnZlcmdlKG1fb3JkZXJlZCk7
CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UndmUgY29u
dmVyZ2VkLiBUaGF0IGhhcHBlbnMgaWYgd2UgZGlkIG5vdCB2aXNpdCBhbnl0aGluZy4KKyAgICBy
ZXR1cm4gIWV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAogdm9pZCBN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBjb25z
dHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlk
VmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICBjb25z
dHJhaW50LT5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lv
biAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldCB7CiBwdWJsaWM6Ci0gICAgTWFya2luZ0NvbnN0
cmFpbnRTZXQoKTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldChIZWFwJik7CiAgICAgfk1hcmtp
bmdDb25zdHJhaW50U2V0KCk7CiAgICAgCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKQEAg
LTQxLDE1ICs0MSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50
UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAg
ICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENT
dHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4sCiAgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsKTsKICAgICAKICAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFp
bnQ+KTsKICAgICAKQEAgLTYwLDkgKzYyLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVt
IHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJh
ZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1
dGVDb252ZXJnZW5jZSgKLSAgICAgICAgU2xvdFZpc2l0b3ImLAotICAgICAgICBNb25vdG9uaWNU
aW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICBib29sIGV4ZWN1
dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFs
bCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KICAgICB2b2lkIGV4ZWN1dGVB
bGwoU2xvdFZpc2l0b3ImKTsKQEAgLTcxLDEwICs3MSwxMSBAQCBwcml2YXRlOgogICAgIGNsYXNz
IEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CiAg
ICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZp
c2l0b3ImKTsKICAgICAKLSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGlt
ZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRW
aXNpdFNvbWV0aGluZyk7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIEJpdFZlY3RvciYg
dW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcp
OwogICAgIAorICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9v
dHM7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzcsNyArMjc3LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2so
SlNDZQogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVy
LCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFTU0VSVCgh
Y2VsbC0+aXNaYXBwZWQoKSk7CiAgICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKQEAg
LTM0Niw3ICszNDYsNyBAQCBwcml2YXRlOgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2Vk
KGNlbGwpKTsKICAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUo
KnRoaXMsIGNlbGwpOwogICAgIApAQCAtNTYxLDE3ICs1NjEsMTYgQEAgYm9vbCBTbG90VmlzaXRv
cjo6ZGlkUmVhY2hUZXJtaW5hdGlvbigpCiAgICAgcmV0dXJuIGRpZFJlYWNoVGVybWluYXRpb24o
bG9ja2VyKTsKIH0KIAotYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25z
dCBBYnN0cmFjdExvY2tlciYpCitib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9u
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKQot
ICAgICAgICAmJiAhbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKLSAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgIHJl
dHVybiAhbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKKyAgICAgICAgJiYg
IWhhc1dvcmsobG9ja2VyKTsKIH0KIAogYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBB
YnN0cmFjdExvY2tlciYpCiB7Ci0gICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JN
YXJrU3RhY2stPmlzRW1wdHkoKQorICAgIHJldHVybiAhaXNFbXB0eSgpCisgICAgICAgIHx8ICFt
X2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICB8fCAh
bV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwogfQogCkBAIC01ODMs
MTIgKzU4MiwxNCBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAK
ICAgICBib29sIGlzQWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gYm9udXNUYXNrOworICAgICAg
ICAKICAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFy
a2luZ011dGV4KTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1f
bWFya2luZ011dGV4KTsKICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSkKICAgICAgICAgICAgICAg
ICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICAgICAg
bV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKys7Ci0KKyAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHNoYXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbikgewogICAg
ICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNF
bGFwc2VkKHRpbWVvdXQpKQpAQCAtNjI5LDI4ICs2MzAsNTcgQEAgTkVWRVJfSU5MSU5FIFNsb3RW
aXNpdG9yOjpTaGFyZWREcmFpblJlcwogCiAgICAgICAgICAgICAgICAgYXV0byBpc1JlYWR5ID0g
WyZdICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yayhsb2Nr
ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNr
CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0OwogICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICBtX2hlYXAubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwg
dGltZW91dCwgaXNSZWFkeSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KCFoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fYm9udXNW
aXNpdG9yVGFzaykKKyAgICAgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbV9oZWFwLm1fYm9u
dXNWaXNpdG9yVGFzazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9o
ZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBmb3JFYWNoTWFya1N0YWNrKAotICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkm
IHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgICAgICAgICBzdGFjay5z
dGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5n
R2xvYmFsU3RhY2soc3RhY2spLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVt
YmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghYm9udXNUYXNrICYmIGlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTWFy
a1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9o
ZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVh
cC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgaWYgKGJvbnVzVGFzaykgeworICAg
ICAgICAgICAgYm9udXNUYXNrLT5ydW4oKnRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBGSVhNRTogSWRlYWxseSwgd2Ugd291bGQgbm90IGhhdmUgdG8gZG8gdGhpcy4gSG93ZXZl
ciwgdGhlIHBhcmFsbGVsIG1hcmtpbmcgYWxnb3JpdGhtIHdpbGwKKyAgICAgICAgICAgIC8vIGdl
dCBjb25mdXNlZCBpZiB3ZSBpbml0aWF0ZSBpdCB3aXRoIHRoZSBoZWxwZXIgdmlzaXRvcnMgaGF2
aW5nIGFueXRoaW5nIGluIHRoZWlyIHN0YWNrcy4KKyAgICAgICAgICAgIC8vIEFsc28sIHRoaXMg
cHJvdGVjdHMgYnVncyB0aGF0IGludm9sdmUgcmFjZXMgYmV0d2VlbiB2aXNpdENoaWxkcmVuIGFu
ZCBvbmUgb2YgdGhlCisgICAgICAgICAgICAvLyBjb25zdHJhaW50cy4KKyAgICAgICAgICAgIC8v
ZG9uYXRlQWxsKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGls
bCBiZSBydW5uaW5nLCBhbmQgbWF5IHJ1biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRo
ZSB0YXNrCisgICAgICAgICAgICAvLyBvdXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFy
b3VuZCB0cnlpbmcgdG8gcnVuIHRoZSB0YXNrLgorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisg
ICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOwor
ICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9o
ZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHko
KSk7CisgICAgICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgaXNBY3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAgLTY3Niw5ICs3MDYsMTMgQEAgU2xv
dFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgICAgICByZXR1cm4gZHJh
aW5JblBhcmFsbGVsKHRpbWVvdXQpOwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
aGVhcC5tX21hcmtpbmdNdXRleCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAg
ZG9uYXRlQWxsKGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3
YWl0Rm9yVGVybWluYXRpb24odGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFp
blJlc3VsdCBTbG90VmlzaXRvcjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGlt
ZW91dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRl
eCk7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAg
ICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTA4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSw2ICsxMjEsOCBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFp
bkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1v
bm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAor
ICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRp
bWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRv
IHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRyYWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxr
aW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4gVGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBhY2Np
ZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFy
ayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRDb3VudGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZpc2l0Q291bnRlciB7CitwdWJsaWM6CisgICAgVmlzaXRD
b3VudGVyKCkgeyB9CisgICAgCisgICAgVmlzaXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKKyAgICAgICAgLCBtX2luaXRpYWxWaXNp
dENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc2l6
ZV90IHZpc2l0Q291bnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmlzaXRvci0+dmlzaXRD
b3VudCgpIC0gbV9pbml0aWFsVmlzaXRDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxscHRyIH07CisgICAgc2l6ZV90IG1faW5pdGlh
bFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9uIDIy
NTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShu
b25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBWaXNpdGluZ1RpbWVvdXQg
ewotcHVibGljOgotICAgIFZpc2l0aW5nVGltZW91dCgpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICBWaXNpdGluZ1RpbWVvdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21l
dGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRo
aW5nKGRpZFZpc2l0U29tZXRoaW5nKQotICAgICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNp
dG9yLnZpc2l0Q291bnQoKSkKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIHNpemVfdCB2aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV92aXNp
dENvdW50QmVmb3JlOwotICAgIH0KLQotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNv
bWV0aGluZyB8fCB2aXNpdENvdW50KHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBib29sIHNo
b3VsZFRpbWVPdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcikgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQp
OwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsg
ZmFsc2UgfTsKLSAgICBzaXplX3QgbV92aXNpdENvdW50QmVmb3JlIHsgMCB9OwotICAgIE1vbm90
b25pY1RpbWUgbV90aW1lb3V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjI1MDg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENv
bnRhaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9
IHdlYWtJbXBsLT5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWRDb25j
dXJyZW50bHkobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQorICAgICAgICBpZiAo
Y29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3du
ZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3Qo
JmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlz
aXRvcikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDEsMTQgKzExMDEsMTQgQEAgYm9vbCBT
dHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQygpCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0
eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQotICAgICAgICAmJiAoaGFzUG9s
eVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CisgICAgcmV0dXJuICghbV9nbG9i
YWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAg
ICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6
OmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CiB9CiAKIGJvb2wgU3RydWN0dXJl
OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoIWlzQ2hlYXBE
dXJpbmdHQygpKQotICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhp
cyk7CisgICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZCh0aGlzKTsKICAgICAKICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291
cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F0b21p
Y3MuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL1dURi93dGYvQXRvbWljcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDYsMTEgKzM0NiwxNiBAQCBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kg
bnVsbERlcGVuZGVuY3koCiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUqID0gbnVsbHB0
cj4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3koVCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQ2NF90
IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICB1bmlvbiB7CisgICAg
ICAgIHVpbnQzMl90IGNvcHk7CisgICAgICAgIFQgdmFsdWU7CisgICAgfSB1OworICAgIHUuY29w
eSA9IDA7CisgICAgdS52YWx1ZSA9IHZhbHVlOwogI2lmIENQVShBUk02NCkKICAgICAvLyBDcmVh
dGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNzZW1ibHksIHdob3NlIGNv
bXB1dGF0aW9uCiAgICAgLy8gaXNuJ3QgdmlzaWJsZSB0byB0aGUgb3B0aW1pemVyLiBUaGlzIHpl
cm8gaXMgdGhlbiB1c2FibGUgYXMgYW4gb2Zmc2V0IGluCkBAIC0zNjMsODAgKzM2OCwyMCBAQCBB
TFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhCiAgICAgLy8gb3IgYW4gYWNx
dWlyZSBsb2FkLgogICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIK
ICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0g
InIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbGlmIENQVShBUk0p
CiAgICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5dIgogICAgICAgICA6IFtk
ZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwor
ICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2Vsc2UKICAgICAvLyBObyBkZXBlbmRlbmN5
IGlzIG5lZWRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCiAgICAgbG9hZExvYWRGZW5jZSgpOwog
ICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKKyAgICBVTlVTRURf
UEFSQU0odS5jb3B5KTsKICNlbmRpZgogICAgIHJldHVybiBkZXBlbmRlbmN5OwogfQogCi0vLyBG
SVhNRTogVGhpcyBjb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIGRlcGVuZGVu
Y3koKSBvdmVybG9hZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjk0MDUKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
aXplb2YoVCkgPT0gND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1
aW50MzJfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSk7Ci0jaWYgQ1BVKEFS
TTY0KQotICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIKLSAgICAg
ICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNv
cHkpKTsKLSNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0s
ICVbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAg
IDogW2luXSAiciIoY29weSkpOwotI2Vsc2UKLSAgICBsb2FkTG9hZEZlbmNlKCk7Ci0gICAgZGVw
ZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOwotI2VuZGlmCi0gICAgcmV0dXJu
IGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3ko
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUqID0gbnVsbHB0
cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdpdGggewotcHVibGljOgotICAg
IERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5KG51bGxEZXBlbmRlbmN5KCkp
Ci0gICAgICAgICwgdmFsdWUoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5jeVdp
dGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKLSAgICAgICAgOiBkZXBl
bmRlbmN5KGRlcGVuZGVuY3kpCi0gICAgICAgICwgdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7Ci0gICAgVCB2YWx1ZTsKLX07Ci0gICAg
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIERlcGVuZGVuY3lXaXRoPFQ+IGRlcGVuZGVu
Y3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsKLX0KLQogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KIGlubGluZSBUKiBjb25zdW1lKFQqIHBvaW50ZXIsIERlcGVuZGVuY3kgZGVw
ZW5kZW5jeSkKIHsKQEAgLTQ2OSwxMCArNDE0LDggQEAgQUxXQVlTX0lOTElORSBUJiBlbnN1cmVQ
b2ludGVyKEF0b21pYzxUKgogCiB1c2luZyBXVEY6OkF0b21pYzsKIHVzaW5nIFdURjo6RGVwZW5k
ZW5jeTsKLXVzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmNvbnN1bWU7CiB1
c2luZyBXVEY6OmRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRoOwogdXNpbmcg
V1RGOjplbnN1cmVQb2ludGVyOwogdXNpbmcgV1RGOjpudWxsRGVwZW5kZW5jeTsKIApJbmRleDog
U291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Qml0VmVjdG9yLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDEzIEBAIHB1YmxpYzogCiAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICBpdGVyYXRvciBvcGVyYXRv
cisrKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0ID0gKnRoaXM7
CisgICAgICAgICAgICArKygqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisKICAgICAgICAgYm9vbCBpc0F0RW5kKCkgY29uc3QKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIG1faW5kZXggPj0gbV9iaXRWZWN0b3ItPnNpemUoKTsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAko
cmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwg
dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMm
KTsKICAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBmb3Ig
d2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBv
ZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3QoY29uc3QgRnVuYyYpOwor
CiAgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhl
IGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgogICAgIC8v
IFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGluZSB2b2lkIERlcXVlPFQs
IGlubGluZUNhcGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWdu
ZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hp
bGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VGaXJzdCgpOwor
ICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICB3aGlsZSAoY291bnQt
LSkKKyAgICAgICAgICAgICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOworICAgICAgICAgICAgcmV0
dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOworICAgICAgICBhcHBl
bmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KIGlubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUxhc3QoY29u
c3QgRnVuYyYgZnVuYykKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2
aXNpb24gMjI1MDg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xp
ZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBKU1ZNQ2xp
ZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKFZNKgogICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6
bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAogICAgICAgICAiV2NvYyIsICJXZWJDb3Jl
IE91dHB1dCBDb25zdHJhaW50cyIsCiAgICAgICAgIFt2bSwgY2xpZW50RGF0YSwgbGFzdEV4ZWN1
dGlvblZlcnNpb24gPSB2bS0+aGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpXQotICAgICAg
ICAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSBtdXRh
YmxlIHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNp
b24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327578</attachid>
            <date>2017-11-25 16:08:49 -0800</date>
            <delta_ts>2017-11-25 18:35:32 -0800</delta_ts>
            <desc>a bit nicer</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>85481</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDYg
KzUwMyw3IEBAIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCiBoZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmNwcAogaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAogaGVhcC9NdXRhdG9yU3RhdGUu
Y3BwCitoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9TbG90VmlzaXRvci5j
cHAKIGhlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3RvY2hhc3RpY1Nw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkocmV2aXNp
b24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJh
aW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRl
ICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtpbmdD
b25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKQEAgLTcyLDExICs3MSwxMSBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFy
a2luZ0NvbnN0cmFpbnQoCiAgICAgLy8gZWxzZSBnZXRzIG1hcmtlZC4KICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5ID0gQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFy
a2luZzsKICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtp
bmdDb25zdHJhaW50PigKKyAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPFNl
cXVlbnRpYWxNYXJraW5nQ29uc3RyYWludD4oCiAgICAgICAgIHRvQ1N0cmluZygiQW1jIiwgY29u
c3RyYWludEluZGV4LCAiKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJh
aW50Q2FsbGJhY2spKSwgIikiKSwKICAgICAgICAgdG9DU3RyaW5nKCJBUEkgTWFya2luZyBDb25z
dHJhaW50ICMiLCBjb25zdHJhaW50SW5kZXgsICIgKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0
PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIiwgIiwgUmF3UG9pbnRlcih1c2VyRGF0YSks
ICIpIiksCiAgICAgICAgIFtjb25zdHJhaW50Q2FsbGJhY2ssIHVzZXJEYXRhXQotICAgICAgICAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAg
ICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIE1hcmtlciBtYXJr
ZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNNYXJrZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAg
IG1hcmtlci5NYXJrID0gbWFyazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2
IEBACiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQx
NTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBGMUUz
QTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURG
MDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFGQjM4
RjFFMTczQTY3MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFG
QjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmggKi87IH07Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1Rp
bWVvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBB
OUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5l
cy5oICovOyB9OwogCQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFG
QjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBG
MUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJF
NTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwpAQCAtMzExLDYgKzMxMCw5IEBACiAJCTBG
NEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAv
KiBTdXBlclNhbXBsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERC
MTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFB
NiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsg
fTsKKwkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzIxRkM3QTk3MzAw
MUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovOyB9OworCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMy
QUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJh
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRE
OEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMx
QjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFp
ckZpeE9idmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8q
IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0
RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Rjgy
ODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTc3
LDcgKzE5NzksNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAv
KiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUxNzNBNjIwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbklubGluZXMu
aDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5lcy5oOyBwYXRo
ID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMjY1LDYgKzIyNjYsMTAgQEAKIAkJMEY0QTM4RjgxQzhFMTNE
RjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdXBlclNhbXBsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0
REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1wLmg7IHBhdGggPSBi
My9CM09yaWdpbkR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzIx
RkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXNpdENvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJhaW50UGFyYWxsZWxpc20uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJh
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUNDMUM0QzFCNTQw
MDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckZpeE9idmlvdXNTcGlsbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRE
RTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHBhdGggPSBiMy9h
aXIvQWlyRml4T2J2aW91c1NwaWxscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjRERTFEMDFDNEQ3NjRCMDA0RDZDMTEgLyogQjNPcmlnaW5EdW1wLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5jcHA7IHBhdGggPSBiMy9CM09y
aWdpbkR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUwMiw2ICs1NTA3
LDcgQEAKIAkJCQkwRkQwRTVFNjFFNDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAq
LywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3Bw
ICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5o
ICovLAorCQkJCTBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxp
c20uaCAqLywKIAkJCQkwRjdERjEyRjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0
aWxpdHkuaCAqLywKIAkJCQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAg
Ki8sCiAJCQkJMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU2
MDEsNiArNTYwNyw4IEBACiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4IC8qIFJlZ2lzdGVy
U3RhdGUuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIgLyogUmVsZWFzZUhlYXBB
Y2Nlc3NTY29wZS5oICovLAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMxMzgzOSAvKiBSdW5uaW5n
U2NvcGUuaCAqLywKKwkJCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAv
KiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNs
b3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNp
dG9ySW5saW5lcy5oICovLApAQCAtNTYyMiw3ICs1NjMwLDcgQEAKIAkJCQkwRjFGQjM4QjFFMTcz
QTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgg
Ki8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICov
LAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVy
LmggKi8sCi0JCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5o
ICovLAorCQkJCTBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywK
IAkJCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLywKIAkJ
CQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8sCiAJCQkJMUFD
RjczNzYxNzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwICovLApAQCAtODE3Miw2ICs4MTgwLDcg
QEAKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJh
aW50UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0
RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3
OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTg4
ODcsNiArODg5Niw3IEBACiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09i
amVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3
MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2Vt
Ymx5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDA2LDYgKzkwMTYsNyBA
QAogCQkJCUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFk
YXB0aXZlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAw
QzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0
NDYwIC8qIE9iamVjdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1
NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERC
MUY2MzE4RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCkBA
IC05MjUzLDcgKzkyNjQsNiBAQAogCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMkQxQUE5MDk1
NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYw
Q0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYx
RkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhl
YWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCBi
b29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAoSGVh
cDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4
MCw3ICs5ODAsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImCiAg
ICAgCiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQgPSB0cnVlOwogCi0gICAgaWYgKEhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0
aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZFZpc2l0U3Ryb25nbHkobG9j
a2VyKSkgewpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZVRvTAogCiBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFn
ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewotICAgIGlmIChIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9j
a1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTExNDcsMTAgKzExNDcsMTAgQEAgYm9vbCBD
b2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwogI2lmIEVOQUJMRShERkdfSklUKQog
c3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNp
dGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYg
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgp
KSkKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkKHRy
YW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2Zyb20u
Z2V0KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTgw
LDcgKzExODAsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAg
ICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRT
dHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQog
ICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3
U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJl
bnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChv
bGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwpAQCAtMTI1NCwxNCArMTI1NCwxNCBAQCB2
b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdl
dCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4oKnJlZmVyZW5j
ZS0+dm0oKSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHJlZmVyZW5j
ZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGFsbEFyZUxpdmVTb0ZhcikgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVm
ZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkg
eworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChkZmdDb21tb24tPndlYWtTdHJ1Y3R1
cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0Zh
ciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNt
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitlbnVtIGNsYXNzIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA6IHVpbnQ4X3Qg
eworICAgIFNlcXVlbnRpYWwsCisgICAgUGFyYWxsZWwKK307CisgICAgCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCit7
CisgICAgc3dpdGNoIChwYXJhbGxlbGlzbSkgeworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFy
YWxsZWxpc206OlNlcXVlbnRpYWw6CisgICAgICAgIG91dC5wcmludCgiU2VxdWVudGlhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWw6CisgICAgICAgIG91dC5wcmludCgiUGFyYWxsZWwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhl
YXBUeXBlKQogICAgICwgbV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90
VmlzaXRvcj4oKnRoaXMsICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtl
X3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1h
a2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6
bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFpbnRT
ZXQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAgICwg
bV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2Rl
QmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJ
VFN0dWJSb3V0aW5lU2V0PigpKQpAQCAtOTExLDcgKzkxMSw3IEBAIHZvaWQgSGVhcDo6YWRkVG9S
ZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQrKzsKICAgICBp
ZiAobV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQpIHsKICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNl
KCk7Ci0gICAgICAgIGlmICghaXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAg
aWYgKCFpc01hcmtlZChjZWxsKSkgewogICAgICAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xs
ZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVk
IHBhc3QKICAgICAgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9y
ZSB0byBhbiB1bm1hcmtlZCBQb3NzaWJseUJsYWNrIG9iamVjdC4gSWYgdGhlCiAgICAgICAgICAg
ICAvLyBvYmplY3QgZ2V0cyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3
aWxsIGdvIGRvd24gdGhlIG5vcm1hbCBtYXJraW5nCkBAIC05MjQsMTUgKzkyNCwxNSBAQCB2b2lk
IEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgICAgICAgICAgICAgLy8g
Tm93IHdlIHByb3RlY3QgYWdhaW5zdCB0aGlzIHJhY2U6CiAgICAgICAgICAgICAgICAgLy8KICAg
ICAgICAgICAgICAgICAvLyAgICAgMSkgT2JqZWN0IHN0YXJ0cyBvdXQgYmxhY2sgKyB1bm1hcmtl
ZC4KLSAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkQ29uY3VycmVudGx5
IGhlcmUuCisgICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZCBoZXJlLgog
ICAgICAgICAgICAgICAgIC8vICAgICAyKSBPYmplY3QgaXMgbWFya2VkIGFuZCBncmV5ZWQuCiAg
ICAgICAgICAgICAgICAgLy8gICAgIDMpIE9iamVjdCBpcyBzY2FubmVkIGFuZCBibGFja2VkLgog
ICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2Vs
bFN0YXRlU3Ryb25nIGhlcmUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAv
LyBJbiB0aGlzIGNhc2Ugd2Ugd291bGQgaGF2ZSBtYWRlIHRoZSBvYmplY3Qgd2hpdGUgYWdhaW4s
IGV2ZW4gdGhvdWdoIGl0IHNob3VsZAogICAgICAgICAgICAgICAgIC8vIGJlIGJsYWNrLiBUaGlz
IGNoZWNrIGxldHMgdXMgY29ycmVjdCBvdXIgbWlzdGFrZS4gVGhpcyByZWxpZXMgb24gdGhlIGZh
Y3QgdGhhdAotICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkQ29uY3VycmVudGx5IGNvbnZlcmdl
cyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkQ29u
Y3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgICAgICAgICAgLy8gaXNNYXJrZWQgY29udmVyZ2Vz
IG1vbm90b25pY2FsbHkgdG8gdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY2Vs
bCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBkaWZmaWN1bHQgdG8gd29yayBvdXQg
d2hldGhlciB0aGUgb2JqZWN0IHNob3VsZCBiZSBncmV5IG9yIGJsYWNrIGF0CiAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoaXMgcG9pbnQuIFdlIHNheSBibGFjayBjb25zZXJ2YXRpdmVseS4KICAg
ICAgICAgICAgICAgICAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlC
bGFjayk7CkBAIC05NDgsNyArOTQ4LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0g
ICAgICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgICAg
IEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgLy8gSXQgY291bGQgYmUgdGhhdCB0
aGUgb2JqZWN0IHdhcyAqanVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3Rv
ciBtYXkgc2V0IHRoZQogICAgIC8vIHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFuZCB0aGVuIHRv
IFBvc3NpYmx5T2xkT3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8KICAgICAv
LyByYWNlIHdpdGggdGhlIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFj
Y3VyYXRlIGJlY2F1c2UgdGhlIG9iamVjdCBfd2lsbF8KQEAgLTEzMDUsNyArMTMwNSw3IEBAIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgLy8gV29uZGVy
aW5nIHdoYXQgdGhpcyBkb2VzPyBMb29rIGF0IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpLiBU
aGUgRE9NIGFuZCBvdGhlcnMgY2FuIGFsc28KICAgICAgICAgLy8gYWRkIHRoZWlyIG93biB1c2lu
ZyBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludCgpLgogICAgICAgICBib29sIGNvbnZlcmdlZCA9
Ci0gICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90Vmlz
aXRvciwgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgICAgICBtX2NvbnN0cmFp
bnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvcik7CiAgICAgICAgIGlmIChjb252
ZXJnZWQgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhc3NlcnRTaGFy
ZWRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25u
LCBDb2xsZWN0b3JQaGFzZTo6RW5kKTsKQEAgLTI1NzgsNyArMjU3OCw3IEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHBy
ZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUg
c2NhbiIpOwogICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZl
U2NhbigpOwogICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMo
KnRoaXMpOwpAQCAtMjU4OCwxMSArMjU4OCwxMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZl
Um9vdHMpOwogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3Rz
KTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhl
Y3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9u
LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwK
LSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
ICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1i
ZXJlZFNldCgqbV92bSwgc2xvdFZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNjA5LDE5ICsyNjEwLDIx
IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIHNsb3RWaXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHNs
b3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CiAgICAg
ICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7
CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAg
ICAgbV9oYW5kbGVTdGFjay52aXNpdChzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJEIiwgIkRlYnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAg
ICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0t
PnNhbXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CkBAIC0yNjM3LDM0ICsyNjQwLDM4IEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOwogICAgICAg
ICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwor
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAg
ICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRv
cik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4
ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlv
biwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAg
ICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
fSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CisgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAgICAgIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAogICAgICAgICAiV3JoIiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAotICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAg
ICAgICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJl
bmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkp
CiAgICAgICAgICAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRv
cik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1h
cmtpbmcpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAor
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkR3IiwgIkRG
RyBXb3JrbGlzdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwg
Y29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJP
ZldvcmtsaXN0cygpOyBpLS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlz
dEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAg
ICAgCkBAIC0yNjc5LDEyICsyNjg2LDEzIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0
b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlN
YXJraW5nKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywK
KyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAjZW5kaWYKICAgICAK
ICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
ICAgICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0
SG9sZGluZ0xvY2tzKAogICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0
cmFpbnQgb25seSBpZiBpdCdzIGJsYWNrLgpAQCAtMjY5MywxMSArMjcwMSwxNSBAQCB2b2lkIEhl
YXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG90Vmlz
aXRvci52aXNpdEFzQ29uc3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsK
KyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJNcm1zIiwgIk11dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGdyYWIgbG9ja3MgdG8gZmlkZGxlIHdpdGgg
dGhlIG11dGF0b3IgbWFyayBzdGFjayBhbmQgdGhlIHJhY2Ugc3RhY2suCisgICAgICAgICAgICAv
LyBUaGUgY2hhbmNlcyBvZiBjb250ZW50aW9uIG9uIHRob3NlIGxvY2tzIGFyZSBzbGltLCBidXQg
d2Ugc2hvdWxkIGRvIGl0IGFueXdheS4KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSW5k
aWNhdGUgdG8gdGhlIGZpeHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQogICAgICAgICAg
ICAgc2l6ZV90IHNpemUgPSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtT
dGFjay0+c2l6ZSgpOwogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNp
emUpOwpAQCAtMjcxMSw3ICsyNzIzLDggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMo
KQogICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKICAgICAgICAgICAg
IHJldHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6
ZSgpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlF
eGVjdXRpb24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24sCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogfQogCiB2b2lk
IEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3Ry
YWludD4gY29uc3RyYWludCkKQEAgLTI3OTQsMTYgKzI4MDcsNiBAQCB2b2lkIEhlYXA6OmFsbG93
Q29sbGVjdGlvbigpCiAgICAgbV9jb2xsZWN0Q29udGludW91c2x5TG9jay51bmxvY2soKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9y
KGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFs
bGVsU2xvdFZpc2l0b3JMb2NrKTsKLSAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
LSAgICBmdW5jKCptX211dGF0b3JTbG90VmlzaXRvcik7Ci0gICAgZm9yIChhdXRvJiBzbG90Vmlz
aXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9y
KTsKLX0KLQogdm9pZCBIZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSkK
IHsKICAgICBtX211dGF0b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVlOwpAQCAtMjg0Nyw0ICsyODUw
LDI0IEBAIHZvaWQgSGVhcDo6cmVtb3ZlSGVhcEZpbmFsaXplckNhbGxiYWNrKGMKICAgICBtX2hl
YXBGaW5hbGl6ZXJDYWxsYmFja3MucmVtb3ZlRmlyc3QoY2FsbGJhY2spOwogfQogCit2b2lkIEhl
YXA6OnNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRv
ciYpPj4gdGFzaykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4
KTsKKyAgICBtX2JvbnVzVmlzaXRvclRhc2sgPSB0YXNrOworICAgIG1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLm5vdGlmeUFsbCgpOworfQorCit2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVs
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgdW5z
aWduZWQgaW5pdGlhbFJlZkNvdW50ID0gdGFzay0+cmVmQ291bnQoKTsKKyAgICBzZXRCb251c1Zp
c2l0b3JUYXNrKHRhc2spOworICAgIHRhc2stPnJ1bigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayhudWxscHRyKTsKKyAgICB7CisgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0ZXgpOworICAgICAgICB3aGlsZSAodGFzay0+
cmVmQ291bnQoKSA+IGluaXRpYWxSZWZDb3VudCkKKyAgICAgICAgICAgIG1fbWFya2luZ0NvbmRp
dGlvblZhcmlhYmxlLndhaXQobV9tYXJraW5nTXV0ZXgpOworICAgIH0KK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjUw
ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNCw3ICsxMTQsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNf
dGltZUNoZWNrUmVzb2x1dGlvbiA9IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29u
c3Qgdm9pZCopOwotICAgIHN0YXRpYyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZv
aWQqKTsKICAgICBzdGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25z
dCB2b2lkKik7CiAgICAgCiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7
CkBAIC0zNTgsNiArMzU3LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5h
bGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJl
bW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsK
KyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAg
ICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4oZnVuYykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC01MjcsNiArNTM3LDggQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBz
ZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
KTsKKyAgICAKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVf
dCBtX3JhbVNpemU7CiAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3
OSw5ICs1OTEsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxh
YmxlUGFyYWxsZWxTbG90VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNo
U2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0Owog
ICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVC
bG9ja1NldD4gbV9jb2RlQmxvY2tzOwpAQCAtNjQyLDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAg
TGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVu
dDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlz
aXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxv
Y2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDE1IEBAIGlu
bGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFQKICAgICByZXR1cm4gbV9jb2xs
ZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJr
aW5nVmVyc2lvbigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qg
dm9pZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFk
VHlwZTo6SGVscGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2Vs
bCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAg
ICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRC
bG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01h
cmtlZCgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJz
aW9uKCksIGNlbGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25j
dXJyZW50bHkoY29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJp
dHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxs
b2NhdGlvbigpKQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJr
ZWQoKTsKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAg
IHJldHVybiBibG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+
aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBi
bG9jay5pc01hcmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNp
b24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFy
a2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAt
MjY5LDQgKzI1OSwxNCBAQCBpbmxpbmUgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnkoKQogICAg
ICAgICBzdG9wSWZOZWNlc3NhcnlTbG93KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Cit2b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQoreworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAg
ZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgZnVuYygqbV9tdXRhdG9yU2xvdFZp
c2l0b3IpOworICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0
b3JzKQorICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90
QnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3
IEBAIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQgSGVhcFNu
YXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKG1f
cHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKEhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJr
ZWQoY2VsbCkpOwogCiAgICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2Nh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxs
b2NhdGlvbi5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9MYXJnZUFsbG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJs
aWM6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtl
ZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBi
b29sIGlzTWFya2VkKEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlz
TWFya2VkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHko
SGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBp
c01hcmtlZCgpOyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgpIHx8IGlz
TmV3bHlBbGxvY2F0ZWQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNWYWxpZENlbGw7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw2IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNN
YXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29s
IGlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2
b2lkKik7CiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAg
Ym9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICAgICAg
CkBAIC0yODAsNyArMjc5LDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBhcmVNYXJrc1N0YWxlKCk7CiAgICAgYm9vbCBhcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKTsKLSAgICBEZXBlbmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0
aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIAogICAgIERlcGVu
ZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAK
QEAgLTQ5OCwxOCArNDk2LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0
YWxlKEgKICAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0K
IAotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFy
a3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQotewotICAg
IEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwotICAgIHJldHVybiBkZXBl
bmRlbmN5V2l0aChkZXBlbmRlbmN5KHZlcnNpb24pLCB2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9u
KTsKLX0KLQogaW5saW5lIERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFs
ZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkocmVzdWx0
LnZhbHVlKSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAg
ICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFib3V0
VG9NYXJrU2xvdyhtYXJraW5nVmVyc2lvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRlbmN5
OworICAgIHJldHVybiBkZXBlbmRlbmN5KHZlcnNpb24pOwogfQogCiBpbmxpbmUgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjphc3NlcnRNYXJrc05vdFN0YWxlKCkKQEAgLTUyNCwxNSArNTE2LDEw
IEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyhjb24KIAogaW5saW5lIGJv
b2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25z
dCB2b2lkKiBwKQogewotICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSA/
IGZhbHNlIDogaXNNYXJrZWRSYXcocCk7Ci19Ci0KLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjpp
c01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9p
ZCogcCkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeSht
YXJraW5nVmVyc2lvbik7Ci0gICAgaWYgKHJlc3VsdC52YWx1ZSkKKyAgICBIZWFwVmVyc2lvbiB2
ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBt
YXJraW5nVmVyc2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9tYXJr
cy5nZXQoYXRvbU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworICAgIHJldHVybiBtX21h
cmtzLmdldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KHZlcnNpb24pKTsKIH0KIAogaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVw
ZW5kZW5jeSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludC5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3
LDE1IEBACiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRv
ciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK01hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29u
c3RyYWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20p
CiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCiAgICAgLCBtX25hbWUo
V1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1
bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQotewotfQotCi1NYXJraW5n
Q29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIDo6RnVuY3Rpb248ZG91
YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKLSAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJl
dmlhdGVkTmFtZSkKLSAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRl
RnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV9xdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikpCiAgICAgLCBt
X3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKKyAgICAsIG1fcGFyYWxsZWxpc20ocGFyYWxsZWxpc20p
CiB7CiB9CiAKQEAgLTYzLDE0ICs0OCw1MSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNl
dFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29u
c3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21l
dGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7Ci0g
ICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0
aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdU
aW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0Q291
bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQuZGlk
VmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2
aXNpdG9yKTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcmVzdWx0ID0gZXhlY3V0ZUltcGwo
dmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNpdENvdW50
KCk7CisgICAgbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtID0gcmVzdWx0OworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUgTWFya2luZ0NvbnN0
cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICByZXR1cm4g
bGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOworfQorCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGRvUGFyYWxs
ZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlz
aXRDb3VudCgpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFy
YWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNp
dENvdW50ZXIodmlzaXRvcik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsK
KyAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7Cit9CisK
K3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYp
Cit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgTWFya2luZ0Nv
bnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQorewogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIg
KzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29uc3RyYWludFBhcmFsbGVs
aXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIKLSNpbmNsdWRlICJWaXNp
dGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9u
aWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCkBAIC00MywxOCArNDEsOSBAQCBjbGFzcyBNYXJraW5nQ29uc3RyYWlu
dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1h
cmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9u
PGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0
ZWROYW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5LCBDb25zdHJhaW50UGFy
YWxsZWxpc20pOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWlu
dCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7
CiAgICAgCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAg
ICAgCkBAIC02NCwzMyArNTMsMzkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRTdGF0cygpOwog
ICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZp
c2l0Q291bnQ7IH0KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbGFzdEV4ZWN1dGVQYXJhbGxl
bGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbTsgfQogICAgIAot
ICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRl
KFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRl
RnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fcXVpY2tX
b3JrRXN0aW1hdGVGdW5jdGlvbih2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgZG91YmxlIHdv
cmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBs
YXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Ci0gICAgfQorICAg
IHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsK
KyAgICAKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAg
ICAKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5p
c2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisg
ICAgLy8gSWYgdGhpcyBpcyBTZXF1ZW50aWFsLCBpdCBtZWFucyB0aGF0IHRoZSBjb25zdHJhaW50
IGhhcyB0byBiZSBydW4gc2VxdWVudGlhbGx5LCB3aXRoIG5vIGNvbmN1cnJlbnQKKyAgICAvLyBj
b25zdHJhaW50cy4KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBjb25z
dCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVh
bCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4g
c2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAg
ICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVv
dXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRv
ciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVsaXNt
OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20geyBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsIH07IC8vIEl0J3MgYSBoZXVyaXN0aWMsIHdl
IGNhbiBiZSB3cm9uZy4gVGhpcyBndWVzcyBvbmx5IGFmZmVjdHMgdGhlIGZpcnN0IHJ1bi4KICAg
ICBzaXplX3QgbV9sYXN0VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik1hcmtpbmdDb25zdHJhaW50U2V0LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisj
aW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCkBAIC0zNCw1MiArMzcsMjI1
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0
aW9uQ29udGV4dCB7CiBwdWJsaWM6Ci0gICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3Ry
YWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0
KQorICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCkKICAgICAg
ICAgOiBtX3NldChzZXQpCi0gICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwg
bV90aW1lb3V0KHRpbWVvdXQpCiAgICAgeworICAgICAgICBtX3NldC5tX2hlYXAuZm9yRWFjaFNs
b3RWaXNpdG9yKAorICAgICAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAg
ICAgICAgICAgICAgIG1fdmlzaXRDb3VudGVycy5hcHBlbmQoVmlzaXRDb3VudGVyKHZpc2l0b3Ip
KTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKICAgICBib29sIGRpZFZpc2l0U29tZXRo
aW5nKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nOwor
ICAgICAgICBmb3IgKFZpc2l0Q291bnRlciYgdmlzaXRDb3VudGVyIDogbV92aXNpdENvdW50ZXJz
KSB7CisgICAgICAgICAgICBpZiAodmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0CisgICAgZW51bSBTY2hl
ZHVsZXJQcmVmZXJlbmNlIHsKKyAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisgICAgICAgIE5l
eHRDb25zdHJhaW50Rmlyc3QKKyAgICB9OworCisgICAgLy8gcGlja05leHQoKSBpcyBjYWxsZWQg
d2hpbGUgYSBsb2NrIGlzIGhlbGQsIHNvIGl0IGNhbiBwcmV0ZW5kIGxpa2UgaXQncyBiZWluZyBj
YWxsZWQgZnJvbSB0aGUgbWFpbgorICAgIC8vIHRocmVhZC4gRm9yIGV4YW1wbGUsIGl0J3MgdG90
YWxseSBzYWZlIGZvciB0aGF0IGxhbWJkYSB0byBjbG9zZSBvdmVyIHRoZSBzdGFjay4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZXhlY3V0ZShTY2hlZHVsZXJQcmVmZXJl
bmNlIHByZWZlcmVuY2UsIGNvbnN0IEZ1bmMmIHBpY2tOZXh0KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOworICAgICAg
ICBtX3NldC5tX2hlYXAucnVuRnVuY3Rpb25JblBhcmFsbGVsKAorICAgICAgICAgICAgWyZdIChT
bG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGluZGV4VG9SdW47CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJ
blBhcmFsbGVsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWwuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdv
cmtNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeU5leHRDb25zdHJh
aW50ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiBwaWNrUmVzdWx0ID0gcGlja05leHQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghcGlja1Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2V4ZWN1dGVkLmdldCgqcGlja1Jlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50
JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNtKCkgPT0gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNrUmVz
dWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0cnlQYXJhbGxlbFdvcmsoKSB8fCB0cnlOZXh0Q29uc3RyYWlu
dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyeU5leHRDb25zdHJhaW50KCkgfHwgdHJ5UGFyYWxsZWxXb3JrKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX251bUFjdGl2ZVRocmVhZHMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQW55IHdhaXRpbmcgY291bGQgYmUg
cmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5pbmcgdGhlIFNsb3RWaXNpdG9yLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQgd291bGQgYmUgcHJvZml0YWJsZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcysrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVl
bnRpYWw7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBNYXJraW5n
Q29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFtpbmRleFRvUnVuXTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01v
ZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxsZWxXb3JrKHZp
c2l0b3IpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuZ2V0
KGluZGV4VG9SdW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFp
bnQuZmluaXNoUGFyYWxsZWxXb3JrKHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBh
cmFsbGVsLnRha2VGaXJzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAodW5zaWduZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGluZGV4VG9SdW47IH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuY2xl
YXIoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2V4
ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGlu
ZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUlu
UGFyYWxsZWxTZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzLS07CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkpCisg
ICAgICAgICAgICBleGVjdXRlKCptX3NldC5tX3NldFtpbmRleFRvUnVuXSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOwogICAg
IH0KICAgICAKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KLSAgICBib29s
IGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKKyAgICB2b2lkIGRyYWluKEJpdFZlY3RvciYg
dW5leGVjdXRlZCkKICAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRl
ZCkgewotICAgICAgICAgICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVk
LmNsZWFyKGluZGV4KTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBhdXRvIGl0ZXIgPSB1bmV4ZWN1dGVkLmJlZ2luKCk7CisgICAgICAgIGF1dG8gZW5k
ID0gdW5leGVjdXRlZC5lbmQoKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgTmV4dENvbnN0cmFpbnRG
aXJzdCwKKyAgICAgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7Cisg
ICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXJBbGwoKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBkaWRFeGVjdXRlKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRl
ZC5nZXQoaW5kZXgpOyB9CisgICAgdm9pZCBjb252ZXJnZShTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4mIG9yZGVyKQorICAgIHsKKyAgICAgICAg
aWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBpZiAob3JkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKIAotICAgIHZvaWQgZXhlY3V0ZShzaXplX3Qg
aW5kZXgpCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgY29uc3RyYWlu
dCBzZXF1ZW50aWFsbHkgaWYgd2UgdGhpbmsgaXQgd2lsbCBxdWlja2x5IGdpdmUgdXMgYQorICAg
ICAgICAvLyByZXN1bHQuIElmIHdlIHJhbiBpdCBpbiBwYXJhbGxlbCB0byBvdGhlciBjb25zdHJh
aW50cywgdGhlbiB3ZSBtaWdodCBlbmQgdXAgaGF2aW5nIHRvIHdhaXQgZm9yCisgICAgICAgIC8v
IHRob3NlIG90aGVyIGNvbnN0cmFpbnRzIHRvIGZpbmlzaCwgd2hpY2ggd291bGQgYmUgYSB3YXN0
ZSBvZiB0aW1lIHNpbmNlIGR1cmluZyBjb252ZXJnZW5jZSBpdCdzCisgICAgICAgIC8vIGVtcGly
aWNhbGx5IG1vc3Qgb3B0aW1hbCB0byByZXR1cm4gdG8gZHJhaW5pbmcgYXMgc29vbiBhcyBhIGNv
bnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsuIE1vc3QKKyAgICAgICAgLy8gY29uc3RyYWludHMgZG9u
J3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9zdCBvZiB0aGUgdGltZSwgYW5kIHdoZW4gdGhleSBkbyBn
ZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQKKyAgICAgICAgLy8gdG8gZ2VuZXJhdGUgZW5vdWdoIG9m
IGl0IHRvIGZlZWQgYSBkZWNlbnQgZHJhaW5pbmcgY3ljbGUuIFRoZXJlZm9yZSwgcGF1c2UgdGlt
ZXMgYXJlIGxvd2VzdCBpZgorICAgICAgICAvLyB3ZSBnZXQgdGhlIGhlY2sgb3V0IG9mIGhlcmUg
YXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsuIEkgdGhpbmsgdGhhdCBwYXJ0
IG9mIHdoYXQKKyAgICAgICAgLy8gbWFrZXMgdGhpcyBvcHRpbWFsIGlzIHRoYXQgd2UgYWxzbyBu
ZXZlciBhYm9ydCBydW5uaW5nIGEgY29uc3RyYWludCBlYXJseSwgc28gd2hlbiB3ZSBkbyBydW4K
KyAgICAgICAgLy8gb25lLCBpdCBoYXMgYW4gb3Bwb3J0dW5pdHkgdG8gZ2VuZXJhdGUgYXMgbXVj
aCB3b3JrIGFzIGl0IHBvc3NpYmx5IGNhbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2ltaWxh
ciByZWFzb25pbmcgYXBwbGllcyB0byBjb25zdHJhaW50cyB0aGF0IHRlbmQgdG8gcmV0dXJuIENv
c250cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwKKyAgICAgICAgLy8gZnJvbSBleGVjdXRlLiBU
aG9zZSBjb25zdHJhaW50cyB0eXBpY2FsbHkgaGF2ZSBhIHZlcnkgZmFzdC1ydW5uaW5nIGV4ZWN1
dGUgZnVuY3Rpb24sIHdoaWNoIHRoZW4KKyAgICAgICAgLy8gb2ZmbG9hZHMgYWxtb3N0IGFsbCBv
ZiB0aGUgd29yayB0byBhIHBhcmFsbGVsIHdvcmtlci4gSW4gdGhhdCBjYXNlLCBpdCBtYWtlcyBz
ZW5zZSB0byBydW4gdGhlCisgICAgICAgIC8vIGV4ZWN1dGUgZnVuY3Rpb24gc2VxdWVudGlhbGx5
LgorICAgICAgICBpZiAob3JkZXJbaW5kZXhdLT53b3JrRXN0aW1hdGUodmlzaXRvcikKKyAgICAg
ICAgICAgIHx8IG9yZGVyW2luZGV4XS0+bGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpID09IENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgIGV4ZWN1dGUoKm9yZGVy
W2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAob3JkZXIuaXNFbXB0eSgpICYm
IG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgUGFy
YWxsZWxXb3JrRmlyc3QsCisgICAgICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4geworICAgICAgICAgICAgICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA+PSBvcmRlci5zaXplKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG9yZGVyW2luZGV4KytdLT5pbmRleCgpOworICAgICAgICAgICAgfSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkK
ICAgICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1f
ZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGlu
ZGV4KTsKKyAgICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KGNvbnN0cmFpbnQuaW5kZXgoKSkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUoCisgICAgICAgICAgICBtX3NldC5t
X2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSk7CisgICAgICAgIGRpZEV4ZWN1dGUocGFyYWxs
ZWxpc20sIGNvbnN0cmFpbnQuaW5kZXgoKSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKKyAgICB2
b2lkIGRpZEV4ZWN1dGUoQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25l
ZCBpbmRleCkKKyAgICB7CisgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICAgICAg
aWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAg
ICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXgpOworICAgICAgICAg
ICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCiAgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0OwotICAgIFNsb3RWaXNpdG9y
JiBtX3Zpc2l0b3I7Ci0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7CiAgICAgQml0VmVjdG9y
IG1fZXhlY3V0ZWQ7Ci0gICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKKyAg
ICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBCaXRWZWN0
b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IG1f
dG9FeGVjdXRlU2VxdWVudGlhbGx5OworICAgIExvY2sgbV9sb2NrOworICAgIENvbmRpdGlvbiBt
X2NvbmRpdGlvbjsKKyAgICB1bnNpZ25lZCBtX251bUFjdGl2ZVRocmVhZHMgeyAwIH07CisgICAg
VmVjdG9yPFZpc2l0Q291bnRlciwgMTY+IG1fdmlzaXRDb3VudGVyczsKIH07CiAKLU1hcmtpbmdD
b25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgpCitNYXJraW5nQ29uc3RyYWludFNl
dDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYgaGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQog
ewogfQogCkBAIC0xMDcsMTggKzI4MywxOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpk
aWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0
aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogewotICAgIGFk
ZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVk
TmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7Cisg
ICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUo
YWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0
aWxpdHksIHBhcmFsbGVsaXNtKSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFk
ZCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRl
RnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5j
dGlvbiwKICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAg
Q29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKKyAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gcGFyYWxsZWxpc20pCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0
cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShl
eGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xh
dGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVj
dXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGls
aXR5LCBwYXJhbGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQo
CkBAIC0xMzEsOSArMzA4LDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAg
IG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBleGVj
dXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJvb2wgcmVzdWx0ID0g
ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKICAgICAgICAgZGF0YUxvZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDgsOSAr
MzI1LDkgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZl
cmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQor
Ym9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQo
KnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9u
Q29udGV4dCgqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRp
b24rKzsKICAgICAKQEAgLTE1OSwxNiArMzM2LDE0IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmV4ZWN1dGVDb252ZXIKIAogICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMg
dGhhdCB3ZSBoYXZlIG5vdCBleGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4K
ICAgICAvLyB3ZSBzaG91bGQgZXhlY3V0ZSB0aG9zZSBub3cuCi0gICAgaWYgKCFleGVjdXRpb25D
b250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpOwogICAgIAogICAg
IC8vIEZpcnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3IgZHJhaW5pbmcsIHNvIGl0
J3MgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMgb3RoZXIKICAgICAvLyB0aGFu
IHJvb3RzLgogICAgIGlmIChpdGVyYXRpb24gPT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93
dGhzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4o
bV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocyk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBrZWVwIHBy
ZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRoYXQgbmVlZCB0
byBiZSBmaXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxkIEdDIC0gdW50
aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gZ28gdG90YWxs
eQpAQCAtMjE1LDMzICszOTAsMTcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0
ZUNvbnZlcgogICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGItPnZvbGF0aWxp
dHkoKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogY29u
c3RyYWludCA6IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0cmFpbnQtPmlu
ZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRFeGVjdXRl
KGkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuZXhl
Y3V0ZShpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29udmVyZ2VuY2Us
IGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFwcGVuIGFueXRp
bWUKLSAgICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhp
cyBzaG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8gTm90IGNsZWFy
IGlmIHRoYXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2ZW4gYmV0dGVy
IGlzIHRoaXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHksIGtlZXAgcnVu
bmluZy4KLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVhc3QgTiB0aGlu
Z3MsIHJldHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0LgotICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMyCi0gICAg
ICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGV4ZWN1dGlvbkNvbnRleHQuY29udmVyZ2UobV9v
cmRlcmVkKTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3
ZSd2ZSBjb252ZXJnZWQuIFRoYXQgaGFwcGVucyBpZiB3ZSBkaWQgbm90IHZpc2l0IGFueXRoaW5n
LgorICAgIHJldHVybiAhZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpOwogfQog
CiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKICAgICBmb3IgKGF1
dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNp
dG9yLCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAg
ICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcpOwogICAg
IGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJ
KHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0IHsKIHB1YmxpYzoKLSAgICBNYXJr
aW5nQ29uc3RyYWludFNldCgpOworICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmKTsKICAg
ICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKICAgICAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2lu
ZygpOwpAQCAtNDEsMTUgKzQxLDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwog
ICAgIAogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAg
ICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiwKICAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCi0g
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6UGFyYWxsZWwpOwogICAgIAogICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5n
Q29uc3RyYWludD4pOwogICAgIApAQCAtNjAsOSArNjIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBub25l
IG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBhc3N1bWVzIHRoYXQgeW91
J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgotICAgIGJv
b2wgZXhlY3V0ZUNvbnZlcmdlbmNlKAotICAgICAgICBTbG90VmlzaXRvciYsCi0gICAgICAgIE1v
bm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIGJv
b2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgLy8gU2ltcGx5
IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgogICAgIHZvaWQg
ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOwpAQCAtNzEsMTAgKzcxLDExIEBAIHByaXZhdGU6CiAg
ICAgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0aW9uQ29u
dGV4dDsKICAgICAKLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3Im
LCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1w
bChTbG90VmlzaXRvciYpOwogICAgIAotICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBNb25v
dG9uaWNUaW1lLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJv
b2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgQml0
VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNv
bWV0aGluZyk7CiAgICAgCisgICAgSGVhcCYgbV9oZWFwOwogICAgIEJpdFZlY3RvciBtX3VuZXhl
Y3V0ZWRSb290czsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3RoczsKICAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Np
bXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVNYXJraW5nQ29uc3Ry
YWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhl
Y3V0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdU
Rk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxs
ZWxpc20pCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikp
Cit7Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlv
bjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKKyAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFy
YWxsZWxpc20pCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFt
ZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKQorICAgICwgbV9leGVj
dXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV9xdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikpCit7Cit9
CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKQor
eworfQorCitkb3VibGUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1
bmN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0
ZUZ1bmN0aW9uKHZpc2l0b3IpOworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorI2lu
Y2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgeworcHVibGljOgor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAg
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPGRv
dWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxs
ZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dCgpOworICAgIAorICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikgb3ZlcnJpZGU7CisgICAgCitwcml2YXRlOgorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworCisgICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rpb248ZG91
YmxlKFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb250YWluZXJUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRU
b01hcmtTdGFjayhDb250YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsKLSAg
ICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAg
ICAKICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHByaXZh
dGU6CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25z
dCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIAogICAgIFNl
dEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCkBA
IC01NjEsMTcgKzU2MSwxNiBAQCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9u
KCkKICAgICByZXR1cm4gZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNs
b3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jv
b2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlcikKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9u
dW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRD
b2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRN
dXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQog
CiBib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAg
ICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisg
ICAgcmV0dXJuICFpc0VtcHR5KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rv
ck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKQEAgLTU4MywxMiArNTgyLDE0IEBAIE5FVkVSX0lO
TElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBm
YWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAg
ICAgICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0
aXZlUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRp
bmdQYXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hh
cmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02
MjksMjggKzYzMCw1NyBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVz
CiAKICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAg
ICAgfTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJs
ZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAg
ICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAg
ICAgICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNT
aG91bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6
OkRvbmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0g
ICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0
YXR1cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1h
cmtlcnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFib251c1Rhc2sgJiYgaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtT
dGFjaygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+
IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNv
bWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0ds
b2JhbFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9u
dW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBh
cmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFy
YWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVv
dXQpOworICAgICAgICBpZiAoYm9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1
bigqdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3
ZSB3b3VsZCBub3QgaGF2ZSB0byBkbyB0aGlzLiBIb3dldmVyLCB0aGUgcGFyYWxsZWwgbWFya2lu
ZyBhbGdvcml0aG0gd2lsbAorICAgICAgICAgICAgLy8gZ2V0IGNvbmZ1c2VkIGlmIHdlIGluaXRp
YXRlIGl0IHdpdGggdGhlIGhlbHBlciB2aXNpdG9ycyBoYXZpbmcgYW55dGhpbmcgaW4gdGhlaXIg
c3RhY2tzLgorICAgICAgICAgICAgLy8gQWxzbywgdGhpcyBwcm90ZWN0cyBidWdzIHRoYXQgaW52
b2x2ZSByYWNlcyBiZXR3ZWVuIHZpc2l0Q2hpbGRyZW4gYW5kIG9uZSBvZiB0aGUKKyAgICAgICAg
ICAgIC8vIGNvbnN0cmFpbnRzLgorICAgICAgICAgICAgLy9kb25hdGVBbGwoKTsKKworICAgICAg
ICAgICAgLy8gVGhlIG1haW4gdGhyZWFkIGNvdWxkIHN0aWxsIGJlIHJ1bm5pbmcsIGFuZCBtYXkg
cnVuIGZvciBhIHdoaWxlLiBVbmxlc3Mgd2UgY2xlYXIgdGhlIHRhc2sKKyAgICAgICAgICAgIC8v
IG91cnNlbHZlcywgd2Ugd2lsbCBrZWVwIGxvb3BpbmcgYXJvdW5kIHRyeWluZyB0byBydW4gdGhl
IHRhc2suCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgICAgIGlmIChtX2hlYXAu
bV9ib251c1Zpc2l0b3JUYXNrID09IGJvbnVzVGFzaykKKyAgICAgICAgICAgICAgICAgICAgbV9o
ZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYm9udXNU
YXNrID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9u
VmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGRyYWlu
KHRpbWVvdXQpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpc0FjdGl2ZSA9IHRydWU7
CiAgICAgfQogfQpAQCAtNjc2LDkgKzcwNiwxMyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5S
ZXN1bHQgU2xvdFZpc2l0CiAgICAgICAgIHJldHVybiBkcmFpbkluUGFyYWxsZWwodGltZW91dCk7
CiAgICAgfQogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsK
LSAgICBkb25hdGVBbGwobG9ja2VyKTsKLSAgICAKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9o
ZWFwLm1fbWFya2luZ011dGV4KSk7CisgICAgcmV0dXJuIHdhaXRGb3JUZXJtaW5hdGlvbih0aW1l
b3V0KTsKK30KKworU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjp3
YWl0Rm9yVGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKICAgICBmb3IgKDs7KSB7CiAg
ICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJl
ZERyYWluUmVzdWx0OjpUaW1lZE91dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw4IEBAIHB1
YmxpYzoKIAogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNU
aW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFp
blJlc3VsdCBkcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQg
d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOwogCiAgICAgLy8gQXR0ZW1wdHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQg
b2YgZHJhaW5pbmcgdGhhdCBpbnZvbHZlcyBvbmx5IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBk
YXRhLiBUaGlzCiAgICAgLy8gaXMgbGlrZWx5IHRvIGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3Ig
bGVzcyB0aGFuIHRoYXQuIEl0IHdpbGwgdXN1YWxseSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQg
bWF5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
VmlzaXRDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBWaXNpdENvdW50ZXIoKSB7IH0KKyAgICAKKyAg
ICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDogbV92aXNpdG9y
KCZ2aXNpdG9yKQorICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlzaXRvci52aXNpdENv
dW50KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRDb3VudCgpCisgICAg
eworICAgICAgICByZXR1cm4gbV92aXNpdG9yLT52aXNpdENvdW50KCkgLSBtX2luaXRpYWxWaXNp
dENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRv
ciB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgotI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIFZpc2l0aW5nVGltZW91dCB7Ci1wdWJsaWM6Ci0gICAgVmlzaXRp
bmdUaW1lb3V0KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZpc2l0aW5nVGltZW91dChTbG90
VmlzaXRvciYgdmlzaXRvciwgYm9vbCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0
aW1lb3V0KQotICAgICAgICA6IG1fZGlkVmlzaXRTb21ldGhpbmcoZGlkVmlzaXRTb21ldGhpbmcp
Ci0gICAgICAgICwgbV92aXNpdENvdW50QmVmb3JlKHZpc2l0b3IudmlzaXRDb3VudCgpKQotICAg
ICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90
IHZpc2l0Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gdmlzaXRvci52aXNpdENvdW50KCkgLSBtX3Zpc2l0Q291bnRCZWZvcmU7Ci0gICAgfQot
Ci0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nIHx8IHZpc2l0Q291bnQo
dmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dChTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGlu
Zyh2aXNpdG9yKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAgIAotcHJpdmF0
ZToKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OwotICAgIHNpemVfdCBt
X3Zpc2l0Q291bnRCZWZvcmUgeyAwIH07Ci0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAg
dm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsK
LSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZENvbmN1cnJlbnRseShtYXJraW5nVmVyc2lv
biwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWQobWFy
a2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4o
anNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjI1MDg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTEwMSwxNCArMTEwMSwxNCBAQCBib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmlu
Z0dDKCkKICAgICAvLyBoYXMgYW55IGxhcmdlIHByb3BlcnR5IG5hbWVzLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTczMzQKICAgICAKLSAgICByZXR1
cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX2dsb2Jh
bE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJv
dG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoc3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01h
cmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8
fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWQoc3RvcmVkUHJvdG90
eXBlT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNDaGVhcER1cmluZ0dDKCkpCi0gICAgICAgIHJl
dHVybiBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIEhl
YXA6OmlzTWFya2VkKHRoaXMpOwogICAgIAogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
dGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyMjUwODQp
CisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxMSAr
MzQ2LDE2IEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVwZW5kZW5jeSgKICAgICBy
ZXR1cm4gMDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHNpemVvZihUKSA9PSA4Pjo6dHlwZSogPSBudWxscHRyPgordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewogICAg
IHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDY0X3QgY29weSA9IGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4odmFsdWUpOworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDMyX3QgY29weTsKKyAg
ICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5ID0gMDsKKyAgICB1LnZhbHVlID0g
dmFsdWU7CiAjaWYgQ1BVKEFSTTY0KQogICAgIC8vIENyZWF0ZSBhIG1hZ2ljYWwgemVybyB2YWx1
ZSB0aHJvdWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRpb24KICAgICAvLyBpc24n
dCB2aXNpYmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVzYWJsZSBhcyBh
biBvZmZzZXQgaW4KQEAgLTM2Myw4MCArMzY4LDIwIEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5KFQgdmEKICAgICAvLyBvciBhbiBhY3F1aXJlIGxvYWQuCiAgICAgYXNtKCJl
b3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgogICAgICAgICA6IFtkZXBlbmRlbmN5
XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICA6
IFtpbl0gInIiKHUuY29weSkpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBhc20oImVvciAlW2RlcGVu
ZGVuY3ldLCAlW2luXSwgJVtpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5k
ZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5j
b3B5KSk7CiAjZWxzZQogICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZvciB0aGlzIGFy
Y2hpdGVjdHVyZS4KICAgICBsb2FkTG9hZEZlbmNlKCk7CiAgICAgZGVwZW5kZW5jeSA9IDA7Ci0g
ICAgVU5VU0VEX1BBUkFNKGNvcHkpOworICAgIFVOVVNFRF9QQVJBTSh1LmNvcHkpOwogI2VuZGlm
CiAgICAgcmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgYWxt
b3N0IGlkZW50aWNhbCB0byB0aGUgb3RoZXIgZGVwZW5kZW5jeSgpIG92ZXJsb2FkLgotLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwNQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA0Pjo6dHlwZSog
PSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkK
LXsKLSAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQzMl90IGNvcHkgPSBiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgYXNtKCJlb3IgJXdb
ZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIi
KGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2VsaWYgQ1BVKEFSTSkK
LSAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCi0gICAgICAgIDogW2Rl
cGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0j
ZWxzZQotICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVT
RURfUEFSQU0oY29weSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVwZW5kZW5jeTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSAy
Pjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3ko
VCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dmFsdWUpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHNpemVvZihUKSA9PSAxPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBl
bmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0
aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBEZXBlbmRlbmN5V2l0aCB7Ci1wdWJsaWM6Ci0gICAgRGVwZW5kZW5jeVdpdGgoKQotICAg
ICAgICA6IGRlcGVuZGVuY3kobnVsbERlcGVuZGVuY3koKSkKLSAgICAgICAgLCB2YWx1ZSgpCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVu
Y3ksIGNvbnN0IFQmIHZhbHVlKQotICAgICAgICA6IGRlcGVuZGVuY3koZGVwZW5kZW5jeSkKLSAg
ICAgICAgLCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeTsKLSAgICBUIHZhbHVlOwotfTsKLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1pbmxpbmUgRGVwZW5kZW5jeVdpdGg8VD4gZGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBl
bmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGVwZW5kZW5jeVdpdGg8VD4o
ZGVwZW5kZW5jeSwgdmFsdWUpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQq
IGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewpAQCAtNDY5LDEw
ICs0MTQsOCBAQCBBTFdBWVNfSU5MSU5FIFQmIGVuc3VyZVBvaW50ZXIoQXRvbWljPFQqCiAKIHVz
aW5nIFdURjo6QXRvbWljOwogdXNpbmcgV1RGOjpEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpEZXBl
bmRlbmN5V2l0aDsKIHVzaW5nIFdURjo6Y29uc3VtZTsKIHVzaW5nIFdURjo6ZGVwZW5kZW5jeTsK
LXVzaW5nIFdURjo6ZGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmVuc3VyZVBvaW50ZXI7CiB1
c2luZyBXVEY6Om51bGxEZXBlbmRlbmN5OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24g
MjI1MDg0KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwOCw2ICszMDgsMTMgQEAgcHVibGljOiAKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgICAgfQogCisgICAgICAgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpdGVyYXRvciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgICAgICsrKCp0aGlz
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKwogICAgICAgICBib29s
IGlzQXRFbmQoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA+
PSBtX2JpdFZlY3Rvci0+c2l6ZSgpOwpJbmRleDogU291cmNlL1dURi93dGYvRGVxdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBT
b3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDExIEBA
IHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgogICAgIHZv
aWQgYXBwZW5kQW5kQnViYmxlKFUmJiwgY29uc3QgRnVuYyYpOwogICAgIAorICAgIC8vIFJlbW92
ZSBhbmQgcmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0
dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCisgICAgLy8gVCBpZiBpdCB0aGUg
Y2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KKyAgICBUIHRha2VGaXJzdChjb25zdCBGdW5jJik7CisKICAgICAvLyBSZW1vdmUgYW5kIHJl
dHVybiB0aGUgbGFzdCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVl
LiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCiAgICAgLy8gVCBpZiBpdCB0aGUgY2FsbGJhY2sg
YWx3YXlzIHJldHVybnMgZmFsc2UuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KQEAgLTU3
MSw2ICs1NzYsMjUgQEAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcAog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgoraW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlRmly
c3QoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgdW5z
aWduZWQgc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICB3aGlsZSAoY291bnQgPCBzaXplKSB7Cisg
ICAgICAgIFQgY2FuZGlkYXRlID0gdGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChmdW5jKGNhbmRp
ZGF0ZSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAgIHBy
ZXBlbmQodGFrZUxhc3QoKSk7CisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAg
ICB9CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIGFwcGVuZChXVEZNb3ZlKGNhbmRpZGF0ZSkp
OworICAgIH0KKyAgICByZXR1cm4gVCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogaW5saW5lIFQgRGVx
dWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlTGFzdChjb25zdCBGdW5jJiBmdW5jKQogewogICAg
IHVuc2lnbmVkIGNvdW50ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9T
aW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAor
I3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaD4KKwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xp
ZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8aGVhcC9G
YXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPGhlYXAvSGVhcElu
bGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CiAjaW5jbHVkZSA8
aGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJrZWRCbG9j
a0lubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg+CiAj
aW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5n
VGltZW91dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KQEAgLTcyLDEwICs3MiwxMCBAQCB2
b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQoVk0qCiAgICAgSlNWTUNsaWVudERh
dGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEoKnZtKTsKICAgICB2bS0+Y2xpZW50
RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRoaXMgcG9pbnRlci4KICAgICAKLSAg
ICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PigK
KyAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50PigKICAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29uc3RyYWludHMiLAog
ICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9uID0gdm0tPmhlYXAu
bXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7CisgICAgICAgIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpIG11dGFibGUgewogICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LT5oZWFwOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaGVhcC5tdXRhdG9yRXhlY3V0
aW9uVmVyc2lvbigpID09IGxhc3RFeGVjdXRpb25WZXJzaW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327579</attachid>
            <date>2017-11-25 18:35:32 -0800</date>
            <delta_ts>2017-11-25 19:02:58 -0800</delta_ts>
            <desc>made it more testable</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>116196</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUwODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2
ICs1MDMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVk
ZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJraW5n
Q29uc3RyYWludC5oIgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCkBAIC03MiwxMSArNzEsMTEgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1h
cmtpbmdDb25zdHJhaW50KAogICAgIC8vIGVsc2UgZ2V0cyBtYXJrZWQuCiAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkgdm9sYXRpbGl0eSA9IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1h
cmtpbmc7CiAgICAgCi0gICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJr
aW5nQ29uc3RyYWludD4oCisgICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxT
ZXF1ZW50aWFsTWFya2luZ0NvbnN0cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNv
bnN0cmFpbnRJbmRleCwgIigiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3Ry
YWludENhbGxiYWNrKSksICIpIiksCiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29u
c3RyYWludCAjIiwgY29uc3RyYWludEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEp
LCAiKSIpLAogICAgICAgICBbY29uc3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAg
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFy
a2VyOwogICAgICAgICAgICAgbWFya2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAg
ICBtYXJrZXIuTWFyayA9IG1hcms7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgs
NiBAQAogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0
MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFF
M0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFE
RjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgfTsKIAkJMEYxRkIz
OEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
RkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5oICovOyB9OwotCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdU
aW1lb3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxRkIzOTYxRTFBRjdFMTAw
QTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGlu
ZXMuaCAqLzsgfTsKIAkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
RkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OwogCQkw
RjFGQjM5OTFFMUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlC
RTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKQEAgLTMxMSw2ICszMTAsOSBAQAogCQkw
RjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTgg
LyogU3VwZXJTYW1wbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTRE
QjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQx
QTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87
IH07CisJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4QzcyMUZDN0E5NzMw
MDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLzsgfTsKKwkJMEY0RDhDNzUxRkM3QTk3RDAwMUQz
MkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFp
bnRQYXJhbGxlbGlzbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRD
MUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBB
aXJGaXhPYnZpb3VzU3BpbGxzLmggKi87IH07CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAv
KiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1
IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBG
NEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3Bh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4
Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk3
Nyw3ICsxOTc5LDYgQEAKIAkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3Vz
U3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAg
LyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QzFFMTczQTYyMDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdGluZ1RpbWVvdXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5J
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVz
Lmg7IHBhdGggPSBkZmcvREZHUGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxRkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI2NSw2ICsyMjY2LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEz
REYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3VwZXJTYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5
NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0g
YjMvQjNPcmlnaW5EdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4Qzcy
MUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBT
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29u
c3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0
MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMv
YWlyL0FpckZpeE9idmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNP
cmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MDIsNiArNTUw
Nyw3IEBACiAJCQkJMEZEMEU1RTYxRTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmgg
Ki8sCiAJCQkJMTQ2QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNw
cCAqLywKIAkJCQkxNDlEQUFGMjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMu
aCAqLywKKwkJCQkwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVs
aXNtLmggKi8sCiAJCQkJMEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xh
dGlsaXR5LmggKi8sCiAJCQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3Bw
ICovLAogCQkJCTBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01
NjAxLDYgKzU2MDcsOCBAQAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIwOCAvKiBSZWdpc3Rl
clN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFw
QWNjZXNzU2NvcGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyogUnVubmlu
Z1Njb3BlLmggKi8sCisJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTgg
LyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBT
bG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90Vmlz
aXRvcklubGluZXMuaCAqLywKQEAgLTU2MjIsNyArNTYzMCw3IEBACiAJCQkJMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAq
LywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXpl
ci5oICovLAotCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQu
aCAqLywKKwkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8s
CiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJ
CQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLAogCQkJCTFB
Q0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgxNzIsNiArODE4MCw3
IEBACiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZv
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3Ry
YWludFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUI4MzkyRTFCQUNBRDM2MDA0
NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUMzQzYwMUYz
NzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxsRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC04
ODg3LDYgKzg4OTYsNyBAQAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtP
YmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0
NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFrU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFQjFGNzVBRDczMDAwQkNBQUYgLyogSlNXZWJBc3Nl
bWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlFIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTAwNiw2ICs5MDE2LDcg
QEAKIAkJCQlFM0MyOTVERDFFRDJDQkRBMDBEMzAxNkYgLyogT2JqZWN0UHJvcGVydHlDaGFuZ2VB
ZGFwdGl2ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBBMUI2MThCNjYw
MEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEM0U0MEMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjREOEM3ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ2MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBPYmplY3RQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjRBOEY3MEU1
NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQURE
QjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovLApA
QCAtOTI1Myw3ICs5MjY0LDYgQEAKIAkJCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2ODIgLyogVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDJEMUFBOTA5
NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2
MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
MUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAg
Ym9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogCiAgICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtl
ZENvbmN1cnJlbnRseShtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKEhl
YXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQogICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
ODAsNyArOTgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJgog
ICAgIAogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0gdHJ1ZTsKIAotICAgIGlmIChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQo
dGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KGxv
Y2tlcikpIHsKQEAgLTExMzIsNyArMTEzMiw3IEBAIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVUb0wKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRB
Z2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxv
Y2tUb0pldHRpc29uRHVlVG9PbGRBZ2UoKSkpCkBAIC0xMTQ3LDEwICsxMTQ3LDEwIEBAIGJvb2wg
Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWcKICNpZiBFTkFCTEUoREZHX0pJVCkK
IHN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERGRzo6V2Vha1JlZmVyZW5jZVRyYW5z
aXRpb24mIHRyYW5zaXRpb24pCiB7Ci0gICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYm
ICFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQo
KSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZCh0
cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9mcm9t
LmdldCgpKSkKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE4
MCw3ICsxMTgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgog
ICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xk
U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0K
ICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5l
d1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkob2xkU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQo
b2xkU3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKQEAgLTEyNTQsMTQgKzEyNTQsMTQgQEAg
dm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0gZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5n
ZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0PENvZGVCbG9jayo+KCpyZWZlcmVu
Y2UtPnZtKCksIHJlZmVyZW5jZSkpOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChyZWZlcmVu
Y2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJl
ZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkp
IHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQoZGZnQ29tbW9uLT53ZWFrU3RydWN0
dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29G
YXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFp
bnRQYXJhbGxlbGlzbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBDb25zdHJhaW50UGFyYWxsZWxpc20gOiB1aW50OF90
IHsKKyAgICBTZXF1ZW50aWFsLAorICAgIFBhcmFsbGVsCit9OworICAgIAorfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQor
eworICAgIHN3aXRjaCAocGFyYWxsZWxpc20pIHsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBh
cmFsbGVsaXNtOjpTZXF1ZW50aWFsOgorICAgICAgICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206OlBh
cmFsbGVsOgorICAgICAgICBvdXQucHJpbnQoIlBhcmFsbGVsIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgxLDcgKzI4MSw3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBo
ZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xv
dFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0YWNrKHN0ZDo6bWFr
ZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJrU3RhY2soc3RkOjpt
YWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3RyYWludFNldChzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwgbV9jb25zdHJhaW50
U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0aGlzKSkKICAgICAs
IG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29k
ZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxK
SVRTdHViUm91dGluZVNldD4oKSkKQEAgLTkxMSw3ICs5MTEsNyBAQCB2b2lkIEhlYXA6OmFkZFRv
UmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkKys7CiAgICAg
aWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAg
IGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8vIER1cmluZyBhIGZ1bGwgY29s
bGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2aXZl
ZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3Rv
cmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmplY3QuIElmIHRoZQogICAgICAgICAg
ICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQg
d2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0LDE1ICs5MjQsMTUgQEAgdm9p
ZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgICAgICAgICAgICAgIC8v
IE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAgICAgICAgICAgICAgIC8vCiAg
ICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMgb3V0IGJsYWNrICsgdW5tYXJr
ZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZENvbmN1cnJlbnRs
eSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWQgaGVyZS4K
ICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1hcmtlZCBhbmQgZ3JleWVkLgog
ICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nhbm5lZCBhbmQgYmxhY2tlZC4K
ICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNl
bGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAg
Ly8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUgb2JqZWN0IHdoaXRlIGFnYWlu
LCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAgICAgICAvLyBiZSBibGFjay4gVGhp
cyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRoaXMgcmVsaWVzIG9uIHRoZSBm
YWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtlZENvbmN1cnJlbnRseSBjb252ZXJn
ZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZENv
bmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkIGNvbnZlcmdl
cyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNl
bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlmZmljdWx0IHRvIHdvcmsgb3V0
IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBibGFjayBhdAogICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sgY29uc2VydmF0aXZlbHkuCiAg
ICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5
QmxhY2spOwpAQCAtOTQ4LDcgKzk0OCw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0
KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZQot
ICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgICAg
ICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQg
dGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0
b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0ZWx5R3JleSBhbmQgdGhlbiB0
byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvCiAgICAg
Ly8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBpcyBh
Y2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0xMzA1LDcgKzEzMDUsNyBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgICAgIC8vIFdvbmRl
cmluZyB3aGF0IHRoaXMgZG9lcz8gTG9vayBhdCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKS4g
VGhlIERPTSBhbmQgb3RoZXJzIGNhbiBhbHNvCiAgICAgICAgIC8vIGFkZCB0aGVpciBvd24gdXNp
bmcgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoKS4KICAgICAgICAgYm9vbCBjb252ZXJnZWQg
PQotICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZp
c2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICAgICAgbV9jb25zdHJh
aW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IpOwogICAgICAgICBpZiAoY29u
dmVyZ2VkICYmIHNsb3RWaXNpdG9yLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXNzZXJ0U2hh
cmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gY2hhbmdlUGhhc2UoY29u
biwgQ29sbGVjdG9yUGhhc2U6OkVuZCk7CkBAIC0yNTc4LDcgKzI1NzgsNyBAQCB2b2lkIEhlYXA6
OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAg
ICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBUaW1pbmdTY29wZSBw
cmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0aXZl
IHNjYW4iKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckNvbnNlcnZhdGl2
ZVNjYW4oKTsKICAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3Rz
KCp0aGlzKTsKQEAgLTI1ODgsMTEgKzI1ODgsMTIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMoKQogICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2
ZVJvb3RzKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290
cyk7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4
ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlv
biwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290cyIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVt
YmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYwOSwxOSArMjYxMCwy
MSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICBzbG90Vmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICBz
bG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOwogICAg
ICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24p
OworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAg
ICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
ICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAog
ICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQog
ICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3Zt
LT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwpAQCAtMjYzNywzNCArMjY0MCwzOCBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKICAgICAg
ICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsK
KyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkpzciIsICJKSVQgU3R1YiBSb3V0aW5lcyIsCi0gICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAg
ICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZpc2l0
b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlF
eGVjdXRpb24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24sCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKLSAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAg
ICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7CiAgICAgICAg
IH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOworICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwKLSAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAg
ICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgp
KQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0
b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlN
YXJraW5nKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywK
KyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEdyIsICJE
RkcgV29ya2xpc3RzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Is
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykKICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xp
c3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
ICAgIApAQCAtMjY3OSwxMiArMjY4NiwxMyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHNsb3RWaXNp
dG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcs
CisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogI2VuZGlmCiAgICAg
CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tzIiwK
LSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
ICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91
dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25z
dHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KQEAgLTI2OTMsMTEgKzI3MDEsMTUgQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZp
c2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCk7
CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQsCisgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNl
dC0+YWRkKAogICAgICAgICAiTXJtcyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBncmFiIGxvY2tzIHRvIGZpZGRsZSB3aXRo
IHRoZSBtdXRhdG9yIG1hcmsgc3RhY2sgYW5kIHRoZSByYWNlIHN0YWNrLgorICAgICAgICAgICAg
Ly8gVGhlIGNoYW5jZXMgb2YgY29udGVudGlvbiBvbiB0aG9zZSBsb2NrcyBhcmUgc2xpbSwgYnV0
IHdlIHNob3VsZCBkbyBpdCBhbnl3YXkuCisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIElu
ZGljYXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKICAgICAgICAg
ICAgIHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJr
U3RhY2stPnNpemUoKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChz
aXplKTsKQEAgLTI3MTEsNyArMjcyMyw4IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYpIC0+IGRvdWJsZSB7CiAgICAgICAgICAg
ICByZXR1cm4gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3RhY2stPnNp
emUoKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKIH0KIAogdm9p
ZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0
cmFpbnQ+IGNvbnN0cmFpbnQpCkBAIC0yNzk0LDE2ICsyODA3LDYgQEAgdm9pZCBIZWFwOjphbGxv
d0NvbGxlY3Rpb24oKQogICAgIG1fY29sbGVjdENvbnRpbnVvdXNseUxvY2sudW5sb2NrKCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRv
cihjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJh
bGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0b3IpOwotICAgIGZvciAoYXV0byYgc2xvdFZp
c2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICBmdW5jKCpzbG90VmlzaXRv
cik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUp
CiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCArMjg1
MCwyNCBAQCB2b2lkIEhlYXA6OnJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9o
ZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJlbW92ZUZpcnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBI
ZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4+IHRhc2spCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRl
eCk7CisgICAgbV9ib251c1Zpc2l0b3JUYXNrID0gdGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwordm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxl
bChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIHVu
c2lnbmVkIGluaXRpYWxSZWZDb3VudCA9IHRhc2stPnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNW
aXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5ydW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVsbHB0cik7CisgICAgeworICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2st
PnJlZkNvdW50KCkgPiBpbml0aWFsUmVmQ291bnQpCisgICAgICAgICAgICBtX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZS53YWl0KG1fbWFya2luZ011dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1
MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTQsNyArMTE0LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X3RpbWVDaGVja1Jlc29sdXRpb24gPSAxNjsKIAogICAgIHN0YXRpYyBib29sIGlzTWFya2VkKGNv
bnN0IHZvaWQqKTsKLSAgICBzdGF0aWMgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2
b2lkKik7CiAgICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChIZWFwVmVyc2lvbiwgY29u
c3Qgdm9pZCopOwogICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCop
OwpAQCAtMzU4LDYgKzM1NywxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRIZWFwRmlu
YWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CiAgICAgdm9pZCBy
ZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7
CisgICAgCisgICAgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+Pik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAg
ICB2b2lkIHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAg
ICAgICAgcnVuVGFza0luUGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+KGZ1bmMpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZv
aWQgZm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmKTsKIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQWxsb2NhdGluZ1Njb3BlOwpAQCAtNTI3LDYgKzUzNyw4IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKIAorICAgIHZvaWQg
c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+
Pik7CisgICAgCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBjb25zdCBzaXpl
X3QgbV9yYW1TaXplOwogICAgIGNvbnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CkBAIC01
NzksOSArNTkxLDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8U2xvdFZpc2l0b3IqPiBtX2F2YWls
YWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzOwogICAgIExvY2sgbV9wYXJhbGxlbFNsb3RWaXNpdG9y
TG9jazsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgZm9yRWFj
aFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmKTsKLQogICAgIEhhbmRsZVNldCBtX2hhbmRsZVNldDsK
ICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2Rl
QmxvY2tTZXQ+IG1fY29kZUJsb2NrczsKQEAgLTY0Miw2ICs2NTEsNyBAQCBwcml2YXRlOgogICAg
IExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzOwogCiAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQgbV9oZWxwZXJDbGll
bnQ7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gbV9ib251c1Zp
c2l0b3JUYXNrOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIHNpemVfdCBtX2Js
b2NrQnl0ZXNBbGxvY2F0ZWQgeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDI1ICs2OCwxNSBAQCBp
bmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUCiAgICAgcmV0dXJuIG1fY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQ7CiB9CiAKKy8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBhbiBpbnN0YW5jZSBtZXRob2QsIHNvIHRoYXQgaXQgY2FuIGdldCB0aGUgbWFy
a2luZ1ZlcnNpb24oKSBxdWlja2x5LgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3OTk4OAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0
IHZvaWQqIHJhd0NlbGwpCiB7Ci0gICAgQVNTRVJUKG1heUJlR0NUaHJlYWQoKSAhPSBHQ1RocmVh
ZFR5cGU6OkhlbHBlcik7CiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihyYXdDZWxsKTsKICAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7CiAgICAgTWFya2Vk
QmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKLSAgICByZXR1cm4gYmxvY2suaXNN
YXJrZWQoCi0gICAgICAgIGJsb2NrLnZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVy
c2lvbigpLCBjZWxsKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KGNvbnN0IHZvaWQqIHJhd0NlbGwpCi17Ci0gICAgSGVhcENlbGwqIGNlbGwgPSBi
aXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKLSAgICBpZiAoY2VsbC0+aXNMYXJnZUFs
bG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFy
a2VkKCk7Ci0gICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKLSAg
ICByZXR1cm4gYmxvY2suaXNNYXJrZWRDb25jdXJyZW50bHkoCi0gICAgICAgIGJsb2NrLnZtKCkt
PmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKKyAgICByZXR1cm4g
YmxvY2suaXNNYXJrZWQoYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJz
aW9uKCksIGNlbGwpOwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6dGVzdEFuZFNldE1h
cmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcmF3Q2VsbCkKQEAg
LTI2OSw0ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5KCkKICAg
ICAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgordm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAg
IGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RW
aXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNp
dG9ycykKKyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hv
dEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjks
NyBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3QoCiB2b2lkIEhlYXBT
bmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQogewogICAgIEFTU0VSVCht
X3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOwotICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFy
a2VkKGNlbGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGluZ05vZGVGb3JDZWxsKGNlbGwpKQogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFs
bG9jYXRpb24uaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVi
bGljOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZCgpIHsgcmV0dXJuIG1faXNNYXJr
ZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsgfQogICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBpc01hcmtlZChIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KICAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqLCBEZXBlbmRlbmN5KSB7IHJldHVybiBp
c01hcmtlZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkQ29uY3VycmVudGx5
KEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4g
aXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyByZXR1cm4gaXNNYXJrZWQoKSB8fCBp
c05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29sIGhhc1ZhbGlkQ2VsbCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNiBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlz
TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9v
bCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qg
dm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAg
IGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgICAg
IApAQCAtMjgwLDcgKzI3OSw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgYXJlTWFya3NTdGFsZSgpOwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbik7Ci0gICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdp
dGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAKICAgICBEZXBl
bmRlbmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAgICAg
CkBAIC00OTgsMTggKzQ5NiwxMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NT
dGFsZShICiAgICAgcmV0dXJuIG1hcmtpbmdWZXJzaW9uICE9IG1fbWFya2luZ1ZlcnNpb247CiB9
CiAKLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gTWFya2VkQmxvY2s6OmFyZU1h
cmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKLXsKLSAg
ICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKLSAgICByZXR1cm4gZGVw
ZW5kZW5jeVdpdGgoZGVwZW5kZW5jeSh2ZXJzaW9uKSwgdmVyc2lvbiAhPSBtYXJraW5nVmVyc2lv
bik7Ci19Ci0KIGlubGluZSBEZXBlbmRlbmN5IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3Rh
bGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHJlc3Vs
dC52YWx1ZSkpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247Cisg
ICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBhYm91
dFRvTWFya1Nsb3cobWFya2luZ1ZlcnNpb24pOwotICAgIHJldHVybiByZXN1bHQuZGVwZW5kZW5j
eTsKKyAgICByZXR1cm4gZGVwZW5kZW5jeSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMTUgKzUxNiwx
MCBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBi
b29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29u
c3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikg
PyBmYWxzZSA6IGlzTWFya2VkUmF3KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6
aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZv
aWQqIHApCi17Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3ko
bWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24g
dmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0g
bWFya2luZ1ZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFy
a3MuZ2V0KGF0b21OdW1iZXIocCksIHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9t
YXJrcy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSh2ZXJzaW9uKSk7CiB9CiAKIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRl
cGVuZGVuY3kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsy
NywxNSBAQAogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1NYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0Nv
bnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWlu
dFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNt
KQogICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1l
KFdURk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVG
dW5jdGlvbikpCi0gICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKLXsKLX0KLQotTWFya2lu
Z0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRv
dWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCi0gICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJy
ZXZpYXRlZE5hbWUpCi0gICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0
ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fcXVpY2tXb3JrRXN0
aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQogICAgICwg
bV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCisgICAgLCBtX3BhcmFsbGVsaXNtKHBhcmFsbGVsaXNt
KQogewogfQogCkBAIC02MywxNCArNDgsNTEgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVz
ZXRTdGF0cygpCiAgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0Nv
bnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29t
ZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitDb25zdHJhaW50UGFyYWxsZWxpc20gTWFy
a2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOwot
ICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21l
dGhpbmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5n
VGltZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENv
dW50KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRp
ZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIo
dmlzaXRvcik7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHJlc3VsdCA9IGV4ZWN1dGVJbXBs
KHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3Vu
dCgpOworICAgIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSA9IHJlc3VsdDsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRl
KFNsb3RWaXNpdG9yJikKK3sKKyAgICByZXR1cm4gMDsKK30KKworZG91YmxlIE1hcmtpbmdDb25z
dHJhaW50Ojp3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgcmV0dXJu
IGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKK30KKwordm9p
ZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBkb1BhcmFs
bGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CisgICAgICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZp
c2l0Q291bnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBh
cmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlz
aXRDb3VudGVyKHZpc2l0b3IpOworICAgIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7
CisgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3Im
KQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJikKK3sKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEy
ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxl
bGlzbS5oIgogI2luY2x1ZGUgIkNvbnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlz
aXRpbmdUaW1lb3V0LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDMsMTggKzQxLDkgQEAgY2xhc3MgTWFya2luZ0NvbnN0cmFp
bnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBN
YXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJp
bmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7Ci0gICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgOjpGdW5jdGlv
bjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludChDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSwgQ29uc3RyYWludFBh
cmFsbGVsaXNtKTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB+TWFya2luZ0NvbnN0cmFp
bnQoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5NYXJraW5nQ29uc3RyYWludCgp
OwogICAgIAogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQog
ICAgIApAQCAtNjQsMzMgKzUzLDM5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0U3RhdHMoKTsK
ICAgICAKICAgICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RW
aXNpdENvdW50OyB9CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGxhc3RFeGVjdXRlUGFyYWxs
ZWxpc20oKSBjb25zdCB7IHJldHVybiBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc207IH0KICAgICAK
LSAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywg
TW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0
ZShTbG90VmlzaXRvciYpOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0
ZUZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSB3
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1cm4g
bGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0KKyAg
ICB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7
CisgICAgCisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7Cisg
ICAgCisgICAgdm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOworICAgIHZvaWQgZmlu
aXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAgIAor
ICAgIC8vIElmIHRoaXMgaXMgU2VxdWVudGlhbCwgaXQgbWVhbnMgdGhhdCB0aGUgY29uc3RyYWlu
dCBoYXMgdG8gYmUgcnVuIHNlcXVlbnRpYWxseSwgd2l0aCBubyBjb25jdXJyZW50CisgICAgLy8g
Y29uc3RyYWludHMuCisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBD
b25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2Fu
IHNldCBtX2luZGV4LgogICAgIAogICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9Owog
ICAgIENTdHJpbmcgbV9hYmJyZXZpYXRlZE5hbWU7CiAgICAgQ1N0cmluZyBtX25hbWU7Ci0gICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0aW1l
b3V0KT4gbV9leGVjdXRlRnVuY3Rpb247Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0
b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwogICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5IG1fdm9sYXRpbGl0eTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9wYXJhbGxlbGlz
bTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtIHsg
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCB9OyAvLyBJdCdzIGEgaGV1cmlzdGljLCB3
ZSBjYW4gYmUgd3JvbmcuIFRoaXMgZ3Vlc3Mgb25seSBhZmZlY3RzIHRoZSBmaXJzdCBydW4uCiAg
ICAgc2l6ZV90IG1fbGFzdFZpc2l0Q291bnQgeyAwIH07CisgICAgTG9jayBtX2xvY2s7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIgor
I2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIApAQCAtMzQsNTIgKzM3LDIy
NSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1
dGlvbkNvbnRleHQgewogcHVibGljOgotICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0
cmFpbnRTZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91
dCkKKyAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQpCiAgICAg
ICAgIDogbV9zZXQoc2V0KQotICAgICAgICAsIG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAs
IG1fdGltZW91dCh0aW1lb3V0KQogICAgIHsKKyAgICAgICAgbV9zZXQubV9oZWFwLmZvckVhY2hT
bG90VmlzaXRvcigKKyAgICAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAg
ICAgICAgICAgICAgICBtX3Zpc2l0Q291bnRlcnMuYXBwZW5kKFZpc2l0Q291bnRlcih2aXNpdG9y
KSk7CisgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBkaWRWaXNpdFNvbWV0
aGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZzsK
KyAgICAgICAgZm9yIChWaXNpdENvdW50ZXImIHZpc2l0Q291bnRlciA6IG1fdmlzaXRDb3VudGVy
cykgeworICAgICAgICAgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAorICAgIGVudW0gU2No
ZWR1bGVyUHJlZmVyZW5jZSB7CisgICAgICAgIFBhcmFsbGVsV29ya0ZpcnN0LAorICAgICAgICBO
ZXh0Q29uc3RyYWludEZpcnN0CisgICAgfTsKKworICAgIC8vIHBpY2tOZXh0KCkgaXMgY2FsbGVk
IHdoaWxlIGEgbG9jayBpcyBoZWxkLCBzbyBpdCBjYW4gcHJldGVuZCBsaWtlIGl0J3MgYmVpbmcg
Y2FsbGVkIGZyb20gdGhlIG1haW4KKyAgICAvLyB0aHJlYWQuIEZvciBleGFtcGxlLCBpdCdzIHRv
dGFsbHkgc2FmZSBmb3IgdGhhdCBsYW1iZGEgdG8gY2xvc2Ugb3ZlciB0aGUgc3RhY2suCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVy
ZW5jZSBwcmVmZXJlbmNlLCBjb25zdCBGdW5jJiBwaWNrTmV4dCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBkaWRWaXNpdFNvbWV0aGluZygpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKKyAgICAg
ICAgbV9zZXQubV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAgICAgICAgICAgIFsmXSAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleFRvUnVuOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeVBhcmFsbGVsV29yayA9IFsmXSAoKSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRl
SW5QYXJhbGxlbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gbV90b0V4ZWN1dGVJblBhcmFs
bGVsLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxX
b3JrTW9kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlOZXh0Q29uc3Ry
YWludCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gcGlja1Jlc3VsdCA9IHBpY2tOZXh0KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBpY2tSZXN1bHQpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9leGVjdXRlZC5nZXQoKnBpY2tSZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJraW5nQ29uc3RyYWlu
dCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFsqcGlja1Jlc3VsdF07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RyYWludC5wYXJhbGxlbGlzbSgpID09IENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmFwcGVuZCgqcGlja1Jl
c3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gKnBpY2tSZXN1bHQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyYWxsZWxXb3JrKCkgfHwgdHJ5TmV4dENvbnN0cmFp
bnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0cnlOZXh0Q29uc3RyYWludCgpIHx8IHRyeVBhcmFsbGVsV29yaygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghbV9udW1BY3RpdmVUaHJlYWRzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFueSB3YWl0aW5nIGNvdWxkIGJl
IHJlcGxhY2VkIHdpdGgganVzdCBydW5uaW5nIHRoZSBTbG90VmlzaXRvci4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJIHdvbmRlciBpZiB0aGF0IHdvdWxkIGJlIHByb2ZpdGFibGUu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX2xvY2spOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX251bUFjdGl2ZVRocmVhZHMrKzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1
ZW50aWFsOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTWFya2lu
Z0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl07CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoZG9QYXJhbGxlbFdvcmtN
b2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludC5kb1BhcmFsbGVsV29yayh2
aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0Lmdl
dChpbmRleFRvUnVuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJh
aW50LmZpbmlzaFBhcmFsbGVsV29yayh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbC50YWtlRmlyc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKHVuc2lnbmVkIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBpbmRleFRvUnVuOyB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmNs
ZWFyKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9l
eGVjdXRlZC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChp
bmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJ
blBhcmFsbGVsU2V0LnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcy0tOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5KQor
ICAgICAgICAgICAgZXhlY3V0ZSgqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0pOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5iaXRDb3VudCgpKTsKICAg
ICB9CiAgICAgCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCB0aW1lcyBvdXQuCi0gICAgYm9v
bCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCisgICAgdm9pZCBkcmFpbihCaXRWZWN0b3Im
IHVuZXhlY3V0ZWQpCiAgICAgewotICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IHVuZXhlY3V0
ZWQpIHsKLSAgICAgICAgICAgIGV4ZWN1dGUoaW5kZXgpOwotICAgICAgICAgICAgdW5leGVjdXRl
ZC5jbGVhcihpbmRleCk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGltZU91dCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgICAgICBhdXRvIGVu
ZCA9IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZXhlY3V0ZSgKKyAgICAgICAgICAgIE5leHRDb25zdHJhaW50
Rmlyc3QsCisgICAgICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gewor
ICAgICAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyQWxsKCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0
ZWQuZ2V0KGluZGV4KTsgfQorICAgIHZvaWQgY29udmVyZ2UoU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBvcmRlcikKKyAgICB7CisgICAgICAg
IGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgaWYgKG9yZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CiAKLSAgICB2b2lkIGV4ZWN1dGUoc2l6ZV90
IGluZGV4KQorICAgICAgICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbnN0cmFp
bnQgc2VxdWVudGlhbGx5IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVpY2tseSBnaXZlIHVzIGEKKyAg
ICAgICAgLy8gcmVzdWx0LiBJZiB3ZSByYW4gaXQgaW4gcGFyYWxsZWwgdG8gb3RoZXIgY29uc3Ry
YWludHMsIHRoZW4gd2UgbWlnaHQgZW5kIHVwIGhhdmluZyB0byB3YWl0IGZvcgorICAgICAgICAv
LyB0aG9zZSBvdGhlciBjb25zdHJhaW50cyB0byBmaW5pc2gsIHdoaWNoIHdvdWxkIGJlIGEgd2Fz
dGUgb2YgdGltZSBzaW5jZSBkdXJpbmcgY29udmVyZ2VuY2UgaXQncworICAgICAgICAvLyBlbXBp
cmljYWxseSBtb3N0IG9wdGltYWwgdG8gcmV0dXJuIHRvIGRyYWluaW5nIGFzIHNvb24gYXMgYSBj
b25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBNb3N0CisgICAgICAgIC8vIGNvbnN0cmFpbnRzIGRv
bid0IGdlbmVyYXRlIGFueSB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUsIGFuZCB3aGVuIHRoZXkgZG8g
Z2VuZXJhdGUgd29yaywgdGhleSB0ZW5kCisgICAgICAgIC8vIHRvIGdlbmVyYXRlIGVub3VnaCBv
ZiBpdCB0byBmZWVkIGEgZGVjZW50IGRyYWluaW5nIGN5Y2xlLiBUaGVyZWZvcmUsIHBhdXNlIHRp
bWVzIGFyZSBsb3dlc3QgaWYKKyAgICAgICAgLy8gd2UgZ2V0IHRoZSBoZWNrIG91dCBvZiBoZXJl
IGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBJIHRoaW5rIHRoYXQgcGFy
dCBvZiB3aGF0CisgICAgICAgIC8vIG1ha2VzIHRoaXMgb3B0aW1hbCBpcyB0aGF0IHdlIGFsc28g
bmV2ZXIgYWJvcnQgcnVubmluZyBhIGNvbnN0cmFpbnQgZWFybHksIHNvIHdoZW4gd2UgZG8gcnVu
CisgICAgICAgIC8vIG9uZSwgaXQgaGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdlbmVyYXRlIGFzIG11
Y2ggd29yayBhcyBpdCBwb3NzaWJseSBjYW4uCisgICAgICAgIC8vCisgICAgICAgIC8vIFNpbWls
YXIgcmVhc29uaW5nIGFwcGxpZXMgdG8gY29uc3RyYWludHMgdGhhdCB0ZW5kIHRvIHJldHVybiBD
b3NudHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsCisgICAgICAgIC8vIGZyb20gZXhlY3V0ZS4g
VGhvc2UgY29uc3RyYWludHMgdHlwaWNhbGx5IGhhdmUgYSB2ZXJ5IGZhc3QtcnVubmluZyBleGVj
dXRlIGZ1bmN0aW9uLCB3aGljaCB0aGVuCisgICAgICAgIC8vIG9mZmxvYWRzIGFsbW9zdCBhbGwg
b2YgdGhlIHdvcmsgdG8gYSBwYXJhbGxlbCB3b3JrZXIuIEluIHRoYXQgY2FzZSwgaXQgbWFrZXMg
c2Vuc2UgdG8gcnVuIHRoZQorICAgICAgICAvLyBleGVjdXRlIGZ1bmN0aW9uIHNlcXVlbnRpYWxs
eS4KKyAgICAgICAgaWYgKG9yZGVyW2luZGV4XS0+d29ya0VzdGltYXRlKHZpc2l0b3IpCisgICAg
ICAgICAgICB8fCBvcmRlcltpbmRleF0tPmxhc3RFeGVjdXRlUGFyYWxsZWxpc20oKSA9PSBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgICAgICBleGVjdXRlKCpvcmRl
cltpbmRleCsrXSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKG9yZGVyLmlzRW1wdHkoKSAm
JiBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXhlY3V0ZSgKKyAgICAgICAgICAgIFBh
cmFsbGVsV29ya0ZpcnN0LAorICAgICAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHsKKyAgICAgICAgICAgICAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXIuc2l6ZSgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIHJldHVybiBvcmRlcltpbmRleCsrXS0+aW5kZXgoKTsKKyAgICAgICAgICAgIH0pOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQp
CiAgICAgewotICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBt
X2RpZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVkLnNldChp
bmRleCk7CisgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldChjb25zdHJhaW50LmluZGV4KCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKAorICAgICAgICAgICAgbV9zZXQu
bV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpOworICAgICAgICBkaWRFeGVjdXRlKHBhcmFs
bGVsaXNtLCBjb25zdHJhaW50LmluZGV4KCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6CisgICAg
dm9pZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgeworICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgICAg
IGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7Cisg
ICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4KTsKKyAgICAgICAg
ICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXgpOworICAgICAgICB9CisgICAg
fQorICAgIAogICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKLSAgICBTbG90VmlzaXRv
ciYgbV92aXNpdG9yOwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwogICAgIEJpdFZlY3Rv
ciBtX2V4ZWN1dGVkOwotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Cisg
ICAgRGVxdWU8dW5zaWduZWQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgQml0VmVj
dG9yIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBt
X3RvRXhlY3V0ZVNlcXVlbnRpYWxseTsKKyAgICBMb2NrIG1fbG9jazsKKyAgICBDb25kaXRpb24g
bV9jb25kaXRpb247CisgICAgdW5zaWduZWQgbV9udW1BY3RpdmVUaHJlYWRzIHsgMCB9OworICAg
IFZlY3RvcjxWaXNpdENvdW50ZXIsIDE2PiBtX3Zpc2l0Q291bnRlcnM7CiB9OwogCi1NYXJraW5n
Q29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkK
IHsKIH0KIApAQCAtMTA3LDE4ICsyODMsMTkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZGlkU3RhcnRNYXJraQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29u
c3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5j
dGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBh
ZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRl
ZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOwor
ICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3Zl
KGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xh
dGlsaXR5LCBwYXJhbGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0Ojph
ZGQoCiAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0
ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVu
Y3Rpb24sCiAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0
aW1hdGVGdW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCisgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtKQogewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25z
dHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUo
ZXhlY3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9s
YXRpbGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJh
aW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRp
bGl0eSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRk
KApAQCAtMTMxLDkgKzMwOCw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAg
ICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9u
b3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNv
bnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgcmVzdWx0ID0gZXhl
Y3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBib29sIHJlc3VsdCA9
IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDkg
KzMyNSw5IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252
ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkK
K2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0
KCp0aGlzLCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlv
bkNvbnRleHQoKnRoaXMpOwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlvbiA9IG1faXRlcmF0
aW9uKys7CiAgICAgCkBAIC0xNTksMTYgKzMzNiwxNCBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyCiAKICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFpbnRz
IHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0aGVu
CiAgICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlmICghZXhlY3V0aW9u
Q29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKICAgICAKICAg
ICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWluaW5nLCBzbyBp
dCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzIG90aGVyCiAgICAgLy8gdGhh
biByb290cy4KICAgICBpZiAoaXRlcmF0aW9uID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jv
d3RocykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBleGVjdXRpb25Db250ZXh0LmRyYWlu
KG1fdW5leGVjdXRlZE91dGdyb3d0aHMpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBw
cmVmZXJyaW5nIHRoZSBvdXRncm93dGggY29uc3RyYWludHMgLSB0aGUgb25lcyB0aGF0IG5lZWQg
dG8gYmUgZml4cG9pbnRlZAogICAgIC8vIGV2ZW4gaW4gYSBzdG9wLXRoZS13b3JsZCBHQyAtIHVu
dGlsIHRoZXkgc3RvcCBwcm9kdWNpbmcuIFRoZXkgaGF2ZSBhIHRlbmRlbmN5IHRvIGdvIHRvdGFs
bHkKQEAgLTIxNSwzMyArMzkwLDE3IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1
dGVDb252ZXIKICAgICAgICAgICAgIHJldHVybiBhLT52b2xhdGlsaXR5KCkgPiBiLT52b2xhdGls
aXR5KCk7CiAgICAgICAgIH0pOwogICAgIAotICAgIGZvciAoTWFya2luZ0NvbnN0cmFpbnQqIGNv
bnN0cmFpbnQgOiBtX29yZGVyZWQpIHsKLSAgICAgICAgc2l6ZV90IGkgPSBjb25zdHJhaW50LT5p
bmRleCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkRXhlY3V0
ZShpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBleGVjdXRpb25Db250ZXh0LmV4
ZWN1dGUoaSk7Ci0gICAgICAgIAotICAgICAgICAvLyBPbmNlIHdlJ3JlIGluIGNvbnZlcmdlbmNl
LCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJraW5nIGhhcHBlbiBhbnl0
aW1lCi0gICAgICAgIC8vIHdlIGZpbmQgd29yay4KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIHRo
aXMgc2hvdWxkIGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVh
ciBpZiB0aGF0J3MKLSAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVuIGJldHRl
ciBpcyB0aGlzOgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1
bm5pbmcuCi0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhp
bmdzLCByZXR1cm4uCi0gICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMgotICAg
ICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBleGVjdXRpb25Db250ZXh0LmNvbnZlcmdlKG1f
b3JkZXJlZCk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gUmV0dXJuIHRydWUgaWYg
d2UndmUgY29udmVyZ2VkLiBUaGF0IGhhcHBlbnMgaWYgd2UgZGlkIG5vdCB2aXNpdCBhbnl0aGlu
Zy4KKyAgICByZXR1cm4gIWV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0K
IAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChh
dXRvJiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlz
aXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAg
ICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nKTsKICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5o
CShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldCB7CiBwdWJsaWM6Ci0gICAgTWFy
a2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldChIZWFwJik7CiAg
ICAgfk1hcmtpbmdDb25zdHJhaW50U2V0KCk7CiAgICAgCiAgICAgdm9pZCBkaWRTdGFydE1hcmtp
bmcoKTsKQEAgLTQxLDE1ICs0MSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAg
IENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsK
ICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAg
ICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
JiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImKT4sCiAgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxp
c206OlBhcmFsbGVsKTsKICAgICAKICAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2lu
Z0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTYwLDkgKzYyLDcgQEAgcHVibGljOgogICAgIAogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9u
ZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlv
dSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBi
b29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKLSAgICAgICAgU2xvdFZpc2l0b3ImLAotICAgICAgICBN
b25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICBi
b29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIFNpbXBs
eSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KICAgICB2b2lk
IGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKQEAgLTcxLDEwICs3MSwxMSBAQCBwcml2YXRlOgog
ICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNv
bnRleHQ7CiAgICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9y
JiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUlt
cGwoU2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9u
b3RvbmljVGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBi
b29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIEJp
dFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRT
b21ldGhpbmcpOwogICAgIAorICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91bmV4
ZWN1dGVkUm9vdHM7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4
ZWN1dGVGdW5jdGlvbiwKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25z
dHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCisgICAgOiBNYXJraW5nQ29uc3RyYWludChX
VEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIHBhcmFs
bGVsaXNtKQorICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24p
KQoreworfQorCitTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rp
b248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAg
Q29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBh
cmFsbGVsaXNtKQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5h
bWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAsIG1fZXhl
Y3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fcXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQorewor
fQorCitTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkK
K3sKK30KKworZG91YmxlIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1h
dGVGdW5jdGlvbih2aXNpdG9yKTsKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFs
bGVsaXNtOjpTZXF1ZW50aWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAg
ICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAg
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjxk
b3VibGUoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQoKTsKKyAgICAKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToKKyAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPGRv
dWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNyArMjc3LDcgQEAg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZQogdGVtcGxhdGU8dHlwZW5h
bWUgQ29udGFpbmVyVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwpCiB7Ci0g
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQo
SGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAg
ICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKQEAgLTM0Niw3ICszNDYsNyBAQCBwcml2
YXRlOgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29u
c3QgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAKICAgICBT
ZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwogICAgIApA
QCAtNTYxLDE3ICs1NjEsMTYgQEAgYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlv
bigpCiAgICAgcmV0dXJuIGRpZFJlYWNoVGVybWluYXRpb24obG9ja2VyKTsKIH0KIAotYm9vbCBT
bG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYpCiti
b29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBsb2NrZXIpCiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKQotICAgICAgICAmJiAhbV9oZWFwLm1f
bnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVk
Q29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKLSAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVk
TXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgIHJldHVybiAhbV9oZWFwLm1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKKyAgICAgICAgJiYgIWhhc1dvcmsobG9ja2VyKTsKIH0K
IAogYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0g
ICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQor
ICAgIHJldHVybiAhaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0
b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRv
ck1hcmtTdGFjay0+aXNFbXB0eSgpOwogfQogCkBAIC01ODMsMTIgKzU4MiwxNCBAQCBORVZFUl9J
TkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICBib29sIGlzQWN0aXZlID0g
ZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChTbG90VmlzaXRvciYpPj4gYm9udXNUYXNrOworICAgICAgICAKICAgICAgICAgewotICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKICAgICAg
ICAgICAgIGlmIChpc0FjdGl2ZSkKICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFj
dGl2ZVBhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0
aW5nUGFyYWxsZWxNYXJrZXJzKys7Ci0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHNo
YXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbikgewogICAgICAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQpAQCAt
NjI5LDI4ICs2MzAsNTcgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJl
cwogCiAgICAgICAgICAgICAgICAgYXV0byBpc1JlYWR5ID0gWyZdICgpIC0+IGJvb2wgewogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yayhsb2NrZXIpCisgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrCiAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAgICAgICAg
ICAgIH07CiAKICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFi
bGUud2FpdFVudGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91dCwgaXNSZWFkeSk7CiAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFoYXNXb3JrKGxvY2tlcikKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzaykKKyAgICAgICAg
ICAgICAgICAgICAgYm9udXNUYXNrID0gbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzazsKKyAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJz
U2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0
OjpEb25lOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3JFYWNoTWFya1N0YWNrKAot
ICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25T
dGF0dXMgewotICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2spLAot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxN
YXJrZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29u
dGludWU7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghYm9udXNUYXNrICYmIGlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGZvckVhY2hNYXJr
U3RhY2soCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAt
PiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc3RlYWxT
b21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdH
bG9iYWxTdGFjayhzdGFjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1f
bnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQ
YXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1Bh
cmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkcmFpbih0aW1l
b3V0KTsKKyAgICAgICAgaWYgKGJvbnVzVGFzaykgeworICAgICAgICAgICAgYm9udXNUYXNrLT5y
dW4oKnRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogSWRlYWxseSwg
d2Ugd291bGQgbm90IGhhdmUgdG8gZG8gdGhpcy4gSG93ZXZlciwgdGhlIHBhcmFsbGVsIG1hcmtp
bmcgYWxnb3JpdGhtIHdpbGwKKyAgICAgICAgICAgIC8vIGdldCBjb25mdXNlZCBpZiB3ZSBpbml0
aWF0ZSBpdCB3aXRoIHRoZSBoZWxwZXIgdmlzaXRvcnMgaGF2aW5nIGFueXRoaW5nIGluIHRoZWly
IHN0YWNrcy4KKyAgICAgICAgICAgIC8vIEFsc28sIHRoaXMgcHJvdGVjdHMgYnVncyB0aGF0IGlu
dm9sdmUgcmFjZXMgYmV0d2VlbiB2aXNpdENoaWxkcmVuIGFuZCBvbmUgb2YgdGhlCisgICAgICAg
ICAgICAvLyBjb25zdHJhaW50cy4KKyAgICAgICAgICAgIC8vZG9uYXRlQWxsKCk7CisKKyAgICAg
ICAgICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGlsbCBiZSBydW5uaW5nLCBhbmQgbWF5
IHJ1biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRoZSB0YXNrCisgICAgICAgICAgICAv
LyBvdXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFyb3VuZCB0cnlpbmcgdG8gcnVuIHRo
ZSB0YXNrLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobV9oZWFw
Lm1fYm9udXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisgICAgICAgICAgICAgICAgICAgIG1f
aGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJvbnVz
VGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgICAgICBkcmFp
bih0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaXNBY3RpdmUgPSB0cnVl
OwogICAgIH0KIH0KQEAgLTY3Niw5ICs3MDYsMTMgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWlu
UmVzdWx0IFNsb3RWaXNpdAogICAgICAgICByZXR1cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVvdXQp
OwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7
Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9uYXRlQWxsKGhvbGRMb2NrKG1f
aGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3YWl0Rm9yVGVybWluYXRpb24odGlt
ZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6
d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgZm9yICg7Oykgewog
ICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBTaGFy
ZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBw
dWJsaWM6CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWwoTW9ub3Rvbmlj
VGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgU2hhcmVkRHJh
aW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpbWUgdGltZW91dCA9
IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJlZERyYWluUmVzdWx0
IHdhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1l
OjppbmZpbml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50
IG9mIGRyYWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRlc2Agd29ydGggb2Yg
ZGF0YS4gVGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkgd2FsayBtb3JlIG9y
IGxlc3MgdGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0
IG1heQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFZpc2l0Q291bnRlciB7CitwdWJsaWM6CisgICAgVmlzaXRDb3VudGVyKCkgeyB9CisgICAgCisg
ICAgVmlzaXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRv
cigmdmlzaXRvcikKKyAgICAgICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRD
b3VudCgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdmlzaXRvci0+dmlzaXRDb3VudCgpIC0gbV9pbml0aWFsVmlz
aXRDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0
b3IgeyBudWxscHRyIH07CisgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEsNjgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2xvdFZpc2l0
b3IuaCIKLSNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgewotCi1jbGFzcyBWaXNpdGluZ1RpbWVvdXQgewotcHVibGljOgotICAgIFZpc2l0
aW5nVGltZW91dCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBWaXNpdGluZ1RpbWVvdXQoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUg
dGltZW91dCkKLSAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZpc2l0U29tZXRoaW5n
KQotICAgICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0Q291bnQoKSkKLSAg
ICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHNpemVf
dCB2aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENvdW50QmVmb3JlOwotICAgIH0K
LQotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8fCB2aXNpdENvdW50
KHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhp
bmcodmlzaXRvcikgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLXByaXZh
dGU6Ci0gICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKLSAgICBzaXplX3Qg
bV92aXNpdENvdW50QmVmb3JlIHsgMCB9OwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBA
IHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7
Ci0gICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWRDb25jdXJyZW50bHkobWFya2luZ1ZlcnNp
b24sIGpzVmFsdWUuYXNDZWxsKCkpKQorICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1h
cmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+
KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvcikpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTA4NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMDEsMTQgKzExMDEsMTQgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJp
bmdHQygpCiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0
dXJuICghbV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9nbG9i
YWxPYmplY3QuZ2V0KCkpKQotICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFBy
b3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHN0b3JlZFByb3Rv
dHlwZU9iamVjdCgpKSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNN
YXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkg
fHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFya2VkKHN0b3JlZFByb3Rv
dHlwZU9iamVjdCgpKSk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQygpKQotICAgICAgICBy
ZXR1cm4gSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcyk7CisgICAgICAgIHJldHVybiBI
ZWFwOjppc01hcmtlZCh0aGlzKTsKICAgICAKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KHRoaXMpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjI1MDg0
KQorKysgU291cmNlL1dURi93dGYvQXRvbWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsMTEg
KzM0NiwxNiBAQCBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgbnVsbERlcGVuZGVuY3koCiAgICAg
cmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUqID0gbnVsbHB0cj4KK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgogQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKIHsKICAg
ICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHZhbHVlKTsKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQzMl90IGNvcHk7Cisg
ICAgICAgIFQgdmFsdWU7CisgICAgfSB1OworICAgIHUuY29weSA9IDA7CisgICAgdS52YWx1ZSA9
IHZhbHVlOwogI2lmIENQVShBUk02NCkKICAgICAvLyBDcmVhdGUgYSBtYWdpY2FsIHplcm8gdmFs
dWUgdGhyb3VnaCBpbmxpbmUgYXNzZW1ibHksIHdob3NlIGNvbXB1dGF0aW9uCiAgICAgLy8gaXNu
J3QgdmlzaWJsZSB0byB0aGUgb3B0aW1pemVyLiBUaGlzIHplcm8gaXMgdGhlbiB1c2FibGUgYXMg
YW4gb2Zmc2V0IGluCkBAIC0zNjMsODAgKzM2OCwyMCBAQCBBTFdBWVNfSU5MSU5FIERlcGVuZGVu
Y3kgZGVwZW5kZW5jeShUIHZhCiAgICAgLy8gb3IgYW4gYWNxdWlyZSBsb2FkLgogICAgIGFzbSgi
ZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5j
eV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAg
OiBbaW5dICJyIih1LmNvcHkpKTsKICNlbGlmIENQVShBUk0pCiAgICAgYXNtKCJlb3IgJVtkZXBl
bmRlbmN5XSwgJVtpbl0sICVbaW5dIgogICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVu
ZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUu
Y29weSkpOwogI2Vsc2UKICAgICAvLyBObyBkZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgdGhpcyBh
cmNoaXRlY3R1cmUuCiAgICAgbG9hZExvYWRGZW5jZSgpOwogICAgIGRlcGVuZGVuY3kgPSAwOwot
ICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKKyAgICBVTlVTRURfUEFSQU0odS5jb3B5KTsKICNlbmRp
ZgogICAgIHJldHVybiBkZXBlbmRlbmN5OwogfQogCi0vLyBGSVhNRTogVGhpcyBjb2RlIGlzIGFs
bW9zdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIGRlcGVuZGVuY3koKSBvdmVybG9hZC4KLS8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDUKLXRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gND46OnR5cGUq
ID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
Ci17Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50MzJfdCBjb3B5ID0gYml0d2lz
ZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIGFzbSgiZW9yICV3
W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1y
IihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbGlmIENQVShBUk0p
Ci0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5dIgotICAgICAgICA6IFtk
ZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwot
I2Vsc2UKLSAgICBsb2FkTG9hZEZlbmNlKCk7Ci0gICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvcHkpOwotI2VuZGlmCi0gICAgcmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0g
Mj46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1z
dHJ1Y3QgRGVwZW5kZW5jeVdpdGggewotcHVibGljOgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAg
ICAgICAgOiBkZXBlbmRlbmN5KG51bGxEZXBlbmRlbmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRl
bmN5LCBjb25zdCBUJiB2YWx1ZSkKLSAgICAgICAgOiBkZXBlbmRlbmN5KGRlcGVuZGVuY3kpCi0g
ICAgICAgICwgdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5
IGRlcGVuZGVuY3k7Ci0gICAgVCB2YWx1ZTsKLX07Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotaW5saW5lIERlcGVuZGVuY3lXaXRoPFQ+IGRlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVw
ZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+
KGRlcGVuZGVuY3ksIHZhbHVlKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBU
KiBjb25zdW1lKFQqIHBvaW50ZXIsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKQEAgLTQ2OSwx
MCArNDE0LDggQEAgQUxXQVlTX0lOTElORSBUJiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKgogCiB1
c2luZyBXVEY6OkF0b21pYzsKIHVzaW5nIFdURjo6RGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6RGVw
ZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmNvbnN1bWU7CiB1c2luZyBXVEY6OmRlcGVuZGVuY3k7
Ci11c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjplbnN1cmVQb2ludGVyOwog
dXNpbmcgV1RGOjpudWxsRGVwZW5kZW5jeTsKIApJbmRleDogU291cmNlL1dURi93dGYvQml0VmVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9u
IDIyNTA4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDgsNiArMzA4LDEzIEBAIHB1YmxpYzogCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgICAgIH0KIAorICAgICAgICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICArKygqdGhp
cyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKICAgICAgICAgYm9v
bCBpc0F0RW5kKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1faW5kZXgg
Pj0gbV9iaXRWZWN0b3ItPnNpemUoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1MDg0KQorKysg
U291cmNlL1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMSBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KICAgICB2
b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAvLyBSZW1v
dmUgYW5kIHJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJl
dHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhl
IGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CisgICAgVCB0YWtlRmlyc3QoY29uc3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3ZlIGFuZCBy
ZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1
ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNr
IGFsd2F5cyByZXR1cm5zIGZhbHNlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01
NzEsNiArNTc2LDI1IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXAK
IAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUZp
cnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVu
c2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgewor
ICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VGaXJzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5k
aWRhdGUpKSB7CisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBw
cmVwZW5kKHRha2VMYXN0KCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAg
ICAgfQorICAgICAgICBjb3VudCsrOworICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUp
KTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBUIERl
cXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKIHsKICAg
ICB1bnNpZ25lZCBjb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAv
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAK
KyNwcmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50Lmg+CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0Ns
aWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksOSArMjksOSBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhlYXAv
RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgogI2luY2x1ZGUg
PGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxv
Y2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oPgog
I2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9WaXNpdGlu
Z1RpbWVvdXQuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CkBAIC03MiwxMCArNzIsMTAgQEAg
dm9pZCBKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKFZNKgogICAgIEpTVk1DbGllbnRE
YXRhKiBjbGllbnREYXRhID0gbmV3IEpTVk1DbGllbnREYXRhKCp2bSk7CiAgICAgdm0tPmNsaWVu
dERhdGEgPSBjbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAgICAgCi0g
ICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4o
CisgICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVNYXJraW5nQ29u
c3RyYWludD4oCiAgICAgICAgICJXY29jIiwgIldlYkNvcmUgT3V0cHV0IENvbnN0cmFpbnRzIiwK
ICAgICAgICAgW3ZtLCBjbGllbnREYXRhLCBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IHZtLT5oZWFw
Lm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCldCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIG11dGFibGUgeworICAgICAgICAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2
bS0+aGVhcDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGhlYXAubXV0YXRvckV4ZWN1
dGlvblZlcnNpb24oKSA9PSBsYXN0RXhlY3V0aW9uVmVyc2lvbikKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvcnVuLWpzYy1iZW5jaG1hcmtzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1iZW5jaG1hcmtzCShyZXZpc2lvbiAyMjUwODQpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
YmVuY2htYXJrcwkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOCBAQCBMT05HU1BJREVSX1BB
VEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggCiBWOF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19Q
QVRIICsgIlN1blNwaWRlciIgKyAidGVzdHMiICsgInY4LXY2IgogVEFJTEJFTkNIX1BBVEggPSBQ
RVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiVGFpbEJlbmNoOTAwMCIKIE1JQ1JPQkVOQ0hNQVJLU19Q
QVRIID0gT1BFTlNPVVJDRV9QQVRIICsgIkpTVGVzdHMiICsgIm1pY3JvYmVuY2htYXJrcyIKLU9D
VEFORV9XUkFQUEVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiT2N0YW5lIiArICJ3
cmFwcGVycyIKK09QRU5TT1VSQ0VfT0NUQU5FX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEgg
KyAiT2N0YW5lIgorT0NUQU5FX1dSQVBQRVJfUEFUSCA9IE9QRU5TT1VSQ0VfT0NUQU5FX1BBVEgg
KyAid3JhcHBlcnMiCiBKU0JFTkNIX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiSlNC
ZW5jaCIKIFNJWFNQRUVEX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU2l4U3BlZWQi
ICsgInRlc3RzIgogU0lYU1BFRURfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRI
ICsgIlNpeFNwZWVkIiArICJ3cmFwcGVycyIKQEAgLTg0MSw2ICs4NDIsMjAgQEAgY2xhc3MgU2lu
Z2xlRmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwogICBlbmQKIGVuZAogCisjIEJlbmNobWFy
ayB0aGF0IGNvbnNpc3RzIG9mIGEgc2luZ2xlIGZpbGUgYW5kIG11c3QgYmUgbG9hZGVkIGluIGl0
cyBvd24gZ2xvYmFsIG9iamVjdCBlYWNoCisjIHRpbWUgKGkuZS4gcnVuKCkpLCBidXQgcmV0dXJu
cyBpdHMgcmVzdWx0IGluIGEgY3VzdG9tIHdheS4KK2NsYXNzIFNpbmdsZUZpbGVDdXN0b21UaW1l
ZEJlbmNobWFya1BhcmFtZXRlcnMKKyAgYXR0cl9yZWFkZXIgOmJlbmNoUGF0aAorICAKKyAgZGVm
IGluaXRpYWxpemUoYmVuY2hQYXRoKQorICAgIEBiZW5jaFBhdGggPSBiZW5jaFBhdGgKKyAgZW5k
CisgIAorICBkZWYga2luZAorICAgIDpzaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAg
ZW5kCitlbmQKKwogIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBkYXRh
IGZpbGVzIHRoYXQgc2hvdWxkIGJlIGxvYWRlZCBnbG9iYWxseSwgZm9sbG93ZWQKICMgYnkgYSBj
b21tYW5kIHRvIHJ1biB0aGUgYmVuY2htYXJrLgogY2xhc3MgTXVsdGlGaWxlVGltZWRCZW5jaG1h
cmtQYXJhbWV0ZXJzCkBAIC05NjUsNiArOTgwLDI1IEBAIGRlZiBlbWl0QmVuY2hSdW5Db2RlRmls
ZShuYW1lLCBwbGFuLCBiZW4KICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICBp
ZiAoX19iZW5jaGVyX2luZGV4ID49ICN7d2FybXVwfSkgcHJpbnQoXCIje25hbWV9OiAje3BsYW4u
dm19OiAje3BsYW4uaXRlcmF0aW9ufTogXCIgKyAoX19iZW5jaGVyX2luZGV4IC0gI3t3YXJtdXB9
KSArIFwiOiBUaW1lOiBcIisoKF9fYWZ0ZXItX19iZWZvcmUpL19fcnVucykpOyIpCiAgICAgICAg
IGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJ9IikKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsIiN7YmVuY2hQYXJhbXMudGVhckRvd25Db21tYW5kLmpzfSIpCisgICAgICBlbHNpZiBi
ZW5jaFBhcmFtcy5raW5kID09IDpzaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImZ1bmN0aW9uIF9fYmVuY2hlcl9ydW4oX19iZW5j
aGVyX3doYXQpIHsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgdmFyIF9f
YmVuY2hlcl9yZXN1bHQgPSB7dmFsdWU6IG51bGx9OyIpCisgICAgICAgICRyZXJ1bi50aW1lcyB7
CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHJ1bihfX2JlbmNoZXJfd2hh
dCwgX19iZW5jaGVyX3Jlc3VsdCk7IikKKyAgICAgICAgfQorICAgICAgICBkb3VibGVQdXRzKCRz
dGRlcnIsZmlsZSwiICAgaWYgKF9fYmVuY2hlcl9yZXN1bHQudmFsdWUgPT0gbnVsbCkiKQorICAg
ICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTnVs
bCByZXN1bHRcIik7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHJldHVy
biBfX2JlbmNoZXJfcmVzdWx0LnZhbHVlOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCJ9IikKKyAgICAgICAgJHdhcm11cC50aW1lcyB7CisgICAgICAgICAgZG91YmxlUHV0cygk
c3RkZXJyLGZpbGUsIl9fYmVuY2hlcl9ydW4oI3tiZW5jaFBhcmFtcy5iZW5jaFBhdGguaW5zcGVj
dH0pIikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3Mg
cGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQorICAgICAgICAkaW5uZXIudGltZXMg
eworICAgICAgICAgIHwgaW5uZXJJbmRleCB8CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsInByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06ICN7
aW5uZXJJbmRleH06IFRpbWU6IFwiK19fYmVuY2hlcl9ydW4oI3tiZW5jaFBhcmFtcy5iZW5jaFBh
dGguaW5zcGVjdH0pKTsiKQorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJnYygp
OyIpIHVubGVzcyBwbGFuLnZtLnNob3VsZE1lYXN1cmVHQworICAgICAgICB9CiAgICAgICBlbHNl
CiAgICAgICAgIHJhaXNlIHVubGVzcyBiZW5jaFBhcmFtcy5raW5kID09IDpzaW5nbGVGaWxlVGlt
ZWRCZW5jaG1hcmsKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImZ1bmN0aW9uIF9f
YmVuY2hlcl9ydW4oX19iZW5jaGVyX3doYXQpIHsiKQpAQCAtMTU5Myw2ICsxNjI3LDE5IEBAIGNs
YXNzIE9jdGFuZUJlbmNobWFyawogICBlbmQKIGVuZAogCitjbGFzcyBDdXN0b21UaW1lZEJlbmNo
bWFyaworICBpbmNsdWRlIEJlbmNobWFyaworICAKKyAgZGVmIGluaXRpYWxpemUobmFtZSwgZnVs
bFBhdGgpCisgICAgQG5hbWUgPSBuYW1lCisgICAgQGZ1bGxQYXRoID0gZnVsbFBhdGgKKyAgZW5k
CisgIAorICBkZWYgZW1pdFJ1bkNvZGUocGxhbikKKyAgICBlbWl0QmVuY2hSdW5Db2RlKGZ1bGxu
YW1lLCBwbGFuLCBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzLm5ldyhl
bnN1cmVGaWxlKCJDdXN0b21UaW1lZC0je0BuYW1lfSIsIEBmdWxsUGF0aCkpKQorICBlbmQKK2Vu
ZAorCiBjbGFzcyBLcmFrZW5CZW5jaG1hcmsKICAgaW5jbHVkZSBCZW5jaG1hcmsKICAgCkBAIC0z
MDA5LDYgKzMwNTYsNyBAQCBiZWdpbgogICAgIHwgYXJncyB8CiAgICAgT0NUQU5FLmFkZCBPY3Rh
bmVCZW5jaG1hcmsubmV3KCphcmdzKQogICB9CisgIE9DVEFORS5hZGQgQ3VzdG9tVGltZWRCZW5j
aG1hcmsubmV3KCJzcGxheS1sYXRlbmN5IiwgKE9QRU5TT1VSQ0VfT0NUQU5FX1BBVEggKyAic3Bs
YXkuanMiKS50b19zKQogCiAgIEtSQUtFTiA9IEJlbmNobWFya1N1aXRlLm5ldygiS3Jha2VuIiwg
OmFyaXRobWV0aWNNZWFuLCAtMSkKICAgWyJhaS1hc3RhciIsICJhdWRpby1iZWF0LWRldGVjdGlv
biIsICJhdWRpby1kZnQiLCAiYXVkaW8tZmZ0IiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327581</attachid>
            <date>2017-11-25 19:02:58 -0800</date>
            <delta_ts>2017-11-27 20:35:08 -0800</delta_ts>
            <desc>neutral on splay-latency</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>116563</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUwODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2
ICs1MDMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUwODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3
MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2
IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBG
OTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJF
NTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBB
OUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07
Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxh
bklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkw
RjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBB
OUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNj
aGVkdWxlci5oICovOyB9OwpAQCAtMzExLDYgKzMxMCw5IEBACiAJCTBGNEEzOEZBMUM4RTEzREYw
MDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRC
OTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1
bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5
MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhDNzQx
RkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovOyB9OworCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RDhD
NzgxRkNBM0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGls
bHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAw
NzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUx
ODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTc3LDcgKzE5NzksNiBAQAog
CQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9y
U2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0
b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjFGQjM5MjFF
MTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbklubGluZXMuaDsgcGF0aCA9IGRmZy9E
RkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NTFF
MUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR1dvcmts
aXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2
NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMjY1LDYgKzIyNjYsMTAgQEAKIAkJMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQw
M0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1wLmg7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFD
IC8qIFZpc2l0Q291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNp
dENvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzMxRkM3QTk3
NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb25zdHJhaW50UGFyYWxsZWxpc20uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhD
NzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUNDMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJG
aXhPYnZpb3VzU3BpbGxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEFpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDRDFDNEMxQjU0MDA0
RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91
c1NwaWxscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFEMDFDNEQ3NjRC
MDA0RDZDMTEgLyogQjNPcmlnaW5EdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5jcHA7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUwMiw2ICs1NTA3LDcgQEAKIAkJCQkwRkQw
RTVFNjFFNDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAqLywKIAkJCQkxNDZCMTRE
QjEyRUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURB
QUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNEQ4
QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLywKIAkJCQkw
RjdERjEyRjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKIAkJ
CQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJCQkJMEYxMzZE
NEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU2MDEsNiArNTYwNyw4IEBA
CiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4IC8qIFJlZ2lzdGVyU3RhdGUuaCAqLywKIAkJ
CQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIgLyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICov
LAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMxMzgzOSAvKiBSdW5uaW5nU2NvcGUuaCAqLywKKwkJ
CQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3Bw
ICovLAorCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5j
cHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8s
CiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICov
LApAQCAtNTYyMiw3ICs1NjMwLDcgQEAKIAkJCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyog
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMTQxNDQ4
Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovLAogCQkJCTBGNUYwOENF
MTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8sCi0JCQkJMEYx
RkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovLAorCQkJCTBGNEQ4
QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywKIAkJCQkwRjk1MkE5RjFE
Rjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLywKIAkJCQkwRjk1MkFBMDFERjc4
NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8sCiAJCQkJMUFDRjczNzYxNzFDQTZGQjAw
QzlCQjFFIC8qIFdlYWsuY3BwICovLApAQCAtODE3Miw2ICs4MTgwLDcgQEAKIAkJCQk2NTE0RjIx
OTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4
NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20u
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8q
IENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAw
QjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODcsNiArODg5Niw3IEBA
CiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNX
ZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4
RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4
Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDA2LDYgKzkwMTYsNyBAQAogCQkJCUUzQzI5NURE
MUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFCNjE4QjY2
MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8qIE9iamVjdFBy
b3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5
QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjUzLDcgKzkyNjQs
NiBAQAogCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZh
ck9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8q
IFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAw
QTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTEx
REY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1
NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZp
c2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNh
c2UgVHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1f
c3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVz
dWx0ID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4MCw3ICs5ODAsNyBAQCB2
b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNp
dFdlYWtseUhhc0JlZW5DYWxsZWQgPSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHNob3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEz
Miw3ICsxMTMyLDcgQEAgc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAog
CiBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKQogewotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlz
KSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVU
b09sZEFnZSgpKSkKQEAgLTExNDcsMTAgKzExNDcsMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3Vs
ZEpldHRpc29uRHVlVG9PbGRBZwogI2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hv
dWxkTWFya1RyYW5zaXRpb24oREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlv
bikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJh
bnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2Rl
T3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTgwLDcgKzExODAsNyBAQCB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAg
ICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAg
ICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwot
ICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1
cmUpKQorICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQog
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVy
ZSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJr
ZWRTb0ZhciA9IGZhbHNlOwpAQCAtMTI1NCwxNCArMTI1NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6
ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRm
Z0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiBy
ZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBB
U1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJl
bmNlKSk7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNl
KSkgeworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAg
ICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CiAgICAgaWYgKGFsbEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdD
b21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZChkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ld
LmdldCgpKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitl
bnVtIGNsYXNzIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA6IHVpbnQ4X3QgeworICAgIFNlcXVlbnRp
YWwsCisgICAgUGFyYWxsZWwKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
SlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCit7CisgICAgc3dpdGNoIChw
YXJhbGxlbGlzbSkgeworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVl
bnRpYWw6CisgICAgICAgIG91dC5wcmludCgiU2VxdWVudGlhbCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWw6CisgICAgICAg
IG91dC5wcmludCgiUGFyYWxsZWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEs
NyArMjgxLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwg
bV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMs
ICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3Rh
Y2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtT
dGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFy
a2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtlX3Vu
aXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAgICwgbV9oYW5kbGVTZXQodm0p
CiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAg
ICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0
PigpKQpAQCAtOTExLDcgKzkxMSw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2UKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQrKzsKICAgICBpZiAobV9tdXRhdG9yU2hv
dWxkQmVGZW5jZWQpIHsKICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGlm
ICghaXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgaWYgKCFpc01hcmtlZChj
ZWxsKSkgewogICAgICAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUg
aW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKICAgICAgICAg
ICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9yZSB0byBhbiB1bm1hcmtl
ZCBQb3NzaWJseUJsYWNrIG9iamVjdC4gSWYgdGhlCiAgICAgICAgICAgICAvLyBvYmplY3QgZ2V0
cyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3aWxsIGdvIGRvd24gdGhl
IG5vcm1hbCBtYXJraW5nCkBAIC05MjQsMTUgKzkyNCwxNSBAQCB2b2lkIEhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgICAgICAgICAgICAgLy8gTm93IHdlIHByb3RlY3Qg
YWdhaW5zdCB0aGlzIHJhY2U6CiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAv
LyAgICAgMSkgT2JqZWN0IHN0YXJ0cyBvdXQgYmxhY2sgKyB1bm1hcmtlZC4KLSAgICAgICAgICAg
ICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkQ29uY3VycmVudGx5IGhlcmUuCisgICAgICAg
ICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZCBoZXJlLgogICAgICAgICAgICAgICAg
IC8vICAgICAyKSBPYmplY3QgaXMgbWFya2VkIGFuZCBncmV5ZWQuCiAgICAgICAgICAgICAgICAg
Ly8gICAgIDMpIE9iamVjdCBpcyBzY2FubmVkIGFuZCBibGFja2VkLgogICAgICAgICAgICAgICAg
IC8vICAgICAtLT4gV2UgZG8gYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nIGhl
cmUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ug
d2Ugd291bGQgaGF2ZSBtYWRlIHRoZSBvYmplY3Qgd2hpdGUgYWdhaW4sIGV2ZW4gdGhvdWdoIGl0
IHNob3VsZAogICAgICAgICAgICAgICAgIC8vIGJlIGJsYWNrLiBUaGlzIGNoZWNrIGxldHMgdXMg
Y29ycmVjdCBvdXIgbWlzdGFrZS4gVGhpcyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdAotICAgICAg
ICAgICAgICAgIC8vIGlzTWFya2VkQ29uY3VycmVudGx5IGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5
IHRvIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwp
KSB7CisgICAgICAgICAgICAgICAgLy8gaXNNYXJrZWQgY29udmVyZ2VzIG1vbm90b25pY2FsbHkg
dG8gdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSXQncyBkaWZmaWN1bHQgdG8gd29yayBvdXQgd2hldGhlciB0aGUgb2Jq
ZWN0IHNob3VsZCBiZSBncmV5IG9yIGJsYWNrIGF0CiAgICAgICAgICAgICAgICAgICAgIC8vIHRo
aXMgcG9pbnQuIFdlIHNheSBibGFjayBjb25zZXJ2YXRpdmVseS4KICAgICAgICAgICAgICAgICAg
ICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlCbGFjayk7CkBAIC05NDgs
NyArOTQ4LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZChjZWxsKSk7CiAgICAgLy8gSXQgY291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IHdhcyAq
anVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvciBtYXkgc2V0IHRoZQog
ICAgIC8vIHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFuZCB0aGVuIHRvIFBvc3NpYmx5T2xkT3JC
bGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8KICAgICAvLyByYWNlIHdpdGggdGhl
IGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFjY3VyYXRlIGJlY2F1c2Ug
dGhlIG9iamVjdCBfd2lsbF8KQEAgLTEzMDUsNyArMTMwNSw3IEBAIE5FVkVSX0lOTElORSBib29s
IEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgLy8gV29uZGVyaW5nIHdoYXQgdGhpcyBk
b2VzPyBMb29rIGF0IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpLiBUaGUgRE9NIGFuZCBvdGhl
cnMgY2FuIGFsc28KICAgICAgICAgLy8gYWRkIHRoZWlyIG93biB1c2luZyBIZWFwOjphZGRNYXJr
aW5nQ29uc3RyYWludCgpLgogICAgICAgICBib29sIGNvbnZlcmdlZCA9Ci0gICAgICAgICAgICBt
X2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvciwgTW9ub3Rvbmlj
VGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVD
b252ZXJnZW5jZShzbG90VmlzaXRvcik7CiAgICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xvdFZp
c2l0b3IuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1w
dHkoKTsKICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBDb2xsZWN0b3JQaGFz
ZTo6RW5kKTsKQEAgLTI1NzgsNyArMjU3OCw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNl
cnZhdGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Is
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGlt
aW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAgICAg
ICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAgICAg
ICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAtMjU4
OCwxMSArMjU4OCwxMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAg
ICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgfSwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwg
c2xvdFZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNjA5LDE5ICsyNjEwLDIxIEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgbV9oYW5kbGVTdGFj
ay52aXNpdChzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRl
YnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICBpZiAo
U2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmls
ZXIoKSkgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmls
ZXItPmdldExvY2soKSk7CkBAIC0yNjM3LDM0ICsyNjQwLDM4IEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV92bS0+c2hhZG93Q2hp
Y2tlbigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faml0U3R1YlJv
dXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9vYmplY3RT
cGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
V3JoIiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9yIChXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5o
ZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCiAgICAgICAgICAgICAg
ICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBp
LS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZp
c2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgCkBAIC0yNjc5LDEy
ICsyNjg2LDEzIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0b3IpOwogICAgICAgICB9
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAjZW5kaWYKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAog
ICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBp
dCdzIGJsYWNrLgpAQCAtMjY5MywxMSArMjcwMSwxNSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29u
c3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9LAotICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJNcm1zIiwgIk11dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIGdyYWIgbG9ja3MgdG8gZmlkZGxlIHdpdGggdGhlIG11dGF0b3IgbWFy
ayBzdGFjayBhbmQgdGhlIHJhY2Ugc3RhY2suCisgICAgICAgICAgICAvLyBUaGUgY2hhbmNlcyBv
ZiBjb250ZW50aW9uIG9uIHRob3NlIGxvY2tzIGFyZSBzbGltLCBidXQgd2Ugc2hvdWxkIGRvIGl0
IGFueXdheS4KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSW5kaWNhdGUgdG8gdGhlIGZp
eHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQogICAgICAgICAgICAgc2l6ZV90IHNpemUg
PSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwog
ICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOwpAQCAtMjcxMSw3
ICsyNzIzLDggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKICAgICAgICAgICAgIHJldHVybiBtX211dGF0
b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogICAgICAgICB9
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogfQogCiB2b2lkIEhlYXA6OmFkZE1hcmtp
bmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29uc3RyYWlu
dCkKQEAgLTI3OTQsMTYgKzI4MDcsNiBAQCB2b2lkIEhlYXA6OmFsbG93Q29sbGVjdGlvbigpCiAg
ICAgbV9jb2xsZWN0Q29udGludW91c2x5TG9jay51bmxvY2soKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmIGZ1
bmMpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrKTsKLSAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKLSAgICBmdW5jKCptX211
dGF0b3JTbG90VmlzaXRvcik7Ci0gICAgZm9yIChhdXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxs
ZWxTbG90VmlzaXRvcnMpCi0gICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9yKTsKLX0KLQogdm9pZCBI
ZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBtX211dGF0
b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVlOwpAQCAtMjg0Nyw0ICsyODUwLDI0IEBAIHZvaWQgSGVh
cDo6cmVtb3ZlSGVhcEZpbmFsaXplckNhbGxiYWNrKGMKICAgICBtX2hlYXBGaW5hbGl6ZXJDYWxs
YmFja3MucmVtb3ZlRmlyc3QoY2FsbGJhY2spOwogfQogCit2b2lkIEhlYXA6OnNldEJvbnVzVmlz
aXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKKyAgICBtX2JvbnVz
VmlzaXRvclRhc2sgPSB0YXNrOworICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOworfQorCit2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgdW5zaWduZWQgaW5pdGlhbFJl
ZkNvdW50ID0gdGFzay0+cmVmQ291bnQoKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKHRhc2sp
OworICAgIHRhc2stPnJ1bigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgc2V0Qm9udXNW
aXNpdG9yVGFzayhudWxscHRyKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9tYXJraW5nTXV0ZXgpOworICAgICAgICB3aGlsZSAodGFzay0+cmVmQ291bnQoKSA+IGlu
aXRpYWxSZWZDb3VudCkKKyAgICAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndh
aXQobV9tYXJraW5nTXV0ZXgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQs
NiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1
dGlvbiA9IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAg
IHN0YXRpYyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0
aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAg
CiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0zNTgsNiArMzU3
LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhj
b25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6
ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lk
IHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rp
b25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5Q
YXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZp
c2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0
aW5nU2NvcGU7CkBAIC01MjcsNiArNTM3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFz
c2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBj
b25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAg
ICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTEsNiBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90
VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29u
c3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNr
IG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9jb2Rl
QmxvY2tzOwpAQCAtNjQyLDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgTGlzdGFibGVIYW5kbGVy
PFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnM7
CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsKKyAgICBSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlzaXRvclRhc2s7CiAKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxvY2tCeXRlc0FsbG9jYXRl
ZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAko
cmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDE1IEBAIGlubGluZSBib29sIEhlYXA6
OmNvbGxlY3RvckJlbGlldmVzVGhhdFQKICAgICByZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGlu
c3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1
aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkK
IHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsK
ICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwog
ICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+
bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBj
ZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZCgKLSAgICAgICAg
YmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwot
fQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qg
dm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAg
ICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJr
ZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5p
c01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFj
ZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9jay5pc01hcmtlZChi
bG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAtMjY5LDQgKzI1OSwxNCBA
QCBpbmxpbmUgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnkoKQogICAgICAgICBzdG9wSWZOZWNl
c3NhcnlTbG93KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6OmZv
ckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgZnVuYygqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CisgICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0b3IpOworICAgIGZv
ciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBm
dW5jKCpzbG90VmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHJl
dmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hv
dEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSGVhcFNu
YXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6
YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZl
U25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAg
ICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShyZXZp
c2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlT
X0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhl
YXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KLSAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24sIEhl
YXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c01hcmtlZChIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAg
ICAgYm9vbCBpc0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxvY2F0ZWQo
KTsgfQogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNW
YWxpZENlbGw7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw2IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFya2VkQ29uY3Vy
cmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgYm9v
bCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgYm9vbCB0ZXN0QW5kU2V0
TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICAgICAgCkBAIC0yODAsNyArMjc5
LDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBhcmVNYXJrc1N0YWxl
KCk7CiAgICAgYm9vbCBhcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsK
LSAgICBEZXBlbmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIAogICAgIERlcGVuZGVuY3kgYWJvdXRUb01h
cmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKQEAgLTQ5OCwxOCArNDk2
LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKEgKICAgICByZXR1
cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAotQUxXQVlTX0lOTElO
RSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhEZXBl
bmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQotewotICAgIEhlYXBWZXJzaW9uIHZl
cnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwotICAgIHJldHVybiBkZXBlbmRlbmN5V2l0aChkZXBl
bmRlbmN5KHZlcnNpb24pLCB2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKTsKLX0KLQogaW5saW5l
IERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5
KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkocmVzdWx0LnZhbHVlKSkKKyAgICBI
ZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFko
dmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFib3V0VG9NYXJrU2xvdyhtYXJr
aW5nVmVyc2lvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRlbmN5OworICAgIHJldHVybiBk
ZXBlbmRlbmN5KHZlcnNpb24pOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
Ojphc3NlcnRNYXJrc05vdFN0YWxlKCkKQEAgLTUyNCwxNSArNTE2LDEwIEBAIGlubGluZSBib29s
IE1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyhjb24KIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6
OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQogewot
ICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSA/IGZhbHNlIDogaXNNYXJr
ZWRSYXcocCk7Ci19Ci0KLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZENvbmN1cnJl
bnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKLXsKLSAgICBh
dXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7
Ci0gICAgaWYgKHJlc3VsdC52YWx1ZSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJr
aW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJl
cihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVt
YmVyKHApLCBkZXBlbmRlbmN5KHZlcnNpb24pKTsKIH0KIAogaW5saW5lIGJvb2wgTWFya2VkQmxv
Y2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJ
KHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3LDE1IEBACiAjaW5jbHVk
ZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLU1hcmtpbmdDb25zdHJh
aW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0
cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0
aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSkKK01hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludChDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBtX2FiYnJl
dmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkK
LSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAs
IG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQotewotfQotCi1NYXJraW5nQ29uc3RyYWludDo6TWFy
a2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9y
Jik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSkKLSAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKLSAg
ICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92
ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdU
Rk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikpCiAgICAgLCBtX3ZvbGF0aWxpdHkodm9s
YXRpbGl0eSkKKyAgICAsIG1fcGFyYWxsZWxpc20ocGFyYWxsZWxpc20pCiB7CiB9CiAKQEAgLTYz
LDE0ICs0OCw1MSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAgICBt
X2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0
ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJraW5nQ29uc3RyYWludDo6
ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1l
b3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7
Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBt
X2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0g
ICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmco
dmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gcmVzdWx0ID0gZXhlY3V0ZUltcGwodmlzaXRvcik7CisgICAg
bV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgbV9sYXN0
RXhlY3V0ZVBhcmFsbGVsaXNtID0gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Rv
dWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQor
eworICAgIHJldHVybiAwOworfQorCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3Rp
bWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQo
KSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENv
dW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGRvUGFyYWxsZWxXb3JrSW1wbCh2aXNp
dG9yKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAg
ICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAg
IH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRv
cik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNp
dENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7Cit9CisKK3ZvaWQgTWFya2luZ0Nv
bnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlz
aFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnQuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEwIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29uc3RyYWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVk
ZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIKLSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIK
ICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CkBAIC00MywxOCArNDEsOSBAQCBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50
KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90Vmlz
aXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIE1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5n
IG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20pOwogICAg
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAgICAgCiAgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCkBAIC02NCwzMyAr
NTMsMzkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRTdGF0cygpOwogICAgIAogICAgIHNpemVf
dCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KKyAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbTsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0
ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRp
bWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7
CiAgICAgCi0gICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5j
dGlvbih2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgp
ICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Ci0gICAgfQorICAgIHZpcnR1YWwgZG91Ymxl
IHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICBkb3Vi
bGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICB2b2lkIGRv
UGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmso
U2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5
KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisgICAgLy8gSWYgdGhpcyBp
cyBTZXF1ZW50aWFsLCBpdCBtZWFucyB0aGF0IHRoZSBjb25zdHJhaW50IGhhcyB0byBiZSBydW4g
c2VxdWVudGlhbGx5LCB3aXRoIG5vIGNvbmN1cnJlbnQKKyAgICAvLyBjb25zdHJhaW50cy4KKyAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBjb25zdCB7IHJldHVybiBtX3Bh
cmFsbGVsaXNtOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZG9Q
YXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBh
cmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAg
ICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0cmluZyBtX2Fi
YnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVG
dW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29y
a0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5
OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVsaXNtOworICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20geyBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlBhcmFsbGVsIH07IC8vIEl0J3MgYSBoZXVyaXN0aWMsIHdlIGNhbiBiZSB3cm9uZy4g
VGhpcyBndWVzcyBvbmx5IGFmZmVjdHMgdGhlIGZpcnN0IHJ1bi4KICAgICBzaXplX3QgbV9sYXN0
VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJh
aW50U2V0LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSAiVmlzaXRD
b3VudGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCkBAIC0zNCw1MiArMzcsMjI2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7CiBw
dWJsaWM6Ci0gICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBT
bG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorICAgIEV4ZWN1dGlv
bkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCkKICAgICAgICAgOiBtX3NldChzZXQp
Ci0gICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVv
dXQpCiAgICAgeworICAgICAgICBtX3NldC5tX2hlYXAuZm9yRWFjaFNsb3RWaXNpdG9yKAorICAg
ICAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgICAgIG1f
dmlzaXRDb3VudGVycy5hcHBlbmQoVmlzaXRDb3VudGVyKHZpc2l0b3IpKTsKKyAgICAgICAgICAg
IH0pOwogICAgIH0KICAgICAKICAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nOworICAgICAgICBmb3IgKGNv
bnN0IFZpc2l0Q291bnRlciYgdmlzaXRDb3VudGVyIDogbV92aXNpdENvdW50ZXJzKSB7CisgICAg
ICAgICAgICBpZiAodmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0CisgICAgZW51bSBTY2hlZHVsZXJQcmVm
ZXJlbmNlIHsKKyAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisgICAgICAgIE5leHRDb25zdHJh
aW50Rmlyc3QKKyAgICB9OworCisgICAgLy8gcGlja05leHQoKSBpcyBjYWxsZWQgd2hpbGUgYSBs
b2NrIGlzIGhlbGQsIHNvIGl0IGNhbiBwcmV0ZW5kIGxpa2UgaXQncyBiZWluZyBjYWxsZWQgZnJv
bSB0aGUgbWFpbgorICAgIC8vIHRocmVhZC4gRm9yIGV4YW1wbGUsIGl0J3MgdG90YWxseSBzYWZl
IGZvciB0aGF0IGxhbWJkYSB0byBjbG9zZSBvdmVyIHRoZSBzdGFjay4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZXhlY3V0ZShTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZl
cmVuY2UsIGNvbnN0IEZ1bmMmIHBpY2tOZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZp
c2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOworICAgICAgICBtX3NldC5t
X2hlYXAucnVuRnVuY3Rpb25JblBhcmFsbGVsKAorICAgICAgICAgICAgWyZdIChTbG90VmlzaXRv
ciYgdmlzaXRvcikgeworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAg
ICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4VG9SdW47CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVs
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuZmlyc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeU5leHRDb25zdHJhaW50ID0gWyZd
ICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiBwaWNrUmVzdWx0ID0gcGlja05leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghcGlja1Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWN1dGVk
LmdldCgqcGlja1Jlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJh
aW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNrUmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVm
ZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0cnlQYXJhbGxlbFdvcmsoKSB8fCB0cnlOZXh0Q29uc3RyYWludCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRyeU5leHRDb25zdHJhaW50KCkgfHwgdHJ5UGFyYWxsZWxXb3JrKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX251bUFjdGl2ZVRocmVhZHMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQW55IHdhaXRpbmcgY291bGQgYmUgcmVwbGFjZWQg
d2l0aCBqdXN0IHJ1bm5pbmcgdGhlIFNsb3RWaXNpdG9yLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQgd291bGQgYmUgcHJvZml0YWJsZS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcysrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc20gcGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBNYXJraW5nQ29uc3RyYWlu
dCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFtpbmRleFRvUnVuXTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxsZWxXb3JrKHZpc2l0b3IpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbGxl
bGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuZ2V0KGluZGV4VG9S
dW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuZmluaXNo
UGFyYWxsZWxXb3JrKHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLnRh
a2VGaXJzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAodW5zaWdu
ZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGluZGV4VG9SdW47IH0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuY2xlYXIoaW5kZXhU
b1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2V4ZWN1dGVkLnNl
dChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxp
c20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4p
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxT
ZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzLS07CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleFRvUnVuIDogbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkpCisgICAgICAgICAg
ICBleGVjdXRlKCptX3NldC5tX3NldFtpbmRleFRvUnVuXSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOwogICAgIH0KICAgICAK
LSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KLSAgICBib29sIGRyYWluKEJp
dFZlY3RvciYgdW5leGVjdXRlZCkKKyAgICB2b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRl
ZCkKICAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgewotICAg
ICAgICAgICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGlu
ZGV4KTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBh
dXRvIGl0ZXIgPSB1bmV4ZWN1dGVkLmJlZ2luKCk7CisgICAgICAgIGF1dG8gZW5kID0gdW5leGVj
dXRlZC5lbmQoKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJzdCwKKyAg
ICAgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAgICAgICAgICAgfSk7
CisgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXJBbGwoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBk
aWRFeGVjdXRlKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRlZC5nZXQoaW5k
ZXgpOyB9CisgICAgdm9pZCBjb252ZXJnZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQq
PiYgb3JkZXIpCisgICAgeworICAgICAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChvcmRlci5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgaW5kZXggPSAwOwog
Ci0gICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKKyAgICAgICAgLy8gV2Ugd2FudCB0byBl
eGVjdXRlIHRoZSBmaXJzdCBjb25zdHJhaW50IHNlcXVlbnRpYWxseSBpZiB3ZSB0aGluayBpdCB3
aWxsIHF1aWNrbHkgZ2l2ZSB1cyBhCisgICAgICAgIC8vIHJlc3VsdC4gSWYgd2UgcmFuIGl0IGlu
IHBhcmFsbGVsIHRvIG90aGVyIGNvbnN0cmFpbnRzLCB0aGVuIHdlIG1pZ2h0IGVuZCB1cCBoYXZp
bmcgdG8gd2FpdCBmb3IKKyAgICAgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3RyYWludHMgdG8gZmlu
aXNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVyaW5nIGNvbnZlcmdl
bmNlIGl0J3MKKyAgICAgICAgLy8gZW1waXJpY2FsbHkgbW9zdCBvcHRpbWFsIHRvIHJldHVybiB0
byBkcmFpbmluZyBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29yay4gTW9zdAor
ICAgICAgICAvLyBjb25zdHJhaW50cyBkb24ndCBnZW5lcmF0ZSBhbnkgd29yayBtb3N0IG9mIHRo
ZSB0aW1lLCBhbmQgd2hlbiB0aGV5IGRvIGdlbmVyYXRlIHdvcmssIHRoZXkgdGVuZAorICAgICAg
ICAvLyB0byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmluZyBj
eWNsZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisgICAgICAgIC8vIHdl
IGdldCB0aGUgaGVjayBvdXQgb2YgaGVyZSBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0
ZXMgd29yay4gSSB0aGluayB0aGF0IHBhcnQgb2Ygd2hhdAorICAgICAgICAvLyBtYWtlcyB0aGlz
IG9wdGltYWwgaXMgdGhhdCB3ZSBhbHNvIG5ldmVyIGFib3J0IHJ1bm5pbmcgYSBjb25zdHJhaW50
IGVhcmx5LCBzbyB3aGVuIHdlIGRvIHJ1bgorICAgICAgICAvLyBvbmUsIGl0IGhhcyBhbiBvcHBv
cnR1bml0eSB0byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2libHkgY2FuLgorICAg
ICAgICAvLworICAgICAgICAvLyBTaW1pbGFyIHJlYXNvbmluZyBhcHBsaWVzIHRvIGNvbnN0cmFp
bnRzIHRoYXQgdGVuZCB0byByZXR1cm4gQ29zbnRyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbAor
ICAgICAgICAvLyBmcm9tIGV4ZWN1dGUuIFRob3NlIGNvbnN0cmFpbnRzIHR5cGljYWxseSBoYXZl
IGEgdmVyeSBmYXN0LXJ1bm5pbmcgZXhlY3V0ZSBmdW5jdGlvbiwgd2hpY2ggdGhlbgorICAgICAg
ICAvLyBvZmZsb2FkcyBhbG1vc3QgYWxsIG9mIHRoZSB3b3JrIHRvIGEgcGFyYWxsZWwgd29ya2Vy
LiBJbiB0aGF0IGNhc2UsIGl0IG1ha2VzIHNlbnNlIHRvIHJ1biB0aGUKKyAgICAgICAgLy8gZXhl
Y3V0ZSBmdW5jdGlvbiBzZXF1ZW50aWFsbHkuCisgICAgICAgIGlmIChvcmRlcltpbmRleF0tPndv
cmtFc3RpbWF0ZShtX3NldC5tX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAgICAgICAg
ICAgIHx8IG9yZGVyW2luZGV4XS0+bGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpID09IENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgIGV4ZWN1dGUoKm9yZGVyW2lu
ZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVs
LmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICYmIChvcmRlci5pc0VtcHR5KCkgfHwgZGlkVmlz
aXRTb21ldGhpbmcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisg
ICAgICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAg
ICAgICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChp
bmRleCA+PSBvcmRlci5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIG9yZGVyW2lu
ZGV4KytdLT5pbmRleCgpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKICAgICB7Ci0gICAgICAgIG1f
c2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcs
IG1fdGltZW91dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICAgICAgaWYg
KG1fZXhlY3V0ZWQuZ2V0KGNvbnN0cmFpbnQuaW5kZXgoKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBj
b25zdHJhaW50LmV4ZWN1dGUoCisgICAgICAgICAgICBtX3NldC5tX2hlYXAuY29sbGVjdG9yU2xv
dFZpc2l0b3IoKSk7CisgICAgICAgIGRpZEV4ZWN1dGUocGFyYWxsZWxpc20sIGNvbnN0cmFpbnQu
aW5kZXgoKSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKKyAgICB2b2lkIGRpZEV4ZWN1dGUoQ29u
c3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRleCkKKyAgICB7Cisg
ICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICAgICAgaWYgKHBhcmFsbGVsaXNtID09
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgIG1fdG9FeGVj
dXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBh
cmFsbGVsU2V0LnNldChpbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIG1fc2V0OwotICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAg
TW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7CiAgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7Ci0gICAg
Ym9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKKyAgICBEZXF1ZTx1bnNpZ25lZCwg
MzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBCaXRWZWN0b3IgbV90b0V4ZWN1dGVJblBh
cmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlU2VxdWVudGlh
bGx5OworICAgIExvY2sgbV9sb2NrOworICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1
bnNpZ25lZCBtX251bUFjdGl2ZVRocmVhZHMgeyAwIH07CisgICAgVmVjdG9yPFZpc2l0Q291bnRl
ciwgMTY+IG1fdmlzaXRDb3VudGVyczsKIH07CiAKLU1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJr
aW5nQ29uc3RyYWludFNldCgpCitNYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFp
bnRTZXQoSGVhcCYgaGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQogewogfQogCkBAIC0xMDcsMTgg
KzI4NCwxOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAg
bV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJp
bmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFt
ZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91
bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwg
V1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNt
KSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKICAgICA6OkZ1bmN0
aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkgdm9sYXRpbGl0eSwKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7
Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJi
cmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pLCBX
VEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7CisgICAgYWRk
KHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2
aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZN
b3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkp
OwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBAIC0xMzEsOSArMzA5LDkg
QEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAgIG1fc2V0LmFwcGVuZChXVEZN
b3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0
ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
Citib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxv
ZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDgsOSArMzI2LDkgQEAgYm9vbCBNYXJr
aW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90Vmlz
aXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRp
bWVvdXQpOworICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcyk7CiAg
ICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRpb24rKzsKICAgICAKQEAgLTE1
OSwxNiArMzM3LDE0IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIK
IAogICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMgdGhhdCB3ZSBoYXZlIG5vdCBl
eGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4KICAgICAvLyB3ZSBzaG91bGQg
ZXhlY3V0ZSB0aG9zZSBub3cuCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5l
eGVjdXRlZFJvb3RzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4ZWN1dGlvbkNvbnRl
eHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpOwogICAgIAogICAgIC8vIEZpcnN0IGl0ZXJhdGlv
biBpcyBiZWZvcmUgYW55IHZpc2l0b3IgZHJhaW5pbmcsIHNvIGl0J3MgdW5saWtlbHkgdG8gdHJp
Z2dlciBhbnkgY29uc3RyYWludHMgb3RoZXIKICAgICAvLyB0aGFuIHJvb3RzLgogICAgIGlmIChp
dGVyYXRpb24gPT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghZXhl
Y3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jv
d3Rocyk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdy
b3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRoYXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCiAg
ICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxkIEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1
Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gZ28gdG90YWxseQpAQCAtMjE1LDMzICszOTEs
MTYgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgICAgICAg
ICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGItPnZvbGF0aWxpdHkoKTsKICAgICAgICAgfSk7
CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCA6IG1fb3JkZXJl
ZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0cmFpbnQtPmluZGV4KCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRFeGVjdXRlKGkpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShpKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29udmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0
IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFwcGVuIGFueXRpbWUKLSAgICAgICAgLy8gd2Ug
ZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBh
bGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8gTm90IGNsZWFyIGlmIHRoYXQncwotICAgICAg
ICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2ZW4gYmV0dGVyIGlzIHRoaXM6Ci0gICAgICAg
IC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHksIGtlZXAgcnVubmluZy4KLSAgICAgICAgLy8g
LSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVhc3QgTiB0aGluZ3MsIHJldHVybi4KLSAgICAg
ICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMyCi0gICAgICAgIGlmIChleGVjdXRpb25D
b250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorICAgIGV4ZWN1dGlvbkNvbnRleHQuY29udmVyZ2UobV9vcmRlcmVkKTsKICAgICAKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSd2ZSBjb252ZXJnZWQuIFRo
YXQgaGFwcGVucyBpZiB3ZSBkaWQgbm90IHZpc2l0IGFueXRoaW5nLgorICAgIHJldHVybiAhZXhl
Y3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCiB2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wg
ZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBt
X3NldCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0
aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4
ZWN1dGUodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFM
b2coIiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjI1MDg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQg
ewogcHVibGljOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KCk7CisgICAgTWFya2luZ0NvbnN0
cmFpbnRTZXQoSGVhcCYpOwogICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgpOwogICAgIAogICAg
IHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CkBAIC00MSwxNSArNDEsMTcgQEAgcHVibGljOgogICAg
IHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0
cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAg
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFs
bGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAogICAgICAgICA6OkZ1bmN0aW9uPGRvdWJs
ZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0g
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgdm9pZCBhZGQoc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CiAgICAgCkBAIC02MCw5ICs2Miw3IEBA
IHB1YmxpYzoKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwg
Y29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAg
IC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVk
IGZyb20gdGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RW
aXNpdG9yJiwKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6
aW5maW5pdHkoKSk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsK
ICAgICAKICAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hl
bmFuaWdhbnMuCiAgICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CkBAIC03MSwxMCAr
NzEsMTEgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBFeGVjdXRpb25Db250ZXh0OwogICAgIGZyaWVu
ZCBjbGFzcyBFeGVjdXRpb25Db250ZXh0OwogICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgYm9vbCBl
eGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgYm9vbCBkcmFp
bihTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0
VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAgIGJvb2wgZHJh
aW4oU2xvdFZpc2l0b3ImLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0
ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAKKyAgICBIZWFwJiBtX2hlYXA7CiAg
ICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0
ZWRPdXRncm93dGhzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFp
bnQ+PiBtX3NldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K1NpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQorICAgIDog
TWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUp
LCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1v
dmUoZXhlY3V0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5j
dGlvbiwKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdU
Rk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxs
ZWxpc20pCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikp
CisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVN
YXJraW5nQ29uc3RyYWludCgpCit7Cit9CisKK2RvdWJsZSBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKCFt
X3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Cit9CisKK0NvbnN0cmFpbnRQ
YXJhbGxlbGlzbSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgcmV0
dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29u
c3RyYWludCB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwg
Q1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisg
ICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29ya0VzdGlt
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247
CisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0
ZUZ1bmN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjc3LDcgKzI3Nyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpT
Q2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwg
SlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShj
ZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICBBU1NFUlQoIWNl
bGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CkBAIC0z
NDYsNyArMzQ2LDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
Ojp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChj
ZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0
aGlzLCBjZWxsKTsKICAgICAKQEAgLTU2MSwxNyArNTYxLDE2IEBAIGJvb2wgU2xvdFZpc2l0b3I6
OmRpZFJlYWNoVGVybWluYXRpb24oKQogICAgIHJldHVybiBkaWRSZWFjaFRlcm1pbmF0aW9uKGxv
Y2tlcik7CiB9CiAKLWJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3Qg
QWJzdHJhY3RMb2NrZXImKQorYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIHJldHVybiBpc0VtcHR5KCkKLSAg
ICAgICAgJiYgIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAg
ICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCi0gICAgICAg
ICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICByZXR1
cm4gIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCisgICAgICAgICYmICFo
YXNXb3JrKGxvY2tlcik7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6Omhhc1dvcmsoY29uc3QgQWJz
dHJhY3RMb2NrZXImKQogewotICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCkKKyAgICByZXR1cm4gIWlzRW1wdHkoKQorICAgICAgICB8fCAhbV9o
ZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgfHwgIW1f
aGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKIH0KIApAQCAtNTgzLDEy
ICs1ODIsMTQgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlcwogCiAg
ICAgYm9vbCBpc0FjdGl2ZSA9IGZhbHNlOwogICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGJvbnVzVGFzazsKKyAgICAgICAg
CiAgICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtp
bmdNdXRleCk7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21h
cmtpbmdNdXRleCk7CiAgICAgICAgICAgICBpZiAoaXNBY3RpdmUpCiAgICAgICAgICAgICAgICAg
bV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgICAgIG1f
aGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycysrOwotCisgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4pIHsKICAgICAg
ICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxh
cHNlZCh0aW1lb3V0KSkKQEAgLTYyOSwyOCArNjMwLDU3IEBAIE5FVkVSX0lOTElORSBTbG90Vmlz
aXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgICAgICAgICAgICAgIGF1dG8gaXNSZWFkeSA9IFsm
XSAoKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsobG9ja2Vy
KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzawog
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxk
RXhpdDsKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFy
a2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChtX2hlYXAubV9tYXJraW5nTXV0ZXgsIHRp
bWVvdXQsIGlzUmVhZHkpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgh
aGFzV29yayhsb2NrZXIpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX2JvbnVzVmlz
aXRvclRhc2spCisgICAgICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG1faGVhcC5tX2JvbnVz
VmlzaXRvclRhc2s7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1faGVh
cC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yRWFjaE1hcmtTdGFjaygKLSAgICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBz
dGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suc3Rl
YWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0ds
b2JhbFN0YWNrKHN0YWNrKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJl
ck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIWJvbnVzVGFzayAmJiBpc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3JFYWNoTWFya1N0YWNrKAorICAgICAgICAgICAgICAgICAgICBbJl0gKE1hcmtT
dGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2spLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1faGVh
cC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAgICAgICBtX2hlYXAu
bV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIGlmIChib251c1Rhc2spIHsKKyAgICAg
ICAgICAgIGJvbnVzVGFzay0+cnVuKCp0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRklYTUU6IElkZWFsbHksIHdlIHdvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMuIEhvd2V2ZXIs
IHRoZSBwYXJhbGxlbCBtYXJraW5nIGFsZ29yaXRobSB3aWxsCisgICAgICAgICAgICAvLyBnZXQg
Y29uZnVzZWQgaWYgd2UgaW5pdGlhdGUgaXQgd2l0aCB0aGUgaGVscGVyIHZpc2l0b3JzIGhhdmlu
ZyBhbnl0aGluZyBpbiB0aGVpciBzdGFja3MuCisgICAgICAgICAgICAvLyBBbHNvLCB0aGlzIHBy
b3RlY3RzIGJ1Z3MgdGhhdCBpbnZvbHZlIHJhY2VzIGJldHdlZW4gdmlzaXRDaGlsZHJlbiBhbmQg
b25lIG9mIHRoZQorICAgICAgICAgICAgLy8gY29uc3RyYWludHMuCisgICAgICAgICAgICAvL2Rv
bmF0ZUFsbCgpOworCisgICAgICAgICAgICAvLyBUaGUgbWFpbiB0aHJlYWQgY291bGQgc3RpbGwg
YmUgcnVubmluZywgYW5kIG1heSBydW4gZm9yIGEgd2hpbGUuIFVubGVzcyB3ZSBjbGVhciB0aGUg
dGFzaworICAgICAgICAgICAgLy8gb3Vyc2VsdmVzLCB3ZSB3aWxsIGtlZXAgbG9vcGluZyBhcm91
bmQgdHJ5aW5nIHRvIHJ1biB0aGUgdGFzay4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgICAg
ICAgICAgICAgaWYgKG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPT0gYm9udXNUYXNrKQorICAg
ICAgICAgICAgICAgICAgICBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICBib251c1Rhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1faGVh
cC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc0VtcHR5KCkp
OworICAgICAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIGlzQWN0aXZlID0gdHJ1ZTsKICAgICB9CiB9CkBAIC02NzYsOSArNzA2LDEzIEBAIFNsb3RW
aXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAgICAgcmV0dXJuIGRyYWlu
SW5QYXJhbGxlbCh0aW1lb3V0KTsKICAgICB9CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hl
YXAubV9tYXJraW5nTXV0ZXgpOwotICAgIGRvbmF0ZUFsbChsb2NrZXIpOwotICAgIAorICAgIGRv
bmF0ZUFsbChob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpKTsKKyAgICByZXR1cm4gd2Fp
dEZvclRlcm1pbmF0aW9uKHRpbWVvdXQpOworfQorCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5S
ZXN1bHQgU2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgp
OwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAg
ICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjEsNiArMTIxLDggQEAgcHVibGljOgogCiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5J
blBhcmFsbGVsKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOwogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbFBhc3NpdmVseShNb25v
dG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAg
ICBTaGFyZWREcmFpblJlc3VsdCB3YWl0Rm9yVGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1l
b3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICAvLyBBdHRlbXB0cyB0byBw
ZXJmb3JtIGFuIGluY3JlbWVudCBvZiBkcmFpbmluZyB0aGF0IGludm9sdmVzIG9ubHkgd2Fsa2lu
ZyBgYnl0ZXNgIHdvcnRoIG9mIGRhdGEuIFRoaXMKICAgICAvLyBpcyBsaWtlbHkgdG8gYWNjaWRl
bnRhbGx5IHdhbGsgbW9yZSBvciBsZXNzIHRoYW4gdGhhdC4gSXQgd2lsbCB1c3VhbGx5IG1hcmsg
bW9yZSB0aGFuIGJ5dGVzLiBJdCBtYXkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgeworcHVibGljOgorICAgIFZpc2l0Q291
bnRlcigpIHsgfQorICAgIAorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRvcikK
KyAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCisgICAgICAgICwgbV9pbml0aWFsVmlzaXRD
b3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVf
dCB2aXNpdENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zpc2l0b3ItPnZp
c2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBtX2lu
aXRpYWxWaXNpdENvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lv
biAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVmlzaXRpbmdUaW1l
b3V0IHsKLXB1YmxpYzoKLSAgICBWaXNpdGluZ1RpbWVvdXQoKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0
U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAgIDogbV9kaWRWaXNpdFNv
bWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKLSAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUo
dmlzaXRvci52aXNpdENvdW50KCkpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRv
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1f
dmlzaXRDb3VudEJlZm9yZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlz
aXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1l
b3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGlu
ZyB7IGZhbHNlIH07Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKLSAgICBN
b25vdG9uaWNUaW1lIG1fdGltZW91dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDIyNTA4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNp
dChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2Vk
Q29uY3VycmVudGx5KG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAg
aWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghd2Vha0hhbmRs
ZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBT
bG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCks
IHZpc2l0b3IpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJv
b2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJv
cGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6Omlz
TWFya2VkQ29uY3VycmVudGx5KG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhh
c1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtl
ZENvbmN1cnJlbnRseShzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1f
Z2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAg
ICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBI
ZWFwOjppc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVj
dHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0No
ZWFwRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KHRoaXMpOworICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9B
dG9taWNzLmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQ2LDExICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRl
bmN5IG51bGxEZXBlbmRlbmN5KAogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9IG51
bGxwdHI+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KFQgdmFsdWUpCiB7CiAgICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50
NjRfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5pb24gewor
ICAgICAgICB1aW50MzJfdCBjb3B5OworICAgICAgICBUIHZhbHVlOworICAgIH0gdTsKKyAgICB1
LmNvcHkgPSAwOworICAgIHUudmFsdWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAgICAgLy8g
Q3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9z
ZSBjb21wdXRhdGlvbgogICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhp
cyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICszNjgsMjAg
QEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8vIG9yIGFu
IGFjcXVpcmUgbG9hZC4KICAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tp
bl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBb
aW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxpZiBDUFUo
QVJNKQogICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAgICAgICAg
OiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkp
KTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVwZW5k
ZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVuY2Uo
KTsKICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgVU5V
U0VEX1BBUkFNKHUuY29weSk7CiAjZW5kaWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAot
Ly8gRklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBl
bmRlbmN5KCkgb3ZlcmxvYWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVu
ZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0g
ICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lmIENQ
VShBUk02NCkKLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0g
ICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJy
Iihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVb
aW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAg
ICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwotICAg
IGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAgIHJl
dHVybiBkZXBlbmRlbmN5OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5M
SU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRl
bmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51
bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewot
ICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoK
LSAgICBEZXBlbmRlbmN5V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5j
eSgpKQotICAgICAgICAsIHZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVu
Y3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDog
ZGVwZW5kZW5jeShkZXBlbmRlbmN5KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19Owot
ICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBl
bmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAg
IHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5
IGRlcGVuZGVuY3kpCiB7CkBAIC00NjksMTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUgVCYgZW5z
dXJlUG9pbnRlcihBdG9taWM8VCoKIAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6OkRl
cGVuZGVuY3k7Ci11c2luZyBXVEY6OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpjb25zdW1l
OwogdXNpbmcgV1RGOjpkZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKIHVz
aW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAyMjUwODQpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRW
ZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3Bl
cmF0b3IrKyhpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0
aGlzOworICAgICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVl
LmgJKHJldmlzaW9uIDIyNTA4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCw2ICsxMDAsMTEgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFUsIHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25zdCBG
dW5jJik7CiAgICAgCisgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQg
Zm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNp
b24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFQgdGFrZUZpcnN0KGNvbnN0IEZ1bmMm
KTsKKwogICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNo
IHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKICAg
ICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTcxLDYgKzU3NiwyNSBAQCBpbmxpbmUgdm9pZCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHVu
c2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gdGhpcy0+c2l6ZSgpOworICAg
IHdoaWxlIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgVCBjYW5kaWRhdGUgPSB0YWtlRmlyc3Qo
KTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgd2hpbGUgKGNv
dW50LS0pCisgICAgICAgICAgICAgICAgcHJlcGVuZCh0YWtlTGFzdCgpKTsKKyAgICAgICAgICAg
IHJldHVybiBjYW5kaWRhdGU7CisgICAgICAgIH0KKyAgICAgICAgY291bnQrKzsKKyAgICAgICAg
YXBwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7CisgICAgfQorICAgIHJldHVybiBUKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiBpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VMYXN0
KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAv
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzIEBACisjcHJhZ21hIG9uY2UKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oPgorCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24g
MjI1MDg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlIDxoZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
Lmg+CiAjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuaD4KICNpbmNsdWRlIDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4K
ICNpbmNsdWRlIDxoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KICNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5saW5lcy5o
PgogI2luY2x1ZGUgPGhlYXAvVmlzaXRpbmdUaW1lb3V0Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9W
TS5oPgpAQCAtNzIsMTAgKzcyLDEwIEBAIHZvaWQgSlNWTUNsaWVudERhdGE6OmluaXROb3JtYWxX
b3JsZChWTSoKICAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG5ldyBKU1ZNQ2xpZW50
RGF0YSgqdm0pOwogICAgIHZtLT5jbGllbnREYXRhID0gY2xpZW50RGF0YTsgLy8gflZNIGRlbGV0
ZXMgdGhpcyBwb2ludGVyLgogICAgIAotICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91
bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAorICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFr
ZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KAogICAgICAgICAiV2NvYyIsICJXZWJD
b3JlIE91dHB1dCBDb25zdHJhaW50cyIsCiAgICAgICAgIFt2bSwgY2xpZW50RGF0YSwgbGFzdEV4
ZWN1dGlvblZlcnNpb24gPSB2bS0+aGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpXQotICAg
ICAgICAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSBt
dXRhYmxlIHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZl
cnNpb24pCkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkocmV2aXNpb24gMjI1MDg0KQor
KysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDggQEAgTE9OR1NQSURFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhf
UEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2
OC12NiIKIFRBSUxCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5j
aDkwMDAiCiBNSUNST0JFTkNITUFSS1NfUEFUSCA9IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3Rz
IiArICJtaWNyb2JlbmNobWFya3MiCi1PQ1RBTkVfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VU
RVNUU19QQVRIICsgIk9jdGFuZSIgKyAid3JhcHBlcnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRI
ID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEgg
PSBPUEVOU09VUkNFX09DVEFORV9QQVRIICsgIndyYXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVS
Rk9STUFOQ0VURVNUU19QQVRIICsgIkpTQmVuY2giCiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFO
Q0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ0ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFU
SCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04
NDEsNiArODQyLDIwIEBAIGNsYXNzIFNpbmdsZUZpbGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMK
ICAgZW5kCiBlbmQKIAorIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxl
IGFuZCBtdXN0IGJlIGxvYWRlZCBpbiBpdHMgb3duIGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1l
IChpLmUuIHJ1bigpKSwgYnV0IHJldHVybnMgaXRzIHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitj
bGFzcyBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVh
ZGVyIDpiZW5jaFBhdGgKKyAgCisgIGRlZiBpbml0aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVu
Y2hQYXRoID0gYmVuY2hQYXRoCisgIGVuZAorICAKKyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmls
ZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgIGVuZAorZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29u
c2lzdHMgb2Ygb25lIG9yIG1vcmUgZGF0YSBmaWxlcyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xv
YmFsbHksIGZvbGxvd2VkCiAjIGJ5IGEgY29tbWFuZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNs
YXNzIE11bHRpRmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBA
QCBkZWYgZW1pdEJlbmNoUnVuQ29kZUZpbGUobmFtZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJs
ZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgaWYgKF9fYmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0p
IHByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9f
YmVuY2hlcl9pbmRleCAtICN7d2FybXVwfSkgKyBcIjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVm
b3JlKS9fX3J1bnMpKTsiKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29t
bWFuZC5qc30iKQorICAgICAgZWxzaWYgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1
c3RvbVRpbWVkQmVuY2htYXJrCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5j
dGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0
cygkc3RkZXJyLGZpbGUsIiAgIHZhciBfX2JlbmNoZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsi
KQorICAgICAgICAkcmVydW4udGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCIgICBydW4oX19iZW5jaGVyX3doYXQsIF9fYmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAg
IH0KKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVz
dWx0LnZhbHVlID09IG51bGwpIikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAg
ICAgIHRocm93IG5ldyBFcnJvcihcIk51bGwgcmVzdWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1
dHMoJHN0ZGVycixmaWxlLCIgICByZXR1cm4gX19iZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAg
ICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCisgICAgICAgICR3YXJtdXAudGltZXMg
eworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVu
Y2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3Rk
ZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAg
IH0KKyAgICAgICAgJGlubmVyLnRpbWVzIHsKKyAgICAgICAgICB8IGlubmVySW5kZXggfAorICAg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52
bX06ICN7cGxhbi5pdGVyYXRpb259OiAje2lubmVySW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJf
cnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSk7IikKKyAgICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJl
R0MKKyAgICAgICAgfQogICAgICAgZWxzZQogICAgICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJh
bXMua2luZCA9PSA6c2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMo
JHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikK
QEAgLTE1OTMsNiArMTYyNywxOSBAQCBjbGFzcyBPY3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQK
IAorY2xhc3MgQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisg
IGRlZiBpbml0aWFsaXplKG5hbWUsIGZ1bGxQYXRoKQorICAgIEBuYW1lID0gbmFtZQorICAgIEBm
dWxsUGF0aCA9IGZ1bGxQYXRoCisgIGVuZAorICAKKyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisg
ICAgZW1pdEJlbmNoUnVuQ29kZShmdWxsbmFtZSwgcGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVk
QmVuY2htYXJrUGFyYW1ldGVycy5uZXcoZW5zdXJlRmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0i
LCBAZnVsbFBhdGgpKSkKKyAgZW5kCitlbmQKKwogY2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGlu
Y2x1ZGUgQmVuY2htYXJrCiAgIApAQCAtMzAwOSw2ICszMDU2LDcgQEAgYmVnaW4KICAgICB8IGFy
Z3MgfAogICAgIE9DVEFORS5hZGQgT2N0YW5lQmVuY2htYXJrLm5ldygqYXJncykKICAgfQorICBP
Q1RBTkUuYWRkIEN1c3RvbVRpbWVkQmVuY2htYXJrLm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVO
U09VUkNFX09DVEFORV9QQVRIICsgInNwbGF5LmpzIikudG9fcykKIAogICBLUkFLRU4gPSBCZW5j
aG1hcmtTdWl0ZS5uZXcoIktyYWtlbiIsIDphcml0aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0
YXIiLCAiYXVkaW8tYmVhdC1kZXRlY3Rpb24iLCAiYXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327723</attachid>
            <date>2017-11-27 20:35:08 -0800</date>
            <delta_ts>2017-11-28 11:40:26 -0800</delta_ts>
            <desc>with parallel Wcoc constraint</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>131431</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2
ICs1MDMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3
MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2
IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBG
OTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJF
NTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBB
OUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07
Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxh
bklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkw
RjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBB
OUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNj
aGVkdWxlci5oICovOyB9OwpAQCAtMzExLDYgKzMxMCw5IEBACiAJCTBGNEEzOEZBMUM4RTEzREYw
MDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRC
OTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1
bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5
MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhDNzQx
RkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovOyB9OworCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RDhD
NzgxRkNBM0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGls
bHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAw
NzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUx
ODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTc2LDcgKzE5NzgsNiBAQAog
CQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9y
U2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0
b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjFGQjM5MjFF
MTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbklubGluZXMuaDsgcGF0aCA9IGRmZy9E
RkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NTFF
MUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR1dvcmts
aXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2
NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMjY0LDYgKzIyNjUsMTAgQEAKIAkJMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQw
M0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1wLmg7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFD
IC8qIFZpc2l0Q291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNp
dENvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzMxRkM3QTk3
NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb25zdHJhaW50UGFyYWxsZWxpc20uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhD
NzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUNDMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJG
aXhPYnZpb3VzU3BpbGxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEFpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDRDFDNEMxQjU0MDA0
RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91
c1NwaWxscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFEMDFDNEQ3NjRC
MDA0RDZDMTEgLyogQjNPcmlnaW5EdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5jcHA7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUwMCw2ICs1NTA1LDcgQEAKIAkJCQkwRkQw
RTVFNjFFNDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAqLywKIAkJCQkxNDZCMTRE
QjEyRUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURB
QUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNEQ4
QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLywKIAkJCQkw
RjdERjEyRjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKIAkJ
CQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJCQkJMEYxMzZE
NEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU1OTksNiArNTYwNSw4IEBA
CiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4IC8qIFJlZ2lzdGVyU3RhdGUuaCAqLywKIAkJ
CQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIgLyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICov
LAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMxMzgzOSAvKiBSdW5uaW5nU2NvcGUuaCAqLywKKwkJ
CQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3Bw
ICovLAorCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5j
cHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8s
CiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICov
LApAQCAtNTYyMCw3ICs1NjI4LDcgQEAKIAkJCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyog
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMTQxNDQ4
Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovLAogCQkJCTBGNUYwOENF
MTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8sCi0JCQkJMEYx
RkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovLAorCQkJCTBGNEQ4
QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywKIAkJCQkwRjk1MkE5RjFE
Rjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLywKIAkJCQkwRjk1MkFBMDFERjc4
NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8sCiAJCQkJMUFDRjczNzYxNzFDQTZGQjAw
QzlCQjFFIC8qIFdlYWsuY3BwICovLApAQCAtODE2OSw2ICs4MTc3LDcgQEAKIAkJCQk2NTE0RjIx
OTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4
NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20u
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8q
IENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAw
QjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODMsNiArODg5Miw3IEBA
CiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNX
ZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4
RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4
Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDAyLDYgKzkwMTIsNyBAQAogCQkJCUUzQzI5NURE
MUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFCNjE4QjY2
MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8qIE9iamVjdFBy
b3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5
QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjQ5LDcgKzkyNjAs
NiBAQAogCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZh
ck9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8q
IFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAw
QTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTEx
REY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1
NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNh
c2UgVHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1f
c3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVz
dWx0ID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4MCw3ICs5ODAsNyBAQCB2
b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNp
dFdlYWtseUhhc0JlZW5DYWxsZWQgPSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHNob3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEz
Miw3ICsxMTMyLDcgQEAgc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAog
CiBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKQogewotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlz
KSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVU
b09sZEFnZSgpKSkKQEAgLTExNDcsMTAgKzExNDcsMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3Vs
ZEpldHRpc29uRHVlVG9PbGRBZwogI2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hv
dWxkTWFya1RyYW5zaXRpb24oREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlv
bikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJh
bnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2Rl
T3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTgwLDcgKzExODAsNyBAQCB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAg
ICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAg
ICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwot
ICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1
cmUpKQorICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQog
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVy
ZSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJr
ZWRTb0ZhciA9IGZhbHNlOwpAQCAtMTI1NCwxNCArMTI1NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6
ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRm
Z0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiBy
ZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBB
U1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJl
bmNlKSk7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNl
KSkgeworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAg
ICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CiAgICAgaWYgKGFsbEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdD
b21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZChkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ld
LmdldCgpKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitl
bnVtIGNsYXNzIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA6IHVpbnQ4X3QgeworICAgIFNlcXVlbnRp
YWwsCisgICAgUGFyYWxsZWwKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
SlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCit7CisgICAgc3dpdGNoIChw
YXJhbGxlbGlzbSkgeworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVl
bnRpYWw6CisgICAgICAgIG91dC5wcmludCgiU2VxdWVudGlhbCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWw6CisgICAgICAg
IG91dC5wcmludCgiUGFyYWxsZWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEs
NyArMjgxLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwg
bV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMs
ICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3Rh
Y2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtT
dGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFy
a2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtlX3Vu
aXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAgICwgbV9oYW5kbGVTZXQodm0p
CiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAg
ICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0
PigpKQpAQCAtOTExLDcgKzkxMSw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2UKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQrKzsKICAgICBpZiAobV9tdXRhdG9yU2hv
dWxkQmVGZW5jZWQpIHsKICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGlm
ICghaXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgaWYgKCFpc01hcmtlZChj
ZWxsKSkgewogICAgICAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUg
aW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKICAgICAgICAg
ICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9yZSB0byBhbiB1bm1hcmtl
ZCBQb3NzaWJseUJsYWNrIG9iamVjdC4gSWYgdGhlCiAgICAgICAgICAgICAvLyBvYmplY3QgZ2V0
cyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3aWxsIGdvIGRvd24gdGhl
IG5vcm1hbCBtYXJraW5nCkBAIC05MjQsMTUgKzkyNCwxNSBAQCB2b2lkIEhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgICAgICAgICAgICAgLy8gTm93IHdlIHByb3RlY3Qg
YWdhaW5zdCB0aGlzIHJhY2U6CiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAv
LyAgICAgMSkgT2JqZWN0IHN0YXJ0cyBvdXQgYmxhY2sgKyB1bm1hcmtlZC4KLSAgICAgICAgICAg
ICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkQ29uY3VycmVudGx5IGhlcmUuCisgICAgICAg
ICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZCBoZXJlLgogICAgICAgICAgICAgICAg
IC8vICAgICAyKSBPYmplY3QgaXMgbWFya2VkIGFuZCBncmV5ZWQuCiAgICAgICAgICAgICAgICAg
Ly8gICAgIDMpIE9iamVjdCBpcyBzY2FubmVkIGFuZCBibGFja2VkLgogICAgICAgICAgICAgICAg
IC8vICAgICAtLT4gV2UgZG8gYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nIGhl
cmUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ug
d2Ugd291bGQgaGF2ZSBtYWRlIHRoZSBvYmplY3Qgd2hpdGUgYWdhaW4sIGV2ZW4gdGhvdWdoIGl0
IHNob3VsZAogICAgICAgICAgICAgICAgIC8vIGJlIGJsYWNrLiBUaGlzIGNoZWNrIGxldHMgdXMg
Y29ycmVjdCBvdXIgbWlzdGFrZS4gVGhpcyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdAotICAgICAg
ICAgICAgICAgIC8vIGlzTWFya2VkQ29uY3VycmVudGx5IGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5
IHRvIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwp
KSB7CisgICAgICAgICAgICAgICAgLy8gaXNNYXJrZWQgY29udmVyZ2VzIG1vbm90b25pY2FsbHkg
dG8gdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSXQncyBkaWZmaWN1bHQgdG8gd29yayBvdXQgd2hldGhlciB0aGUgb2Jq
ZWN0IHNob3VsZCBiZSBncmV5IG9yIGJsYWNrIGF0CiAgICAgICAgICAgICAgICAgICAgIC8vIHRo
aXMgcG9pbnQuIFdlIHNheSBibGFjayBjb25zZXJ2YXRpdmVseS4KICAgICAgICAgICAgICAgICAg
ICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlCbGFjayk7CkBAIC05NDgs
NyArOTQ4LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZChjZWxsKSk7CiAgICAgLy8gSXQgY291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IHdhcyAq
anVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvciBtYXkgc2V0IHRoZQog
ICAgIC8vIHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFuZCB0aGVuIHRvIFBvc3NpYmx5T2xkT3JC
bGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8KICAgICAvLyByYWNlIHdpdGggdGhl
IGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFjY3VyYXRlIGJlY2F1c2Ug
dGhlIG9iamVjdCBfd2lsbF8KQEAgLTEzMDUsNyArMTMwNSw3IEBAIE5FVkVSX0lOTElORSBib29s
IEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgLy8gV29uZGVyaW5nIHdoYXQgdGhpcyBk
b2VzPyBMb29rIGF0IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpLiBUaGUgRE9NIGFuZCBvdGhl
cnMgY2FuIGFsc28KICAgICAgICAgLy8gYWRkIHRoZWlyIG93biB1c2luZyBIZWFwOjphZGRNYXJr
aW5nQ29uc3RyYWludCgpLgogICAgICAgICBib29sIGNvbnZlcmdlZCA9Ci0gICAgICAgICAgICBt
X2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvciwgTW9ub3Rvbmlj
VGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVD
b252ZXJnZW5jZShzbG90VmlzaXRvcik7CiAgICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xvdFZp
c2l0b3IuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1w
dHkoKTsKICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBDb2xsZWN0b3JQaGFz
ZTo6RW5kKTsKQEAgLTI1NzgsNyArMjU3OCw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNl
cnZhdGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Is
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGlt
aW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAgICAg
ICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAgICAg
ICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAtMjU4
OCwxMSArMjU4OCwxMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAg
ICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgfSwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwg
c2xvdFZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNjA5LDE5ICsyNjEwLDIxIEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgbV9oYW5kbGVTdGFj
ay52aXNpdChzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRl
YnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICBpZiAo
U2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmls
ZXIoKSkgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmls
ZXItPmdldExvY2soKSk7CkBAIC0yNjM3LDM0ICsyNjQwLDM4IEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV92bS0+c2hhZG93Q2hp
Y2tlbigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faml0U3R1YlJv
dXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9vYmplY3RT
cGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
V3JoIiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9yIChXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5o
ZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCiAgICAgICAgICAgICAg
ICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBp
LS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZp
c2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgCkBAIC0yNjc5LDEy
ICsyNjg2LDEzIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0b3IpOwogICAgICAgICB9
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAjZW5kaWYKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAog
ICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBp
dCdzIGJsYWNrLgpAQCAtMjY5MywxMSArMjcwMSwxNSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29u
c3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9LAotICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJNcm1zIiwgIk11dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIGdyYWIgbG9ja3MgdG8gZmlkZGxlIHdpdGggdGhlIG11dGF0b3IgbWFy
ayBzdGFjayBhbmQgdGhlIHJhY2Ugc3RhY2suCisgICAgICAgICAgICAvLyBUaGUgY2hhbmNlcyBv
ZiBjb250ZW50aW9uIG9uIHRob3NlIGxvY2tzIGFyZSBzbGltLCBidXQgd2Ugc2hvdWxkIGRvIGl0
IGFueXdheS4KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSW5kaWNhdGUgdG8gdGhlIGZp
eHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQogICAgICAgICAgICAgc2l6ZV90IHNpemUg
PSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwog
ICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOwpAQCAtMjcxMSw3
ICsyNzIzLDggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKICAgICAgICAgICAgIHJldHVybiBtX211dGF0
b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogICAgICAgICB9
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogfQogCiB2b2lkIEhlYXA6OmFkZE1hcmtp
bmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29uc3RyYWlu
dCkKQEAgLTI3OTQsMTYgKzI4MDcsNiBAQCB2b2lkIEhlYXA6OmFsbG93Q29sbGVjdGlvbigpCiAg
ICAgbV9jb2xsZWN0Q29udGludW91c2x5TG9jay51bmxvY2soKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmIGZ1
bmMpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrKTsKLSAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKLSAgICBmdW5jKCptX211
dGF0b3JTbG90VmlzaXRvcik7Ci0gICAgZm9yIChhdXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxs
ZWxTbG90VmlzaXRvcnMpCi0gICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9yKTsKLX0KLQogdm9pZCBI
ZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBtX211dGF0
b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVlOwpAQCAtMjg0Nyw0ICsyODUwLDI0IEBAIHZvaWQgSGVh
cDo6cmVtb3ZlSGVhcEZpbmFsaXplckNhbGxiYWNrKGMKICAgICBtX2hlYXBGaW5hbGl6ZXJDYWxs
YmFja3MucmVtb3ZlRmlyc3QoY2FsbGJhY2spOwogfQogCit2b2lkIEhlYXA6OnNldEJvbnVzVmlz
aXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKKyAgICBtX2JvbnVz
VmlzaXRvclRhc2sgPSB0YXNrOworICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOworfQorCit2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgdW5zaWduZWQgaW5pdGlhbFJl
ZkNvdW50ID0gdGFzay0+cmVmQ291bnQoKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKHRhc2sp
OworICAgIHRhc2stPnJ1bigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgc2V0Qm9udXNW
aXNpdG9yVGFzayhudWxscHRyKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9tYXJraW5nTXV0ZXgpOworICAgICAgICB3aGlsZSAodGFzay0+cmVmQ291bnQoKSA+IGlu
aXRpYWxSZWZDb3VudCkKKyAgICAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndh
aXQobV9tYXJraW5nTXV0ZXgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQs
NiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1
dGlvbiA9IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAg
IHN0YXRpYyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0
aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAg
CiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0zNTgsNiArMzU3
LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhj
b25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6
ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lk
IHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rp
b25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5Q
YXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZp
c2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0
aW5nU2NvcGU7CkBAIC01MjcsNiArNTM3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFz
c2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBj
b25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAg
ICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTEsNiBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90
VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29u
c3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNr
IG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9jb2Rl
QmxvY2tzOwpAQCAtNjQyLDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgTGlzdGFibGVIYW5kbGVy
PFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnM7
CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsKKyAgICBSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlzaXRvclRhc2s7CiAKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxvY2tCeXRlc0FsbG9jYXRl
ZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAko
cmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDE1IEBAIGlubGluZSBib29sIEhlYXA6
OmNvbGxlY3RvckJlbGlldmVzVGhhdFQKICAgICByZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGlu
c3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1
aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkK
IHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsK
ICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwog
ICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+
bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBj
ZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZCgKLSAgICAgICAg
YmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwot
fQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qg
dm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAg
ICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJr
ZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5p
c01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFj
ZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9jay5pc01hcmtlZChi
bG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAtMjY5LDQgKzI1OSwxNCBA
QCBpbmxpbmUgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnkoKQogICAgICAgICBzdG9wSWZOZWNl
c3NhcnlTbG93KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6OmZv
ckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgZnVuYygqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CisgICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0b3IpOworICAgIGZv
ciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBm
dW5jKCpzbG90VmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHJl
dmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hv
dEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSGVhcFNu
YXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6
YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZl
U25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAg
ICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlT
X0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhl
YXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KLSAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24sIEhl
YXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c01hcmtlZChIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAg
ICAgYm9vbCBpc0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxvY2F0ZWQo
KTsgfQogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNW
YWxpZENlbGw7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU1LDYgKzQ1NSwz
MyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0KCkKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRs
ZSooKT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCkKK3sK
KyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSoo
KT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRv
cikKKyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHJ1bigpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgICAgIG1faW5kZXggPSBtX2FsbG9jYXRvci5tX21hcmtpbmdOb3RFbXB0eS5m
aW5kQml0KG1faW5kZXgsIHRydWUpOworICAgICAgICAgICAgaWYgKG1faW5kZXggPj0gbV9hbGxv
Y2F0b3IubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXhdOworICAgICAg
ICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9h
bGxvY2F0b3I7CisgICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OworICAgICAgICBMb2NrIG1f
bG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykp
OworfQorCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIv
IiwgbV9hdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksOCBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxv
Y2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJlZlB0cjxT
aGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tT
b3VyY2UoKTsKKyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
ICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjUxNzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTgsNyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2
b2lkKik7CiAgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29u
c3Qgdm9pZCopOwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQq
LCBEZXBlbmRlbmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCosIERl
cGVuZGVuY3kpOwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtz
U3RhbGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lXaXRoPGJv
b2w+IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
bik7CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbik7CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBt
X21hcmtpbmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+
IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNp
b247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNp
b24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9j
azo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBt
X21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJz
aW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1
cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9
CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUo
KQpAQCAtNTI0LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2Vk
UmF3KGNvbgogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3Rh
bGUobWFya2luZ1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NT
dGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVl
KQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChV
TkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5j
eSk7CisgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVy
c2lvbikpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9p
ZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywzMCArMjcsMTUgQEAKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5o
IgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50
KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVG
dW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorTWFya2luZ0Nv
bnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBwYXJhbGxlbGlzbSkKICAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVk
TmFtZSkKICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rp
b24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxp
dHkpCi17Ci19Ci0KLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24s
Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQotICAgIDogbV9h
YmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQotICAgICwgbV9uYW1lKFdURk1vdmUobmFt
ZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0g
ICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0
ZUZ1bmN0aW9uKSkKICAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorICAgICwgbV9wYXJh
bGxlbGlzbShwYXJhbGxlbGlzbSkKIHsKIH0KIApAQCAtNjMsMTQgKzQ4LDUxIEBAIHZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOwog
fQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorQ29uc3Ry
YWludFBhcmFsbGVsaXNtIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKGFi
YnJldmlhdGVkTmFtZSgpKTsKLSAgICBWaXNpdGluZ1RpbWVvdXQgdmlzaXRpbmdUaW1lb3V0KHZp
c2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCB0aW1lb3V0KTsKLSAgICBtX2V4ZWN1dGVGdW5jdGlv
bih2aXNpdG9yLCB2aXNpdGluZ1RpbWVvdXQpOwotICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNp
dGluZ1RpbWVvdXQudmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICBkaWRWaXNpdFNvbWV0aGluZyA9
IHZpc2l0aW5nVGltZW91dC5kaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKTsKKyAgICBWaXNpdENv
dW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBy
ZXN1bHQgPSBleGVjdXRlSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20gPSBy
ZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50
OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCit7CisgICAgcmV0dXJuIDA7Cit9CisK
K2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUo
dmlzaXRvcik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlz
aXRvcik7CisgICAgZG9QYXJhbGxlbFdvcmtJbXBsKHZpc2l0b3IpOworICAgIHsKKyAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBtX2xhc3RWaXNpdENvdW50
ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBmaW5pc2hQYXJhbGxl
bFdvcmtJbXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVy
LnZpc2l0Q291bnQoKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdv
cmtJbXBsKFNsb3RWaXNpdG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsK
K30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90
VmlzaXRvciYpCit7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJDb25zdHJhaW50UGFyYWxsZWxpc20uaCIKICNpbmNsdWRlICJDb25zdHJhaW50Vm9sYXRpbGl0
eS5oIgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+Ci0j
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQzLDE4ICs0MSw5IEBAIGNs
YXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5n
Q29uc3RyYWludCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50
KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4s
Ci0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFp
bnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0
aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAg
ICAgCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAg
CkBAIC02NCwzMyArNTMsMzkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRTdGF0cygpOwogICAg
IAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0
Q291bnQ7IH0KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbGFzdEV4ZWN1dGVQYXJhbGxlbGlz
bSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbTsgfQogICAgIAotICAg
IHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlKFNs
b3RWaXNpdG9yJik7CiAgICAgCi0gICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fcXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbih2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgZG91YmxlIHdvcmtF
c3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0
VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Ci0gICAgfQorICAgIHZp
cnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAg
ICAKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAK
KyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hQ
YXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisgICAg
Ly8gSWYgdGhpcyBpcyBTZXF1ZW50aWFsLCBpdCBtZWFucyB0aGF0IHRoZSBjb25zdHJhaW50IGhh
cyB0byBiZSBydW4gc2VxdWVudGlhbGx5LCB3aXRoIG5vIGNvbmN1cnJlbnQKKyAgICAvLyBjb25z
dHJhaW50cy4KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBjb25zdCB7
IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2
b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0
IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAg
Q1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQp
PiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYp
PiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
bV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVsaXNtOwor
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20geyBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsIH07IC8vIEl0J3MgYSBoZXVyaXN0aWMsIHdlIGNh
biBiZSB3cm9uZy4gVGhpcyBndWVzcyBvbmx5IGFmZmVjdHMgdGhlIGZpcnN0IHJ1bi4KICAgICBz
aXplX3QgbV9sYXN0VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50U2V0LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5j
bHVkZSAiVmlzaXRDb3VudGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCkBAIC0zNCw1MiArMzcsMjI2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9u
Q29udGV4dCB7CiBwdWJsaWM6Ci0gICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWlu
dFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQor
ICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCkKICAgICAgICAg
OiBtX3NldChzZXQpCi0gICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwgbV90
aW1lb3V0KHRpbWVvdXQpCiAgICAgeworICAgICAgICBtX3NldC5tX2hlYXAuZm9yRWFjaFNsb3RW
aXNpdG9yKAorICAgICAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAg
ICAgICAgICAgIG1fdmlzaXRDb3VudGVycy5hcHBlbmQoVmlzaXRDb3VudGVyKHZpc2l0b3IpKTsK
KyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKICAgICBib29sIGRpZFZpc2l0U29tZXRoaW5n
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nOworICAg
ICAgICBmb3IgKGNvbnN0IFZpc2l0Q291bnRlciYgdmlzaXRDb3VudGVyIDogbV92aXNpdENvdW50
ZXJzKSB7CisgICAgICAgICAgICBpZiAodmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0CisgICAgZW51bSBT
Y2hlZHVsZXJQcmVmZXJlbmNlIHsKKyAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisgICAgICAg
IE5leHRDb25zdHJhaW50Rmlyc3QKKyAgICB9OworCisgICAgLy8gcGlja05leHQoKSBpcyBjYWxs
ZWQgd2hpbGUgYSBsb2NrIGlzIGhlbGQsIHNvIGl0IGNhbiBwcmV0ZW5kIGxpa2UgaXQncyBiZWlu
ZyBjYWxsZWQgZnJvbSB0aGUgbWFpbgorICAgIC8vIHRocmVhZC4gRm9yIGV4YW1wbGUsIGl0J3Mg
dG90YWxseSBzYWZlIGZvciB0aGF0IGxhbWJkYSB0byBjbG9zZSBvdmVyIHRoZSBzdGFjay4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZXhlY3V0ZShTY2hlZHVsZXJQcmVm
ZXJlbmNlIHByZWZlcmVuY2UsIGNvbnN0IEZ1bmMmIHBpY2tOZXh0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOworICAg
ICAgICBtX3NldC5tX2hlYXAucnVuRnVuY3Rpb25JblBhcmFsbGVsKAorICAgICAgICAgICAgWyZd
IChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4VG9SdW47CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1
dGVJblBhcmFsbGVsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFy
YWxsZWwuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxl
bFdvcmtNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeU5leHRDb25z
dHJhaW50ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBwaWNrUmVzdWx0ID0gcGlja05leHQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcGlja1Jlc3VsdCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2V4ZWN1dGVkLmdldCgqcGlja1Jlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJh
aW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNtKCkgPT0g
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNr
UmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJhbGxlbFdvcmsoKSB8fCB0cnlOZXh0Q29uc3Ry
YWludCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyeU5leHRDb25zdHJhaW50KCkgfHwgdHJ5UGFyYWxsZWxXb3JrKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX251bUFjdGl2ZVRocmVhZHMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQW55IHdhaXRpbmcgY291bGQg
YmUgcmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5pbmcgdGhlIFNsb3RWaXNpdG9yLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQgd291bGQgYmUgcHJvZml0YWJs
ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcysrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNl
cXVlbnRpYWw7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBNYXJr
aW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFtpbmRleFRvUnVuXTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29y
a01vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxsZWxXb3Jr
KHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQu
Z2V0KGluZGV4VG9SdW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
cmFpbnQuZmluaXNoUGFyYWxsZWxXb3JrKHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJ
blBhcmFsbGVsLnRha2VGaXJzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAodW5zaWduZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGluZGV4VG9SdW47IH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQu
Y2xlYXIoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2V4ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5k
KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0
ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzLS07CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkp
CisgICAgICAgICAgICBleGVjdXRlKCptX3NldC5tX3NldFtpbmRleFRvUnVuXSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOwog
ICAgIH0KICAgICAKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KLSAgICBi
b29sIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKKyAgICB2b2lkIGRyYWluKEJpdFZlY3Rv
ciYgdW5leGVjdXRlZCkKICAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVj
dXRlZCkgewotICAgICAgICAgICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1
dGVkLmNsZWFyKGluZGV4KTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBhdXRvIGl0ZXIgPSB1bmV4ZWN1dGVkLmJlZ2luKCk7CisgICAgICAgIGF1dG8g
ZW5kID0gdW5leGVjdXRlZC5lbmQoKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgTmV4dENvbnN0cmFp
bnRGaXJzdCwKKyAgICAgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7
CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXJBbGwoKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBkaWRFeGVjdXRlKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9leGVj
dXRlZC5nZXQoaW5kZXgpOyB9CisgICAgdm9pZCBjb252ZXJnZShjb25zdCBWZWN0b3I8TWFya2lu
Z0NvbnN0cmFpbnQqPiYgb3JkZXIpCisgICAgeworICAgICAgICBpZiAoZGlkVmlzaXRTb21ldGhp
bmcoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChvcmRlci5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOwogCi0gICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKKyAgICAgICAgLy8g
V2Ugd2FudCB0byBleGVjdXRlIHRoZSBmaXJzdCBjb25zdHJhaW50IHNlcXVlbnRpYWxseSBpZiB3
ZSB0aGluayBpdCB3aWxsIHF1aWNrbHkgZ2l2ZSB1cyBhCisgICAgICAgIC8vIHJlc3VsdC4gSWYg
d2UgcmFuIGl0IGluIHBhcmFsbGVsIHRvIG90aGVyIGNvbnN0cmFpbnRzLCB0aGVuIHdlIG1pZ2h0
IGVuZCB1cCBoYXZpbmcgdG8gd2FpdCBmb3IKKyAgICAgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3Ry
YWludHMgdG8gZmluaXNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVy
aW5nIGNvbnZlcmdlbmNlIGl0J3MKKyAgICAgICAgLy8gZW1waXJpY2FsbHkgbW9zdCBvcHRpbWFs
IHRvIHJldHVybiB0byBkcmFpbmluZyBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0ZXMg
d29yay4gTW9zdAorICAgICAgICAvLyBjb25zdHJhaW50cyBkb24ndCBnZW5lcmF0ZSBhbnkgd29y
ayBtb3N0IG9mIHRoZSB0aW1lLCBhbmQgd2hlbiB0aGV5IGRvIGdlbmVyYXRlIHdvcmssIHRoZXkg
dGVuZAorICAgICAgICAvLyB0byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2Vu
dCBkcmFpbmluZyBjeWNsZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisg
ICAgICAgIC8vIHdlIGdldCB0aGUgaGVjayBvdXQgb2YgaGVyZSBhcyBzb29uIGFzIGEgY29uc3Ry
YWludCBnZW5lcmF0ZXMgd29yay4gSSB0aGluayB0aGF0IHBhcnQgb2Ygd2hhdAorICAgICAgICAv
LyBtYWtlcyB0aGlzIG9wdGltYWwgaXMgdGhhdCB3ZSBhbHNvIG5ldmVyIGFib3J0IHJ1bm5pbmcg
YSBjb25zdHJhaW50IGVhcmx5LCBzbyB3aGVuIHdlIGRvIHJ1bgorICAgICAgICAvLyBvbmUsIGl0
IGhhcyBhbiBvcHBvcnR1bml0eSB0byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2li
bHkgY2FuLgorICAgICAgICAvLworICAgICAgICAvLyBTaW1pbGFyIHJlYXNvbmluZyBhcHBsaWVz
IHRvIGNvbnN0cmFpbnRzIHRoYXQgdGVuZCB0byByZXR1cm4gQ29zbnRyYWludFBhcmFsbGVsaXNt
OjpQYXJhbGxlbAorICAgICAgICAvLyBmcm9tIGV4ZWN1dGUuIFRob3NlIGNvbnN0cmFpbnRzIHR5
cGljYWxseSBoYXZlIGEgdmVyeSBmYXN0LXJ1bm5pbmcgZXhlY3V0ZSBmdW5jdGlvbiwgd2hpY2gg
dGhlbgorICAgICAgICAvLyBvZmZsb2FkcyBhbG1vc3QgYWxsIG9mIHRoZSB3b3JrIHRvIGEgcGFy
YWxsZWwgd29ya2VyLiBJbiB0aGF0IGNhc2UsIGl0IG1ha2VzIHNlbnNlIHRvIHJ1biB0aGUKKyAg
ICAgICAgLy8gZXhlY3V0ZSBmdW5jdGlvbiBzZXF1ZW50aWFsbHkuCisgICAgICAgIGlmIChvcmRl
cltpbmRleF0tPndvcmtFc3RpbWF0ZShtX3NldC5tX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3Io
KSkKKyAgICAgICAgICAgIHx8IG9yZGVyW2luZGV4XS0+bGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgp
ID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgIGV4ZWN1
dGUoKm9yZGVyW2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAobV90b0V4ZWN1
dGVJblBhcmFsbGVsLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICYmIChvcmRlci5pc0VtcHR5
KCkgfHwgZGlkVmlzaXRTb21ldGhpbmcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgUGFyYWxsZWxX
b3JrRmlyc3QsCisgICAgICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
eworICAgICAgICAgICAgICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBvcmRlci5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0
dXJuIG9yZGVyW2luZGV4KytdLT5pbmRleCgpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKICAgICB7
Ci0gICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlz
aXRTb21ldGhpbmcsIG1fdGltZW91dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsK
KyAgICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KGNvbnN0cmFpbnQuaW5kZXgoKSkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFy
YWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUoCisgICAgICAgICAgICBtX3NldC5tX2hlYXAu
Y29sbGVjdG9yU2xvdFZpc2l0b3IoKSk7CisgICAgICAgIGRpZEV4ZWN1dGUocGFyYWxsZWxpc20s
IGNvbnN0cmFpbnQuaW5kZXgoKSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKKyAgICB2b2lkIGRp
ZEV4ZWN1dGUoQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICB7CisgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICAgICAgaWYgKHBh
cmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAg
ICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgbV90
b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CiAgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0OwotICAgIFNsb3RWaXNpdG9yJiBtX3Zp
c2l0b3I7Ci0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7CiAgICAgQml0VmVjdG9yIG1fZXhl
Y3V0ZWQ7Ci0gICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKKyAgICBEZXF1
ZTx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBCaXRWZWN0b3IgbV90
b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IG1fdG9FeGVj
dXRlU2VxdWVudGlhbGx5OworICAgIExvY2sgbV9sb2NrOworICAgIENvbmRpdGlvbiBtX2NvbmRp
dGlvbjsKKyAgICB1bnNpZ25lZCBtX251bUFjdGl2ZVRocmVhZHMgeyAwIH07CisgICAgVmVjdG9y
PFZpc2l0Q291bnRlciwgMTY+IG1fdmlzaXRDb3VudGVyczsKIH07CiAKLU1hcmtpbmdDb25zdHJh
aW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgpCitNYXJraW5nQ29uc3RyYWludFNldDo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYgaGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQogewogfQog
CkBAIC0xMDcsMTggKzI4NCwxOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFy
dE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLCBD
b25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogewotICAgIGFkZChzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSks
IFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7CisgICAgYWRk
KHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2
aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHks
IHBhcmFsbGVsaXNtKSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAg
ICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rp
b24sCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwK
ICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1
bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFy
YWxsZWxpc20pCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+
KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRl
RnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5
KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdU
Rk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVu
Y3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBw
YXJhbGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBAIC0x
MzEsOSArMzA5LDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAgIG1fc2V0
LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2Vu
Y2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0
ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAg
ICAgICAgZGF0YUxvZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDgsOSArMzI2LDkg
QEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMs
IHZpc2l0b3IsIHRpbWVvdXQpOworICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4
dCgqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRpb24rKzsK
ICAgICAKQEAgLTE1OSwxNiArMzM3LDE0IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4
ZWN1dGVDb252ZXIKIAogICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMgdGhhdCB3
ZSBoYXZlIG5vdCBleGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4KICAgICAv
LyB3ZSBzaG91bGQgZXhlY3V0ZSB0aG9zZSBub3cuCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0
LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4
ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpOwogICAgIAogICAgIC8vIEZp
cnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3IgZHJhaW5pbmcsIHNvIGl0J3MgdW5s
aWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMgb3RoZXIKICAgICAvLyB0aGFuIHJvb3Rz
LgogICAgIGlmIChpdGVyYXRpb24gPT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4
ZWN1dGVkT3V0Z3Jvd3Rocyk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBrZWVwIHByZWZlcnJp
bmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRoYXQgbmVlZCB0byBiZSBm
aXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxkIEdDIC0gdW50aWwgdGhl
eSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gZ28gdG90YWxseQpAQCAt
MjE1LDMzICszOTEsMTYgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZl
cgogICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGItPnZvbGF0aWxpdHkoKTsK
ICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWlu
dCA6IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0cmFpbnQtPmluZGV4KCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRFeGVjdXRlKGkpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShp
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29udmVyZ2VuY2UsIGl0IG1h
a2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFwcGVuIGFueXRpbWUKLSAg
ICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91
bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8gTm90IGNsZWFyIGlmIHRo
YXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2ZW4gYmV0dGVyIGlzIHRo
aXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHksIGtlZXAgcnVubmluZy4K
LSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVhc3QgTiB0aGluZ3MsIHJl
dHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0LgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMyCi0gICAgICAgIGlm
IChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQorICAgIGV4ZWN1dGlvbkNvbnRleHQuY29udmVyZ2UobV9vcmRlcmVk
KTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSd2ZSBj
b252ZXJnZWQuIFRoYXQgaGFwcGVucyBpZiB3ZSBkaWQgbm90IHZpc2l0IGFueXRoaW5nLgorICAg
IHJldHVybiAhZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCiB2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGNv
bnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBk
aWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgIGNv
bnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAg
ICAgICAgIGRhdGFMb2coIiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0Nv
bnN0cmFpbnRTZXQgewogcHVibGljOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KCk7CisgICAg
TWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYpOwogICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgp
OwogICAgIAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CkBAIC00MSwxNSArNDEsMTcgQEAg
cHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwK
ICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5KTsKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgdm9pZCBhZGQoCiAgICAg
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAg
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
PiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAogICAgICAgICA6OkZ1
bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAg
dm9pZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CiAgICAgCkBAIC02
MCw5ICs2Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBl
eGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29y
ay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3Rz
IGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoCi0g
ICAgICAgIFNsb3RWaXNpdG9yJiwKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9u
b3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xv
dFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0
aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAgICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7
CkBAIC03MSwxMCArNzEsMTEgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBFeGVjdXRpb25Db250ZXh0
OwogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRpb25Db250ZXh0OwogICAgIAotICAgIGJvb2wgZXhl
Y3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7
CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCi0g
ICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5l
eGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOwor
ICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZl
Y3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAKKyAgICBIZWFw
JiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOwogICAgIEJpdFZlY3Rv
ciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFy
a2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1BhcmFsbGVsU291cmNlQWRhcHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1
ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4K
K2NsYXNzIFBhcmFsbGVsU291cmNlQWRhcHRlciA6IHB1YmxpYyBTaGFyZWRUYXNrPElubmVyVHlw
ZSgpPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRU
YXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1
bmMpCisgICAgICAgIDogbV9vdXRlclNvdXJjZShvdXRlclNvdXJjZSkKKyAgICAgICAgLCBtX3Vu
d3JhcEZ1bmModW53cmFwRnVuYykKKyAgICB7CisgICAgfQorICAgIAorICAgIElubmVyVHlwZSBy
dW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobV9pbm5lclNvdXJjZSkgeworICAg
ICAgICAgICAgICAgIGlmIChJbm5lclR5cGUgcmVzdWx0ID0gbV9pbm5lclNvdXJjZS0+cnVuKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgbV9p
bm5lclNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW5uZXJTb3VyY2UgPSB1bndyYXBGdW5jKG1fb3V0ZXJTb3VyY2UtPnJ1bigpKTsK
KyAgICAgICAgfSB3aGlsZSAobV9pbm5lclNvdXJjZSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gbV9vdXRlclNvdXJjZTsKKyAgICBSZWZQ
dHI8U2hhcmVkVGFzazxJbm5lclR5cGUoKT4+IG1faW5uZXJTb3VyY2U7CisgICAgTG9jayBtX2xv
Y2s7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlw
ZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4KK1JlZjxQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJU
eXBlLCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+PiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXIo
UmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFw
RnVuYyYgdW53cmFwRnVuYykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBhcmFsbGVsU291
cmNlQWRhcHRlcjxPdXRlclR5cGUsIElubmVyVHlwZSwgVW53cmFwRnVuYz4ob3V0ZXJTb3VyY2Us
IHVud3JhcEZ1bmMpKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0
ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1v
dmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxp
c20pCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCit7
Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgK
KyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjxk
b3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKKyAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxs
ZWxpc20pCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSks
IFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKQorICAgICwgbV9leGVjdXRl
RnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV9xdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikpCit7Cit9CisK
K1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKQorewor
fQorCitkb3VibGUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0
aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1
bmN0aW9uKHZpc2l0b3IpOworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1f
ZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxsZWxp
c206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgeworcHVibGljOgorICAg
IEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3Ry
aW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVs
KTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgK
KyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0aW9uPGRvdWJs
ZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwp
OworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgp
OworICAgIAorICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikgb3ZlcnJpZGU7CisgICAgCitwcml2YXRlOgorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBl
eGVjdXRlSW1wbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworCisgICAgOjpGdW5jdGlvbjx2b2lk
KFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rpb248ZG91Ymxl
KFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250YWluZXJUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01h
cmtTdGFjayhDb250YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAK
ICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHByaXZhdGU6
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBK
U0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNl
bGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIAogICAgIFNldEN1
cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCkBAIC01
NjEsMTcgKzU2MSwxNiBAQCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkK
ICAgICByZXR1cm4gZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RW
aXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wg
U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlcikKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9udW1i
ZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xs
ZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRh
dG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFj
dGl2ZVBhcmFsbGVsTWFya2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBi
b29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICBy
ZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAg
cmV0dXJuICFpc0VtcHR5KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKQEAgLTU4MywxMiArNTgyLDE0IEBAIE5FVkVSX0lOTElO
RSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxz
ZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAg
ICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVk
RHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02Mjks
MjggKzYzMCw1NyBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAK
ICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAg
fTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53
YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAg
ICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAg
ICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRv
bmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAg
ICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1
cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtl
cnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFi
b251c1Rhc2sgJiYgaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFj
aygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0
ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVD
ZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2Jh
bFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFs
bGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxs
ZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQp
OworICAgICAgICBpZiAoYm9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigq
dGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSB3
b3VsZCBub3QgaGF2ZSB0byBkbyB0aGlzLiBIb3dldmVyLCB0aGUgcGFyYWxsZWwgbWFya2luZyBh
bGdvcml0aG0gd2lsbAorICAgICAgICAgICAgLy8gZ2V0IGNvbmZ1c2VkIGlmIHdlIGluaXRpYXRl
IGl0IHdpdGggdGhlIGhlbHBlciB2aXNpdG9ycyBoYXZpbmcgYW55dGhpbmcgaW4gdGhlaXIgc3Rh
Y2tzLgorICAgICAgICAgICAgLy8gQWxzbywgdGhpcyBwcm90ZWN0cyBidWdzIHRoYXQgaW52b2x2
ZSByYWNlcyBiZXR3ZWVuIHZpc2l0Q2hpbGRyZW4gYW5kIG9uZSBvZiB0aGUKKyAgICAgICAgICAg
IC8vIGNvbnN0cmFpbnRzLgorICAgICAgICAgICAgLy9kb25hdGVBbGwoKTsKKworICAgICAgICAg
ICAgLy8gVGhlIG1haW4gdGhyZWFkIGNvdWxkIHN0aWxsIGJlIHJ1bm5pbmcsIGFuZCBtYXkgcnVu
IGZvciBhIHdoaWxlLiBVbmxlc3Mgd2UgY2xlYXIgdGhlIHRhc2sKKyAgICAgICAgICAgIC8vIG91
cnNlbHZlcywgd2Ugd2lsbCBrZWVwIGxvb3BpbmcgYXJvdW5kIHRyeWluZyB0byBydW4gdGhlIHRh
c2suCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9i
b251c1Zpc2l0b3JUYXNrID09IGJvbnVzVGFzaykKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFw
Lm1fYm9udXNWaXNpdG9yVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYm9udXNUYXNr
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGRyYWluKHRp
bWVvdXQpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpc0FjdGl2ZSA9IHRydWU7CiAg
ICAgfQogfQpAQCAtNjc2LDkgKzcwNiwxMyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1
bHQgU2xvdFZpc2l0CiAgICAgICAgIHJldHVybiBkcmFpbkluUGFyYWxsZWwodGltZW91dCk7CiAg
ICAgfQogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKLSAg
ICBkb25hdGVBbGwobG9ja2VyKTsKLSAgICAKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9oZWFw
Lm1fbWFya2luZ011dGV4KSk7CisgICAgcmV0dXJuIHdhaXRGb3JUZXJtaW5hdGlvbih0aW1lb3V0
KTsKK30KKworU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjp3YWl0
Rm9yVGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKICAgICBmb3IgKDs7KSB7CiAgICAg
ICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERy
YWluUmVzdWx0OjpUaW1lZE91dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw4IEBAIHB1Ymxp
YzoKIAogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1l
IHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJl
c3VsdCBkcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9u
b3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQgd2Fp
dEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6Omlu
ZmluaXR5KCkpOwogCiAgICAgLy8gQXR0ZW1wdHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQgb2Yg
ZHJhaW5pbmcgdGhhdCBpbnZvbHZlcyBvbmx5IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBkYXRh
LiBUaGlzCiAgICAgLy8gaXMgbGlrZWx5IHRvIGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3IgbGVz
cyB0aGFuIHRoYXQuIEl0IHdpbGwgdXN1YWxseSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQgbWF5
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxMiArMTU5LDEyIEBAIGlu
bGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0CiAKIGlubGluZSBWTSYgU2xvdFZp
c2l0b3I6OnZtKCkKIHsKLSAgICByZXR1cm4gKm1faGVhcC5tX3ZtOworICAgIHJldHVybiAqbV9o
ZWFwLnZtKCk7CiB9CiAKIGlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gKm1faGVhcC5tX3ZtOworICAgIHJldHVybiAqbV9oZWFwLnZtKCk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw2ICsxNjAsNDMgQEAg
TWFya2VkQmxvY2s6OkhhbmRsZSogU3Vic3BhY2U6OmZpbmRFbXB0eQogICAgIHJldHVybiBudWxs
cHRyOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+PiBTdWJzcGFj
ZTo6cGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UoKQoreworICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMg
U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRh
c2soTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgICAgICAgICA6IG1fYWxsb2NhdG9y
KGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNYXJr
ZWRBbGxvY2F0b3IqIHJ1bigpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIE1hcmtlZEFsbG9hY3Rvciog
cmVzdWx0ID0gbV9hbGxvY2F0b3I7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgICAgIG1fYWxsb2NhdG9yID0gcmVzdWx0LT5uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2
YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgICAgICBMb2Nr
IG1fbG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzayhtX2Zp
cnN0QWxsb2NhdG9yKSk7Cit9CisKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5k
bGUqKCk+PiBTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCkKK3sK
KyAgICByZXR1cm4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVyPE1hcmtlZEFsbG9jYXRvcios
IE1hcmtlZEJsb2NrOjpIYW5kbGUqPigKKyAgICAgICAgcGFyYWxsZWxBbGxvY2F0b3JTb3VyY2Uo
KSwKKyAgICAgICAgW10gKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSAtPiBSZWZQdHI8U2hh
cmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4geworICAgICAgICAgICAgaWYgKCFhbGxv
Y2F0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1
cm4gYWxsb2NhdG9yLT5wYXJhbGxlbE5vdEVtcHJ0eUJsb2NrU291cmNlKCk7CisgICAgICAgIH0p
OworfQorCiBNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVf
dCBzaXplKQogewogICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0lu
ZGV4KHNpemUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MSwxNyArODEsMjQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNvbnN0IEZ1bmMmKTsKICAg
ICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+PiBwYXJhbGxlbEFs
bG9jYXRvclNvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAg
dm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTm90RW1wdHlNYXJrZWRCbG9jayhjb25z
dCBGdW5jJik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRs
ZSooKT4+IHBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNv
bnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9y
RWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw1MiBAQCB2b2lkIFN1YnNwYWNlOjpmb3JF
YWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtl
ZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgY2xhc3MgVGFzayA6IHB1
YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIHB1YmxpYzoKKyAgICAg
ICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgICAg
ICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCisgICAgICAgICAgICAsIG1fYmxvY2tTb3VyY2Uoc3Vi
c3BhY2UucGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCkpCisgICAgICAgICAgICAs
IG1fZnVuYyhmdW5jKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+
cnVuKCkpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5k
KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZp
c2l0b3IsIGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgIGlmICghbV9uZWVkVG9W
aXNpdExhcmdlQWxsb2NhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3N1YnNwYWNlLmZvckVhY2hMYXJn
ZUFsbG9jYXRpb24oCisgICAgICAgICAgICAgICAgWyZdIChMYXJnZUFsbG9jYXRpb24qIGFsbG9j
YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb24tPmlzTWFya2VkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgYWxsb2NhdGlvbi0+Y2Vs
bCgpLCBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN1YnNwYWNlJiBtX3N1YnNwYWNl
OworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gbV9i
bG9ja1NvdXJjZTsKKyAgICAgICAgRnVuYyBtX2Z1bmM7CisgICAgICAgIGJvb2wgbV9uZWVkVG9W
aXNpdExhcmdlQWxsb2NhdGlvbnMgeyB0cnVlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRhc2soKnRoaXMsIGZ1bmMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJiBmdW5jKQog
ewogICAgIGZvckVhY2hNYXJrZWRCbG9jaygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgeworcHVibGljOgorICAgIFZpc2l0
Q291bnRlcigpIHsgfQorICAgIAorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCisgICAgICAgICwgbV9pbml0aWFsVmlz
aXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNp
emVfdCB2aXNpdENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zpc2l0b3It
PnZpc2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291bnQ7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBt
X2luaXRpYWxWaXNpdENvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVv
dXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVmlzaXRpbmdU
aW1lb3V0IHsKLXB1YmxpYzoKLSAgICBWaXNpdGluZ1RpbWVvdXQoKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZp
c2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAgIDogbV9kaWRWaXNp
dFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKLSAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZv
cmUodmlzaXRvci52aXNpdENvdW50KCkpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYgdmlz
aXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQoKSAt
IG1fdmlzaXRDb3VudEJlZm9yZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5n
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlk
VmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQobV90
aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0
aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKLSAg
ICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRW
aXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFy
a2VkQ29uY3VycmVudGx5KG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAg
ICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwo
KSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghd2Vha0hh
bmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46Ondy
YXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0
KCksIHZpc2l0b3IpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBA
IGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2Ug
cHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6
OmlzTWFya2VkQ29uY3VycmVudGx5KG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYg
KGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01h
cmtlZENvbmN1cnJlbnRseShzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAo
IW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkK
KyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8
fCBIZWFwOjppc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0
cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFp
c0NoZWFwRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KHRoaXMpOworICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDExICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBEZXBl
bmRlbmN5IG51bGxEZXBlbmRlbmN5KAogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9
IG51bGxwdHI+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5KFQgdmFsdWUpCiB7CiAgICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1
aW50NjRfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5pb24g
eworICAgICAgICB1aW50MzJfdCBjb3B5OworICAgICAgICBUIHZhbHVlOworICAgIH0gdTsKKyAg
ICB1LmNvcHkgPSAwOworICAgIHUudmFsdWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAgICAg
Ly8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3
aG9zZSBjb21wdXRhdGlvbgogICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4g
VGhpcyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICszNjgs
MjAgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8vIG9y
IGFuIGFjcXVpcmUgbG9hZC4KICAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAl
d1tpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAg
OiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxpZiBD
UFUoQVJNKQogICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAgICAg
ICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNv
cHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVw
ZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVu
Y2UoKTsKICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAg
VU5VU0VEX1BBUkFNKHUuY29weSk7CiAjZW5kaWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0K
IAotLy8gRklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBk
ZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERl
cGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7
Ci0gICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lm
IENQVShBUk02NCkKLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0i
Ci0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5d
ICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0s
ICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQot
ICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwot
ICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAg
IHJldHVybiBkZXBlbmRlbmN5OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNf
SU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBl
bmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9
IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQot
ewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1Ymxp
YzoKLSAgICBEZXBlbmRlbmN5V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5k
ZW5jeSgpKQotICAgICAgICAsIHZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVu
ZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAg
IDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19
OwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBk
ZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewot
ICAgIHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRl
bmN5IGRlcGVuZGVuY3kpCiB7CkBAIC00NjksMTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUgVCYg
ZW5zdXJlUG9pbnRlcihBdG9taWM8VCoKIAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6
OkRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpjb25z
dW1lOwogdXNpbmcgV1RGOjpkZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsK
IHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9C
aXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAog
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Ig
b3BlcmF0b3IrKyhpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9
ICp0aGlzOworICAgICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Rl
cXVlLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTEgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25z
dCBGdW5jJik7CiAgICAgCisgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGZpcnN0IGVsZW1l
bnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZl
cnNpb24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxz
ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFQgdGFrZUZpcnN0KGNvbnN0IEZ1
bmMmKTsKKwogICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdo
aWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YK
ICAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTcxLDYgKzU3NiwyNSBAQCBpbmxpbmUgdm9pZCBE
ZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdChjb25zdCBGdW5jJiBmdW5jKQoreworICAg
IHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gdGhpcy0+c2l6ZSgpOwor
ICAgIHdoaWxlIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgVCBjYW5kaWRhdGUgPSB0YWtlRmly
c3QoKTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgd2hpbGUg
KGNvdW50LS0pCisgICAgICAgICAgICAgICAgcHJlcGVuZCh0YWtlTGFzdCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAgIH0KKyAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgYXBwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7CisgICAgfQorICAgIHJldHVybiBUKCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CiBpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VM
YXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpJbmRleDog
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYvU2hhcmVk
VGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsK
IC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5
b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJl
ZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUg
KEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRU
YXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUg
UGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJl
ZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5
cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2so
KSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzIEBACisjcHJhZ21hIG9uY2UK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oPgorCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAv
VmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSwyICswLDAgQEAKLSNwcmFnbWEgb25jZQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Zpc2l0
aW5nVGltZW91dC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpT
Q2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMSArMjksMTAgQEAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxo
ZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8aGVhcC9I
ZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaD4KICNpbmNs
dWRlIDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL01hcmtl
ZEJsb2NrSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
aD4KICNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvVmlz
aXRpbmdUaW1lb3V0Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAKQEAgLTcyLDQzICs3MSw2NyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjpp
bml0Tm9ybWFsV29ybGQoVk0qCiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcg
SlNWTUNsaWVudERhdGEoKnZtKTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8v
IH5WTSBkZWxldGVzIHRoaXMgcG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAiV2Vi
Q29yZSBPdXRwdXQgQ29uc3RyYWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RF
eGVjdXRpb25WZXJzaW9uID0gdm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAg
ICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7CisgICAgY2xhc3Mg
Tm9ybWFsV29ybGRDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIE5vcm1hbFdvcmxkQ29uc3RyYWludChWTSYgdm0sIEpTVk1DbGllbnRE
YXRhJiBjbGllbnREYXRhKQorICAgICAgICAgICAgOiBNYXJraW5nQ29uc3RyYWludCgiV2NvYyIs
ICJXZWJDb3JlIE91dHB1dCBDb25zdHJhaW50cyIsIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxk
b21HcmV5ZWQpCisgICAgICAgICAgICAsIG1fdm0odm0pCisgICAgICAgICAgICAsIG1fY2xpZW50
RGF0YShjbGllbnREYXRhKQorICAgICAgICAgICAgLCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKHZt
LmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4
ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7CisgICAg
ICAgICAgICBIZWFwJiBoZWFwID0gbV92bS5oZWFwOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpID09IGxhc3RFeGVjdXRpb25WZXJz
aW9uKQorICAgICAgICAgICAgaWYgKGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSA9PSBt
X2xhc3RFeGVjdXRpb25WZXJzaW9uKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVj
dXRpb25WZXJzaW9uKCk7CisgICAgICAgICAgICBtX2xhc3RFeGVjdXRpb25WZXJzaW9uID0gaGVh
cC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOwogCiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRv
IG1hbmFnZSB0aGUgdmlzaXQgY291bnQgaGVyZSBvdXJzZWx2ZXMuIFdlIG5lZWQgdG8ga25vdyB0
aGF0IGlmIHRoaXMgYWRkcwogICAgICAgICAgICAgLy8gb3BhcXVlIHJvb3RzIHRoZW4gd2UgY2Fu
bm90IGRlY2xhcmUgdGVybWluYXRpb24geWV0LiBUaGUgd2F5IHdlIHNpZ25hbCB0aGlzIHRvIHRo
ZQogICAgICAgICAgICAgLy8gY29uc3RyYWludCBzb2x2ZXIgaXMgYnkgYWRkaW5nIHRvIHRoZSB2
aXNpdCBjb3VudC4KKyAgICAgICAgICAgIG1fbnVtT3BhcXVlUm9vdHNCZWZvcmUgPSBoZWFwLm51
bU9wYXF1ZVJvb3RzKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBudW1PcGFx
dWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9vdHMoKTsKLQotICAgICAgICAgICAgLy8g
RklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bVJldmlz
aXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnREYXRhLT5mb3JFYWNoT3V0cHV0Q29uc3RyYWlu
dFNwYWNlKAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV90YXNrcy5pc0VtcHR5KCkpOwor
ICAgICAgICAgICAgbV9jbGllbnREYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCiAg
ICAgICAgICAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFw
Q2VsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUoKnZt
KS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCBzbG90VmlzaXRvcik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtUmV2aXNpdGVkKys7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2Vs
bCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZt
KCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOworICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV90
YXNrcy5hcHBlbmQoc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGZ1bmMpKTsK
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2coIigiLCBudW1SZXZpc2l0ZWQsICIpIik7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KGhlYXAubnVt
T3BhcXVlUm9vdHMoKSAtIG51bU9wYXF1ZVJvb3RzQmVmb3JlKTsKLSAgICAgICAgfSwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCk7Ci0gICAgdm0tPmhlYXAuYWRk
TWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShjb25zdHJhaW50KSk7CisgICAgICAgICAgICByZXR1
cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92
ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdGFzayA6IG1fdGFza3Mp
CisgICAgICAgICAgICAgICAgdGFzay0+cnVuKHZpc2l0b3IpOworICAgICAgICAgICAgdmlzaXRv
ci5tZXJnZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgdmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoaGVhcC5udW1PcGFx
dWVSb290cygpIC0gbV9udW1PcGFxdWVSb290c0JlZm9yZSk7CisgICAgICAgICAgICBtX3Rhc2tz
LmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVk0m
IG1fdm07CisgICAgICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7CisgICAgICAgIHVp
bnQ2NF90IG1fbGFzdEV4ZWN1dGlvblZlcnNpb247CisgICAgICAgIHNpemVfdCBtX251bU9wYXF1
ZVJvb3RzQmVmb3JlIHsgMCB9OworICAgICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZCgpPj4+IG1fdGFza3M7CisgICAgfTsKKyAgICAKKyAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29u
c3RyYWludChzdGQ6Om1ha2VfdW5pcXVlPE5vcm1hbFdvcmxkQ29uc3RyYWludD4oKnZtLCAqY2xp
ZW50RGF0YSkpOwogICAgICAgICAKICAgICBjbGllbnREYXRhLT5tX25vcm1hbFdvcmxkID0gRE9N
V3JhcHBlcldvcmxkOjpjcmVhdGUoKnZtLCB0cnVlKTsKICAgICB2bS0+bV90eXBlZEFycmF5Q29u
dHJvbGxlciA9IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7Cklu
ZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkocmV2aXNpb24gMjI1MTc4KQorKysgVG9vbHMv
U2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDgg
QEAgTE9OR1NQSURFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhfUEFUSCA9IFBF
UkZPUk1BTkNFVEVTVFNfUEFUSCArICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2OC12NiIKIFRB
SUxCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5jaDkwMDAiCiBN
SUNST0JFTkNITUFSS1NfUEFUSCA9IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3RzIiArICJtaWNy
b2JlbmNobWFya3MiCi1PQ1RBTkVfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRI
ICsgIk9jdGFuZSIgKyAid3JhcHBlcnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRIID0gUEVSRk9S
TUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEggPSBPUEVOU09V
UkNFX09DVEFORV9QQVRIICsgIndyYXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VU
RVNUU19QQVRIICsgIkpTQmVuY2giCiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19Q
QVRIICsgIlNpeFNwZWVkIiArICJ0ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZP
Uk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04NDEsNiArODQy
LDIwIEBAIGNsYXNzIFNpbmdsZUZpbGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKICAgZW5kCiBl
bmQKIAorIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0
IGJlIGxvYWRlZCBpbiBpdHMgb3duIGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1
bigpKSwgYnV0IHJldHVybnMgaXRzIHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitjbGFzcyBTaW5n
bGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5j
aFBhdGgKKyAgCisgIGRlZiBpbml0aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVuY2hQYXRoID0g
YmVuY2hQYXRoCisgIGVuZAorICAKKyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmlsZUN1c3RvbVRp
bWVkQmVuY2htYXJrCisgIGVuZAorZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2Yg
b25lIG9yIG1vcmUgZGF0YSBmaWxlcyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZv
bGxvd2VkCiAjIGJ5IGEgY29tbWFuZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNsYXNzIE11bHRp
RmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1p
dEJlbmNoUnVuQ29kZUZpbGUobmFtZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0
ZGVycixmaWxlLCIgICAgaWYgKF9fYmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0pIHByaW50KFwi
I3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hlcl9p
bmRleCAtICN7d2FybXVwfSkgKyBcIjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1
bnMpKTsiKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29tbWFuZC5qc30i
KQorICAgICAgZWxzaWYgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVk
QmVuY2htYXJrCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2Jl
bmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsIiAgIHZhciBfX2JlbmNoZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsiKQorICAgICAg
ICAkcmVydW4udGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBy
dW4oX19iZW5jaGVyX3doYXQsIF9fYmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAgIH0KKyAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVzdWx0LnZhbHVl
ID09IG51bGwpIikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICAgIHRocm93
IG5ldyBFcnJvcihcIk51bGwgcmVzdWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCIgICByZXR1cm4gX19iZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCisgICAgICAgICR3YXJtdXAudGltZXMgeworICAgICAg
ICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMu
YmVuY2hQYXRoLmluc3BlY3R9KSIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUs
ImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KKyAgICAg
ICAgJGlubmVyLnRpbWVzIHsKKyAgICAgICAgICB8IGlubmVySW5kZXggfAorICAgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxh
bi5pdGVyYXRpb259OiAje2lubmVySW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7YmVu
Y2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSk7IikKKyAgICAgICAgICBkb3VibGVQdXRzKCRz
dGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAg
ICAgfQogICAgICAgZWxzZQogICAgICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9
PSA6c2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKQEAgLTE1OTQs
NiArMTYyOCwxOSBAQCBjbGFzcyBPY3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQKIAorY2xhc3Mg
Q3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0
aWFsaXplKG5hbWUsIGZ1bGxQYXRoKQorICAgIEBuYW1lID0gbmFtZQorICAgIEBmdWxsUGF0aCA9
IGZ1bGxQYXRoCisgIGVuZAorICAKKyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisgICAgZW1pdEJl
bmNoUnVuQ29kZShmdWxsbmFtZSwgcGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJr
UGFyYW1ldGVycy5uZXcoZW5zdXJlRmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0iLCBAZnVsbFBh
dGgpKSkKKyAgZW5kCitlbmQKKwogY2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGluY2x1ZGUgQmVu
Y2htYXJrCiAgIApAQCAtMzAxMCw2ICszMDU3LDcgQEAgYmVnaW4KICAgICB8IGFyZ3MgfAogICAg
IE9DVEFORS5hZGQgT2N0YW5lQmVuY2htYXJrLm5ldygqYXJncykKICAgfQorICBPQ1RBTkUuYWRk
IEN1c3RvbVRpbWVkQmVuY2htYXJrLm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVOU09VUkNFX09D
VEFORV9QQVRIICsgInNwbGF5LmpzIikudG9fcykKIAogICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0
ZS5uZXcoIktyYWtlbiIsIDphcml0aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0YXIiLCAiYXVk
aW8tYmVhdC1kZXRlY3Rpb24iLCAiYXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327766</attachid>
            <date>2017-11-28 11:40:26 -0800</date>
            <delta_ts>2017-11-28 14:29:18 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>147672</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2
ICs1MDMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3
MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2
IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBG
OTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJF
NTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBB
OUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07
Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxh
bklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkw
RjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBB
OUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNj
aGVkdWxlci5oICovOyB9OwpAQCAtMzExLDYgKzMxMCw5IEBACiAJCTBGNEEzOEZBMUM4RTEzREYw
MDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRC
OTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1
bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5
MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhDNzQx
RkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovOyB9OworCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RDhD
NzgxRkNBM0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGls
bHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAw
NzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUx
ODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTc2LDcgKzE5NzgsNiBAQAog
CQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9y
U2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0
b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjFGQjM5MjFF
MTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbklubGluZXMuaDsgcGF0aCA9IGRmZy9E
RkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NTFF
MUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR1dvcmts
aXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2
NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMjY0LDYgKzIyNjUsMTAgQEAKIAkJMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQw
M0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1wLmg7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFD
IC8qIFZpc2l0Q291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNp
dENvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzMxRkM3QTk3
NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb25zdHJhaW50UGFyYWxsZWxpc20uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhD
NzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUNDMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJG
aXhPYnZpb3VzU3BpbGxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEFpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDRDFDNEMxQjU0MDA0
RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91
c1NwaWxscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFEMDFDNEQ3NjRC
MDA0RDZDMTEgLyogQjNPcmlnaW5EdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5jcHA7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUwMCw2ICs1NTA1LDcgQEAKIAkJCQkwRkQw
RTVFNjFFNDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAqLywKIAkJCQkxNDZCMTRE
QjEyRUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURB
QUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNEQ4
QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLywKIAkJCQkw
RjdERjEyRjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKIAkJ
CQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJCQkJMEYxMzZE
NEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU1OTksNiArNTYwNSw4IEBA
CiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4IC8qIFJlZ2lzdGVyU3RhdGUuaCAqLywKIAkJ
CQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIgLyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICov
LAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMxMzgzOSAvKiBSdW5uaW5nU2NvcGUuaCAqLywKKwkJ
CQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3Bw
ICovLAorCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5j
cHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8s
CiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICov
LApAQCAtNTYyMCw3ICs1NjI4LDcgQEAKIAkJCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyog
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMTQxNDQ4
Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovLAogCQkJCTBGNUYwOENF
MTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8sCi0JCQkJMEYx
RkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovLAorCQkJCTBGNEQ4
QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywKIAkJCQkwRjk1MkE5RjFE
Rjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLywKIAkJCQkwRjk1MkFBMDFERjc4
NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8sCiAJCQkJMUFDRjczNzYxNzFDQTZGQjAw
QzlCQjFFIC8qIFdlYWsuY3BwICovLApAQCAtODE2OSw2ICs4MTc3LDcgQEAKIAkJCQk2NTE0RjIx
OTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4
NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20u
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8q
IENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAw
QjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODMsNiArODg5Miw3IEBA
CiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNX
ZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4
RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4
Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDAyLDYgKzkwMTIsNyBAQAogCQkJCUUzQzI5NURE
MUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFCNjE4QjY2
MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8qIE9iamVjdFBy
b3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5
QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjQ5LDcgKzkyNjAs
NiBAQAogCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZh
ck9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8q
IFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAw
QTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTEx
REY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1
NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNh
c2UgVHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1f
c3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVz
dWx0ID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4MCw3ICs5ODAsNyBAQCB2
b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNp
dFdlYWtseUhhc0JlZW5DYWxsZWQgPSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHNob3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEz
Miw3ICsxMTMyLDcgQEAgc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAog
CiBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKQogewotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlz
KSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVU
b09sZEFnZSgpKSkKQEAgLTExNDcsMTAgKzExNDcsMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3Vs
ZEpldHRpc29uRHVlVG9PbGRBZwogI2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hv
dWxkTWFya1RyYW5zaXRpb24oREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlv
bikKIHsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJh
bnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2Rl
T3JpZ2luLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTgwLDcgKzExODAsNyBAQCB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAg
ICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAg
ICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwot
ICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1
cmUpKQorICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQog
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVy
ZSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJr
ZWRTb0ZhciA9IGZhbHNlOwpAQCAtMTI1NCwxNCArMTI1NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6
ZGV0ZXJtaW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRm
Z0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiBy
ZWZlcmVuY2UgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBB
U1NFUlQoIWpzRHluYW1pY0Nhc3Q8Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJl
bmNlKSk7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNl
KSkgeworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAg
ICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CiAgICAgaWYgKGFsbEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdD
b21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZChkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ld
LmdldCgpKSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitl
bnVtIGNsYXNzIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA6IHVpbnQ4X3QgeworICAgIFNlcXVlbnRp
YWwsCisgICAgUGFyYWxsZWwKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
SlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCit7CisgICAgc3dpdGNoIChw
YXJhbGxlbGlzbSkgeworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVl
bnRpYWw6CisgICAgICAgIG91dC5wcmludCgiU2VxdWVudGlhbCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWw6CisgICAgICAg
IG91dC5wcmludCgiUGFyYWxsZWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEs
NyArMjgxLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwg
bV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMs
ICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3Rh
Y2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtT
dGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFy
a2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtlX3Vu
aXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAgICwgbV9oYW5kbGVTZXQodm0p
CiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAg
ICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0
PigpKQpAQCAtOTExLDcgKzkxMSw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2UKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQrKzsKICAgICBpZiAobV9tdXRhdG9yU2hv
dWxkQmVGZW5jZWQpIHsKICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGlm
ICghaXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgaWYgKCFpc01hcmtlZChj
ZWxsKSkgewogICAgICAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUg
aW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKICAgICAgICAg
ICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9yZSB0byBhbiB1bm1hcmtl
ZCBQb3NzaWJseUJsYWNrIG9iamVjdC4gSWYgdGhlCiAgICAgICAgICAgICAvLyBvYmplY3QgZ2V0
cyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3aWxsIGdvIGRvd24gdGhl
IG5vcm1hbCBtYXJraW5nCkBAIC05MjQsMTUgKzkyNCwxNSBAQCB2b2lkIEhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgICAgICAgICAgICAgLy8gTm93IHdlIHByb3RlY3Qg
YWdhaW5zdCB0aGlzIHJhY2U6CiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAv
LyAgICAgMSkgT2JqZWN0IHN0YXJ0cyBvdXQgYmxhY2sgKyB1bm1hcmtlZC4KLSAgICAgICAgICAg
ICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkQ29uY3VycmVudGx5IGhlcmUuCisgICAgICAg
ICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZCBoZXJlLgogICAgICAgICAgICAgICAg
IC8vICAgICAyKSBPYmplY3QgaXMgbWFya2VkIGFuZCBncmV5ZWQuCiAgICAgICAgICAgICAgICAg
Ly8gICAgIDMpIE9iamVjdCBpcyBzY2FubmVkIGFuZCBibGFja2VkLgogICAgICAgICAgICAgICAg
IC8vICAgICAtLT4gV2UgZG8gYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nIGhl
cmUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ug
d2Ugd291bGQgaGF2ZSBtYWRlIHRoZSBvYmplY3Qgd2hpdGUgYWdhaW4sIGV2ZW4gdGhvdWdoIGl0
IHNob3VsZAogICAgICAgICAgICAgICAgIC8vIGJlIGJsYWNrLiBUaGlzIGNoZWNrIGxldHMgdXMg
Y29ycmVjdCBvdXIgbWlzdGFrZS4gVGhpcyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdAotICAgICAg
ICAgICAgICAgIC8vIGlzTWFya2VkQ29uY3VycmVudGx5IGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5
IHRvIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwp
KSB7CisgICAgICAgICAgICAgICAgLy8gaXNNYXJrZWQgY29udmVyZ2VzIG1vbm90b25pY2FsbHkg
dG8gdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSXQncyBkaWZmaWN1bHQgdG8gd29yayBvdXQgd2hldGhlciB0aGUgb2Jq
ZWN0IHNob3VsZCBiZSBncmV5IG9yIGJsYWNrIGF0CiAgICAgICAgICAgICAgICAgICAgIC8vIHRo
aXMgcG9pbnQuIFdlIHNheSBibGFjayBjb25zZXJ2YXRpdmVseS4KICAgICAgICAgICAgICAgICAg
ICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlCbGFjayk7CkBAIC05NDgs
NyArOTQ4LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZChjZWxsKSk7CiAgICAgLy8gSXQgY291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IHdhcyAq
anVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvciBtYXkgc2V0IHRoZQog
ICAgIC8vIHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFuZCB0aGVuIHRvIFBvc3NpYmx5T2xkT3JC
bGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8KICAgICAvLyByYWNlIHdpdGggdGhl
IGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFjY3VyYXRlIGJlY2F1c2Ug
dGhlIG9iamVjdCBfd2lsbF8KQEAgLTEzMDUsNyArMTMwNSw3IEBAIE5FVkVSX0lOTElORSBib29s
IEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgLy8gV29uZGVyaW5nIHdoYXQgdGhpcyBk
b2VzPyBMb29rIGF0IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpLiBUaGUgRE9NIGFuZCBvdGhl
cnMgY2FuIGFsc28KICAgICAgICAgLy8gYWRkIHRoZWlyIG93biB1c2luZyBIZWFwOjphZGRNYXJr
aW5nQ29uc3RyYWludCgpLgogICAgICAgICBib29sIGNvbnZlcmdlZCA9Ci0gICAgICAgICAgICBt
X2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvciwgTW9ub3Rvbmlj
VGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVD
b252ZXJnZW5jZShzbG90VmlzaXRvcik7CiAgICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xvdFZp
c2l0b3IuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1w
dHkoKTsKICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBDb2xsZWN0b3JQaGFz
ZTo6RW5kKTsKQEAgLTI1NzgsNyArMjU3OCw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNl
cnZhdGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Is
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGlt
aW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAgICAg
ICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAgICAg
ICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAtMjU4
OCwxMSArMjU4OCwxMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAg
ICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgfSwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwg
c2xvdFZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNjA5LDE5ICsyNjEwLDIxIEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgbV9oYW5kbGVTdGFj
ay52aXNpdChzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRl
YnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICBpZiAo
U2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmls
ZXIoKSkgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmls
ZXItPmdldExvY2soKSk7CkBAIC0yNjM3LDM0ICsyNjQwLDM4IEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV92bS0+c2hhZG93Q2hp
Y2tlbigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faml0U3R1YlJv
dXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9vYmplY3RT
cGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
V3JoIiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9yIChXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5o
ZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCiAgICAgICAgICAgICAg
ICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBp
LS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZp
c2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgCkBAIC0yNjc5LDEy
ICsyNjg2LDEzIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0b3IpOwogICAgICAgICB9
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAjZW5kaWYKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAog
ICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBp
dCdzIGJsYWNrLgpAQCAtMjY5MywxMSArMjcwMSwxNSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29u
c3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9LAotICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJNcm1zIiwgIk11dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIGdyYWIgbG9ja3MgdG8gZmlkZGxlIHdpdGggdGhlIG11dGF0b3IgbWFy
ayBzdGFjayBhbmQgdGhlIHJhY2Ugc3RhY2suCisgICAgICAgICAgICAvLyBUaGUgY2hhbmNlcyBv
ZiBjb250ZW50aW9uIG9uIHRob3NlIGxvY2tzIGFyZSBzbGltLCBidXQgd2Ugc2hvdWxkIGRvIGl0
IGFueXdheS4KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSW5kaWNhdGUgdG8gdGhlIGZp
eHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQogICAgICAgICAgICAgc2l6ZV90IHNpemUg
PSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwog
ICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOwpAQCAtMjcxMSw3
ICsyNzIzLDggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKICAgICAgICAgICAgIHJldHVybiBtX211dGF0
b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogICAgICAgICB9
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogfQogCiB2b2lkIEhlYXA6OmFkZE1hcmtp
bmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29uc3RyYWlu
dCkKQEAgLTI3OTQsMTYgKzI4MDcsNiBAQCB2b2lkIEhlYXA6OmFsbG93Q29sbGVjdGlvbigpCiAg
ICAgbV9jb2xsZWN0Q29udGludW91c2x5TG9jay51bmxvY2soKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmIGZ1
bmMpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrKTsKLSAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKLSAgICBmdW5jKCptX211
dGF0b3JTbG90VmlzaXRvcik7Ci0gICAgZm9yIChhdXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxs
ZWxTbG90VmlzaXRvcnMpCi0gICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9yKTsKLX0KLQogdm9pZCBI
ZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBtX211dGF0
b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVlOwpAQCAtMjg0Nyw0ICsyODUwLDI0IEBAIHZvaWQgSGVh
cDo6cmVtb3ZlSGVhcEZpbmFsaXplckNhbGxiYWNrKGMKICAgICBtX2hlYXBGaW5hbGl6ZXJDYWxs
YmFja3MucmVtb3ZlRmlyc3QoY2FsbGJhY2spOwogfQogCit2b2lkIEhlYXA6OnNldEJvbnVzVmlz
aXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKKyAgICBtX2JvbnVz
VmlzaXRvclRhc2sgPSB0YXNrOworICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOworfQorCit2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgdW5zaWduZWQgaW5pdGlhbFJl
ZkNvdW50ID0gdGFzay0+cmVmQ291bnQoKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKHRhc2sp
OworICAgIHRhc2stPnJ1bigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgc2V0Qm9udXNW
aXNpdG9yVGFzayhudWxscHRyKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9tYXJraW5nTXV0ZXgpOworICAgICAgICB3aGlsZSAodGFzay0+cmVmQ291bnQoKSA+IGlu
aXRpYWxSZWZDb3VudCkKKyAgICAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndh
aXQobV9tYXJraW5nTXV0ZXgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQs
NiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1
dGlvbiA9IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAg
IHN0YXRpYyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0
aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAg
CiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0zNTgsNiArMzU3
LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhj
b25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6
ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lk
IHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rp
b25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5Q
YXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZp
c2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0
aW5nU2NvcGU7CkBAIC01MjcsNiArNTM3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFz
c2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBj
b25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAg
ICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTEsNiBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90
VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29u
c3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNr
IG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9jb2Rl
QmxvY2tzOwpAQCAtNjQyLDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgTGlzdGFibGVIYW5kbGVy
PFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnM7
CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsKKyAgICBSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlzaXRvclRhc2s7CiAKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxvY2tCeXRlc0FsbG9jYXRl
ZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAko
cmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDE1IEBAIGlubGluZSBib29sIEhlYXA6
OmNvbGxlY3RvckJlbGlldmVzVGhhdFQKICAgICByZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGlu
c3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1
aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkK
IHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsK
ICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwog
ICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+
bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBj
ZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZCgKLSAgICAgICAg
YmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwot
fQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qg
dm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAg
ICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJr
ZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5p
c01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFj
ZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9jay5pc01hcmtlZChi
bG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAtMjY5LDQgKzI1OSwxNCBA
QCBpbmxpbmUgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnkoKQogICAgICAgICBzdG9wSWZOZWNl
c3NhcnlTbG93KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6OmZv
ckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgZnVuYygqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CisgICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0b3IpOworICAgIGZv
ciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBm
dW5jKCpzbG90VmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHJl
dmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hv
dEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSGVhcFNu
YXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6
YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZl
U25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAg
ICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlT
X0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhl
YXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KLSAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24sIEhl
YXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c01hcmtlZChIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAg
ICAgYm9vbCBpc0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxvY2F0ZWQo
KTsgfQogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNW
YWxpZENlbGw7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU1LDYgKzQ1NSwz
MyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0KCkKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRs
ZSooKT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCkKK3sK
KyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSoo
KT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRv
cikKKyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHJ1bigpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgICAgIG1faW5kZXggPSBtX2FsbG9jYXRvci5tX21hcmtpbmdOb3RFbXB0eS5m
aW5kQml0KG1faW5kZXgsIHRydWUpOworICAgICAgICAgICAgaWYgKG1faW5kZXggPj0gbV9hbGxv
Y2F0b3IubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXhdOworICAgICAg
ICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9h
bGxvY2F0b3I7CisgICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OworICAgICAgICBMb2NrIG1f
bG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykp
OworfQorCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIv
IiwgbV9hdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksOCBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxv
Y2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJlZlB0cjxT
aGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tT
b3VyY2UoKTsKKyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
ICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjUxNzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTgsNyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2
b2lkKik7CiAgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29u
c3Qgdm9pZCopOwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQq
LCBEZXBlbmRlbmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCosIERl
cGVuZGVuY3kpOwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtz
U3RhbGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lXaXRoPGJv
b2w+IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
bik7CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbik7CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBt
X21hcmtpbmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+
IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNp
b247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNp
b24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9j
azo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBt
X21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJz
aW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1
cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9
CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUo
KQpAQCAtNTI0LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2Vk
UmF3KGNvbgogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3Rh
bGUobWFya2luZ1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NT
dGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVl
KQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChV
TkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5j
eSk7CisgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVy
c2lvbikpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9p
ZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDEx
IEBAIHB1YmxpYzoKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhh
dmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAg
Ym9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQogICAgIAorICAg
IFdlYWtTZXQqIGFjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRz
LmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1f
YWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0Jl
Z2luKCkgeyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1Nl
dCogbmV3QWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmVu
ZCgpOyB9CisgICAgCiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFG
aWxlKCkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNp
emVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsyNywxNSBAQAogI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VmlzaXRDb3VudGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1NYXJraW5nQ29uc3RyYWludDo6
TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcg
bmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkpCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0
eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIDogbV9hYmJyZXZpYXRl
ZE5hbWUoYWJicmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAg
LCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3Zv
bGF0aWxpdHkodm9sYXRpbGl0eSkKLXsKLX0KLQotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdD
b25zdHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0g
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+
IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBx
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkpCi0gICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCi0gICAgLCBt
X25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3Zl
KHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQogICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxp
dHkpCisgICAgLCBtX3BhcmFsbGVsaXNtKHBhcmFsbGVsaXNtKQogewogfQogCkBAIC02MywxNCAr
NDgsNTEgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0
VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1l
IHRpbWVvdXQpCitDb25zdHJhaW50UGFyYWxsZWxpc20gTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAg
ICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2
aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAg
IG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0
VmlzaXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRp
ZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0
b3IpOworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIHJlc3VsdCA9IGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworICAgIG1fbGFz
dFZpc2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIG1fbGFzdEV4ZWN1
dGVQYXJhbGxlbGlzbSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitkb3VibGUg
TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBx
dWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6
ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVy
IHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7
CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
IG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwor
ICAgIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3Vu
dCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50Ojpkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJh
bGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJikKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxMCBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIgogI2luY2x1ZGUgIkNv
bnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCiAjaW5j
bHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDMsMTggKzQxLDkgQEAgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAg
ICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3Im
KT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBNYXJraW5nQ29uc3RyYWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LCBDb25zdHJhaW50Vm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1h
cmtpbmdDb25zdHJhaW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWFya2lu
Z0NvbnN0cmFpbnQoKTsKICAgICAKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KICAgICAKQEAgLTY0LDMzICs1MywzOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZXNldFN0YXRzKCk7CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBsYXN0
RXhlY3V0ZVBhcmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXhlY3V0ZVBhcmFsbGVs
aXNtOyB9CiAgICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIGV4ZWN1dGUoU2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3Jr
RXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBpZiAoIW1fcXVp
Y2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBy
ZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOwotICAgIH0KLSAgICAK
LSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9y
KTsKLSAgICB9CisgICAgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpOworICAgIAorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpOworICAgIAorICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIGZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOwogICAgIAogICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxp
dHk7IH0KICAgICAKKyAgICAvLyBJZiB0aGlzIGlzIFNlcXVlbnRpYWwsIGl0IG1lYW5zIHRoYXQg
dGhlIGNvbnN0cmFpbnQgaGFzIHRvIGJlIHJ1biBzZXF1ZW50aWFsbHksIHdpdGggbm8gY29uY3Vy
cmVudAorICAgIC8vIGNvbnN0cmFpbnRzLgorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJh
bGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3Im
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYp
OworICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7
IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KICAgICAKICAgICB1bnNpZ25lZCBtX2luZGV4IHsg
VUlOVF9NQVggfTsKICAgICBDU3RyaW5nIG1fYWJicmV2aWF0ZWROYW1lOwogICAgIENTdHJpbmcg
bV9uYW1lOwotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYgdGltZW91dCk+IG1fZXhlY3V0ZUZ1bmN0aW9uOwotICAgIDo6RnVuY3Rpb248ZG91
YmxlKFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
IG1fcGFyYWxsZWxpc207CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIG1fbGFzdEV4ZWN1dGVQ
YXJhbGxlbGlzbSB7IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwgfTsgLy8gSXQncyBh
IGhldXJpc3RpYywgd2UgY2FuIGJlIHdyb25nLiBUaGlzIGd1ZXNzIG9ubHkgYWZmZWN0cyB0aGUg
Zmlyc3QgcnVuLgogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sg
bV9sb2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAy
MjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKIAorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKQEAg
LTM0LDUyICszNywyMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpFeGVjdXRpb25Db250ZXh0IHsKIHB1YmxpYzoKLSAgICBFeGVjdXRpb25Db250ZXh0
KE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9u
aWNUaW1lIHRpbWVvdXQpCisgICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNl
dCYgc2V0KQogICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRv
cikKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKICAgICB7CisgICAgICAgIG1fc2V0Lm1f
aGVhcC5mb3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7CisgICAgICAgICAgICAgICAgbV92aXNpdENvdW50ZXJzLmFwcGVuZChWaXNpdENv
dW50ZXIodmlzaXRvcikpOworICAgICAgICAgICAgfSk7CiAgICAgfQogICAgIAogICAgIGJvb2wg
ZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlz
aXRTb21ldGhpbmc7CisgICAgICAgIGZvciAoY29uc3QgVmlzaXRDb3VudGVyJiB2aXNpdENvdW50
ZXIgOiBtX3Zpc2l0Q291bnRlcnMpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdENvdW50ZXIudmlz
aXRDb3VudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KCkg
Y29uc3QKKyAgICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2UgeworICAgICAgICBQYXJhbGxlbFdv
cmtGaXJzdCwKKyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJzdAorICAgIH07CisKKyAgICAvLyBw
aWNrTmV4dCgpIGlzIGNhbGxlZCB3aGlsZSBhIGxvY2sgaXMgaGVsZCwgc28gaXQgY2FuIHByZXRl
bmQgbGlrZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBtYWluCisgICAgLy8gdGhyZWFkLiBG
b3IgZXhhbXBsZSwgaXQncyB0b3RhbGx5IHNhZmUgZm9yIHRoYXQgbGFtYmRhIHRvIGNsb3NlIG92
ZXIgdGhlIHN0YWNrLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBleGVj
dXRlKFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgY29uc3QgRnVuYyYgcGlja05leHQp
CiAgICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2Vk
KG1fdGltZW91dCk7CisgICAgICAgIG1fc2V0Lm1faGVhcC5ydW5GdW5jdGlvbkluUGFyYWxsZWwo
CisgICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICAg
ICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBib29sIGRvUGFyYWxsZWxXb3JrTW9k
ZTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhUb1J1bjsKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlQYXJh
bGxlbFdvcmsgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9
IG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5maXJzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gdHJ5TmV4dENvbnN0cmFpbnQgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBpY2tSZXN1bHQgPSBwaWNrTmV4dCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaWNrUmVzdWx0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KCpwaWNrUmVzdWx0KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbKnBpY2tSZXN1
bHRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQu
cGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZVNlcXVlbnRp
YWxseS5hcHBlbmQoKnBpY2tSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9ICpwaWNr
UmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdv
cmtNb2RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZlcmVuY2UgPT0gUGFyYWxsZWxXb3JrRmlyc3Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcmFsbGVsV29yaygp
IHx8IHRyeU5leHRDb25zdHJhaW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJ5TmV4dENvbnN0cmFpbnQoKSB8fCB0cnlQ
YXJhbGxlbFdvcmsoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbnVtQWN0aXZlVGhyZWFk
cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBB
bnkgd2FpdGluZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1c3QgcnVubmluZyB0aGUgU2xvdFZp
c2l0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSSB3b25kZXIgaWYgdGhhdCB3
b3VsZCBiZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0
aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRz
Kys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0
W2luZGV4VG9SdW5dOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFp
bnQuZG9QYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKHZp
c2l0b3IpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9QYXJh
bGxlbFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVj
dXRlSW5QYXJhbGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RyYWludC5maW5pc2hQYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwudGFrZUZpcnN0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0g
aW5kZXhUb1J1bjsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVj
dXRlSW5QYXJhbGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRl
SW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX251bUFjdGl2ZVRo
cmVhZHMtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX3RvRXhl
Y3V0ZVNlcXVlbnRpYWxseSkKKyAgICAgICAgICAgIGV4ZWN1dGUoKm1fc2V0Lm1fc2V0W2luZGV4
VG9SdW5dKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlz
RW1wdHkoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3RvRXhlY3V0ZUluUGFyYWxsZWxT
ZXQuYml0Q291bnQoKSk7CiAgICAgfQogICAgIAotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQg
dGltZXMgb3V0LgotICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQorICAgIHZv
aWQgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQogICAgIHsKLSAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAg
ICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZFRpbWVPdXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGF1dG8gaXRlciA9IHVuZXhlY3V0ZWQuYmVnaW4o
KTsKKyAgICAgICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVkLmVuZCgpOworICAgICAgICBpZiAoaXRl
ciA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGV4ZWN1dGUoCisgICAgICAg
ICAgICBOZXh0Q29uc3RyYWludEZpcnN0LAorICAgICAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmV0
dXJuICppdGVyKys7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgdW5leGVjdXRlZC5jbGVhckFs
bCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0KKyAgICB2b2lkIGNvbnZlcmdlKGNv
bnN0IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBvcmRlcikKKyAgICB7CisgICAgICAgIGlm
IChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgaWYgKG9yZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CiAKLSAgICB2b2lkIGV4ZWN1dGUoc2l6ZV90IGlu
ZGV4KQorICAgICAgICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbnN0cmFpbnQg
c2VxdWVudGlhbGx5IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVpY2tseSBnaXZlIHVzIGEKKyAgICAg
ICAgLy8gcmVzdWx0LiBJZiB3ZSByYW4gaXQgaW4gcGFyYWxsZWwgdG8gb3RoZXIgY29uc3RyYWlu
dHMsIHRoZW4gd2UgbWlnaHQgZW5kIHVwIGhhdmluZyB0byB3YWl0IGZvcgorICAgICAgICAvLyB0
aG9zZSBvdGhlciBjb25zdHJhaW50cyB0byBmaW5pc2gsIHdoaWNoIHdvdWxkIGJlIGEgd2FzdGUg
b2YgdGltZSBzaW5jZSBkdXJpbmcgY29udmVyZ2VuY2UgaXQncworICAgICAgICAvLyBlbXBpcmlj
YWxseSBtb3N0IG9wdGltYWwgdG8gcmV0dXJuIHRvIGRyYWluaW5nIGFzIHNvb24gYXMgYSBjb25z
dHJhaW50IGdlbmVyYXRlcyB3b3JrLiBNb3N0CisgICAgICAgIC8vIGNvbnN0cmFpbnRzIGRvbid0
IGdlbmVyYXRlIGFueSB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUsIGFuZCB3aGVuIHRoZXkgZG8gZ2Vu
ZXJhdGUgd29yaywgdGhleSB0ZW5kCisgICAgICAgIC8vIHRvIGdlbmVyYXRlIGVub3VnaCBvZiBp
dCB0byBmZWVkIGEgZGVjZW50IGRyYWluaW5nIGN5Y2xlLiBUaGVyZWZvcmUsIHBhdXNlIHRpbWVz
IGFyZSBsb3dlc3QgaWYKKyAgICAgICAgLy8gd2UgZ2V0IHRoZSBoZWNrIG91dCBvZiBoZXJlIGFz
IHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBJIHRoaW5rIHRoYXQgcGFydCBv
ZiB3aGF0CisgICAgICAgIC8vIG1ha2VzIHRoaXMgb3B0aW1hbCBpcyB0aGF0IHdlIGFsc28gbmV2
ZXIgYWJvcnQgcnVubmluZyBhIGNvbnN0cmFpbnQgZWFybHksIHNvIHdoZW4gd2UgZG8gcnVuCisg
ICAgICAgIC8vIG9uZSwgaXQgaGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdlbmVyYXRlIGFzIG11Y2gg
d29yayBhcyBpdCBwb3NzaWJseSBjYW4uCisgICAgICAgIC8vCisgICAgICAgIC8vIFNpbWlsYXIg
cmVhc29uaW5nIGFwcGxpZXMgdG8gY29uc3RyYWludHMgdGhhdCB0ZW5kIHRvIHJldHVybiBDb3Nu
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsCisgICAgICAgIC8vIGZyb20gZXhlY3V0ZS4gVGhv
c2UgY29uc3RyYWludHMgdHlwaWNhbGx5IGhhdmUgYSB2ZXJ5IGZhc3QtcnVubmluZyBleGVjdXRl
IGZ1bmN0aW9uLCB3aGljaCB0aGVuCisgICAgICAgIC8vIG9mZmxvYWRzIGFsbW9zdCBhbGwgb2Yg
dGhlIHdvcmsgdG8gYSBwYXJhbGxlbCB3b3JrZXIuIEluIHRoYXQgY2FzZSwgaXQgbWFrZXMgc2Vu
c2UgdG8gcnVuIHRoZQorICAgICAgICAvLyBleGVjdXRlIGZ1bmN0aW9uIHNlcXVlbnRpYWxseS4K
KyAgICAgICAgaWYgKG9yZGVyW2luZGV4XS0+d29ya0VzdGltYXRlKG1fc2V0Lm1faGVhcC5jb2xs
ZWN0b3JTbG90VmlzaXRvcigpKQorICAgICAgICAgICAgfHwgb3JkZXJbaW5kZXhdLT5sYXN0RXhl
Y3V0ZVBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgewor
ICAgICAgICAgICAgZXhlY3V0ZSgqb3JkZXJbaW5kZXgrK10pOworICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAg
JiYgKG9yZGVyLmlzRW1wdHkoKSB8fCBkaWRWaXNpdFNvbWV0aGluZygpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4ZWN1dGUoCisgICAg
ICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAgICAgICAgaWYgKGRpZFZpc2l0U29tZXRoaW5n
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG9yZGVyLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3JkZXJbaW5kZXgrK10tPmluZGV4KCk7CisgICAgICAgICAg
ICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBleGVjdXRlKE1hcmtpbmdDb25zdHJhaW50JiBj
b25zdHJhaW50KQogICAgIHsKLSAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhdLT5leGVjdXRlKG1f
dmlzaXRvciwgbV9kaWRWaXNpdFNvbWV0aGluZywgbV90aW1lb3V0KTsKLSAgICAgICAgbV9leGVj
dXRlZC5zZXQoaW5kZXgpOworICAgICAgICBpZiAobV9leGVjdXRlZC5nZXQoY29uc3RyYWludC5p
bmRleCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSgKKyAgICAgICAg
ICAgIG1fc2V0Lm1faGVhcC5jb2xsZWN0b3JTbG90VmlzaXRvcigpKTsKKyAgICAgICAgZGlkRXhl
Y3V0ZShwYXJhbGxlbGlzbSwgY29uc3RyYWludC5pbmRleCgpKTsKICAgICB9CiAgICAgCiBwcml2
YXRlOgorICAgIHZvaWQgZGlkRXhlY3V0ZShDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxp
c20sIHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgp
OworICAgICAgICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCkgeworICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleCk7
CisgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKICAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Ci0gICAg
U2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKICAg
ICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBm
YWxzZSB9OworICAgIERlcXVlPHVuc2lnbmVkLCAzMj4gbV90b0V4ZWN1dGVJblBhcmFsbGVsOwor
ICAgIEJpdFZlY3RvciBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQ7CisgICAgVmVjdG9yPHVuc2ln
bmVkLCAzMj4gbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAg
Q29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlVGhyZWFkcyB7
IDAgfTsKKyAgICBWZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOwogfTsK
IAotTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KCkKK01hcmtpbmdD
b25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldChIZWFwJiBoZWFwKQorICAgIDogbV9o
ZWFwKGhlYXApCiB7CiB9CiAKQEAgLTEwNywxOCArMjg0LDE5IEBAIHZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcg
bmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20p
CiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUo
YWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0
aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0
aW9uKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKAogICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
Ci0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
Jik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4g
ZXhlY3V0ZUZ1bmN0aW9uLAogICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSkKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAorICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxN
YXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5j
dGlvbiksIHZvbGF0aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVNYXJr
aW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
biksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmFkZCgKQEAgLTEzMSw5ICszMDksOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0
OjphZGQoCiAgICAgbV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29s
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIHJl
c3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvciwgdGltZW91dCk7CisgICAgYm9v
bCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTE0OCw5ICszMjYsOSBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9u
dEFkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpl
eGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1l
IHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJ
bXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0
aW9uQ29udGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgRXhlY3V0aW9uQ29udGV4
dCBleGVjdXRpb25Db250ZXh0KCp0aGlzKTsKICAgICAKICAgICB1bnNpZ25lZCBpdGVyYXRpb24g
PSBtX2l0ZXJhdGlvbisrOwogICAgIApAQCAtMTU5LDE2ICszMzcsMTQgQEAgYm9vbCBNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogCiAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBj
b25zdHJhaW50cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBj
eWNsZSwgdGhlbgogICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAo
IWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cyk7
CiAgICAgCiAgICAgLy8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBhbnkgdmlzaXRvciBkcmFp
bmluZywgc28gaXQncyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25zdHJhaW50cyBvdGhlcgog
ICAgIC8vIHRoYW4gcm9vdHMuCiAgICAgaWYgKGl0ZXJhdGlvbiA9PSAxKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVj
dXRlZE91dGdyb3d0aHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXhlY3V0aW9uQ29u
dGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKTsKICAgICAKICAgICAvLyBXZSB3YW50
IHRvIGtlZXAgcHJlZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9uZXMg
dGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50ZWQKICAgICAvLyBldmVuIGluIGEgc3RvcC10aGUtd29y
bGQgR0MgLSB1bnRpbCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5jeSB0
byBnbyB0b3RhbGx5CkBAIC0yMTUsMzMgKzM5MSwxNiBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyCiAgICAgICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpID4g
Yi0+dm9sYXRpbGl0eSgpOwogICAgICAgICB9KTsKICAgICAKLSAgICBmb3IgKE1hcmtpbmdDb25z
dHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRlcmVkKSB7Ci0gICAgICAgIHNpemVfdCBpID0gY29u
c3RyYWludC0+aW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0
LmRpZEV4ZWN1dGUoaSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZXhlY3V0aW9u
Q29udGV4dC5leGVjdXRlKGkpOwotICAgICAgICAKLSAgICAgICAgLy8gT25jZSB3ZSdyZSBpbiBj
b252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFya2luZyBo
YXBwZW4gYW55dGltZQotICAgICAgICAvLyB3ZSBmaW5kIHdvcmsuCi0gICAgICAgIC8vIEZJWE1F
OiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25zdHJhaW50cyB1bnRpbCB0aW1lb3V0
PyBOb3QgY2xlYXIgaWYgdGhhdCdzCi0gICAgICAgIC8vIGJldHRlciBvciB3b3JzZS4gTWF5YmUg
ZXZlbiBiZXR0ZXIgaXMgdGhpczoKLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBlbXB0
eSwga2VlcCBydW5uaW5nLgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGhhcyBhdCBs
ZWFzdCBOIHRoaW5ncywgcmV0dXJuLgotICAgICAgICAvLyAtIEVsc2UgcnVuIHVudGlsIHRpbWVv
dXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY4MzIKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgZXhlY3V0aW9uQ29udGV4dC5j
b252ZXJnZShtX29yZGVyZWQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIFJldHVy
biB0cnVlIGlmIHdlJ3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlmIHdlIGRpZCBub3Qgdmlz
aXQgYW55dGhpbmcuCisgICAgcmV0dXJuICFleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRo
aW5nKCk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOwog
ICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5l
eGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZpbml0
eSgpKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lv
biAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldCB7CiBwdWJsaWM6Ci0gICAgTWFya2luZ0NvbnN0
cmFpbnRTZXQoKTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldChIZWFwJik7CiAgICAgfk1hcmtp
bmdDb25zdHJhaW50U2V0KCk7CiAgICAgCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKQEAg
LTQxLDE1ICs0MSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcg
YWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50
UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAg
ICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENT
dHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4sCiAgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsKTsKICAgICAKICAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFp
bnQ+KTsKICAgICAKQEAgLTYwLDkgKzYyLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVt
IHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJh
ZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1
dGVDb252ZXJnZW5jZSgKLSAgICAgICAgU2xvdFZpc2l0b3ImLAotICAgICAgICBNb25vdG9uaWNU
aW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICBib29sIGV4ZWN1
dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFs
bCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KICAgICB2b2lkIGV4ZWN1dGVB
bGwoU2xvdFZpc2l0b3ImKTsKQEAgLTcxLDEwICs3MSwxMSBAQCBwcml2YXRlOgogICAgIGNsYXNz
IEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CiAg
ICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZp
c2l0b3ImKTsKICAgICAKLSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGlt
ZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRW
aXNpdFNvbWV0aGluZyk7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIEJpdFZlY3RvciYg
dW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcp
OwogICAgIAorICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9v
dHM7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFw
dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5hbWUgSW5uZXJUeXBlLCB0eXBl
bmFtZSBVbndyYXBGdW5jPgorY2xhc3MgUGFyYWxsZWxTb3VyY2VBZGFwdGVyIDogcHVibGljIFNo
YXJlZFRhc2s8SW5uZXJUeXBlKCk+IHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbFNvdXJjZUFkYXB0
ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53
cmFwRnVuYyYgdW53cmFwRnVuYykKKyAgICAgICAgOiBtX291dGVyU291cmNlKG91dGVyU291cmNl
KQorICAgICAgICAsIG1fdW53cmFwRnVuYyh1bndyYXBGdW5jKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgSW5uZXJUeXBlIHJ1bigpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChtX2lu
bmVyU291cmNlKSB7CisgICAgICAgICAgICAgICAgaWYgKElubmVyVHlwZSByZXN1bHQgPSBtX2lu
bmVyU291cmNlLT5ydW4oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICBtX2lubmVyU291cmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9IHVud3JhcEZ1bmMobV9vdXRl
clNvdXJjZS0+cnVuKCkpOworICAgICAgICB9IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBtX291dGVy
U291cmNlOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPElubmVyVHlwZSgpPj4gbV9pbm5lclNvdXJj
ZTsKKyAgICBMb2NrIG1fbG9jazsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlwZSwg
dHlwZW5hbWUgSW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorUmVmPFBhcmFsbGVsU291
cmNlQWRhcHRlcjxPdXRlclR5cGUsIElubmVyVHlwZSwgVW53cmFwRnVuYz4+IGNyZWF0ZVBhcmFs
bGVsU291cmNlQWRhcHRlcihSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG91dGVyU291
cmNlLCBjb25zdCBVbndyYXBGdW5jJiB1bndyYXBGdW5jKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBG
dW5jPihvdXRlclNvdXJjZSwgdW53cmFwRnVuYykpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9s
YXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQorICAgIDogTWFya2lu
Z0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xh
dGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1h
cmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwK
KyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1
bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUo
YWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20p
CisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCisgICAg
LCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1
bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5n
Q29uc3RyYWludCgpCit7Cit9CisKK2RvdWJsZSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6cXVp
Y2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKCFtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxl
bGlzbSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgcmV0dXJuIENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJh
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25z
dHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWlu
dCB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAg
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAg
IDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFs
bGVsaXNtOjpQYXJhbGxlbCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1h
cmtpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisKKyAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAg
OjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0
aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3
LDcgKzI3Nyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2UKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgSlNDZWxs
KiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7
CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlz
WmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CkBAIC0zNDYsNyAr
MzQ2LDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNp
dENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7
CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBj
ZWxsKTsKICAgICAKQEAgLTU2MSwxNyArNTYxLDE2IEBAIGJvb2wgU2xvdFZpc2l0b3I6OmRpZFJl
YWNoVGVybWluYXRpb24oKQogICAgIHJldHVybiBkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcik7
CiB9CiAKLWJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJh
Y3RMb2NrZXImKQorYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBB
YnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIHJldHVybiBpc0VtcHR5KCkKLSAgICAgICAg
JiYgIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICYmIG1f
aGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCi0gICAgICAgICYmIG1f
aGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1f
aGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCisgICAgICAgICYmICFoYXNXb3Jr
KGxvY2tlcik7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6Omhhc1dvcmsoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQogewotICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNr
LT5pc0VtcHR5KCkKKyAgICByZXR1cm4gIWlzRW1wdHkoKQorICAgICAgICB8fCAhbV9oZWFwLm1f
c2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgfHwgIW1faGVhcC5t
X3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKIH0KIApAQCAtNTgzLDEyICs1ODIs
MTQgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlcwogCiAgICAgYm9v
bCBpc0FjdGl2ZSA9IGZhbHNlOwogICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGJvbnVzVGFzazsKKyAgICAgICAgCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRl
eCk7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdN
dXRleCk7CiAgICAgICAgICAgICBpZiAoaXNBY3RpdmUpCiAgICAgICAgICAgICAgICAgbV9oZWFw
Lm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgICAgIG1faGVhcC5t
X251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycysrOwotCisgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4pIHsKICAgICAgICAgICAg
ICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0
aW1lb3V0KSkKQEAgLTYyOSwyOCArNjMwLDU3IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6
U2hhcmVkRHJhaW5SZXMKIAogICAgICAgICAgICAgICAgIGF1dG8gaXNSZWFkeSA9IFsmXSAoKSAt
PiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsobG9ja2VyKQorICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzawogICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsK
ICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0Nv
bmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChtX2hlYXAubV9tYXJraW5nTXV0ZXgsIHRpbWVvdXQs
IGlzUmVhZHkpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaGFzV29y
ayhsb2NrZXIpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX2JvbnVzVmlzaXRvclRh
c2spCisgICAgICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG1faGVhcC5tX2JvbnVzVmlzaXRv
clRhc2s7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX3Bh
cmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFy
ZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yRWFj
aE1hcmtTdGFjaygKLSAgICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykg
LT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suc3RlYWxTb21l
Q2VsbHNGcm9tKAotICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0
YWNrKHN0YWNrKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2Fp
dGluZ1BhcmFsbGVsTWFya2Vycyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIWJvbnVzVGFzayAmJiBpc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBmb3JFYWNoTWFya1N0YWNrKAorICAgICAgICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0Fy
cmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2spLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1faGVhcC5tX251
bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIGlmIChib251c1Rhc2spIHsKKyAgICAgICAgICAg
IGJvbnVzVGFzay0+cnVuKCp0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklY
TUU6IElkZWFsbHksIHdlIHdvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMuIEhvd2V2ZXIsIHRoZSBw
YXJhbGxlbCBtYXJraW5nIGFsZ29yaXRobSB3aWxsCisgICAgICAgICAgICAvLyBnZXQgY29uZnVz
ZWQgaWYgd2UgaW5pdGlhdGUgaXQgd2l0aCB0aGUgaGVscGVyIHZpc2l0b3JzIGhhdmluZyBhbnl0
aGluZyBpbiB0aGVpciBzdGFja3MuCisgICAgICAgICAgICAvLyBBbHNvLCB0aGlzIHByb3RlY3Rz
IGJ1Z3MgdGhhdCBpbnZvbHZlIHJhY2VzIGJldHdlZW4gdmlzaXRDaGlsZHJlbiBhbmQgb25lIG9m
IHRoZQorICAgICAgICAgICAgLy8gY29uc3RyYWludHMuCisgICAgICAgICAgICAvL2RvbmF0ZUFs
bCgpOworCisgICAgICAgICAgICAvLyBUaGUgbWFpbiB0aHJlYWQgY291bGQgc3RpbGwgYmUgcnVu
bmluZywgYW5kIG1heSBydW4gZm9yIGEgd2hpbGUuIFVubGVzcyB3ZSBjbGVhciB0aGUgdGFzawor
ICAgICAgICAgICAgLy8gb3Vyc2VsdmVzLCB3ZSB3aWxsIGtlZXAgbG9vcGluZyBhcm91bmQgdHJ5
aW5nIHRvIHJ1biB0aGUgdGFzay4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPT0gYm9udXNUYXNrKQorICAgICAgICAg
ICAgICAgICAgICBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBib251c1Rhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1faGVhcC5tX21h
cmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc0VtcHR5KCkpOworICAg
ICAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlz
QWN0aXZlID0gdHJ1ZTsKICAgICB9CiB9CkBAIC02NzYsOSArNzA2LDEzIEBAIFNsb3RWaXNpdG9y
OjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAgICAgcmV0dXJuIGRyYWluSW5QYXJh
bGxlbCh0aW1lb3V0KTsKICAgICB9CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9t
YXJraW5nTXV0ZXgpOwotICAgIGRvbmF0ZUFsbChsb2NrZXIpOwotICAgIAorICAgIGRvbmF0ZUFs
bChob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpKTsKKyAgICByZXR1cm4gd2FpdEZvclRl
cm1pbmF0aW9uKHRpbWVvdXQpOworfQorCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQg
U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAg
IGZvciAoOzspIHsKICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAg
ICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEs
NiArMTIxLDggQEAgcHVibGljOgogCiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFs
bGVsKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwog
ICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbFBhc3NpdmVseShNb25vdG9uaWNU
aW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAgICBTaGFy
ZWREcmFpblJlc3VsdCB3YWl0Rm9yVGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICAvLyBBdHRlbXB0cyB0byBwZXJmb3Jt
IGFuIGluY3JlbWVudCBvZiBkcmFpbmluZyB0aGF0IGludm9sdmVzIG9ubHkgd2Fsa2luZyBgYnl0
ZXNgIHdvcnRoIG9mIGRhdGEuIFRoaXMKICAgICAvLyBpcyBsaWtlbHkgdG8gYWNjaWRlbnRhbGx5
IHdhbGsgbW9yZSBvciBsZXNzIHRoYW4gdGhhdC4gSXQgd2lsbCB1c3VhbGx5IG1hcmsgbW9yZSB0
aGFuIGJ5dGVzLiBJdCBtYXkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5
LDEyICsxNTksMTIgQEAgaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKIAog
aW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07
CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogaW5saW5lIGNvbnN0IFZNJiBTbG90Vmlz
aXRvcjo6dm0oKSBjb25zdAogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJu
ICptX2hlYXAudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYwLDYgKzE2MCw0MyBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9j
YXRvciooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpCit7CisgICAgY2xh
c3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4geworICAgIHB1
YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICAgICAg
ICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAg
TWFya2VkQWxsb2FjdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvcjsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQpCisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3IgPSByZXN1bHQtPm5leHRBbGxvY2F0
b3JJblN1YnNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Cisg
ICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0
b3I7CisgICAgICAgIExvY2sgbV9sb2NrOworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUYXNrKG1fZmlyc3RBbGxvY2F0b3IpKTsKK30KKworUmVmUHRyPFNoYXJlZFRhc2s8
TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2Vk
QmxvY2tTb3VyY2UoKQoreworICAgIHJldHVybiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8
TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkQmxvY2s6OkhhbmRsZSo+KAorICAgICAgICBwYXJhbGxl
bEFsbG9jYXRvclNvdXJjZSgpLAorICAgICAgICBbXSAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IpIC0+IFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiB7CisgICAg
ICAgICAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPnBhcmFsbGVsTm90RW1wcnR5QmxvY2tTb3Vy
Y2UoKTsKKyAgICAgICAgfSk7Cit9CisKIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE3ICs4MSwyNCBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3Io
Y29uc3QgRnVuYyYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRv
ciooKT4+IHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCk7CisgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hOb3RFbXB0
eU1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxN
YXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNl
KCk7CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hM
YXJnZUFsbG9jYXRpb24oY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZUlubGluZXMuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDUyIEBAIHZv
aWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KK1JlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnNw
YWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAg
ICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7Cisg
ICAgcHVibGljOgorICAgICAgICBUYXNrKFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVuYyYg
ZnVuYykKKyAgICAgICAgICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKKyAgICAgICAgICAgICwg
bV9ibG9ja1NvdXJjZShzdWJzcGFjZS5wYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2Uo
KSkKKyAgICAgICAgICAgICwgbV9mdW5jKGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUg
PSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFj
aE1hcmtlZENlbGwoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhl
YXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2Z1bmModmlzaXRvciwgY2VsbCwga2luZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIG1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25z
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3Vi
c3BhY2UuZm9yRWFjaExhcmdlQWxsb2NhdGlvbigKKyAgICAgICAgICAgICAgICBbJl0gKExhcmdl
QWxsb2NhdGlvbiogYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb2Nh
dGlvbi0+aXNNYXJrZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuYyh2aXNpdG9y
LCBhbGxvY2F0aW9uLT5jZWxsKCksIG1fYXR0cmlidXRlcy5jZWxsS2luZCk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vi
c3BhY2UmIG1fc3Vic3BhY2U7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKCk+PiBtX2Jsb2NrU291cmNlOworICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAg
ICAgYm9vbCBtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyB7IHRydWUgfTsKKyAgICB9Owor
ICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcywgZnVuYykpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaExpdmVDZWxsKGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yRWFjaE1hcmtlZEJsb2NrKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZpc2l0Q291bnRlciB7Citw
dWJsaWM6CisgICAgVmlzaXRDb3VudGVyKCkgeyB9CisgICAgCisgICAgVmlzaXRDb3VudGVyKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKKyAgICAg
ICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmlzaXRvci0+dmlzaXRDb3VudCgpIC0gbV9pbml0aWFsVmlzaXRDb3VudDsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxscHRy
IH07CisgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdU
aW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRp
bmdUaW1lb3V0LmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNs
dWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBWaXNpdGluZ1RpbWVvdXQgewotcHVibGljOgotICAgIFZpc2l0aW5nVGltZW91dCgp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBWaXNpdGluZ1RpbWVvdXQoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAg
ICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZpc2l0U29tZXRoaW5nKQotICAgICAgICAs
IG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0Q291bnQoKSkKLSAgICAgICAgLCBtX3Rp
bWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCB2aXNpdENvdW50
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHZpc2l0
b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENvdW50QmVmb3JlOwotICAgIH0KLQotICAgIGJvb2wg
ZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8fCB2aXNpdENvdW50KHZpc2l0b3IpOwot
ICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcikg
JiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgYm9v
bCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKLSAgICBzaXplX3QgbV92aXNpdENvdW50
QmVmb3JlIHsgMCB9OwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2Nr
LmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgV2Vha0Js
b2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7Ci0gICAgICAgIGlm
IChjb250YWluZXIuaXNNYXJrZWRDb25jdXJyZW50bHkobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUu
YXNDZWxsKCkpKQorICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9u
LCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAg
ICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhh
bmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFsdWUpKSwg
d2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvcikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MDEsMTQgKzExMDEsMTQgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQygpCiAgICAg
Ly8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9i
YWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9nbG9iYWxPYmplY3QuZ2V0
KCkpKQotICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVj
dCgpIHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHN0b3JlZFByb3RvdHlwZU9iamVjdCgp
KSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWQobV9nbG9i
YWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFBy
b3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgp
KSk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQygpKQotICAgICAgICByZXR1cm4gSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcyk7CisgICAgICAgIHJldHVybiBIZWFwOjppc01hcmtl
ZCh0aGlzKTsKICAgICAKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAg
IHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAvKiBCZWdpbiBQQlhC
dWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBGNTI2QjFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5n
TWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMEY1MjY5MUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwICovOyB9OwogCQkw
RjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4
NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgKi87IH07CisJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMy
MyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVu
dFB0ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0
b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNDNEOEVGMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICov
OyB9OwogCQkwRjVCRjE3NjFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNzQxRjIzRDQ5QTAw
MjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLzsgfTsKIAkJMEY2MEYzMkYxREZDQkQxQjAwNDE2RDZD
IC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0
cmVhbS5jcHAgKi87IH07CkBAIC0xODEsNiArMTgyLDggQEAKIAkJMEYzMEJBOEQxRTc4NzA4RTAw
MkNBODQ3IC8qIExvZ2dpbmdIYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExvZ2dpbmdIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBC
QThFMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjMwQkE4RjFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hUcmFpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hUcmFpdHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENv
bmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzFERDcwMUYxMzA4QkMwMDcyRUI0QSAvKiBM
b2NrQWxnb3JpdGhtSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0OEM3RDFGNDdBQTlEMDAzQ0ZF
RjIgLyogU3RyaW5nVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ZlY3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vh
a1JhbmRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmFuZG9tLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODcsNiArNzkwLDggQEAKIAkJCQkwRjhG
MkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0
NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVBQjFGNENE
NjFFMDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1ODFGQ0RG
MTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBGMzBDQjU5
MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJCTBGREI2
OThEMUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEyNjFFQjRF
MDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5
NTdEIC8qIENQVVRpbWUuaCAqLywKQEAgLTE0MTMsNiArMTQxOCw3IEBACiAJCQkJMEY4MjRBNjgx
Qjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFG
MTc1MkIxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFGMTc1MkMxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnREZWNvZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25jdXJy
ZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyRDFGM0Q0ODYwMDBD
NzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMz
NjIxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYvQXRvbWlj
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsMTEgKzM0NiwxNiBAQCBBTFdBWVNfSU5MSU5FIERl
cGVuZGVuY3kgbnVsbERlcGVuZGVuY3koCiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUq
ID0gbnVsbHB0cj4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSBEZXBlbmRl
bmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAg
IHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICB1bmlv
biB7CisgICAgICAgIHVpbnQzMl90IGNvcHk7CisgICAgICAgIFQgdmFsdWU7CisgICAgfSB1Owor
ICAgIHUuY29weSA9IDA7CisgICAgdS52YWx1ZSA9IHZhbHVlOwogI2lmIENQVShBUk02NCkKICAg
ICAvLyBDcmVhdGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNzZW1ibHks
IHdob3NlIGNvbXB1dGF0aW9uCiAgICAgLy8gaXNuJ3QgdmlzaWJsZSB0byB0aGUgb3B0aW1pemVy
LiBUaGlzIHplcm8gaXMgdGhlbiB1c2FibGUgYXMgYW4gb2Zmc2V0IGluCkBAIC0zNjMsODAgKzM2
OCwyMCBAQCBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhCiAgICAgLy8g
b3IgYW4gYWNxdWlyZSBsb2FkLgogICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0s
ICV3W2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAg
ICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbGlm
IENQVShBUk0pCiAgICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5dIgogICAg
ICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIo
Y29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2Vsc2UKICAgICAvLyBObyBk
ZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCiAgICAgbG9hZExvYWRG
ZW5jZSgpOwogICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKKyAg
ICBVTlVTRURfUEFSQU0odS5jb3B5KTsKICNlbmRpZgogICAgIHJldHVybiBkZXBlbmRlbmN5Owog
fQogCi0vLyBGSVhNRTogVGhpcyBjb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG90aGVy
IGRlcGVuZGVuY3koKSBvdmVybG9hZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjk0MDUKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzaXplb2YoVCkgPT0gND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5j
eTsKLSAgICB1aW50MzJfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSk7Ci0j
aWYgQ1BVKEFSTTY0KQotICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2lu
XSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtp
bl0gInIiKGNvcHkpKTsKLSNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5
XSwgJVtpbl0sICVbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kp
Ci0gICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2Vsc2UKLSAgICBsb2FkTG9hZEZlbmNlKCk7
Ci0gICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOwotI2VuZGlmCi0g
ICAgcmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRl
cGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUq
ID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdpdGggewotcHVi
bGljOgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5KG51bGxEZXBl
bmRlbmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVw
ZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKLSAgICAg
ICAgOiBkZXBlbmRlbmN5KGRlcGVuZGVuY3kpCi0gICAgICAgICwgdmFsdWUodmFsdWUpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7Ci0gICAgVCB2YWx1ZTsK
LX07Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIERlcGVuZGVuY3lXaXRoPFQ+
IGRlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsKLX0KLQog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUKiBjb25zdW1lKFQqIHBvaW50ZXIsIERlcGVu
ZGVuY3kgZGVwZW5kZW5jeSkKIHsKQEAgLTQ2OSwxMCArNDE0LDggQEAgQUxXQVlTX0lOTElORSBU
JiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKgogCiB1c2luZyBXVEY6OkF0b21pYzsKIHVzaW5nIFdU
Rjo6RGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmNv
bnN1bWU7CiB1c2luZyBXVEY6OmRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRo
OwogdXNpbmcgV1RGOjplbnN1cmVQb2ludGVyOwogdXNpbmcgV1RGOjpudWxsRGVwZW5kZW5jeTsK
IApJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDEzIEBAIHB1YmxpYzog
CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICBpdGVyYXRv
ciBvcGVyYXRvcisrKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0
ID0gKnRoaXM7CisgICAgICAgICAgICArKygqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisKICAgICAgICAgYm9vbCBpc0F0RW5kKCkgY29uc3QKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPj0gbV9iaXRWZWN0b3ItPnNpemUoKTsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsNyBAQCBzZXQoV1RG
X0hFQURFUlMKICAgICBDbG9ja1R5cGUuaAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmgKICAgICBD
b21waWxlci5oCisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQuaAogICAgIENvbmRpdGlvbi5oCiAg
ICAgQ3Jvc3NUaHJlYWRDb3BpZXIuaAogICAgIENyb3NzVGhyZWFkVGFzay5oCkBAIC0yMTYsNiAr
MjE3LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgQ1BVVGltZS5jcHAKICAgICBDbG9ja1R5cGUu
Y3BwCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuY3BwCisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQu
Y3BwCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY1V0aWxpdGll
cy5jcHAKICAgICBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25jdXJyZW50UHRySGFzaFNldC5oIgor
CituYW1lc3BhY2UgV1RGIHsKKworQ29uY3VycmVudFB0ckhhc2hTZXQ6OkNvbmN1cnJlbnRQdHJI
YXNoU2V0KCkKK3sKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0NvbmN1cnJlbnRQdHJIYXNoU2V0
Ojp+Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNo
U2V0OjpkZWxldGVPbGRUYWJsZXMoKQoreworICAgIC8vIFRoaXMgaXMganVzdCBpbiBjYXNlLiBJ
dCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRvIGNhbGwgYWRkKCkuIEJ1
dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBpZiB3ZSBkaWQgbWFr
ZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOyAKKyAg
ICAKKyAgICBtX2FsbFRhYmxlcy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChzdGQ6
OnVuaXF1ZV9wdHI8VGFibGU+JiB0YWJsZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
dGFibGUuZ2V0KCkgIT0gbV90YWJsZTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ29uY3VycmVu
dFB0ckhhc2hTZXQ6OmNsZWFyKCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4gY2FzZS4gSXQg
ZG9lcyBub3QgbWFrZSBpdCBPSyBmb3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFkZCgpLiBCdXQg
aXQgbWlnaHQgcHJldmVudAorICAgIC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2UgZGlkIG1ha2Ug
dGhhdCBtaXN0YWtlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsgCisgICAg
CisgICAgbV9hbGxUYWJsZXMuY2xlYXIoKTsKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK3ZvaWQg
Q29uY3VycmVudFB0ckhhc2hTZXQ6OmluaXRpYWxpemUoKQoreworICAgIGNvbnN0ZXhwciB1bnNp
Z25lZCBpbml0aWFsU2l6ZSA9IDMyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gdGFibGUg
PSBUYWJsZTo6Y3JlYXRlKGluaXRpYWxTaXplKTsKKyAgICBtX3RhYmxlID0gdGFibGUuZ2V0KCk7
CisgICAgbV9hbGxUYWJsZXMuYXBwZW5kKFdURk1vdmUodGFibGUpKTsKK30KKworYm9vbCBDb25j
dXJyZW50UHRySGFzaFNldDo6YWRkU2xvdyhUYWJsZSogdGFibGUsIHVuc2lnbmVkIG1hc2ssIHVu
c2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4LCB2b2lkKiBwdHIpCit7CisgICAgaWYg
KHRhYmxlLT5sb2FkLmV4Y2hhbmdlQWRkKDEpID49IHRhYmxlLT5tYXhMb2FkKCkpCisgICAgICAg
IHJldHVybiByZXNpemVBbmRBZGQocHRyKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAg
IHZvaWQqIG9sZEVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5jb21wYXJlRXhjaGFuZ2VTdHJv
bmcobnVsbHB0ciwgcHRyKTsKKyAgICAgICAgaWYgKCFvbGRFbnRyeSkgeworICAgICAgICAgICAg
aWYgKG1fdGFibGUubG9hZCgpICE9IHRhYmxlKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgYWRk
ZWQgYW4gZW50cnkgdG8gYW4gb2xkIHRhYmxlISBXZSBuZWVkIHRvIHJlZXhlY3V0ZSB0aGUgYWRk
IG9uIHRoZSBuZXcgdGFibGUuCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZChwdHIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG9sZEVudHJ5ID09IHB0cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
ICE9IHN0YXJ0SW5kZXgpOworICAgIH0KK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6
cmVzaXplSWZOZWNlc3NhcnkoKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgaWYgKHRh
YmxlLT5sb2FkLmxvYWRSZWxheGVkKCkgPCB0YWJsZS0+bWF4TG9hZCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBuZXdUYWJsZSA9IFRhYmxlOjpj
cmVhdGUodGFibGUtPnNpemUgKiAyKTsKKyAgICB1bnNpZ25lZCBtYXNrID0gbmV3VGFibGUtPm1h
c2s7CisgICAgdW5zaWduZWQgbG9hZCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRhYmxlLT5zaXplOyArK2kpIHsKKyAgICAgICAgdm9pZCogcHRyID0gdGFibGUtPmFycmF5W2ld
LmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlmICghcHRyKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFz
azsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7
KSB7CisgICAgICAgICAgICBBdG9taWM8dm9pZCo+JiBlbnRyeVJlZiA9IHRhYmxlLT5hcnJheVtp
bmRleF07CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IGVudHJ5UmVmLmxvYWRSZWxheGVkKCk7
CisgICAgICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgICAgICAgICAgZW50cnlSZWYuc3Rv
cmVSZWxheGVkKHB0cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeSAhPSBwdHIpOworICAgICAgICAgICAgaW5k
ZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRl
eCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbG9hZCsrOwor
ICAgIH0KKyAgICAKKyAgICBuZXdUYWJsZS0+bG9hZC5zdG9yZVJlbGF4ZWQobG9hZCk7CisgICAg
CisgICAgbV90YWJsZS5zdG9yZShuZXdUYWJsZS5nZXQoKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVu
dFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAgcmVzaXplSWZOZWNl
c3NhcnkoKTsKKyAgICByZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDb25j
dXJyZW50UHRySGFzaFNldDo6VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpjcmVhdGUodW5z
aWduZWQgc2l6ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29uY3VycmVudFB0ckhhc2hTZXQ6
OlRhYmxlPiByZXN1bHQobmV3IChmYXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgYXJy
YXkpICsgc2l6ZW9mKEF0b21pYzx2b2lkKj4pICogc2l6ZSkpICgpKTsKKyAgICByZXN1bHQtPnNp
emUgPSBzaXplOworICAgIHJlc3VsdC0+bWFzayA9IHNpemUgLSAxOworICAgIHJlc3VsdC0+bG9h
ZC5zdG9yZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9yZVJlbGF4ZWQobnVsbHB0cik7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNl
L1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYv
d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIFRoaXMgaXMgYSBjb25jdXJyZW50IGhhc2gtYmFzZWQgc2V0IGZvciBwb2ludGVycy4gSXQn
cyBvcHRpbWl6ZWQgZm9yOgorLy8KKy8vIC0gSGlnaCByYXRlIG9mIGNvbnRhaW5zKCkgY2FsbHMu
CisvLyAtIEhpZ2ggcmF0ZSBvZiBhZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyBu
ZXcuIGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIChub3AgYWRkcykKKy8vICAg
ZG9uJ3QgbXV0YXRlIHRoZSB0YWJsZSBhdCBhbGwuCisvLyAtIE5vdCB0b28gbWFueSB0aHJlYWRz
LiBJIGRvdWJ0IHRoaXMgc2NhbGVzIGJleW9uZCB+NC4gVGhvdWdoLCBpdCBtYXkgYWN0dWFsbHkg
c2NhbGUgYmV0dGVyIHRoYW4gdGhhdAorLy8gICBpZiB0aGUgcmF0ZSBvZiBub3AgYWRkcyBpcyBh
YnN1cmRseSBoaWdoLgorLy8KKy8vIElmIHdlIHdhbnRlZCB0aGlzIHRvIHNjYWxlIGJldHRlciwg
dGhlIG1haW4gY2hhbmdlIHdlJ2QgaGF2ZSB0byBtYWtlIGlzIGhvdyB0aGlzIHRhYmxlIGRldGVy
bWluZXMgd2hlbgorLy8gdG8gcmVzaXplLiBSaWdodCBub3cgaXQncyBhIHNoYXJlZCBjb3VudGVy
LgorLy8KKy8vIENvbmN1cnJlbnRQdHJIYXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNlZXMg
YSA5OCUgbm9wIGFkZCByYXRlIGluIFNwZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIGZv
Y3VzZXMgc28gbXVjaCBvbiBjYXNlcyB3aGVyZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdlLgor
Y2xhc3MgQ29uY3VycmVudFB0ckhhc2hTZXQgeworICAgIFdURl9NQUtFX05PTl9DT1BZQUJMRShD
b25jdXJyZW50UHRySGFzaFNldCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1
YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgfkNvbmN1cnJlbnRQdHJIYXNoU2V0KCk7CisgICAgCisgICAg
Ym9vbCBjb250YWlucyh2b2lkKiBwdHIpIGNvbnN0CisgICAgeworICAgICAgICBUYWJsZSogdGFi
bGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJs
ZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7
CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxh
eGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQu
CisgICAgYm9vbCBhZGQodm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxlID0g
bV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUtPm1h
c2s7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgIHZvaWQqIGVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhlZCgp
OworICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkU2xv
dyh0YWJsZSwgbWFzaywgc3RhcnRJbmRleCwgaW5kZXgsIHB0cik7CisgICAgICAgICAgICBpZiAo
ZW50cnkgPT0gcHRyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gT25s
eSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGNhbGwgYW55IG5v
bi1jb25zdCBtZXRob2RzIHJpZ2h0IG5vdy4gVGhpcyBmcmVlcworICAgIC8vIHVwIG1lbW9yeSB3
aXRob3V0IGNoYW5naW5nIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUuCisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGVsZXRlT2xkVGFibGVzKCkKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjbGVhcigpOworICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0
cikKKyAgICB7CisgICAgICAgIHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChwdHIpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCBhZGRTbG93KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5zaWduZWQg
c3RhcnRJbmRleCwgdW5zaWduZWQgaW5kZXgsIHZvaWQqIHB0cik7CisKKyAgICB2b2lkIHJlc2l6
ZUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCByZXNpemVBbmRBZGQodm9pZCogcHRyKTsKKyAgICAK
KyAgICBzdHJ1Y3QgVGFibGUgeworICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQ7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBjcmVh
dGUodW5zaWduZWQgc2l6ZSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBtYXhMb2FkKCkg
Y29uc3QgeyByZXR1cm4gc2l6ZSAvIDI7IH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHNp
emU7IC8vIFRoaXMgaXMgaW1tdXRhYmxlLgorICAgICAgICB1bnNpZ25lZCBtYXNrOyAvLyBUaGlz
IGlzIGltbXV0YWJsZS4KKyAgICAgICAgQXRvbWljPHVuc2lnbmVkPiBsb2FkOworICAgICAgICBB
dG9taWM8dm9pZCo+IGFycmF5WzFdOworICAgIH07CisgICAgCisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxUYWJsZT4sIDQ+IG1fYWxsVGFibGVzOworICAgIEF0b21pYzxUYWJsZSo+IG1fdGFi
bGU7IC8vIFRoaXMgaXMgbmV2ZXIgbnVsbC4KKyAgICBMb2NrIG1fbG9jazsgLy8gV2UganVzdCB1
c2UgdGhpcyB0byBjb250cm9sIHJlc2l6ZSByYWNlcy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCit1c2luZyBXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OwpJbmRleDogU291cmNlL1dURi93
dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZpc2lv
biAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDAsNiArMTAwLDExIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBGdW5jPgogICAgIHZvaWQgYXBwZW5kQW5kQnViYmxlKFUmJiwgY29uc3QgRnVuYyYpOwogICAg
IAorICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IGZvciB3aGljaCB0
aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCisgICAg
Ly8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRha2VGaXJzdChjb25zdCBGdW5jJik7CisKICAgICAv
LyBSZW1vdmUgYW5kIHJldHVybiB0aGUgbGFzdCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJh
Y2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCiAgICAgLy8gVCBpZiBp
dCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KQEAgLTU3MSw2ICs1NzYsMjUgQEAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5l
Q2FwYWNpdHk+OjphcAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2Fw
YWNpdHk+Ojp0YWtlRmlyc3QoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICB1bnNpZ25lZCBjb3Vu
dCA9IDA7CisgICAgdW5zaWduZWQgc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICB3aGlsZSAoY291
bnQgPCBzaXplKSB7CisgICAgICAgIFQgY2FuZGlkYXRlID0gdGFrZUZpcnN0KCk7CisgICAgICAg
IGlmIChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAg
ICAgICAgICAgICAgIHByZXBlbmQodGFrZUxhc3QoKSk7CisgICAgICAgICAgICByZXR1cm4gY2Fu
ZGlkYXRlOworICAgICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIGFwcGVuZChXVEZN
b3ZlKGNhbmRpZGF0ZSkpOworICAgIH0KKyAgICByZXR1cm4gVCgpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogaW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlTGFzdChjb25zdCBGdW5j
JiBmdW5jKQogewogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0Zhc3RNYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw3IEBAIHVzaW5nIFdURjo6ZmFzdEFsaWduZWRGcmVlOwog
I2RlZmluZSBXVEZfUFJJVkFURV9JTkxJTkUgaW5saW5lCiAjZW5kaWYKIAotI2RlZmluZSBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRCBcCi1wdWJsaWM6IFwKKyNkZWZpbmUgV1RGX01BS0VfRkFTVF9B
TExPQ0FURURfSU1QTCBcCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCogcCkg
eyByZXR1cm4gcDsgfSBcCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBw
KSB7IHJldHVybiBwOyB9IFwKICAgICBcCkBAIC0yNjMsNyArMjYyLDE1IEBAIHB1YmxpYzogXAog
ICAgICAgICBBU1NFUlQobG9jYXRpb24pOyBcCiAgICAgICAgIHJldHVybiBsb2NhdGlvbjsgXAog
ICAgIH0gXAorCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIFwKK3B1YmxpYzogXAor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogcHJpdmF0ZTogXAogdHlwZWRlZiBp
bnQgX190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybwogCisjZGVmaW5l
IFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRCBcCisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURURfSU1QTCBcCit0eXBlZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xvbkFm
dGVyVGhpc01hY3JvCisKICNlbmRpZiAvKiBXVEZfRmFzdE1hbGxvY19oICovCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hh
cmVkVGFzay5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDExIEBAIG5hbWVzcGFjZSBXVEYgewogLy8g
c3RhdGUgaW4gbWVtYmVyIGZpZWxkcy4gVGhpcyBjYW4gYmUgbW9yZSBuYXR1cmFsIGlmIHlvdSB3
YW50IGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgd2hhdAogLy8gc3RhdGUgaXMgc2hhcmVkIGJl
dHdlZW4gaW5zdGFuY2VzIG9mIHRoZSB0YXNrLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25U
eXBlPiBjbGFzcyBTaGFyZWRUYXNrOwotdGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KLWNsYXNzIFNoYXJlZFRhc2s8UmVzdWx0VHlwZSAoQXJn
dW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8
UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNz
ZWRSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2hhcmVkVGFz
azxQYXNzZWRSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8U2hhcmVkVGFzazxQYXNzZWRSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4u
KT4+IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NlZFJlc3VsdFR5cGUgUmVzdWx0VHlwZTsK
KyAgICAKICAgICBTaGFyZWRUYXNrKCkgeyB9CiAgICAgdmlydHVhbCB+U2hhcmVkVGFzaygpIHsg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKyNwcmFnbWEgb25jZQorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg+CisKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNp
dGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDIg
KzAsMCBAQAotI3ByYWdtYSBvbmNlCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVmlzaXRpbmdU
aW1lb3V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGll
bnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDExICsyOSwxMCBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhlYXAv
RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgogI2luY2x1ZGUg
PGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxv
Y2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oPgog
I2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9WaXNpdGlu
Z1RpbWVvdXQuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIApAQCAtNzIsNDMgKzcxLDY3IEBAIHZvaWQgSlNWTUNsaWVudERhdGE6OmluaXRO
b3JtYWxXb3JsZChWTSoKICAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG5ldyBKU1ZN
Q2xpZW50RGF0YSgqdm0pOwogICAgIHZtLT5jbGllbnREYXRhID0gY2xpZW50RGF0YTsgLy8gflZN
IGRlbGV0ZXMgdGhpcyBwb2ludGVyLgogICAgIAotICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6
bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAotICAgICAgICAiV2NvYyIsICJXZWJDb3Jl
IE91dHB1dCBDb25zdHJhaW50cyIsCi0gICAgICAgIFt2bSwgY2xpZW50RGF0YSwgbGFzdEV4ZWN1
dGlvblZlcnNpb24gPSB2bS0+aGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpXQotICAgICAg
ICAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS0+aGVhcDsKKyAgICBjbGFzcyBOb3Jt
YWxXb3JsZENvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgTm9ybWFsV29ybGRDb25zdHJhaW50KFZNJiB2bSwgSlNWTUNsaWVudERhdGEm
IGNsaWVudERhdGEpCisgICAgICAgICAgICA6IE1hcmtpbmdDb25zdHJhaW50KCJXY29jIiwgIldl
YkNvcmUgT3V0cHV0IENvbnN0cmFpbnRzIiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdy
ZXllZCkKKyAgICAgICAgICAgICwgbV92bSh2bSkKKyAgICAgICAgICAgICwgbV9jbGllbnREYXRh
KGNsaWVudERhdGEpCisgICAgICAgICAgICAsIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24odm0uaGVh
cC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0
ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24p
CisgICAgICAgICAgICBpZiAoaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpID09IG1fbGFz
dEV4ZWN1dGlvblZlcnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlv
blZlcnNpb24oKTsKKyAgICAgICAgICAgIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11
dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CiAKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFu
YWdlIHRoZSB2aXNpdCBjb3VudCBoZXJlIG91cnNlbHZlcy4gV2UgbmVlZCB0byBrbm93IHRoYXQg
aWYgdGhpcyBhZGRzCiAgICAgICAgICAgICAvLyBvcGFxdWUgcm9vdHMgdGhlbiB3ZSBjYW5ub3Qg
ZGVjbGFyZSB0ZXJtaW5hdGlvbiB5ZXQuIFRoZSB3YXkgd2Ugc2lnbmFsIHRoaXMgdG8gdGhlCiAg
ICAgICAgICAgICAvLyBjb25zdHJhaW50IHNvbHZlciBpcyBieSBhZGRpbmcgdG8gdGhlIHZpc2l0
IGNvdW50LgorICAgICAgICAgICAgbV9udW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3Bh
cXVlUm9vdHMoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IG51bU9wYXF1ZVJv
b3RzQmVmb3JlID0gaGVhcC5udW1PcGFxdWVSb290cygpOwotCi0gICAgICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIHBhcmFsbGVsIQotICAgICAgICAgICAgdW5zaWduZWQgbnVtUmV2aXNpdGVk
ID0gMDsKLSAgICAgICAgICAgIGNsaWVudERhdGEtPmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3Bh
Y2UoCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Rhc2tzLmlzRW1wdHkoKSk7CisgICAg
ICAgICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAg
ICAgICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgewotICAgICAgICAgICAgICAgICAg
ICBzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxs
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSgqdm0pLT52
aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBudW1SZXZpc2l0ZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSkt
PnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3Rhc2tz
LmFwcGVuZChzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoZnVuYykpOwogICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiKCIsIG51bVJldmlzaXRlZCwgIikiKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoaGVhcC5udW1PcGFx
dWVSb290cygpIC0gbnVtT3BhcXVlUm9vdHNCZWZvcmUpOwotICAgICAgICB9LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKLSAgICB2bS0+aGVhcC5hZGRNYXJr
aW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKKyAgICAgICAgICAgIHJldHVybiBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJp
ZGUKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChhdXRvJiB0YXNrIDogbV90YXNrcykKKyAg
ICAgICAgICAgICAgICB0YXNrLT5ydW4odmlzaXRvcik7CisgICAgICAgICAgICB2aXNpdG9yLm1l
cmdlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBmaW5p
c2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAg
ICB7CisgICAgICAgICAgICB2aXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJv
b3RzKCkgLSBtX251bU9wYXF1ZVJvb3RzQmVmb3JlKTsKKyAgICAgICAgICAgIG1fdGFza3MuY2xl
YXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBWTSYgbV92
bTsKKyAgICAgICAgSlNWTUNsaWVudERhdGEmIG1fY2xpZW50RGF0YTsKKyAgICAgICAgdWludDY0
X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsKKyAgICAgICAgc2l6ZV90IG1fbnVtT3BhcXVlUm9v
dHNCZWZvcmUgeyAwIH07CisgICAgICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+
Pj4gbV90YXNrczsKKyAgICB9OworICAgIAorICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJh
aW50KHN0ZDo6bWFrZV91bmlxdWU8Tm9ybWFsV29ybGRDb25zdHJhaW50Pigqdm0sICpjbGllbnRE
YXRhKSk7CiAgICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFw
cGVyV29ybGQ6OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9s
bGVyID0gYWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCShyZXZpc2lvbiAyMjUxNzgpCisrKyBUb29scy9TY3Jp
cHRzL3J1bi1qc2MtYmVuY2htYXJrcwkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOCBAQCBM
T05HU1BJREVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggCiBWOF9QQVRIID0gUEVSRk9S
TUFOQ0VURVNUU19QQVRIICsgIlN1blNwaWRlciIgKyAidGVzdHMiICsgInY4LXY2IgogVEFJTEJF
TkNIX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiVGFpbEJlbmNoOTAwMCIKIE1JQ1JP
QkVOQ0hNQVJLU19QQVRIID0gT1BFTlNPVVJDRV9QQVRIICsgIkpTVGVzdHMiICsgIm1pY3JvYmVu
Y2htYXJrcyIKLU9DVEFORV9XUkFQUEVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAi
T2N0YW5lIiArICJ3cmFwcGVycyIKK09QRU5TT1VSQ0VfT0NUQU5FX1BBVEggPSBQRVJGT1JNQU5D
RVRFU1RTX1BBVEggKyAiT2N0YW5lIgorT0NUQU5FX1dSQVBQRVJfUEFUSCA9IE9QRU5TT1VSQ0Vf
T0NUQU5FX1BBVEggKyAid3JhcHBlcnMiCiBKU0JFTkNIX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RT
X1BBVEggKyAiSlNCZW5jaCIKIFNJWFNQRUVEX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEgg
KyAiU2l4U3BlZWQiICsgInRlc3RzIgogU0lYU1BFRURfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFO
Q0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ3cmFwcGVycyIKQEAgLTg0MSw2ICs4NDIsMjAg
QEAgY2xhc3MgU2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwogICBlbmQKIGVuZAog
CisjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIGEgc2luZ2xlIGZpbGUgYW5kIG11c3QgYmUg
bG9hZGVkIGluIGl0cyBvd24gZ2xvYmFsIG9iamVjdCBlYWNoCisjIHRpbWUgKGkuZS4gcnVuKCkp
LCBidXQgcmV0dXJucyBpdHMgcmVzdWx0IGluIGEgY3VzdG9tIHdheS4KK2NsYXNzIFNpbmdsZUZp
bGVDdXN0b21UaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKKyAgYXR0cl9yZWFkZXIgOmJlbmNoUGF0
aAorICAKKyAgZGVmIGluaXRpYWxpemUoYmVuY2hQYXRoKQorICAgIEBiZW5jaFBhdGggPSBiZW5j
aFBhdGgKKyAgZW5kCisgIAorICBkZWYga2luZAorICAgIDpzaW5nbGVGaWxlQ3VzdG9tVGltZWRC
ZW5jaG1hcmsKKyAgZW5kCitlbmQKKwogIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBvZiBvbmUg
b3IgbW9yZSBkYXRhIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGxvYWRlZCBnbG9iYWxseSwgZm9sbG93
ZWQKICMgYnkgYSBjb21tYW5kIHRvIHJ1biB0aGUgYmVuY2htYXJrLgogY2xhc3MgTXVsdGlGaWxl
VGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCkBAIC05NjUsNiArOTgwLDI1IEBAIGRlZiBlbWl0QmVu
Y2hSdW5Db2RlRmlsZShuYW1lLCBwbGFuLCBiZW4KICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsIiAgICBpZiAoX19iZW5jaGVyX2luZGV4ID49ICN7d2FybXVwfSkgcHJpbnQoXCIje25h
bWV9OiAje3BsYW4udm19OiAje3BsYW4uaXRlcmF0aW9ufTogXCIgKyAoX19iZW5jaGVyX2luZGV4
IC0gI3t3YXJtdXB9KSArIFwiOiBUaW1lOiBcIisoKF9fYWZ0ZXItX19iZWZvcmUpL19fcnVucykp
OyIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJ9IikKICAgICAgICAgZG91Ymxl
UHV0cygkc3RkZXJyLGZpbGUsIiN7YmVuY2hQYXJhbXMudGVhckRvd25Db21tYW5kLmpzfSIpCisg
ICAgICBlbHNpZiBiZW5jaFBhcmFtcy5raW5kID09IDpzaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5j
aG1hcmsKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImZ1bmN0aW9uIF9fYmVuY2hl
cl9ydW4oX19iZW5jaGVyX3doYXQpIHsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmls
ZSwiICAgdmFyIF9fYmVuY2hlcl9yZXN1bHQgPSB7dmFsdWU6IG51bGx9OyIpCisgICAgICAgICRy
ZXJ1bi50aW1lcyB7CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHJ1bihf
X2JlbmNoZXJfd2hhdCwgX19iZW5jaGVyX3Jlc3VsdCk7IikKKyAgICAgICAgfQorICAgICAgICBk
b3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgaWYgKF9fYmVuY2hlcl9yZXN1bHQudmFsdWUgPT0g
bnVsbCkiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgICAgdGhyb3cgbmV3
IEVycm9yKFwiTnVsbCByZXN1bHRcIik7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZp
bGUsIiAgIHJldHVybiBfX2JlbmNoZXJfcmVzdWx0LnZhbHVlOyIpCisgICAgICAgIGRvdWJsZVB1
dHMoJHN0ZGVycixmaWxlLCJ9IikKKyAgICAgICAgJHdhcm11cC50aW1lcyB7CisgICAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIl9fYmVuY2hlcl9ydW4oI3tiZW5jaFBhcmFtcy5iZW5j
aFBhdGguaW5zcGVjdH0pIikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2Mo
KTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQorICAgICAgICAk
aW5uZXIudGltZXMgeworICAgICAgICAgIHwgaW5uZXJJbmRleCB8CisgICAgICAgICAgZG91Ymxl
UHV0cygkc3RkZXJyLGZpbGUsInByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0
ZXJhdGlvbn06ICN7aW5uZXJJbmRleH06IFRpbWU6IFwiK19fYmVuY2hlcl9ydW4oI3tiZW5jaFBh
cmFtcy5iZW5jaFBhdGguaW5zcGVjdH0pKTsiKQorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCJnYygpOyIpIHVubGVzcyBwbGFuLnZtLnNob3VsZE1lYXN1cmVHQworICAgICAgICB9
CiAgICAgICBlbHNlCiAgICAgICAgIHJhaXNlIHVubGVzcyBiZW5jaFBhcmFtcy5raW5kID09IDpz
aW5nbGVGaWxlVGltZWRCZW5jaG1hcmsKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUs
ImZ1bmN0aW9uIF9fYmVuY2hlcl9ydW4oX19iZW5jaGVyX3doYXQpIHsiKQpAQCAtMTU5NCw2ICsx
NjI4LDE5IEBAIGNsYXNzIE9jdGFuZUJlbmNobWFyawogICBlbmQKIGVuZAogCitjbGFzcyBDdXN0
b21UaW1lZEJlbmNobWFyaworICBpbmNsdWRlIEJlbmNobWFyaworICAKKyAgZGVmIGluaXRpYWxp
emUobmFtZSwgZnVsbFBhdGgpCisgICAgQG5hbWUgPSBuYW1lCisgICAgQGZ1bGxQYXRoID0gZnVs
bFBhdGgKKyAgZW5kCisgIAorICBkZWYgZW1pdFJ1bkNvZGUocGxhbikKKyAgICBlbWl0QmVuY2hS
dW5Db2RlKGZ1bGxuYW1lLCBwbGFuLCBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJh
bWV0ZXJzLm5ldyhlbnN1cmVGaWxlKCJDdXN0b21UaW1lZC0je0BuYW1lfSIsIEBmdWxsUGF0aCkp
KQorICBlbmQKK2VuZAorCiBjbGFzcyBLcmFrZW5CZW5jaG1hcmsKICAgaW5jbHVkZSBCZW5jaG1h
cmsKICAgCkBAIC0zMDEwLDYgKzMwNTcsNyBAQCBiZWdpbgogICAgIHwgYXJncyB8CiAgICAgT0NU
QU5FLmFkZCBPY3RhbmVCZW5jaG1hcmsubmV3KCphcmdzKQogICB9CisgIE9DVEFORS5hZGQgQ3Vz
dG9tVGltZWRCZW5jaG1hcmsubmV3KCJzcGxheS1sYXRlbmN5IiwgKE9QRU5TT1VSQ0VfT0NUQU5F
X1BBVEggKyAic3BsYXkuanMiKS50b19zKQogCiAgIEtSQUtFTiA9IEJlbmNobWFya1N1aXRlLm5l
dygiS3Jha2VuIiwgOmFyaXRobWV0aWNNZWFuLCAtMSkKICAgWyJhaS1hc3RhciIsICJhdWRpby1i
ZWF0LWRldGVjdGlvbiIsICJhdWRpby1kZnQiLCAiYXVkaW8tZmZ0IiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327788</attachid>
            <date>2017-11-28 14:29:18 -0800</date>
            <delta_ts>2017-11-28 14:58:18 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>170623</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2
ICs1MDMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3
MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2
IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBG
OTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJF
NTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBB
OUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07
Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxh
bklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkw
RjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBB
OUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNj
aGVkdWxlci5oICovOyB9OwpAQCAtMzExLDYgKzMxMCw5IEBACiAJCTBGNEEzOEZBMUM4RTEzREYw
MDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRC
OTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1
bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5
MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhDNzQx
RkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovOyB9OworCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RDhD
NzgxRkNBM0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGls
bHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAw
NzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUx
ODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDk0LDcgKzE0OTYsNiBAQAog
CQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ5RTg1MkUxRThB
MEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREJDNTRENTFERjhFQTJCMDA1QkY3
MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBREJDNTREMzFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNzZW1i
bHlUb0pTQ2FsbGVlLmggKi87IH07CiAJCUFERDhGQTQ2MUVCMzA3OTcwMERGNTQyRiAvKiBXYXNt
TmFtZVNlY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJz
ZXIuaCAqLzsgfTsKLQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEREIxRjYy
MThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFERTgwMjk0MUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5
TGlua0Vycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQURFODAyOUExRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFERTgwMjk1MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVj
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QURFODAyOUMxRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5
NzFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk3Niw3ICsx
OTc3LDYgQEAKIAkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAg
LyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdGluZ1RpbWVvdXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBh
dGggPSBkZmcvREZHUGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxRkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0aCA9IGRm
Zy9ERkdXb3JrbGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
RkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjI2NCw2ICsyMjY0LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5
MDMxOCAvKiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3VwZXJTYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNP
cmlnaW5EdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5
NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4
QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVN
YXJraW5nQ29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZD
MTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhP
YnZpb3VzU3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0Fp
ckZpeE9idmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUx
RDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5E
dW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNTQsNyArNDI1OCw2IEBA
CiAJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEpTV2ViQXNzZW1ibHkuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21O
YW1lU2VjdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
TmFtZVNlY3Rpb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZB
NDQxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVS
b290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjkzMUUwOEYxQzkw
MDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwOyBwYXRoID0ganMv
SlNXZWJBc3NlbWJseUxpbmtFcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFERTgwMjk0MUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaDsg
cGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9y
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JD
b25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUwMCw2ICs1NTAz
LDcgQEAKIAkJCQkwRkQwRTVFNjFFNDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAq
LywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3Bw
ICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5o
ICovLAorCQkJCTBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxp
c20uaCAqLywKIAkJCQkwRjdERjEyRjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0
aWxpdHkuaCAqLywKIAkJCQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAg
Ki8sCiAJCQkJMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU1
OTQsMTEgKzU1OTgsMTIgQEAKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRv
clNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9y
U3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3Rh
dGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5o
ICovLAogCQkJCTBGQkI3M0I2MURFRjNBQUMwMDJDMDA5RSAvKiBQcmV2ZW50Q29sbGVjdGlvblNj
b3BlLmggKi8sCiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4IC8qIFJlZ2lzdGVyU3RhdGUu
aCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIgLyogUmVsZWFzZUhlYXBBY2Nlc3NT
Y29wZS5oICovLAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMxMzgzOSAvKiBSdW5uaW5nU2NvcGUu
aCAqLywKKwkJCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuY3BwICovLAorCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90
VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNp
dG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5s
aW5lcy5oICovLApAQCAtNTYyMCw3ICs1NjI1LDcgQEAKIAkJCQkwRjFGQjM4QjFFMTczQTYyMDBB
OUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJ
CQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovLAogCQkJ
CTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8s
Ci0JCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovLAor
CQkJCTBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywKIAkJCQkw
Rjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLywKIAkJCQkwRjk1
MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8sCiAJCQkJMUFDRjczNzYx
NzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwICovLApAQCAtODE2OSw2ICs4MTc0LDcgQEAKIAkJ
CQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFy
YWxsZWxpc20uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAv
KiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAw
RjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQw
RTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODMsNiAr
ODg4OSw3IEBACiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1h
cFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3
MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDAyLDkgKzkwMDksOSBAQAogCQkJ
CUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZl
V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQw
QzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29u
c3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8q
IE9iamVjdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAw
MzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBRERCMUY2MzE4
RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5
QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzA0NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTkyNDksNyArOTI1Niw2IEBACiAJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8q
IFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyRDFB
QTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0
OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3
IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKIAogICAgIHN3aXRj
aCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoSGVhcDo6aXNN
YXJrZWRDb25jdXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlm
IChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTgwLDcgKzk4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRv
ciYKICAgICAKICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRydWU7CiAKLSAgICBp
ZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFy
a2VkKHRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmds
eShsb2NrZXIpKSB7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyB0aW1lVG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRv
T2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYgKEhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29k
ZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTE0NywxMCArMTE0NywxMCBAQCBi
b29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYgRU5BQkxFKERGR19K
SVQpCiBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVuY2VU
cmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdp
biAmJiAhSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4u
Z2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJr
ZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1f
ZnJvbS5nZXQoKSkpCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExODAsNyArMTE4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhj
b24KICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0
KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9CiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFy
a2VkKG9sZFN0cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjU0LDE0ICsxMjU0LDE0
IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNb
aV0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPigqcmVm
ZXJlbmNlLT52bSgpLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocmVm
ZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1
cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0
KCkpKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+d2Vha1N0
cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2
ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxs
ZWxpc20uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
dHJhaW50UGFyYWxsZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWlu
dDhfdCB7CisgICAgU2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFt
ZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlz
bSkKK3sKKyAgICBzd2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNt
OjpQYXJhbGxlbDoKKyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAgICAgLCBtX211dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVl
PFNsb3RWaXNpdG9yPigqdGhpcywgIk0iKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQo
c3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3Ry
YWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAg
ICAgLCBtX2hhbmRsZVNldCh2bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVl
PENvZGVCbG9ja1NldD4oKSkKICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlx
dWU8SklUU3R1YlJvdXRpbmVTZXQ+KCkpCkBAIC05MTEsNyArOTExLDcgQEAgdm9pZCBIZWFwOjph
ZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwog
ICAgIGlmIChtX211dGF0b3JTaG91bGRCZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2Fk
RmVuY2UoKTsKLSAgICAgICAgaWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAg
ICAgICBpZiAoIWlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxs
IGNvbGxlY3Rpb24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJp
dml2ZWQgcGFzdAogICAgICAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBh
IHN0b3JlIHRvIGFuIHVubWFya2VkIFBvc3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAg
ICAgICAgIC8vIG9iamVjdCBnZXRzIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVu
IGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTI0LDE1IEBA
IHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAg
ICAvLyBOb3cgd2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAv
LwogICAgICAgICAgICAgICAgIC8vICAgICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVu
bWFya2VkLgotICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJy
ZW50bHkgaGVyZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhl
cmUuCiAgICAgICAgICAgICAgICAgLy8gICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXll
ZC4KICAgICAgICAgICAgICAgICAvLyAgICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNr
ZWQuCiAgICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFu
Z2VDZWxsU3RhdGVTdHJvbmcgaGVyZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAg
ICAgIC8vIEluIHRoaXMgY2FzZSB3ZSB3b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBh
Z2FpbiwgZXZlbiB0aG91Z2ggaXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2su
IFRoaXMgY2hlY2sgbGV0cyB1cyBjb3JyZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0
aGUgZmFjdCB0aGF0Ci0gICAgICAgICAgICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29u
dmVyZ2VzIG1vbm90b25pY2FsbHkgdG8gdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJr
ZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252
ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtl
ZChjZWxsKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3Jr
IG91dCB3aGV0aGVyIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpcyBwb2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5
LgogICAgICAgICAgICAgICAgICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3Nz
aWJseUJsYWNrKTsKQEAgLTk0OCw3ICs5NDgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJl
ZFNldChjb25zdCBKU0NlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVs
c2UKLSAgICAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAg
ICAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0
aGF0IHRoZSBvYmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29s
bGVjdG9yIG1heSBzZXQgdGhlCiAgICAgLy8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRo
ZW4gdG8gUG9zc2libHlPbGRPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwog
ICAgIC8vIHJhY2Ugd2l0aCB0aGUgY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMg
aXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXwpAQCAtMTI2NSw2ICsxMjY1LDgg
QEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgIAogICAgIFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciA9ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOwogICAgIAor
ICAgIG1fb3BhcXVlUm9vdHMuZGVsZXRlT2xkVGFibGVzKCk7CisgICAgCiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkpIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBjaGFyKiwgc2l6ZV90PiB2aXNp
dE1hcDsKICAgICAgICAgZm9yRWFjaFNsb3RWaXNpdG9yKApAQCAtMTMwNSw3ICsxMzA3LDcgQEAg
TkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAvLyBXb25k
ZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCku
IFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVz
aW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCkuCiAgICAgICAgIGJvb2wgY29udmVyZ2Vk
ID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RW
aXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgICAgIG1fY29uc3Ry
YWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKGNv
bnZlcmdlZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFzc2VydFNo
YXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNv
bm4sIENvbGxlY3RvclBoYXNlOjpFbmQpOwpAQCAtMjU3OCw3ICsyNTgwLDcgQEAgdm9pZCBIZWFw
OjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUg
cHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2
ZSBzY2FuIik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRp
dmVTY2FuKCk7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290
cygqdGhpcyk7CkBAIC0yNTg4LDExICsyNTkwLDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0
cmFpbnRzKCkKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9v
dHMpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlF
eGVjdXRpb24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24sCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMi
LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRp
bmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikg
ewogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1l
bWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7CiAjZW5kaWYKQEAgLTI2MDksMTkgKzI2MTIs
MjEgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKICAg
ICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9u
KTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAg
ICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAg
ICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgK
ICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikK
ICAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92
bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2MzcsMzQgKzI2NDIsMzggQEAg
dm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CiAgICAg
ICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7
CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAotICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAg
ICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNp
dG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAg
ICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJXcmgiLCAiV2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQo
KSkKICAgICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNp
dG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcs
CisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAi
REZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJl
ck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmts
aXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAg
ICAgICAKQEAgLTI2NzksMTIgKzI2ODgsMTMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWlu
dHMoKQogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90Vmlz
aXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eU1hcmtpbmcpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5n
LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICNlbmRpZgogICAg
IAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7
CiAgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhv
dXRIb2xkaW5nTG9ja3MoCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9j
aykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29u
c3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCkBAIC0yNjkzLDExICsyNzAzLDE1IEBAIHZvaWQg
SGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RW
aXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQp
OworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkLAorICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIk1ybXMiLCAiTXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZ3JhYiBsb2NrcyB0byBmaWRkbGUgd2l0
aCB0aGUgbXV0YXRvciBtYXJrIHN0YWNrIGFuZCB0aGUgcmFjZSBzdGFjay4KKyAgICAgICAgICAg
IC8vIFRoZSBjaGFuY2VzIG9mIGNvbnRlbnRpb24gb24gdGhvc2UgbG9ja3MgYXJlIHNsaW0sIGJ1
dCB3ZSBzaG91bGQgZG8gaXQgYW55d2F5LgorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJ
bmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAg
ICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFy
a1N0YWNrLT5zaXplKCk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQo
c2l6ZSk7CkBAIC0yNzExLDcgKzI3MjUsOCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewogICAgICAgICAg
ICAgcmV0dXJuIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5z
aXplKCk7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiB9CiAKIHZv
aWQgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25z
dHJhaW50PiBjb25zdHJhaW50KQpAQCAtMjc5NCwxNiArMjgwOSw2IEBAIHZvaWQgSGVhcDo6YWxs
b3dDb2xsZWN0aW9uKCkKICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrLnVubG9jaygpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0
b3IoY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OwotICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKLSAgICBmb3IgKGF1dG8mIHNsb3RW
aXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgZnVuYygqc2xvdFZpc2l0
b3IpOwotfQotCiB2b2lkIEhlYXA6OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVl
KQogewogICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3LDQgKzI4
NTIsMjQgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwogICAgIG1f
aGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAKK3ZvaWQg
SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0
ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxs
ZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICB1
bnNpZ25lZCBpbml0aWFsUmVmQ291bnQgPSB0YXNrLT5yZWZDb3VudCgpOworICAgIHNldEJvbnVz
VmlzaXRvclRhc2sodGFzayk7CisgICAgdGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RWaXNpdG9y
KTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKG51bGxwdHIpOworICAgIHsKKyAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAgIHdoaWxlICh0YXNr
LT5yZWZDb3VudCgpID4gaW5pdGlhbFJlZkNvdW50KQorICAgICAgICAgICAgbV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUud2FpdChtX21hcmtpbmdNdXRleCk7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDcgKzExNCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
c190aW1lQ2hlY2tSZXNvbHV0aW9uID0gMTY7CiAKICAgICBzdGF0aWMgYm9vbCBpc01hcmtlZChj
b25zdCB2b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qg
dm9pZCopOwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24sIGNv
bnN0IHZvaWQqKTsKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0IHZvaWQq
KTsKQEAgLTM1OCw2ICszNTcsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZp
bmFsaXplckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQg
cmVtb3ZlSGVhcEZpbmFsaXplckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYp
OworICAgIAorICAgIHZvaWQgcnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChTbG90VmlzaXRvciYpPj4pOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cisg
ICAgdm9pZCBydW5GdW5jdGlvbkluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7Cisg
ICAgICAgIHJ1blRhc2tJblBhcmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRv
ciYpPihmdW5jKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2
b2lkIGZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJik7CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEFsbG9jYXRpbmdTY29wZTsKQEAgLTUyNyw2ICs1MzcsOCBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAKKyAgICB2b2lk
IHNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
Pj4pOworICAgIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6
ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwpAQCAt
NTc5LDkgKzU5MSw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4gbV9hdmFp
bGFibGVQYXJhbGxlbFNsb3RWaXNpdG9yczsKICAgICBMb2NrIG1fcGFyYWxsZWxTbG90VmlzaXRv
ckxvY2s7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGZvckVh
Y2hTbG90VmlzaXRvcihjb25zdCBGdW5jJik7Ci0KICAgICBIYW5kbGVTZXQgbV9oYW5kbGVTZXQ7
CiAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29k
ZUJsb2NrU2V0PiBtX2NvZGVCbG9ja3M7CkBAIC02MzMsOCArNjQyLDcgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICBi
b29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CiAKLSAgICBMb2NrIG1f
b3BhcXVlUm9vdHNNdXRleDsKLSAgICBIYXNoU2V0PGNvbnN0IHZvaWQqPiBtX29wYXF1ZVJvb3Rz
OworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdHM7CiAKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCkBAIC02NDIsNiArNjUw
LDcgQEAgcHJpdmF0ZToKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZpbmFsaXpl
cj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKIAogICAgIFBhcmFsbGVsSGVscGVy
Q2xpZW50IG1faGVscGVyQ2xpZW50OworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IG1fYm9udXNWaXNpdG9yVGFzazsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FH
RSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2NhdGVkIHsgMCB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCwyNSArNjgsMTUgQEAgaW5saW5lIGJvb2wgSGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0
VAogICAgIHJldHVybiBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOwog
fQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLCBzbyB0aGF0
IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJzaW9uKCkgcXVpY2tseS4KKy8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5ODgKIEFMV0FZU19JTkxJTkUgYm9vbCBI
ZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFTU0VSVChtYXlCZUdD
VGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBDZWxsKiBjZWxsID0g
Yml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwtPmlzTGFyZ2VB
bGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01h
cmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0g
ICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVj
dFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9v
bCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdDZWxsKQotewotICAg
IEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7Ci0gICAg
aWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBjZWxsLT5sYXJn
ZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwt
Pm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29uY3VycmVudGx5KAot
ICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwg
Y2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCktPmhlYXAub2JqZWN0
U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29s
IEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0
IHZvaWQqIHJhd0NlbGwpCkBAIC0yNjksNCArMjU5LDE0IEBAIGlubGluZSB2b2lkIEhlYXA6OnN0
b3BJZk5lY2Vzc2FyeSgpCiAgICAgICAgIHN0b3BJZk5lY2Vzc2FyeVNsb3coKTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0
IEZ1bmMmIGZ1bmMpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFsbGVsU2xv
dFZpc2l0b3JMb2NrKTsKKyAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICBm
dW5jKCptX211dGF0b3JTbG90VmlzaXRvcik7CisgICAgZm9yIChhdXRvJiBzbG90VmlzaXRvciA6
IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9yKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwU25hcHNob3RCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjpidWlsZFNu
YXBzaG90KAogdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBBU1NFUlQobV9wcm9maWxlci5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIoKSA9PSB0
aGlzKTsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAg
IEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAKICAgICBpZiAoaGFzRXhpc3RpbmdOb2Rl
Rm9yQ2VsbChjZWxsKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQo
KSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0K
ICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBpc01h
cmtlZCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBDZWxsKiwgRGVw
ZW5kZW5jeSkgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01h
cmtlZCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uLCBI
ZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KICAgICBib29sIGlzTGl2ZSgpIHsgcmV0
dXJuIGlzTWFya2VkKCkgfHwgaXNOZXdseUFsbG9jYXRlZCgpOyB9CiAgICAgCiAgICAgYm9vbCBo
YXNWYWxpZENlbGwoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZhbGlkQ2VsbDsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lv
biAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDMzIEBAIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjphc3NlcnROb1Vuc3dlcHQoKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitS
ZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gTWFya2VkQWxsb2NhdG9y
OjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKQoreworICAgIGNsYXNzIFRhc2sgOiBwdWJs
aWMgU2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPiB7CisgICAgcHVibGljOgorICAg
ICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2Fs
bG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgbV9pbmRl
eCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZpbmRCaXQobV9pbmRleCwgdHJ1ZSk7
CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9jYXRvci5tX2Jsb2Nrcy5zaXplKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gbV9h
bGxvY2F0b3IubV9ibG9ja3NbbV9pbmRleF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKKyAgICAgICAgc2l6
ZV90IG1faW5kZXggeyAwIH07CisgICAgICAgIExvY2sgbV9sb2NrOworICAgIH07CisgICAgCisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzKSk7Cit9CisKIHZvaWQgTWFya2VkQWxs
b2NhdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJh
d1BvaW50ZXIodGhpcyksICI6IiwgbV9jZWxsU2l6ZSwgIi8iLCBtX2F0dHJpYnV0ZXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlCbG9jayhj
b25zdCBGdW5jdG9yJik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6
OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHZv
aWQgYWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIHZvaWQgcmVtb3ZlQmxvY2so
TWFya2VkQmxvY2s6OkhhbmRsZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNiBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFy
a2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBp
c01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9p
ZCopOwogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAgIGJv
b2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgICAgIApA
QCAtMjgwLDcgKzI3OSw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
YXJlTWFya3NTdGFsZSgpOwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbik7Ci0gICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAKICAgICBEZXBlbmRl
bmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAgICAgCkBA
IC00OTgsMTggKzQ5NiwxMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFs
ZShICiAgICAgcmV0dXJuIG1hcmtpbmdWZXJzaW9uICE9IG1fbWFya2luZ1ZlcnNpb247CiB9CiAK
LUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gTWFya2VkQmxvY2s6OmFyZU1hcmtz
U3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKLXsKLSAgICBI
ZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKLSAgICByZXR1cm4gZGVwZW5k
ZW5jeVdpdGgoZGVwZW5kZW5jeSh2ZXJzaW9uKSwgdmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbik7
Ci19Ci0KIGlubGluZSBEZXBlbmRlbmN5IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVy
c2lvbiBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVX
aXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHJlc3VsdC52
YWx1ZSkpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAg
aWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBhYm91dFRv
TWFya1Nsb3cobWFya2luZ1ZlcnNpb24pOwotICAgIHJldHVybiByZXN1bHQuZGVwZW5kZW5jeTsK
KyAgICByZXR1cm4gZGVwZW5kZW5jeSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMTUgKzUxNiwxMCBA
QCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBib29s
IE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qg
dm9pZCogcCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikgPyBm
YWxzZSA6IGlzTWFya2VkUmF3KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNN
YXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQq
IHApCi17Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFy
a2luZ1ZlcnNpb24pOwotICAgIGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24gdmVy
c2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFy
a2luZ1ZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3Mu
Z2V0KGF0b21OdW1iZXIocCksIHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJr
cy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSh2ZXJzaW9uKSk7CiB9CiAKIGlubGluZSBi
b29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJl
dmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw2ICsxNjMsMTEgQEAgcHVibGljOgogICAgIC8vIFdo
ZW4gdGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUgbWFy
ayBiaXRzIGhhdmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlzTWFya2luZygpIGNvbnN0
IHsgcmV0dXJuIG1faXNNYXJraW5nOyB9CiAgICAgCisgICAgV2Vha1NldCogYWN0aXZlV2Vha1Nl
dHNCZWdpbigpIHsgcmV0dXJuIG1fYWN0aXZlV2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtT
ZXQqIGFjdGl2ZVdlYWtTZXRzRW5kKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5lbmQoKTsg
fQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX25ld0Fj
dGl2ZVdlYWtTZXRzLmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0Vu
ZCgpIHsgcmV0dXJuIG1fbmV3QWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICAKICAgICB2b2lk
IGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJyYXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nlcz4g
c19zaXplQ2xhc3NGb3JTaXplU3RlcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsMzAgKzI3LDE1IEBACiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAg
ICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rp
b24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK01hcmtpbmdDb25zdHJh
aW50OjpNYXJraW5nQ29uc3RyYWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBu
YW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxp
c20gcGFyYWxsZWxpc20pCiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUp
CiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdU
Rk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQot
ewotfQotCi1NYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmlu
ZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAg
IDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rp
b24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKLSAgICA6IG1fYWJicmV2
aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKLSAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQot
ICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwg
bV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5j
dGlvbikpCiAgICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKKyAgICAsIG1fcGFyYWxsZWxp
c20ocGFyYWxsZWxpc20pCiB7CiB9CiAKQEAgLTYzLDE0ICs0OCw1MSBAQCB2b2lkIE1hcmtpbmdD
b25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAot
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9v
bCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQ
YXJhbGxlbGlzbSBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZp
YXRlZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9y
LCBkaWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlz
aXRvciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdU
aW1lb3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNp
dGluZ1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVy
IHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcmVzdWx0
ID0gZXhlY3V0ZUltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291
bnRlci52aXNpdENvdW50KCk7CisgICAgbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtID0gcmVzdWx0
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVp
Y2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3Vi
bGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0
b3IpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3Ip
OworICAgIGRvUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICB7CisgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2
aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3Ry
YWludDo6ZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZp
c2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgZmluaXNoUGFyYWxsZWxXb3Jr
SW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNp
dENvdW50KCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1w
bChTbG90VmlzaXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisK
K3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0
b3ImKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI1MTc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTIgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29u
c3RyYWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIK
LSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1
ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00MywxOCArNDEsOSBAQCBjbGFzcyBN
YXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0
cmFpbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpTX0VY
UE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5KTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAg
ICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAg
ICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5
LCBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVs
KTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB+TWFya2luZ0NvbnN0cmFpbnQoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5NYXJraW5nQ29uc3RyYWludCgpOwogICAgIAog
ICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIApAQCAt
NjQsMzMgKzUzLDM5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0U3RhdHMoKTsKICAgICAKICAg
ICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50
OyB9CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGxhc3RFeGVjdXRlUGFyYWxsZWxpc20oKSBj
b25zdCB7IHJldHVybiBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc207IH0KICAgICAKLSAgICB2b2lk
IGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZShTbG90Vmlz
aXRvciYpOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdFZpc2l0
Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0KKyAgICB2aXJ0dWFs
IGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAgCisg
ICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAgCisgICAg
dm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOworICAgIHZvaWQgZmluaXNoUGFyYWxs
ZWxXb3JrKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9s
YXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAgIAorICAgIC8vIElm
IHRoaXMgaXMgU2VxdWVudGlhbCwgaXQgbWVhbnMgdGhhdCB0aGUgY29uc3RyYWludCBoYXMgdG8g
YmUgcnVuIHNlcXVlbnRpYWxseSwgd2l0aCBubyBjb25jdXJyZW50CisgICAgLy8gY29uc3RyYWlu
dHMuCisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJhbGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBDb25zdHJhaW50
UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2lu
ZGV4LgogICAgIAogICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OwogICAgIENTdHJp
bmcgbV9hYmJyZXZpYXRlZE5hbWU7CiAgICAgQ1N0cmluZyBtX25hbWU7Ci0gICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0aW1lb3V0KT4gbV9l
eGVjdXRlRnVuY3Rpb247Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9x
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IG1fdm9s
YXRpbGl0eTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9wYXJhbGxlbGlzbTsKKyAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtIHsgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCB9OyAvLyBJdCdzIGEgaGV1cmlzdGljLCB3ZSBjYW4gYmUg
d3JvbmcuIFRoaXMgZ3Vlc3Mgb25seSBhZmZlY3RzIHRoZSBmaXJzdCBydW4uCiAgICAgc2l6ZV90
IG1fbGFzdFZpc2l0Q291bnQgeyAwIH07CisgICAgTG9jayBtX2xvY2s7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5n
Q29uc3RyYWludFNldC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9w
dGlvbnMuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1ZGUg
IlZpc2l0Q291bnRlci5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIApAQCAtMzQsNTIgKzM3LDIyNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRl
eHQgewogcHVibGljOgotICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQm
IHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKKyAgICBF
eGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQpCiAgICAgICAgIDogbV9z
ZXQoc2V0KQotICAgICAgICAsIG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAsIG1fdGltZW91
dCh0aW1lb3V0KQogICAgIHsKKyAgICAgICAgbV9zZXQubV9oZWFwLmZvckVhY2hTbG90VmlzaXRv
cigKKyAgICAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAg
ICAgICBtX3Zpc2l0Q291bnRlcnMuYXBwZW5kKFZpc2l0Q291bnRlcih2aXNpdG9yKSk7CisgICAg
ICAgICAgICB9KTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZygpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZzsKKyAgICAgICAg
Zm9yIChjb25zdCBWaXNpdENvdW50ZXImIHZpc2l0Q291bnRlciA6IG1fdmlzaXRDb3VudGVycykg
eworICAgICAgICAgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAorICAgIGVudW0gU2NoZWR1
bGVyUHJlZmVyZW5jZSB7CisgICAgICAgIFBhcmFsbGVsV29ya0ZpcnN0LAorICAgICAgICBOZXh0
Q29uc3RyYWludEZpcnN0CisgICAgfTsKKworICAgIC8vIHBpY2tOZXh0KCkgaXMgY2FsbGVkIHdo
aWxlIGEgbG9jayBpcyBoZWxkLCBzbyBpdCBjYW4gcHJldGVuZCBsaWtlIGl0J3MgYmVpbmcgY2Fs
bGVkIGZyb20gdGhlIG1haW4KKyAgICAvLyB0aHJlYWQuIEZvciBleGFtcGxlLCBpdCdzIHRvdGFs
bHkgc2FmZSBmb3IgdGhhdCBsYW1iZGEgdG8gY2xvc2Ugb3ZlciB0aGUgc3RhY2suCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5j
ZSBwcmVmZXJlbmNlLCBjb25zdCBGdW5jJiBwaWNrTmV4dCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBkaWRWaXNpdFNvbWV0aGluZygpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKKyAgICAgICAg
bV9zZXQubV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAgICAgICAgICAgIFsmXSAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOworICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbmRleFRvUnVuOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeVBhcmFsbGVsV29yayA9IFsmXSAoKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gbV90b0V4ZWN1dGVJblBhcmFsbGVs
LmZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3Jr
TW9kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlOZXh0Q29uc3RyYWlu
dCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gcGlja1Jlc3VsdCA9IHBpY2tOZXh0KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXBpY2tSZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9l
eGVjdXRlZC5nZXQoKnBpY2tSZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYg
Y29uc3RyYWludCA9ICptX3NldC5tX3NldFsqcGlja1Jlc3VsdF07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RyYWludC5wYXJhbGxlbGlzbSgpID09IENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmFwcGVuZCgqcGlja1Jlc3Vs
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gKnBpY2tSZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodHJ5UGFyYWxsZWxXb3JrKCkgfHwgdHJ5TmV4dENvbnN0cmFpbnQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0cnlOZXh0Q29uc3RyYWludCgpIHx8IHRyeVBhcmFsbGVsV29yaygpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9udW1BY3RpdmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFueSB3YWl0aW5nIGNvdWxkIGJlIHJl
cGxhY2VkIHdpdGgganVzdCBydW5uaW5nIHRoZSBTbG90VmlzaXRvci4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJIHdvbmRlciBpZiB0aGF0IHdvdWxkIGJlIHByb2ZpdGFibGUuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX2xvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX251bUFjdGl2ZVRocmVhZHMrKzsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50
aWFsOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTWFya2luZ0Nv
bnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl07CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoZG9QYXJhbGxlbFdvcmtNb2Rl
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludC5kb1BhcmFsbGVsV29yayh2aXNp
dG9yKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmdldChp
bmRleFRvUnVuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50
LmZpbmlzaFBhcmFsbGVsV29yayh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJh
bGxlbC50YWtlRmlyc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KHVuc2lnbmVkIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBpbmRleFRvUnVuOyB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmNsZWFy
KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9leGVj
dXRlZC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBh
cmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRl
eFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBh
cmFsbGVsU2V0LnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcy0tOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5KQorICAg
ICAgICAgICAgZXhlY3V0ZSgqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0pOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5iaXRDb3VudCgpKTsKICAgICB9
CiAgICAgCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCB0aW1lcyBvdXQuCi0gICAgYm9vbCBk
cmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCisgICAgdm9pZCBkcmFpbihCaXRWZWN0b3ImIHVu
ZXhlY3V0ZWQpCiAgICAgewotICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IHVuZXhlY3V0ZWQp
IHsKLSAgICAgICAgICAgIGV4ZWN1dGUoaW5kZXgpOwotICAgICAgICAgICAgdW5leGVjdXRlZC5j
bGVhcihpbmRleCk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGltZU91dCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgICAgICBhdXRvIGVuZCA9
IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZXhlY3V0ZSgKKyAgICAgICAgICAgIE5leHRDb25zdHJhaW50Rmly
c3QsCisgICAgICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAg
ICAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyQWxsKCk7CiAgICAgfQogICAgIAotICAg
IGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZWQu
Z2V0KGluZGV4KTsgfQorICAgIHZvaWQgY29udmVyZ2UoY29uc3QgVmVjdG9yPE1hcmtpbmdDb25z
dHJhaW50Kj4mIG9yZGVyKQorICAgIHsKKyAgICAgICAgaWYgKGRpZFZpc2l0U29tZXRoaW5nKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAob3JkZXIuaXNFbXB0
eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGluZGV4
ID0gMDsKIAotICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCisgICAgICAgIC8vIFdlIHdh
bnQgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgY29uc3RyYWludCBzZXF1ZW50aWFsbHkgaWYgd2UgdGhp
bmsgaXQgd2lsbCBxdWlja2x5IGdpdmUgdXMgYQorICAgICAgICAvLyByZXN1bHQuIElmIHdlIHJh
biBpdCBpbiBwYXJhbGxlbCB0byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3ZSBtaWdodCBlbmQg
dXAgaGF2aW5nIHRvIHdhaXQgZm9yCisgICAgICAgIC8vIHRob3NlIG90aGVyIGNvbnN0cmFpbnRz
IHRvIGZpbmlzaCwgd2hpY2ggd291bGQgYmUgYSB3YXN0ZSBvZiB0aW1lIHNpbmNlIGR1cmluZyBj
b252ZXJnZW5jZSBpdCdzCisgICAgICAgIC8vIGVtcGlyaWNhbGx5IG1vc3Qgb3B0aW1hbCB0byBy
ZXR1cm4gdG8gZHJhaW5pbmcgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsu
IE1vc3QKKyAgICAgICAgLy8gY29uc3RyYWludHMgZG9uJ3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9z
dCBvZiB0aGUgdGltZSwgYW5kIHdoZW4gdGhleSBkbyBnZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQK
KyAgICAgICAgLy8gdG8gZ2VuZXJhdGUgZW5vdWdoIG9mIGl0IHRvIGZlZWQgYSBkZWNlbnQgZHJh
aW5pbmcgY3ljbGUuIFRoZXJlZm9yZSwgcGF1c2UgdGltZXMgYXJlIGxvd2VzdCBpZgorICAgICAg
ICAvLyB3ZSBnZXQgdGhlIGhlY2sgb3V0IG9mIGhlcmUgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQg
Z2VuZXJhdGVzIHdvcmsuIEkgdGhpbmsgdGhhdCBwYXJ0IG9mIHdoYXQKKyAgICAgICAgLy8gbWFr
ZXMgdGhpcyBvcHRpbWFsIGlzIHRoYXQgd2UgYWxzbyBuZXZlciBhYm9ydCBydW5uaW5nIGEgY29u
c3RyYWludCBlYXJseSwgc28gd2hlbiB3ZSBkbyBydW4KKyAgICAgICAgLy8gb25lLCBpdCBoYXMg
YW4gb3Bwb3J0dW5pdHkgdG8gZ2VuZXJhdGUgYXMgbXVjaCB3b3JrIGFzIGl0IHBvc3NpYmx5IGNh
bi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2ltaWxhciByZWFzb25pbmcgYXBwbGllcyB0byBj
b25zdHJhaW50cyB0aGF0IHRlbmQgdG8gcmV0dXJuIENvc250cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwKKyAgICAgICAgLy8gZnJvbSBleGVjdXRlLiBUaG9zZSBjb25zdHJhaW50cyB0eXBpY2Fs
bHkgaGF2ZSBhIHZlcnkgZmFzdC1ydW5uaW5nIGV4ZWN1dGUgZnVuY3Rpb24sIHdoaWNoIHRoZW4K
KyAgICAgICAgLy8gb2ZmbG9hZHMgYWxtb3N0IGFsbCBvZiB0aGUgd29yayB0byBhIHBhcmFsbGVs
IHdvcmtlci4gSW4gdGhhdCBjYXNlLCBpdCBtYWtlcyBzZW5zZSB0byBydW4gdGhlCisgICAgICAg
IC8vIGV4ZWN1dGUgZnVuY3Rpb24gc2VxdWVudGlhbGx5LgorICAgICAgICBpZiAob3JkZXJbaW5k
ZXhdLT53b3JrRXN0aW1hdGUobV9zZXQubV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpCisg
ICAgICAgICAgICB8fCBvcmRlcltpbmRleF0tPmxhc3RFeGVjdXRlUGFyYWxsZWxpc20oKSA9PSBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgICAgICBleGVjdXRlKCpv
cmRlcltpbmRleCsrXSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbC5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAmJiAob3JkZXIuaXNFbXB0eSgpIHx8
IGRpZFZpc2l0U29tZXRoaW5nKCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZXhlY3V0ZSgKKyAgICAgICAgICAgIFBhcmFsbGVsV29ya0Zp
cnN0LAorICAgICAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAg
ICAgICAgICAgICAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gb3JkZXIuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiBv
cmRlcltpbmRleCsrXS0+aW5kZXgoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiAgICAgewotICAg
ICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0U29t
ZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAg
ICAgIGlmIChtX2V4ZWN1dGVkLmdldChjb25zdHJhaW50LmluZGV4KCkpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVs
aXNtID0gY29uc3RyYWludC5leGVjdXRlKAorICAgICAgICAgICAgbV9zZXQubV9oZWFwLmNvbGxl
Y3RvclNsb3RWaXNpdG9yKCkpOworICAgICAgICBkaWRFeGVjdXRlKHBhcmFsbGVsaXNtLCBjb25z
dHJhaW50LmluZGV4KCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6CisgICAgdm9pZCBkaWRFeGVj
dXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgICAgIGlmIChwYXJhbGxl
bGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgICAgICBt
X3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIG1fdG9FeGVj
dXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAogICAg
IE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9y
OwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwogICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVk
OwotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07CisgICAgRGVxdWU8dW5z
aWduZWQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgQml0VmVjdG9yIG1fdG9FeGVj
dXRlSW5QYXJhbGxlbFNldDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBtX3RvRXhlY3V0ZVNl
cXVlbnRpYWxseTsKKyAgICBMb2NrIG1fbG9jazsKKyAgICBDb25kaXRpb24gbV9jb25kaXRpb247
CisgICAgdW5zaWduZWQgbV9udW1BY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIFZlY3RvcjxWaXNp
dENvdW50ZXIsIDE2PiBtX3Zpc2l0Q291bnRlcnM7CiB9OwogCi1NYXJraW5nQ29uc3RyYWludFNl
dDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdD
b25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsKIH0KIApAQCAt
MTA3LDE4ICsyODQsMTkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlkU3RhcnRNYXJr
aQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlvbiwgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFk
ZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHks
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQoc3RkOjptYWtl
X3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFkZChzdGQ6
Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVk
TmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBwYXJh
bGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAor
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCiAgICAg
OjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
biwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5IHZvbGF0aWxpdHksCisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVs
aXNtKQogewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZN
b3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0
aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOwor
ICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3Zl
KGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9u
KSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgcGFyYWxs
ZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKApAQCAtMTMxLDkg
KzMwOSw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBtX3NldC5hcHBl
bmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0
aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252
ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAg
IGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDkgKzMyNiw5IEBAIGJv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK2Jvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7Ci0gICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlzLCB2aXNp
dG9yLCB0aW1lb3V0KTsKKyAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRo
aXMpOwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlvbiA9IG1faXRlcmF0aW9uKys7CiAgICAg
CkBAIC0xNTksMTYgKzMzNywxNCBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRl
Q29udmVyCiAKICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFpbnRzIHRoYXQgd2UgaGF2
ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0aGVuCiAgICAgLy8gd2Ug
c2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFp
bihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBleGVjdXRp
b25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKICAgICAKICAgICAvLyBGaXJzdCBp
dGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlrZWx5
IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzIG90aGVyCiAgICAgLy8gdGhhbiByb290cy4KICAg
ICBpZiAoaXRlcmF0aW9uID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBp
ZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3RocykpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRl
ZE91dGdyb3d0aHMpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBwcmVmZXJyaW5nIHRo
ZSBvdXRncm93dGggY29uc3RyYWludHMgLSB0aGUgb25lcyB0aGF0IG5lZWQgdG8gYmUgZml4cG9p
bnRlZAogICAgIC8vIGV2ZW4gaW4gYSBzdG9wLXRoZS13b3JsZCBHQyAtIHVudGlsIHRoZXkgc3Rv
cCBwcm9kdWNpbmcuIFRoZXkgaGF2ZSBhIHRlbmRlbmN5IHRvIGdvIHRvdGFsbHkKQEAgLTIxNSwz
MyArMzkxLDE2IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAg
ICAgICAgICAgIHJldHVybiBhLT52b2xhdGlsaXR5KCkgPiBiLT52b2xhdGlsaXR5KCk7CiAgICAg
ICAgIH0pOwogICAgIAotICAgIGZvciAoTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgOiBt
X29yZGVyZWQpIHsKLSAgICAgICAgc2l6ZV90IGkgPSBjb25zdHJhaW50LT5pbmRleCgpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkRXhlY3V0ZShpKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBleGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoaSk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBPbmNlIHdlJ3JlIGluIGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0
aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJraW5nIGhhcHBlbiBhbnl0aW1lCi0gICAgICAg
IC8vIHdlIGZpbmQgd29yay4KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGV4
ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBpZiB0aGF0J3MK
LSAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVuIGJldHRlciBpcyB0aGlzOgot
ICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5pbmcuCi0gICAg
ICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdzLCByZXR1cm4u
Ci0gICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMgotICAgICAgICBpZiAoZXhl
Y3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KKyAgICBleGVjdXRpb25Db250ZXh0LmNvbnZlcmdlKG1fb3JkZXJlZCk7CiAg
ICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UndmUgY29udmVy
Z2VkLiBUaGF0IGhhcHBlbnMgaWYgd2UgZGlkIG5vdCB2aXNpdCBhbnl0aGluZy4KKyAgICByZXR1
cm4gIWV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAogdm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBjb25zdHJh
aW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICBjb25zdHJh
aW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAg
ICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJh
aW50U2V0IHsKIHB1YmxpYzoKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIE1hcmtp
bmdDb25zdHJhaW50U2V0KEhlYXAmKTsKICAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKICAg
ICAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwpAQCAtNDEsMTUgKzQxLDE3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAg
ICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwg
Y29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7
CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisg
ICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKICAgICAgICAgOjpGdW5jdGlv
bjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsK
KyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIHZvaWQg
YWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIApAQCAtNjAsOSAr
NjIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0
ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBub25lIG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRo
aXMKICAgICAvLyBhc3N1bWVzIHRoYXQgeW91J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQg
ZHJhaW5lZCBmcm9tIHRoZXJlLgotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKAotICAgICAg
ICBTbG90VmlzaXRvciYsCi0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25p
Y1RpbWU6OmluZmluaXR5KCkpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNp
dG9yJik7CiAgICAgCiAgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQg
YW55IHNoZW5hbmlnYW5zLgogICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOwpAQCAt
NzEsMTAgKzcxLDExIEBAIHByaXZhdGU6CiAgICAgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKICAg
ICBmcmllbmQgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKICAgICAKLSAgICBib29sIGV4ZWN1dGVD
b252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAg
IGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYpOwogICAgIAotICAgIGJv
b2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lLCBCaXRWZWN0b3ImIHVuZXhlY3V0
ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICBi
b29sIGRyYWluKFNsb3RWaXNpdG9yJiwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3Im
IGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CiAgICAgCisgICAgSGVhcCYgbV9o
ZWFwOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKICAgICBCaXRWZWN0b3IgbV91
bmV4ZWN1dGVkT3V0Z3Jvd3RoczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdD
b25zdHJhaW50Pj4gbV9zZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFx
dWVSb290U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3Bh
cXVlUm9vdFNldC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9PcGFxdWVSb290U2V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBPcGFxdWVSb290U2V0IHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShPcGFxdWVSb290U2V0KTsKLXB1YmxpYzoKLSAgICBPcGFxdWVSb290U2V0KCkK
LSAgICAgICAgOiBtX2xhc3RRdWVyaWVkUm9vdChudWxscHRyKQotICAgICAgICAsIG1fY29udGFp
bnNMYXN0UXVlcmllZFJvb3QoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgY29udGFp
bnModm9pZCogcm9vdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChyb290ICE9IG1fbGFzdFF1
ZXJpZWRSb290KSB7Ci0gICAgICAgICAgICBtX2xhc3RRdWVyaWVkUm9vdCA9IHJvb3Q7Ci0gICAg
ICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gbV9yb290cy5jb250YWlucyhyb290
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdDsK
LSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fcm9vdHMuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAg
ICAgICAgbV9yb290cy5jbGVhcigpOwotICAgICAgICBtX2xhc3RRdWVyaWVkUm9vdCA9IG51bGxw
dHI7Ci0gICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICBib29sIGFkZCh2b2lkKiByb290KQotICAgIHsKLSAgICAgICAgaWYgKHJvb3QgPT0gbV9s
YXN0UXVlcmllZFJvb3QpCi0gICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0g
dHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50cnk7Ci0gICAg
fQotCi0gICAgaW50IHNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMu
c2l6ZSgpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5iZWdpbigpOwotICAgIH0K
LQotICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fcm9vdHMuZW5kKCk7Ci0gICAgfQotCi0KLXByaXZhdGU6Ci0gICAg
SGFzaFNldDx2b2lkKj4gbV9yb290czsKLSAgICBtdXRhYmxlIHZvaWQqIG1fbGFzdFF1ZXJpZWRS
b290OwotICAgIG11dGFibGUgYm9vbCBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3
dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
T3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5lclR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitjbGFz
cyBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIgOiBwdWJsaWMgU2hhcmVkVGFzazxJbm5lclR5cGUoKT4g
eworcHVibGljOgorICAgIFBhcmFsbGVsU291cmNlQWRhcHRlcihSZWZQdHI8U2hhcmVkVGFzazxP
dXRlclR5cGUoKT4+IG91dGVyU291cmNlLCBjb25zdCBVbndyYXBGdW5jJiB1bndyYXBGdW5jKQor
ICAgICAgICA6IG1fb3V0ZXJTb3VyY2Uob3V0ZXJTb3VyY2UpCisgICAgICAgICwgbV91bndyYXBG
dW5jKHVud3JhcEZ1bmMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBJbm5lclR5cGUgcnVuKCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKG1faW5uZXJTb3VyY2UpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoSW5uZXJUeXBlIHJlc3VsdCA9IG1faW5uZXJTb3VyY2UtPnJ1bigpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIG1faW5uZXJT
b3VyY2UgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2lubmVyU291cmNlID0gdW53cmFwRnVuYyhtX291dGVyU291cmNlLT5ydW4oKSk7CisgICAg
ICAgIH0gd2hpbGUgKG1faW5uZXJTb3VyY2UpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQ
dHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG1fb3V0ZXJTb3VyY2U7CisgICAgUmVmUHRyPFNo
YXJlZFRhc2s8SW5uZXJUeXBlKCk+PiBtX2lubmVyU291cmNlOworICAgIExvY2sgbV9sb2NrOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5lclR5cGUsIHR5
cGVuYW1lIFVud3JhcEZ1bmM+CitSZWY8UGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwg
SW5uZXJUeXBlLCBVbndyYXBGdW5jPj4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0
cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMm
IHVud3JhcEZ1bmMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXJhbGxlbFNvdXJjZUFk
YXB0ZXI8T3V0ZXJUeXBlLCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+KG91dGVyU291cmNlLCB1bndy
YXBGdW5jKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5j
dGlvbiwKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFy
YWxsZWxpc20gcGFyYWxsZWxpc20pCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFi
YnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKQor
ICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQoreworfQor
CitTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248ZG91Ymxl
KFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNt
KQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZN
b3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0
aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQoreworfQorCitTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKwor
ZG91YmxlIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
bih2aXNpdG9yKTsKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2V4ZWN1
dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpT
ZXF1ZW50aWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNpbXBsZU1hcmtpbmdD
b25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7Cisg
ICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAg
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xv
dFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKKyAg
ICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKTsKKyAg
ICAKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92
ZXJyaWRlOworICAgIAorcHJpdmF0ZToKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0
ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90
VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw5ICs5OCw3IEBAIFNsb3RWaXNpdG9y
Ojp+U2xvdFZpc2l0b3IoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQog
ewotICAgIGlmIChoZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6
RnVsbCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAv
LyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkgbm93LgotICAgIGVsc2UKKyAgICBpZiAoaGVhcCgpLT5j
b2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pCiAgICAgICAgIHJlc2V0
KCk7CiAKICAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSB2bSgpLmhlYXBQcm9m
aWxlcigpKQpAQCAtMTExLDcgKzEwOSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFy
a2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VCghbV9vcGFxdWVSb290cy5zaXplKCkpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKICAgICBt
X3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7CkBA
IC0yNzcsNyArMjc0LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlND
ZQogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBK
U0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNl
bGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFTU0VSVCghY2Vs
bC0+aXNaYXBwZWQoKSk7CiAgICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKQEAgLTM0
Niw3ICszNDMsNyBAQCBwcml2YXRlOgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNl
bGwpKTsKICAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRo
aXMsIGNlbGwpOwogICAgIApAQCAtNTYxLDE3ICs1NTgsMTYgQEAgYm9vbCBTbG90VmlzaXRvcjo6
ZGlkUmVhY2hUZXJtaW5hdGlvbigpCiAgICAgcmV0dXJuIGRpZFJlYWNoVGVybWluYXRpb24obG9j
a2VyKTsKIH0KIAotYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBB
YnN0cmFjdExvY2tlciYpCitib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKQotICAg
ICAgICAmJiAhbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAg
JiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKLSAgICAgICAg
JiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgIHJldHVy
biAhbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKKyAgICAgICAgJiYgIWhh
c1dvcmsobG9ja2VyKTsKIH0KIAogYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBBYnN0
cmFjdExvY2tlciYpCiB7Ci0gICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJr
U3RhY2stPmlzRW1wdHkoKQorICAgIHJldHVybiAhaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2hl
YXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICB8fCAhbV9o
ZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwogfQogCkBAIC01ODMsMTIg
KzU3OSwxNCBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAg
ICBib29sIGlzQWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgUmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gYm9udXNUYXNrOworICAgICAgICAK
ICAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2lu
Z011dGV4KTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFy
a2luZ011dGV4KTsKICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSkKICAgICAgICAgICAgICAgICBt
X2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICAgICAgbV9o
ZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKys7Ci0KKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHNoYXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbikgewogICAgICAg
ICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFw
c2VkKHRpbWVvdXQpKQpAQCAtNjI5LDI4ICs2MjcsNTcgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNp
dG9yOjpTaGFyZWREcmFpblJlcwogCiAgICAgICAgICAgICAgICAgYXV0byBpc1JlYWR5ID0gWyZd
ICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yayhsb2NrZXIp
CisgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrCiAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0OwogICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJr
aW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGlt
ZW91dCwgaXNSZWFkeSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFo
YXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fYm9udXNWaXNp
dG9yVGFzaykKKyAgICAgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbV9oZWFwLm1fYm9udXNW
aXNpdG9yVGFzazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9oZWFw
Lm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBm
b3JFYWNoTWFya1N0YWNrKAotICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0
YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVh
bFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xv
YmFsU3RhY2soc3RhY2spLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVy
T2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghYm9udXNUYXNrICYmIGlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIGZvckVhY2hNYXJrU3RhY2soCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0
YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9oZWFw
Lm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5t
X251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgaWYgKGJvbnVzVGFzaykgeworICAgICAg
ICAgICAgYm9udXNUYXNrLT5ydW4oKnRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBGSVhNRTogSWRlYWxseSwgd2Ugd291bGQgbm90IGhhdmUgdG8gZG8gdGhpcy4gSG93ZXZlciwg
dGhlIHBhcmFsbGVsIG1hcmtpbmcgYWxnb3JpdGhtIHdpbGwKKyAgICAgICAgICAgIC8vIGdldCBj
b25mdXNlZCBpZiB3ZSBpbml0aWF0ZSBpdCB3aXRoIHRoZSBoZWxwZXIgdmlzaXRvcnMgaGF2aW5n
IGFueXRoaW5nIGluIHRoZWlyIHN0YWNrcy4KKyAgICAgICAgICAgIC8vIEFsc28sIHRoaXMgcHJv
dGVjdHMgYnVncyB0aGF0IGludm9sdmUgcmFjZXMgYmV0d2VlbiB2aXNpdENoaWxkcmVuIGFuZCBv
bmUgb2YgdGhlCisgICAgICAgICAgICAvLyBjb25zdHJhaW50cy4KKyAgICAgICAgICAgIC8vZG9u
YXRlQWxsKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGlsbCBi
ZSBydW5uaW5nLCBhbmQgbWF5IHJ1biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRoZSB0
YXNrCisgICAgICAgICAgICAvLyBvdXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFyb3Vu
ZCB0cnlpbmcgdG8gcnVuIHRoZSB0YXNrLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAobV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisgICAg
ICAgICAgICAgICAgICAgIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOworICAg
ICAgICAgICAgICAgIGJvbnVzVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9oZWFw
Lm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHkoKSk7
CisgICAgICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgaXNBY3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAgLTY3Niw5ICs3MDMsMTMgQEAgU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgICAgICByZXR1cm4gZHJhaW5J
blBhcmFsbGVsKHRpbWVvdXQpOwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVh
cC5tX21hcmtpbmdNdXRleCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9u
YXRlQWxsKGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3YWl0
Rm9yVGVybWluYXRpb24odGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJl
c3VsdCBTbG90VmlzaXRvcjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91
dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7
CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAg
ICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkBAIC03MTEsNjEgKzc0
Miw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFsbChjb25zdCBBYnN0cmEKICAgICBtX2hl
YXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xv
dFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm9vdCkKLXsKLSAgICBpZiAoIXJvb3QpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vycygp
ID09IDEpIHsKLSAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0
LgotICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGgg
dGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgotICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJl
IHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAgbWVyZ2VPcGFx
dWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotfQot
Ci1ib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QK
LXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NF
UlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3Rz
LmNvbnRhaW5zKHJvb3QpOwotfQotCi1UcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFx
dWVSb290VHJpU3RhdGUodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAg
ICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotICAgIAotICAgIGlmIChtX29wYXF1ZVJvb3RzLmNv
bnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgIGlmICht
X2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRydWVU
cmlTdGF0ZTsKLSAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKLX0KLQotdm9pZCBTbG90VmlzaXRv
cjo6bWVyZ2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotCi12b2lkIFNs
b3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKLXsKLSAgICBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1
ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVS
b290cygpOwotfQotICAgIAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAgICBpZiAo
IW1faXNJblBhcmFsbGVsTW9kZSkgewpAQCAtNzg1LDE2ICs3NjEsNiBAQCB2b2lkIFNsb3RWaXNp
dG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uCiAgICAgZHJhaW4odGltZW91dCk7CiB9CiAKLXZv
aWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQotewotICAgIHsKLSAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAg
ICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCi0gICAgICAgICAgICBtX2hlYXAu
bV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgfQotICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIo
KTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1faGVh
cC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhh
cnZlc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIYW5kbGVU
eXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtTdGFj
ay5oIgotI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKICNpbmNsdWRlICJWaXNpdFJhY2VLZXku
aCIKICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KQEAgLTk1LDEwICs5NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkKEpTVmFsdWUpOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
SlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9p
ZCopOworICAgIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwotICAgIFRyaVN0
YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKKyAgICBib29sIGNv
bnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAKICAgICBib29sIGlzRW1wdHkoKSB7IHJl
dHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5
KCk7IH0KIApAQCAtMTIxLDYgKzExOSw4IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZERyYWluUmVz
dWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1l
OjppbmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWxQYXNz
aXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7
CisgICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQgd2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25p
Y1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgLy8gQXR0
ZW1wdHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQgb2YgZHJhaW5pbmcgdGhhdCBpbnZvbHZlcyBv
bmx5IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBkYXRhLiBUaGlzCiAgICAgLy8gaXMgbGlrZWx5
IHRvIGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3IgbGVzcyB0aGFuIHRoYXQuIEl0IHdpbGwgdXN1
YWxseSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQgbWF5CkBAIC0xOTQsMTAgKzE5NCw2IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsK
ICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLQotICAgIHZvaWQgbWVyZ2VPcGFx
dWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpT
Q2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOwpAQCAtMjE1LDcg
KzIxMSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNr
OwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAgIE9wYXF1ZVJvb3RTZXQg
bV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2li
bGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVS
b290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2RlLgogICAgIAogICAg
IHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTM2LDYgKzEzNiwyMCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFZhCiAgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CiB9CiAKK2lubGluZSB2b2lk
IFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIXB0cikK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQorICAgICAg
ICByZXR1cm47CisgICAgaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmFkZChwdHIpOworfQorCitpbmxp
bmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QK
K3sKKyAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7Cit9CisK
IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
IHNpemUpCiB7CiAgICAgaWYgKG1faXNGaXJzdFZpc2l0KSB7CkBAIC0xNTksMTIgKzE3MywxMiBA
QCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAogCiBpbmxpbmUgVk0mIFNs
b3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4g
Km1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYwLDQz
IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gU3Vi
c3BhY2U6OnBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVi
bGljIFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgcHVibGljOgorICAgICAg
ICBUYXNrKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2FsbG9j
YXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
TWFya2VkQWxsb2NhdG9yKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBNYXJrZWRBbGxvYWN0
b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgICAgICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRvckluU3Vic3BhY2Uo
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICAgICAg
TG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2so
bV9maXJzdEFsbG9jYXRvcikpOworfQorCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6
SGFuZGxlKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxvY2F0
b3IqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4oCisgICAgICAgIHBhcmFsbGVsQWxsb2NhdG9yU291
cmNlKCksCisgICAgICAgIFtdIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVmUHRy
PFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAgICAgICAgIGlmICgh
YWxsb2NhdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
cmV0dXJuIGFsbG9jYXRvci0+cGFyYWxsZWxOb3RFbXBydHlCbG9ja1NvdXJjZSgpOworICAgICAg
ICB9KTsKK30KKwogTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2xvdyhz
aXplX3Qgc2l6ZSkKIHsKICAgICBzaXplX3QgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNsYXNz
VG9JbmRleChzaXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAko
cmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtODEsMTcgKzgxLDI0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5jJik7
CiAgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gcGFyYWxs
ZWxBbGxvY2F0b3JTb3VyY2UoKTsKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgog
ICAgIHZvaWQgZm9yRWFjaE1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2so
Y29uc3QgRnVuYyYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpI
YW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKTsKKyAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExhcmdlQWxsb2NhdGlv
bihjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2
b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNTIgQEAgdm9pZCBTdWJzcGFjZTo6
Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hN
YXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGNsYXNzIFRhc2sg
OiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgICAg
ICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQorICAgICAgICAgICAgLCBtX2Jsb2NrU291cmNl
KHN1YnNwYWNlLnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpKQorICAgICAgICAg
ICAgLCBtX2Z1bmMoZnVuYykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3Vy
Y2UtPnJ1bigpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2VsbCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQg
a2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVu
Yyh2aXNpdG9yLCBjZWxsLCBraW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbmVl
ZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9zdWJzcGFjZS5mb3JFYWNo
TGFyZ2VBbGxvY2F0aW9uKAorICAgICAgICAgICAgICAgIFsmXSAoTGFyZ2VBbGxvY2F0aW9uKiBh
bGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uLT5pc01hcmtl
ZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGFsbG9jYXRpb24t
PmNlbGwoKSwgbV9hdHRyaWJ1dGVzLmNlbGxLaW5kKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBTdWJzcGFjZSYgbV9zdWJz
cGFjZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+
IG1fYmxvY2tTb3VyY2U7CisgICAgICAgIEZ1bmMgbV9mdW5jOworICAgICAgICBib29sIG1fbmVl
ZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zIHsgdHJ1ZSB9OworICAgIH07CisgICAgCisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzLCBmdW5jKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CiB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYgZnVu
YykKIHsKICAgICBmb3JFYWNoTWFya2VkQmxvY2soCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9WaXNpdENvdW50ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmlzaXRDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBW
aXNpdENvdW50ZXIoKSB7IH0KKyAgICAKKyAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgICAgIDogbV92aXNpdG9yKCZ2aXNpdG9yKQorICAgICAgICAsIG1faW5pdGlh
bFZpc2l0Q291bnQodmlzaXRvci52aXNpdENvdW50KCkpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92aXNp
dG9yLT52aXNpdENvdW50KCkgLSBtX2luaXRpYWxWaXNpdENvdW50OworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBzaXpl
X3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAko
cmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdU
aW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9UaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFZpc2l0
aW5nVGltZW91dCB7Ci1wdWJsaWM6Ci0gICAgVmlzaXRpbmdUaW1lb3V0KCkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIFZpc2l0aW5nVGltZW91dChTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCBk
aWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fZGlk
VmlzaXRTb21ldGhpbmcoZGlkVmlzaXRTb21ldGhpbmcpCi0gICAgICAgICwgbV92aXNpdENvdW50
QmVmb3JlKHZpc2l0b3IudmlzaXRDb3VudCgpKQotICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IHZpc2l0Q291bnQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdENvdW50
KCkgLSBtX3Zpc2l0Q291bnRCZWZvcmU7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRWaXNpdFNvbWV0
aGluZyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2RpZFZpc2l0U29tZXRoaW5nIHx8IHZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgc2hvdWxkVGltZU91dChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKSAmJiBoYXNFbGFwc2Vk
KG1fdGltZW91dCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBib29sIG1fZGlkVmlzaXRT
b21ldGhpbmcgeyBmYWxzZSB9OwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnRCZWZvcmUgeyAwIH07
Ci0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lv
biAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxp
emVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5p
c01hcmtlZENvbmN1cnJlbnRseShtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisg
ICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXND
ZWxsKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAoIXdl
YWtIYW5kbGVPd25lci0+aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+
Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29u
dGV4dCgpLCB2aXNpdG9yKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwMSwxNCArMTEwMSwx
NCBAQCBib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKCkKICAgICAvLyBoYXMgYW55IGxh
cmdlIHByb3BlcnR5IG5hbWVzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTczMzQKICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAg
ICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1
cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQo
KSkpCisgICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0
KCkgfHwgSGVhcDo6aXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAogYm9v
bCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlm
ICghaXNDaGVhcER1cmluZ0dDKCkpCi0gICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZENvbmN1
cnJlbnRseSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKHRoaXMpOwogICAg
IAogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCiAJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRjUyNjkxRjQy
MUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi87IH07CiAJCTBGMzBCQTkwMUU3ODcw
OEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxW
ZXJzaW9uLmNwcCAqLzsgfTsKKwkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgKi87IH07CiAJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4
RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi87IH07CiAJCTBGNUJG
MTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3NDFGMjNENDlBMDAyOUQ5MUQgLyogR2ln
YWNhZ2UuY3BwICovOyB9OwogCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJp
bnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAqLzsg
fTsKQEAgLTE4MSw2ICsxODIsOCBAQAogCQkwRjMwQkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9n
Z2luZ0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hh
c2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMEJBOEUxRTc4NzA4RTAw
MkNBODQ3IC8qIExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBC
QThGMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVu
dFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1OTFG
Q0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJFQjRBIC8qIExvY2tBbGdvcml0aG1J
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG1JbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQwMDNDRkVGMiAvKiBTdHJpbmdW
ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTc4Nyw2ICs3OTAsOCBAQAogCQkJCTBGOEYyQjkwMTcyRTAwRjAw
MDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUxQTgyNUEw
MDQxMjNGRiAvKiBDb21waWxlci5oICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlBMkJCQyAv
KiBDb21wbGV0aW9uSGFuZGxlci5oICovLAorCQkJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAv
KiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCisJCQkJMEYzMENCNTkxRkNERjEzMzAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8sCiAJCQkJMEZEQjY5OEQxQjdDNjQzQTAw
MEMxMDc4IC8qIENvbmRpdGlvbi5oICovLAogCQkJCUUzOEM0MTI2MUVCNEUwNjgwMDQyOTU3RCAv
KiBDUFVUaW1lLmNwcCAqLywKIAkJCQlFMzhDNDEyNzFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGlt
ZS5oICovLApAQCAtMTQxMyw2ICsxNDE4LDcgQEAKIAkJCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0
NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyQjFGM0Q0ODYw
MDBDNzQ5NTAgLyogUGVyc2lzdGVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYx
NzUyQzFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudERlY29kZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJEMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJz
aXN0ZW50RW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM2MjE2NURCQTczMDA1
QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1
RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5o
CShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0NiwxMSArMzQ2LDE2IEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBudWxs
RGVwZW5kZW5jeSgKICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA4Pjo6dHlwZSogPSBudWxscHRyPgor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5j
eShUIHZhbHVlKQogewogICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDY0X3QgY29w
eSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUpOworICAgIHVuaW9uIHsKKyAgICAgICAg
dWludDMyX3QgY29weTsKKyAgICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5ID0g
MDsKKyAgICB1LnZhbHVlID0gdmFsdWU7CiAjaWYgQ1BVKEFSTTY0KQogICAgIC8vIENyZWF0ZSBh
IG1hZ2ljYWwgemVybyB2YWx1ZSB0aHJvdWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0
YXRpb24KICAgICAvLyBpc24ndCB2aXNpYmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBp
cyB0aGVuIHVzYWJsZSBhcyBhbiBvZmZzZXQgaW4KQEAgLTM2Myw4MCArMzY4LDIwIEBAIEFMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmEKICAgICAvLyBvciBhbiBhY3F1aXJl
IGxvYWQuCiAgICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgogICAg
ICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIo
Y29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2VsaWYgQ1BVKEFSTSkKICAg
ICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCiAgICAgICAgIDogW2RlcGVu
ZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAg
ICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxzZQogICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMg
bmVlZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KICAgICBsb2FkTG9hZEZlbmNlKCk7CiAgICAg
ZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOworICAgIFVOVVNFRF9QQVJB
TSh1LmNvcHkpOwogI2VuZGlmCiAgICAgcmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKLS8vIEZJWE1F
OiBUaGlzIGNvZGUgaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgb3RoZXIgZGVwZW5kZW5jeSgp
IG92ZXJsb2FkLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
OTQwNQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVv
ZihUKSA9PSA0Pjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRl
cGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQz
Ml90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQp
Ci0gICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6
IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkp
OwotI2VsaWYgQ1BVKEFSTSkKLSAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtp
bl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBb
aW5dICJyIihjb3B5KSk7Ci0jZWxzZQotICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRl
bmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVw
ZW5kZW5jeTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHNpemVvZihUKSA9PSAyPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBl
bmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0
aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSAxPjo6dHlwZSogPSBudWxscHRyPgot
QUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBEZXBlbmRlbmN5V2l0aCB7Ci1wdWJsaWM6Ci0gICAgRGVw
ZW5kZW5jeVdpdGgoKQotICAgICAgICA6IGRlcGVuZGVuY3kobnVsbERlcGVuZGVuY3koKSkKLSAg
ICAgICAgLCB2YWx1ZSgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5V2l0aChE
ZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotICAgICAgICA6IGRlcGVuZGVu
Y3koZGVwZW5kZW5jeSkKLSAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKLSAgICBUIHZhbHVlOwotfTsKLSAgICAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgRGVwZW5kZW5jeVdpdGg8VD4gZGVwZW5kZW5jeVdp
dGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
RGVwZW5kZW5jeVdpdGg8VD4oZGVwZW5kZW5jeSwgdmFsdWUpOwotfQotCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogaW5saW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBkZXBlbmRl
bmN5KQogewpAQCAtNDY5LDEwICs0MTQsOCBAQCBBTFdBWVNfSU5MSU5FIFQmIGVuc3VyZVBvaW50
ZXIoQXRvbWljPFQqCiAKIHVzaW5nIFdURjo6QXRvbWljOwogdXNpbmcgV1RGOjpEZXBlbmRlbmN5
OwotdXNpbmcgV1RGOjpEZXBlbmRlbmN5V2l0aDsKIHVzaW5nIFdURjo6Y29uc3VtZTsKIHVzaW5n
IFdURjo6ZGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6ZGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6
OmVuc3VyZVBvaW50ZXI7CiB1c2luZyBXVEY6Om51bGxEZXBlbmRlbmN5OwogCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRW
ZWN0b3IuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsMTMgQEAgcHVibGljOiAKICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgICAgfQogCisgICAgICAgIGl0ZXJhdG9yIG9wZXJhdG9yKyso
aW50KQorICAgICAgICB7CisgICAgICAgICAgICBpdGVyYXRvciByZXN1bHQgPSAqdGhpczsKKyAg
ICAgICAgICAgICsrKCp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKwogICAgICAgICBib29sIGlzQXRFbmQoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gbV9pbmRleCA+PSBtX2JpdFZlY3Rvci0+c2l6ZSgpOwpJbmRleDogU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsxOCw3IEBAIHNldChXVEZfSEVBREVSUwogICAg
IENsb2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKKyAg
ICBDb25jdXJyZW50UHRySGFzaFNldC5oCiAgICAgQ29uZGl0aW9uLmgKICAgICBDcm9zc1RocmVh
ZENvcGllci5oCiAgICAgQ3Jvc3NUaHJlYWRUYXNrLmgKQEAgLTIxNiw2ICsyMTcsNyBAQCBzZXQo
V1RGX1NPVVJDRVMKICAgICBDUFVUaW1lLmNwcAogICAgIENsb2NrVHlwZS5jcHAKICAgICBDb21w
aWxhdGlvblRocmVhZC5jcHAKKyAgICBDb25jdXJyZW50UHRySGFzaFNldC5jcHAKICAgICBDcm9z
c1RocmVhZENvcGllci5jcHAKICAgICBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcAogICAgIENy
eXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcApJbmRleDogU291cmNlL1dURi93dGYvQ29u
Y3VycmVudFB0ckhhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1
cnJlbnRQdHJIYXNoU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25j
dXJyZW50UHRySGFzaFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRQdHJIYXNoU2V0LmgiCisKK25hbWVzcGFjZSBX
VEYgeworCitDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQoKQorewor
ICAgIGluaXRpYWxpemUoKTsKK30KKworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25jdXJyZW50
UHRySGFzaFNldCgpCit7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRlbGV0ZU9s
ZFRhYmxlcygpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1h
a2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHBy
ZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFr
ZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxs
VGFibGVzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxU
YWJsZT4mIHRhYmxlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS5nZXQoKSAh
PSBtX3RhYmxlOworICAgICAgICB9KTsKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6
Y2xlYXIoKQoreworICAgIC8vIFRoaXMgaXMganVzdCBpbiBjYXNlLiBJdCBkb2VzIG5vdCBtYWtl
IGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRvIGNhbGwgYWRkKCkuIEJ1dCBpdCBtaWdodCBwcmV2
ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBpZiB3ZSBkaWQgbWFrZSB0aGF0IG1pc3Rha2Uu
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOyAKKyAgICAKKyAgICBtX2FsbFRh
Ymxlcy5jbGVhcigpOworICAgIGluaXRpYWxpemUoKTsKK30KKwordm9pZCBDb25jdXJyZW50UHRy
SGFzaFNldDo6aW5pdGlhbGl6ZSgpCit7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGluaXRpYWxT
aXplID0gMzI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiB0YWJsZSA9IFRhYmxlOjpjcmVh
dGUoaW5pdGlhbFNpemUpOworICAgIG1fdGFibGUgPSB0YWJsZS5nZXQoKTsKKyAgICBtX2FsbFRh
Ymxlcy5hcHBlbmQoV1RGTW92ZSh0YWJsZSkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNo
U2V0OjphZGRTbG93KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5zaWduZWQgc3RhcnRJ
bmRleCwgdW5zaWduZWQgaW5kZXgsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAodGFibGUtPmxvYWQu
ZXhjaGFuZ2VBZGQoMSkgPj0gdGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuIHJlc2l6
ZUFuZEFkZChwdHIpOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdm9pZCogb2xkRW50
cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhudWxscHRyLCBw
dHIpOworICAgICAgICBpZiAoIW9sZEVudHJ5KSB7CisgICAgICAgICAgICBpZiAobV90YWJsZS5s
b2FkKCkgIT0gdGFibGUpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhZGRlZCBhbiBlbnRyeSB0
byBhbiBvbGQgdGFibGUhIFdlIG5lZWQgdG8gcmVleGVjdXRlIHRoZSBhZGQgb24gdGhlIG5ldyB0
YWJsZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkKHB0cik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2xkRW50cnkg
PT0gcHRyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbmRleCA9IChpbmRl
eCArIDEpICYgbWFzazsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRl
eCk7CisgICAgfQorfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVJZk5lY2Vz
c2FyeSgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIFRhYmxl
KiB0YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICBpZiAodGFibGUtPmxvYWQubG9h
ZFJlbGF4ZWQoKSA8IHRhYmxlLT5tYXhMb2FkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IG5ld1RhYmxlID0gVGFibGU6OmNyZWF0ZSh0YWJsZS0+
c2l6ZSAqIDIpOworICAgIHVuc2lnbmVkIG1hc2sgPSBuZXdUYWJsZS0+bWFzazsKKyAgICB1bnNp
Z25lZCBsb2FkID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUtPnNpemU7
ICsraSkgeworICAgICAgICB2b2lkKiBwdHIgPSB0YWJsZS0+YXJyYXlbaV0ubG9hZFJlbGF4ZWQo
KTsKKyAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAg
ICAgIEF0b21pYzx2b2lkKj4mIGVudHJ5UmVmID0gdGFibGUtPmFycmF5W2luZGV4XTsKKyAgICAg
ICAgICAgIHZvaWQqIGVudHJ5ID0gZW50cnlSZWYubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAg
IGlmICghZW50cnkpIHsKKyAgICAgICAgICAgICAgICBlbnRyeVJlZi5zdG9yZVJlbGF4ZWQocHRy
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGVudHJ5ICE9IHB0cik7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5k
ZXgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsb2FkKys7CisgICAgfQorICAgIAor
ICAgIG5ld1RhYmxlLT5sb2FkLnN0b3JlUmVsYXhlZChsb2FkKTsKKyAgICAKKyAgICBtX3RhYmxl
LnN0b3JlKG5ld1RhYmxlLmdldCgpKTsKK30KKworYm9vbCBDb25jdXJyZW50UHRySGFzaFNldDo6
cmVzaXplQW5kQWRkKHZvaWQqIHB0cikKK3sKKyAgICByZXNpemVJZk5lY2Vzc2FyeSgpOworICAg
IHJldHVybiBhZGQocHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENvbmN1cnJlbnRQdHJIYXNo
U2V0OjpUYWJsZT4gQ29uY3VycmVudFB0ckhhc2hTZXQ6OmNyZWF0ZSh1bnNpZ25lZCBzaXplKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IHJlc3Vs
dChuZXcgKGZhc3RNYWxsb2MoT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBhcnJheSkgKyBzaXplb2Yo
QXRvbWljPHZvaWQqPikgKiBzaXplKSkgKCkpOworICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7Cisg
ICAgcmVzdWx0LT5tYXNrID0gc2l6ZSAtIDE7CisgICAgcmVzdWx0LT5sb2FkLnN0b3JlUmVsYXhl
ZCgwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBy
ZXN1bHQtPmFycmF5W2ldLnN0b3JlUmVsYXhlZChudWxscHRyKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25j
dXJyZW50UHRySGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJl
bnRQdHJIYXNoU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9BdG9taWMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyBh
IGNvbmN1cnJlbnQgaGFzaC1iYXNlZCBzZXQgZm9yIHBvaW50ZXJzLiBJdCdzIG9wdGltaXplZCBm
b3I6CisvLworLy8gLSBIaWdoIHJhdGUgb2YgY29udGFpbnMoKSBjYWxscy4KKy8vIC0gSGlnaCBy
YXRlIG9mIGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIG5ldy4gYWRkKCkgY2Fs
bHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgKG5vcCBhZGRzKQorLy8gICBkb24ndCBtdXRhdGUg
dGhlIHRhYmxlIGF0IGFsbC4KKy8vIC0gTm90IHRvbyBtYW55IHRocmVhZHMuIEkgZG91YnQgdGhp
cyBzY2FsZXMgYmV5b25kIH40LiBUaG91Z2gsIGl0IG1heSBhY3R1YWxseSBzY2FsZSBiZXR0ZXIg
dGhhbiB0aGF0CisvLyAgIGlmIHRoZSByYXRlIG9mIG5vcCBhZGRzIGlzIGFic3VyZGx5IGhpZ2gu
CisvLworLy8gSWYgd2Ugd2FudGVkIHRoaXMgdG8gc2NhbGUgYmV0dGVyLCB0aGUgbWFpbiBjaGFu
Z2Ugd2UnZCBoYXZlIHRvIG1ha2UgaXMgaG93IHRoaXMgdGFibGUgZGV0ZXJtaW5lcyB3aGVuCisv
LyB0byByZXNpemUuIFJpZ2h0IG5vdyBpdCdzIGEgc2hhcmVkIGNvdW50ZXIuCisvLworLy8gQ29u
Y3VycmVudFB0ckhhc2hTZXQncyBtYWluIHVzZXIsIHRoZSBHQywgc2VlcyBhIDk4JSBub3AgYWRk
IHJhdGUgaW4gU3BlZWRvbWV0ZXIuIFRoYXQncyB3aHkgdGhpcworLy8gZm9jdXNlcyBzbyBtdWNo
IG9uIGNhc2VzIHdoZXJlIHRoZSB0YWJsZSBkb2VzIG5vdCBjaGFuZ2UuCitjbGFzcyBDb25jdXJy
ZW50UHRySGFzaFNldCB7CisgICAgV1RGX01BS0VfTk9OX0NPUFlBQkxFKENvbmN1cnJlbnRQdHJI
YXNoU2V0KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBDb25jdXJyZW50UHRySGFzaFNldCgpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSB+Q29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb250YWluc0ltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRkSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxlLT5sb2FkLmxvYWRSZWxheGVkKCk7Cisg
ICAgfQorICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIg
dGhyZWFkIGNhbiBjYWxsIGFueSBub24tY29uc3QgbWV0aG9kcyByaWdodCBub3cuIFRoaXMgZnJl
ZXMKKyAgICAvLyB1cCBtZW1vcnkgd2l0aG91dCBjaGFuZ2luZyB0aGUgY29udGVudHMgb2YgdGhl
IHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyKCk7CisgICAgCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIGhhc2godm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFB0ckhhc2g8
dm9pZCo+OjpoYXNoKHB0cik7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCogY2FzdChUIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gc2l6ZW9mKHZvaWQqKSwg
InR5cGUgdG9vIGJpZyIpOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICB2b2lkKiBwdHI7
CisgICAgICAgICAgICBUIHZhbHVlOworICAgICAgICB9IHU7CisgICAgICAgIHUucHRyID0gbnVs
bHB0cjsKKyAgICAgICAgdS52YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdS5wdHI7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnNJbXBsKHZvaWQqIHB0cikgY29uc3QKKyAgICB7
CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAg
dW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4
ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4
OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5h
cnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGVudHJ5ID09IHB0cikK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4
ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJ
bmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGEg
bmV3IGVudHJ5IHdhcyBhZGRlZC4KKyAgICBib29sIGFkZEltcGwodm9pZCogcHRyKQorICAgIHsK
KyAgICAgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB1
bnNpZ25lZCBtYXNrID0gdGFibGUtPm1hc2s7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXgg
PSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7
CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5ID0gdGFibGUtPmFy
cmF5W2luZGV4XS5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYWRkU2xvdyh0YWJsZSwgbWFzaywgc3RhcnRJbmRleCwgaW5kZXgs
IHB0cik7CisgICAgICAgICAgICBpZiAoZW50cnkgPT0gcHRyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYWRkU2xvdyhUYWJsZSog
dGFibGUsIHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4
LCB2b2lkKiBwdHIpOworCisgICAgdm9pZCByZXNpemVJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wg
cmVzaXplQW5kQWRkKHZvaWQqIHB0cik7CisgICAgCisgICAgc3RydWN0IFRhYmxlIHsKKyAgICAg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICAgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOworICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgbWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLyAyOyB9
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4K
KyAgICAgICAgdW5zaWduZWQgbWFzazsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAgIEF0
b21pYzx1bnNpZ25lZD4gbG9hZDsKKyAgICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsxXTsKKyAg
ICB9OworICAgIAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+LCA0PiBtX2FsbFRh
YmxlczsKKyAgICBBdG9taWM8VGFibGUqPiBtX3RhYmxlOyAvLyBUaGlzIGlzIG5ldmVyIG51bGwu
CisgICAgTG9jayBtX2xvY2s7IC8vIFdlIGp1c3QgdXNlIHRoaXMgdG8gY29udHJvbCByZXNpemUg
cmFjZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb25jdXJyZW50
UHRySGFzaFNldDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93
dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGFwcGVuZEFu
ZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVy
biB0aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4g
UmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFs
d2F5cyByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0
YWtlRmlyc3QoY29uc3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxh
c3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBh
IG51bGwgdmVyc2lvbiBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1
cm5zIGZhbHNlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1
IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KK2lubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1
bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUg
PSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNh
bmRpZGF0ZSA9IHRha2VGaXJzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7Cisg
ICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBwcmVwZW5kKHRha2VM
YXN0KCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAg
ICBjb3VudCsrOworICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBUIERlcXVlPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsNyBA
QCB1c2luZyBXVEY6OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5F
IGlubGluZQogI2VuZGlmCiAKLSNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAotcHVi
bGljOiBcCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogICAgIHZvaWQq
IG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIHZvaWQq
IG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgXApA
QCAtMjYzLDcgKzI2MiwxNSBAQCBwdWJsaWM6IFwKICAgICAgICAgQVNTRVJUKGxvY2F0aW9uKTsg
XAogICAgICAgICByZXR1cm4gbG9jYXRpb247IFwKICAgICB9IFwKKworI2RlZmluZSBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRCBcCitwdWJsaWM6IFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RF9JTVBMIFwKIHByaXZhdGU6IFwKIHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2Vt
aWNvbG9uQWZ0ZXJUaGlzTWFjcm8KIAorI2RlZmluZSBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExP
Q0FURUQgXAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAordHlwZWRlZiBpbnQg
X190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybworCiAjZW5kaWYgLyog
V1RGX0Zhc3RNYWxsb2NfaCAqLwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1MTc4
KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5
ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRo
aXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBv
dmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFz
ay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRl
bXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1j
bGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMu
Li4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1l
bnRUeXBlcy4uLik+IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFz
c2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRl
ZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsg
fQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2soKSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzIEBACisjcHJhZ21hIG9uY2UKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oPgorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdU
aW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyICswLDAgQEAKLSNwcmFnbWEgb25jZQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Zpc2l0aW5nVGltZW91dC5oPgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVu
dERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTAgQEAKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxoZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmg+CiAjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAv
TWFya2luZ0NvbnN0cmFpbnQuaD4KICNpbmNsdWRlIDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGlu
ZXMuaD4KICNpbmNsdWRlIDxoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oPgorI2luY2x1ZGUgPGhl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KICNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5s
aW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvVmlzaXRpbmdUaW1lb3V0Lmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTcyLDQzICs3MSw2
NyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQoVk0qCiAgICAgSlNWTUNs
aWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEoKnZtKTsKICAgICB2bS0+
Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRoaXMgcG9pbnRlci4KICAg
ICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJh
aW50PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29uc3RyYWludHMiLAotICAg
ICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9uID0gdm0tPmhlYXAubXV0
YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
ciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBIZWFwJiBo
ZWFwID0gdm0tPmhlYXA7CisgICAgY2xhc3MgTm9ybWFsV29ybGRDb25zdHJhaW50IDogcHVibGlj
IE1hcmtpbmdDb25zdHJhaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5vcm1hbFdvcmxkQ29u
c3RyYWludChWTSYgdm0sIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhKQorICAgICAgICAgICAg
OiBNYXJraW5nQ29uc3RyYWludCgiV2NvYyIsICJXZWJDb3JlIE91dHB1dCBDb25zdHJhaW50cyIs
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpCisgICAgICAgICAgICAsIG1fdm0o
dm0pCisgICAgICAgICAgICAsIG1fY2xpZW50RGF0YShjbGllbnREYXRhKQorICAgICAgICAgICAg
LCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKHZtLmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24o
KSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBIZWFwJiBoZWFwID0gbV92bS5oZWFw
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVy
c2lvbigpID09IGxhc3RFeGVjdXRpb25WZXJzaW9uKQorICAgICAgICAgICAgaWYgKGhlYXAubXV0
YXRvckV4ZWN1dGlvblZlcnNpb24oKSA9PSBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbGFzdEV4ZWN1dGlv
blZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisgICAgICAgICAgICBt
X2xhc3RFeGVjdXRpb25WZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOwog
CiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIG1hbmFnZSB0aGUgdmlzaXQgY291bnQgaGVyZSBv
dXJzZWx2ZXMuIFdlIG5lZWQgdG8ga25vdyB0aGF0IGlmIHRoaXMgYWRkcwogICAgICAgICAgICAg
Ly8gb3BhcXVlIHJvb3RzIHRoZW4gd2UgY2Fubm90IGRlY2xhcmUgdGVybWluYXRpb24geWV0LiBU
aGUgd2F5IHdlIHNpZ25hbCB0aGlzIHRvIHRoZQogICAgICAgICAgICAgLy8gY29uc3RyYWludCBz
b2x2ZXIgaXMgYnkgYWRkaW5nIHRvIHRoZSB2aXNpdCBjb3VudC4KKyAgICAgICAgICAgIG1fbnVt
T3BhcXVlUm9vdHNCZWZvcmUgPSBoZWFwLm51bU9wYXF1ZVJvb3RzKCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVl
Um9vdHMoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnRE
YXRhLT5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV90YXNrcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgbV9jbGllbnREYXRhLmZvckVh
Y2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCiAgICAgICAgICAgICAgICAgWyZdIChTdWJzcGFjZSYg
c3Vic3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENl
bGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVh
cENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwg
PSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2VsbC0+bWV0aG9kVGFibGUoKnZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxs
LCBzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtUmV2aXNpdGVk
Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBz
dGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBj
ZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNl
bGwsIHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgbV90YXNrcy5hcHBlbmQoc3Vic3BhY2UuZm9yRWFjaE1h
cmtlZENlbGxJblBhcmFsbGVsKGZ1bmMpKTsKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIigiLCBu
dW1SZXZpc2l0ZWQsICIpIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3RWaXNpdG9y
Lm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvdFZpc2l0
b3IuYWRkVG9WaXNpdENvdW50KGhlYXAubnVtT3BhcXVlUm9vdHMoKSAtIG51bU9wYXF1ZVJvb3Rz
QmVmb3JlKTsKLSAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRv
bUdyZXllZCk7Ci0gICAgdm0tPmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShjb25z
dHJhaW50KSk7CisgICAgICAgICAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBkb1BhcmFsbGVsV29ya0lt
cGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgdGFzayA6IG1fdGFza3MpCisgICAgICAgICAgICAgICAgdGFzay0+cnVuKHZp
c2l0b3IpOworICAgICAgICAgICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90Vmlz
aXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci5h
ZGRUb1Zpc2l0Q291bnQoaGVhcC5udW1PcGFxdWVSb290cygpIC0gbV9udW1PcGFxdWVSb290c0Jl
Zm9yZSk7CisgICAgICAgICAgICBtX3Rhc2tzLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgVk0mIG1fdm07CisgICAgICAgIEpTVk1DbGllbnREYXRh
JiBtX2NsaWVudERhdGE7CisgICAgICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlvblZlcnNpb247
CisgICAgICAgIHNpemVfdCBtX251bU9wYXF1ZVJvb3RzQmVmb3JlIHsgMCB9OworICAgICAgICBW
ZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+IG1fdGFza3M7CisgICAgfTsKKyAgICAK
KyAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChzdGQ6Om1ha2VfdW5pcXVlPE5vcm1h
bFdvcmxkQ29uc3RyYWludD4oKnZtLCAqY2xpZW50RGF0YSkpOwogICAgICAgICAKICAgICBjbGll
bnREYXRhLT5tX25vcm1hbFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoKnZtLCB0cnVl
KTsKICAgICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVu
Y2htYXJrcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwko
cmV2aXNpb24gMjI1MTc4KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgTE9OR1NQSURFUl9QQVRIID0gUEVSRk9STUFO
Q0VURVNUU19QQVRIIAogVjhfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTdW5TcGlk
ZXIiICsgInRlc3RzIiArICJ2OC12NiIKIFRBSUxCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNU
U19QQVRIICsgIlRhaWxCZW5jaDkwMDAiCiBNSUNST0JFTkNITUFSS1NfUEFUSCA9IE9QRU5TT1VS
Q0VfUEFUSCArICJKU1Rlc3RzIiArICJtaWNyb2JlbmNobWFya3MiCi1PQ1RBTkVfV1JBUFBFUl9Q
QVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIgKyAid3JhcHBlcnMiCitPUEVO
U09VUkNFX09DVEFORV9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIKK09D
VEFORV9XUkFQUEVSX1BBVEggPSBPUEVOU09VUkNFX09DVEFORV9QQVRIICsgIndyYXBwZXJzIgog
SlNCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIkpTQmVuY2giCiBTSVhTUEVF
RF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ0ZXN0cyIKIFNJ
WFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIg
KyAid3JhcHBlcnMiCkBAIC04NDEsNiArODQyLDIwIEBAIGNsYXNzIFNpbmdsZUZpbGVUaW1lZEJl
bmNobWFya1BhcmFtZXRlcnMKICAgZW5kCiBlbmQKIAorIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0
cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0IGJlIGxvYWRlZCBpbiBpdHMgb3duIGdsb2JhbCBv
YmplY3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1bigpKSwgYnV0IHJldHVybnMgaXRzIHJlc3VsdCBp
biBhIGN1c3RvbSB3YXkuCitjbGFzcyBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJh
bWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5jaFBhdGgKKyAgCisgIGRlZiBpbml0aWFsaXplKGJl
bmNoUGF0aCkKKyAgICBAYmVuY2hQYXRoID0gYmVuY2hQYXRoCisgIGVuZAorICAKKyAgZGVmIGtp
bmQKKyAgICA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgIGVuZAorZW5kCisKICMg
QmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgZGF0YSBmaWxlcyB0aGF0IHNo
b3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZvbGxvd2VkCiAjIGJ5IGEgY29tbWFuZCB0byBydW4g
dGhlIGJlbmNobWFyay4KIGNsYXNzIE11bHRpRmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwpA
QCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1pdEJlbmNoUnVuQ29kZUZpbGUobmFtZSwgcGxhbiwg
YmVuCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgaWYgKF9fYmVuY2hlcl9p
bmRleCA+PSAje3dhcm11cH0pIHByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0
ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hlcl9pbmRleCAtICN7d2FybXVwfSkgKyBcIjogVGltZTog
XCIrKChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1bnMpKTsiKQogICAgICAgICBkb3VibGVQdXRzKCRz
dGRlcnIsZmlsZSwifSIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIje2JlbmNo
UGFyYW1zLnRlYXJEb3duQ29tbWFuZC5qc30iKQorICAgICAgZWxzaWYgYmVuY2hQYXJhbXMua2lu
ZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgICAgICAgIGRvdWJsZVB1dHMo
JHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikK
KyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHZhciBfX2JlbmNoZXJfcmVzdWx0
ID0ge3ZhbHVlOiBudWxsfTsiKQorICAgICAgICAkcmVydW4udGltZXMgeworICAgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBydW4oX19iZW5jaGVyX3doYXQsIF9fYmVuY2hlcl9y
ZXN1bHQpOyIpCisgICAgICAgIH0KKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAg
IGlmIChfX2JlbmNoZXJfcmVzdWx0LnZhbHVlID09IG51bGwpIikKKyAgICAgICAgZG91YmxlUHV0
cygkc3RkZXJyLGZpbGUsIiAgICAgIHRocm93IG5ldyBFcnJvcihcIk51bGwgcmVzdWx0XCIpOyIp
CisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICByZXR1cm4gX19iZW5jaGVyX3Jl
c3VsdC52YWx1ZTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCisgICAg
ICAgICR3YXJtdXAudGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJf
X2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSIpCisgICAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxk
TWVhc3VyZUdDCisgICAgICAgIH0KKyAgICAgICAgJGlubmVyLnRpbWVzIHsKKyAgICAgICAgICB8
IGlubmVySW5kZXggfAorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJwcmludChc
IiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiAje2lubmVySW5kZXh9OiBU
aW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSk7
IikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxh
bi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQogICAgICAgZWxzZQogICAgICAgICByYWlz
ZSB1bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrCiAg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9f
YmVuY2hlcl93aGF0KSB7IikKQEAgLTE1OTQsNiArMTYyOCwxOSBAQCBjbGFzcyBPY3RhbmVCZW5j
aG1hcmsKICAgZW5kCiBlbmQKIAorY2xhc3MgQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgaW5jbHVk
ZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0aWFsaXplKG5hbWUsIGZ1bGxQYXRoKQorICAgIEBu
YW1lID0gbmFtZQorICAgIEBmdWxsUGF0aCA9IGZ1bGxQYXRoCisgIGVuZAorICAKKyAgZGVmIGVt
aXRSdW5Db2RlKHBsYW4pCisgICAgZW1pdEJlbmNoUnVuQ29kZShmdWxsbmFtZSwgcGxhbiwgU2lu
Z2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycy5uZXcoZW5zdXJlRmlsZSgiQ3Vz
dG9tVGltZWQtI3tAbmFtZX0iLCBAZnVsbFBhdGgpKSkKKyAgZW5kCitlbmQKKwogY2xhc3MgS3Jh
a2VuQmVuY2htYXJrCiAgIGluY2x1ZGUgQmVuY2htYXJrCiAgIApAQCAtMzAxMCw2ICszMDU3LDcg
QEAgYmVnaW4KICAgICB8IGFyZ3MgfAogICAgIE9DVEFORS5hZGQgT2N0YW5lQmVuY2htYXJrLm5l
dygqYXJncykKICAgfQorICBPQ1RBTkUuYWRkIEN1c3RvbVRpbWVkQmVuY2htYXJrLm5ldygic3Bs
YXktbGF0ZW5jeSIsIChPUEVOU09VUkNFX09DVEFORV9QQVRIICsgInNwbGF5LmpzIikudG9fcykK
IAogICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0ZS5uZXcoIktyYWtlbiIsIDphcml0aG1ldGljTWVh
biwgLTEpCiAgIFsiYWktYXN0YXIiLCAiYXVkaW8tYmVhdC1kZXRlY3Rpb24iLCAiYXVkaW8tZGZ0
IiwgImF1ZGlvLWZmdCIsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTk4LDYgKzk4LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKICAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcAorICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3BwCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRoLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIyNTE3OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29h
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlF
NzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJ
CTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQy
M0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMkMy
MEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNw
cCAqLzsgfTsKKwkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNo
U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07
CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3Jp
cHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNC
OTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICov
OyB9OwogCQkwRjRGRkE5RTFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNv
bnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0g
Ki87IH07CiAJCTExNUVCMzQzMUVFMEJBMDMwMDNDMkMwQSAvKiBWaWV3cG9ydFNpemVGb3JWaWV3
cG9ydFVuaXRzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTE1RUIzNDIxRUUwQjcyMDAwM0MyQzBBIC8qIFZpZXdwb3J0U2l6ZUZvclZpZXdwb3J0VW5p
dHMubW0gKi87IH07CkBAIC0xMDY3LDYgKzEwNjgsNyBAQAogCQkwRjEzOUU3NTFBNDIzQTUzMDBG
NTkwRjUgLyogV2Vha09iakNQdHIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXZWFrT2JqQ1B0ci5tbTsgcGF0aCA9IGNvY29hL1dlYWtPYmpDUHRyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3QkJENDE1QUY2QzREMDA3QUI3NTMgLyogV2Vi
Q29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVTdGF0aXN0aWNzV2l0aE5vV2ViUHJvY2Vzcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAvKiBU
aW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRpbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUzMjMgLyog
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2Ny
aXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3
RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRG
RkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTbmFwc2hvdFZpYVJlbmRlcklu
Q29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RkZBQTAxRUQzRDBE
RTAwRjcxMTFGIC8qIEltYWdlSU8uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBJbWFnZUlP
LmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSW1hZ2VJTy5mcmFt
ZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwpAQCAtMjU4MSw2ICsyNTgzLDcgQEAKIAkJ
CQkyNkYxQjQ0MjE1Q0E0MzRGMDBEMUU0QkYgLyogQXRvbWljU3RyaW5nLmNwcCAqLywKIAkJCQlF
NDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIuY3BwICovLAogCQkJCUE3QTk2
NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICov
LAorCQkJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgKi8sCiAJCQkJMEZFQUUzNjcxQjdEMTlDQjAwQ0UxN0YyIC8qIENvbmRpdGlvbi5jcHAgKi8s
CiAJCQkJNTE3MTRFQjkxRDA4NzQxNjAwNDcyM0M0IC8qIENyb3NzVGhyZWFkVGFzay5jcHAgKi8s
CiAJCQkJMjZBMkM3MkUxNUUyRTczQzAwNUIxQTE0IC8qIENTdHJpbmcuY3BwICovLApAQCAtMzE2
NSw2ICszMTY4LDcgQEAKIAkJCQk3QzgzREVGNjFEMEE1OTBDMDBGRUJDRjMgLyogTWV0YUFsbG9j
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVGRTFEMEE1OTBDMDBGRUJDRjMgLyog
TmFrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDU0RjMxRjMzOEMzNjAwQTk3QUE3
IC8qIE5ldmVyRGVzdHJveWVkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVDMUZDRTE3
OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QzgzREYwMTFEMEE1OTBDMDBGRUJDRjMgLyogT3B0aW9uYWwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUE3N0JBQTMxRDlBRkZGQzAwNUZDNTY4IC8qIE9wdGlvblNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMgLyogT1NPYmplY3RQdHIuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJy
ZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCituYW1lc3BhY2UgeworCisvLyBg
Y29tbWFuZHNgIGlzIGEgc3RyaW5nIHRoYXQgdGVsbHMgdGhpcyB0aGluZyB3aGF0IHRvIGRvLiBJ
dCBoYXMgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzLgorLy8gVGhlIGNoYXJh
Y3RlciBwYWlycyBhcmUgY29tbWFuZHMuIENvbW1hbmRzOgorLy8KKy8vICt4ICAgICBBZGRzICd4
JyB0byB0aGUgc2V0IChjYXN0cyAneCcgdG8gYSB2b2lkKikgYW5kIGFzc2VydHMgdGhhdCBpdCdz
IG5ldy4KKy8vICF4ICAgICBBZGRzICd4JyB0byB0aGUgc2V0IGFuZCBhc3NlcnRzIHRoYXQgaXQg
d2FzIHRoZXJlIGFscmVhZHkuCisvLyA9eCAgICAgQXNzZXJ0cyB0aGF0ICd4JyBpcyBpbiB0aGUg
c2V0CisvLyAteCAgICAgQXNzZXJ0cyB0aGF0ICd4JyBpcyBub3QgaW4gdGhlIHNldAordm9pZCBk
b1Rlc3QoY29uc3QgY2hhciogY29tbWFuZHMpCit7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQg
c2V0OworICAgIGZvciAoY29uc3QgY2hhciogY29tbWFuZCA9IGNvbW1hbmRzOyBjb21tYW5kWzBd
ICYmIGNvbW1hbmRbMV07IGNvbW1hbmQgKz0gMikgeworICAgICAgICB2b2lkKiBwdHIgPSBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29tbWFuZFsxXSkpOworICAg
ICAgICBzd2l0Y2ggKGNvbW1hbmRbMF0pIHsKKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAg
ICBFWFBFQ1Qoc2V0LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICchJzoKKyAgICAgICAgICAgIEVYUEVDVCghc2V0LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIEVYUEVDVChzZXQuY29udGFpbnMo
cHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAg
ICBFWFBFQ1QoIXNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEVtcHR5KQoreworICAg
IGRvVGVzdCgiIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVF
bGVtZW50KQoreworICAgIGRvVGVzdCgiK3g9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3Vy
cmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnRNdWx0aXBsZVRpbWVzKQoreworICAgIGRvVGVz
dCgiK3gheCF4IXgheCF4IXgheCF4IXgheD14LXktMCIpOworfQorCitURVNUKFdURl9Db25jdXJy
ZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudE1hbnlUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4
IXgheCF4IXgheCF4IXgheCF4IXg9eC15LTAheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVu
dHMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2kr
bytwK2ErcytkK2YrZytoK2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtB
K1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9
cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1Z
PVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK1RFU1Qo
V1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c01hbnlUaW1lcykKK3sK
KyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStz
K2QrZitnK2graitrK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0Yr
RytIK0orSytMK1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11
PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89
UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4hMSEyITMhNCE1ITYhNyE4ITkhMCFx
IXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUh
UiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2
ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIh
biFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSEx
ITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwh
eiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFD
IVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYh
ZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFK
IUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8h
cCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFT
IUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIh
dCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFV
IUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkh
MCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFX
IUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQh
NSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2
IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4h
TSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFr
IWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVoh
WCFDIVYhQiFOIU0iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExv
dHNPZkVsZW1lbnRzQW5kUXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rl
c3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2gr
aitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1q
PWstbC16LXgtYy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwt
Wi1YLUMtVi1CLU4tTStsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtG
K0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9
dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1P
PVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK1RFU1QoV1RGX0Nv
bmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRTb21lRWxlbWVudHNNdWx0aXBsZVRpbWVzVGhlbkFkZFRo
ZVJlc3RBbmRRdWVyeVNvbWVCZWZvcmVBZGRpbmdUaGVSZXN0KQoreworICAgIGRvVGVzdCgiKzEr
MiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0
ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUh
ciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3
IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0K3krdStpK28rcCthK3MrZCtmK2cr
aCtqK2s9MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1o
PWo9ay1sLXoteC1jLXYtYi1uLW0tUS1XLUUtUi1ULVktVS1JLU8tUC1BLVMtRC1GLUctSC1KLUst
TC1aLVgtQy1WLUItTi1NK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytE
K0YrRytIK0orSytMK1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9
eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1J
PU89UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327794</attachid>
            <date>2017-11-28 14:58:18 -0800</date>
            <delta_ts>2017-11-29 21:33:10 -0800</delta_ts>
            <desc>fix some compile errors</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>171471</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2
ICs1MDMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3
MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2
IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBG
OTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJF
NTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBB
OUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07
Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxh
bklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkw
RjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBB
OUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNj
aGVkdWxlci5oICovOyB9OwpAQCAtMzExLDYgKzMxMCw5IEBACiAJCTBGNEEzOEZBMUM4RTEzREYw
MDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRC
OTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1
bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5
MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhDNzQx
RkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovOyB9OworCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RDhD
NzgxRkNBM0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGls
bHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAw
NzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUx
ODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDk0LDcgKzE0OTYsNiBAQAog
CQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ5RTg1MkUxRThB
MEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREJDNTRENTFERjhFQTJCMDA1QkY3
MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBREJDNTREMzFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNzZW1i
bHlUb0pTQ2FsbGVlLmggKi87IH07CiAJCUFERDhGQTQ2MUVCMzA3OTcwMERGNTQyRiAvKiBXYXNt
TmFtZVNlY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJz
ZXIuaCAqLzsgfTsKLQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEREIxRjYy
MThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFERTgwMjk0MUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5
TGlua0Vycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQURFODAyOUExRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFERTgwMjk1MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVj
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QURFODAyOUMxRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5
NzFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk3Niw3ICsx
OTc3LDYgQEAKIAkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAg
LyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdGluZ1RpbWVvdXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBh
dGggPSBkZmcvREZHUGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxRkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0aCA9IGRm
Zy9ERkdXb3JrbGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
RkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjI2NCw2ICsyMjY0LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5
MDMxOCAvKiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3VwZXJTYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNP
cmlnaW5EdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5
NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4
QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVN
YXJraW5nQ29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZD
MTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhP
YnZpb3VzU3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0Fp
ckZpeE9idmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUx
RDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5E
dW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNTQsNyArNDI1OCw2IEBA
CiAJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEpTV2ViQXNzZW1ibHkuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21O
YW1lU2VjdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
TmFtZVNlY3Rpb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZB
NDQxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVS
b290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjkzMUUwOEYxQzkw
MDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwOyBwYXRoID0ganMv
SlNXZWJBc3NlbWJseUxpbmtFcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFERTgwMjk0MUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaDsg
cGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9y
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JD
b25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUwMCw2ICs1NTAz
LDcgQEAKIAkJCQkwRkQwRTVFNjFFNDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAq
LywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3Bw
ICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5o
ICovLAorCQkJCTBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxp
c20uaCAqLywKIAkJCQkwRjdERjEyRjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0
aWxpdHkuaCAqLywKIAkJCQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAg
Ki8sCiAJCQkJMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU1
OTQsMTEgKzU1OTgsMTIgQEAKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRv
clNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9y
U3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3Rh
dGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5o
ICovLAogCQkJCTBGQkI3M0I2MURFRjNBQUMwMDJDMDA5RSAvKiBQcmV2ZW50Q29sbGVjdGlvblNj
b3BlLmggKi8sCiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4IC8qIFJlZ2lzdGVyU3RhdGUu
aCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIgLyogUmVsZWFzZUhlYXBBY2Nlc3NT
Y29wZS5oICovLAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMxMzgzOSAvKiBSdW5uaW5nU2NvcGUu
aCAqLywKKwkJCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuY3BwICovLAorCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90
VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNp
dG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5s
aW5lcy5oICovLApAQCAtNTYyMCw3ICs1NjI1LDcgQEAKIAkJCQkwRjFGQjM4QjFFMTczQTYyMDBB
OUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJ
CQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovLAogCQkJ
CTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8s
Ci0JCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovLAor
CQkJCTBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywKIAkJCQkw
Rjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLywKIAkJCQkwRjk1
MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8sCiAJCQkJMUFDRjczNzYx
NzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwICovLApAQCAtODE2OSw2ICs4MTc0LDcgQEAKIAkJ
CQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFy
YWxsZWxpc20uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAv
KiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAw
RjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQw
RTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODMsNiAr
ODg4OSw3IEBACiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1h
cFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3
MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDAyLDkgKzkwMDksOSBAQAogCQkJ
CUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZl
V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQw
QzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29u
c3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8q
IE9iamVjdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAw
MzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBRERCMUY2MzE4
RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5
QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzA0NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTkyNDksNyArOTI1Niw2IEBACiAJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8q
IFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyRDFB
QTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0
OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3
IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKIAogICAgIHN3aXRj
aCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoSGVhcDo6aXNN
YXJrZWRDb25jdXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlm
IChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTgwLDcgKzk4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRv
ciYKICAgICAKICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRydWU7CiAKLSAgICBp
ZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFy
a2VkKHRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmds
eShsb2NrZXIpKSB7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyB0aW1lVG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRv
T2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYgKEhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29k
ZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTE0NywxMCArMTE0NywxMCBAQCBi
b29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYgRU5BQkxFKERGR19K
SVQpCiBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVuY2VU
cmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdp
biAmJiAhSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4u
Z2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJr
ZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1f
ZnJvbS5nZXQoKSkpCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExODAsNyArMTE4MCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhj
b24KICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0
KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9CiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFy
a2VkKG9sZFN0cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjU0LDE0ICsxMjU0LDE0
IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNb
aV0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPigqcmVm
ZXJlbmNlLT52bSgpLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocmVm
ZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1
cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0
KCkpKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+d2Vha1N0
cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2
ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxs
ZWxpc20uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
dHJhaW50UGFyYWxsZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWlu
dDhfdCB7CisgICAgU2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFt
ZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlz
bSkKK3sKKyAgICBzd2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNt
OjpQYXJhbGxlbDoKKyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAgICAgLCBtX211dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVl
PFNsb3RWaXNpdG9yPigqdGhpcywgIk0iKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQo
c3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3Ry
YWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAg
ICAgLCBtX2hhbmRsZVNldCh2bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVl
PENvZGVCbG9ja1NldD4oKSkKICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlx
dWU8SklUU3R1YlJvdXRpbmVTZXQ+KCkpCkBAIC05MTEsNyArOTExLDcgQEAgdm9pZCBIZWFwOjph
ZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwog
ICAgIGlmIChtX211dGF0b3JTaG91bGRCZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2Fk
RmVuY2UoKTsKLSAgICAgICAgaWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAg
ICAgICBpZiAoIWlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxs
IGNvbGxlY3Rpb24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJp
dml2ZWQgcGFzdAogICAgICAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBh
IHN0b3JlIHRvIGFuIHVubWFya2VkIFBvc3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAg
ICAgICAgIC8vIG9iamVjdCBnZXRzIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVu
IGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTI0LDE1IEBA
IHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAg
ICAvLyBOb3cgd2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAv
LwogICAgICAgICAgICAgICAgIC8vICAgICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVu
bWFya2VkLgotICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJy
ZW50bHkgaGVyZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhl
cmUuCiAgICAgICAgICAgICAgICAgLy8gICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXll
ZC4KICAgICAgICAgICAgICAgICAvLyAgICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNr
ZWQuCiAgICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFu
Z2VDZWxsU3RhdGVTdHJvbmcgaGVyZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAg
ICAgIC8vIEluIHRoaXMgY2FzZSB3ZSB3b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBh
Z2FpbiwgZXZlbiB0aG91Z2ggaXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2su
IFRoaXMgY2hlY2sgbGV0cyB1cyBjb3JyZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0
aGUgZmFjdCB0aGF0Ci0gICAgICAgICAgICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29u
dmVyZ2VzIG1vbm90b25pY2FsbHkgdG8gdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJr
ZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252
ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtl
ZChjZWxsKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3Jr
IG91dCB3aGV0aGVyIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpcyBwb2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5
LgogICAgICAgICAgICAgICAgICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3Nz
aWJseUJsYWNrKTsKQEAgLTk0OCw3ICs5NDgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJl
ZFNldChjb25zdCBKU0NlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVs
c2UKLSAgICAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAg
ICAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0
aGF0IHRoZSBvYmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29s
bGVjdG9yIG1heSBzZXQgdGhlCiAgICAgLy8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRo
ZW4gdG8gUG9zc2libHlPbGRPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwog
ICAgIC8vIHJhY2Ugd2l0aCB0aGUgY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMg
aXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXwpAQCAtMTI2NSw2ICsxMjY1LDgg
QEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgIAogICAgIFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciA9ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOwogICAgIAor
ICAgIG1fb3BhcXVlUm9vdHMuZGVsZXRlT2xkVGFibGVzKCk7CisgICAgCiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkpIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBjaGFyKiwgc2l6ZV90PiB2aXNp
dE1hcDsKICAgICAgICAgZm9yRWFjaFNsb3RWaXNpdG9yKApAQCAtMTMwNSw3ICsxMzA3LDcgQEAg
TkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAvLyBXb25k
ZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCku
IFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVz
aW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCkuCiAgICAgICAgIGJvb2wgY29udmVyZ2Vk
ID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RW
aXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgICAgIG1fY29uc3Ry
YWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKGNv
bnZlcmdlZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFzc2VydFNo
YXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNv
bm4sIENvbGxlY3RvclBoYXNlOjpFbmQpOwpAQCAtMjU3OCw3ICsyNTgwLDcgQEAgdm9pZCBIZWFw
OjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUg
cHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2
ZSBzY2FuIik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRp
dmVTY2FuKCk7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290
cygqdGhpcyk7CkBAIC0yNTg4LDExICsyNTkwLDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0
cmFpbnRzKCkKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9v
dHMpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlF
eGVjdXRpb24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24sCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMi
LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRp
bmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikg
ewogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1l
bWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7CiAjZW5kaWYKQEAgLTI2MDksMTkgKzI2MTIs
MjEgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKICAg
ICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9u
KTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAg
ICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAg
ICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgK
ICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikK
ICAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92
bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2MzcsMzQgKzI2NDIsMzggQEAg
dm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CiAgICAg
ICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7
CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAotICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAg
ICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNp
dG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0
aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAg
ICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJXcmgiLCAiV2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQo
KSkKICAgICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNp
dG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcs
CisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAi
REZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJl
ck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmts
aXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAg
ICAgICAKQEAgLTI2NzksMTIgKzI2ODgsMTMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWlu
dHMoKQogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90Vmlz
aXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eU1hcmtpbmcpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5n
LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICNlbmRpZgogICAg
IAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7
CiAgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhv
dXRIb2xkaW5nTG9ja3MoCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9j
aykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29u
c3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCkBAIC0yNjkzLDExICsyNzAzLDE1IEBAIHZvaWQg
SGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RW
aXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQp
OworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkLAorICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIk1ybXMiLCAiTXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZ3JhYiBsb2NrcyB0byBmaWRkbGUgd2l0
aCB0aGUgbXV0YXRvciBtYXJrIHN0YWNrIGFuZCB0aGUgcmFjZSBzdGFjay4KKyAgICAgICAgICAg
IC8vIFRoZSBjaGFuY2VzIG9mIGNvbnRlbnRpb24gb24gdGhvc2UgbG9ja3MgYXJlIHNsaW0sIGJ1
dCB3ZSBzaG91bGQgZG8gaXQgYW55d2F5LgorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJ
bmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAg
ICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFy
a1N0YWNrLT5zaXplKCk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQo
c2l6ZSk7CkBAIC0yNzExLDcgKzI3MjUsOCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewogICAgICAgICAg
ICAgcmV0dXJuIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5z
aXplKCk7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiB9CiAKIHZv
aWQgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25z
dHJhaW50PiBjb25zdHJhaW50KQpAQCAtMjc5NCwxNiArMjgwOSw2IEBAIHZvaWQgSGVhcDo6YWxs
b3dDb2xsZWN0aW9uKCkKICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrLnVubG9jaygpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0
b3IoY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OwotICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKLSAgICBmb3IgKGF1dG8mIHNsb3RW
aXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgZnVuYygqc2xvdFZpc2l0
b3IpOwotfQotCiB2b2lkIEhlYXA6OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVl
KQogewogICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3LDQgKzI4
NTIsMjQgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwogICAgIG1f
aGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAKK3ZvaWQg
SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0
ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxs
ZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICB1
bnNpZ25lZCBpbml0aWFsUmVmQ291bnQgPSB0YXNrLT5yZWZDb3VudCgpOworICAgIHNldEJvbnVz
VmlzaXRvclRhc2sodGFzayk7CisgICAgdGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RWaXNpdG9y
KTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKG51bGxwdHIpOworICAgIHsKKyAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAgIHdoaWxlICh0YXNr
LT5yZWZDb3VudCgpID4gaW5pdGlhbFJlZkNvdW50KQorICAgICAgICAgICAgbV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUud2FpdChtX21hcmtpbmdNdXRleCk7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgogI2luY2x1
ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhy
ZWFkLmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KQEAgLTExNCw3ICsxMTUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9IDE2OwogCiAgICAgc3RhdGljIGJv
b2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRpYyBib29sIGlzTWFya2VkQ29uY3Vy
cmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhl
YXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6
ZShjb25zdCB2b2lkKik7CkBAIC0zNTgsNiArMzU4LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2sm
KTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxp
emVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1
bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC01MjcsNiArNTM4LDgg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgp
OwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwog
ICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQ
ZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTIsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTbG90Vmlz
aXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFs
bGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0g
ICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0
IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9jb2RlQmxvY2tzOwpAQCAtNjMzLDggKzY0Myw3IEBA
IHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMg
eyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9Owog
Ci0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0ZXg7Ci0gICAgSGFzaFNldDxjb25zdCB2b2lkKj4g
bV9vcGFxdWVSb290czsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RzOwog
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIApA
QCAtNjQyLDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnM7CiAKICAgICBQ
YXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsKKyAgICBSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlzaXRvclRhc2s7CiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxvY2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24g
MjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDE1IEBAIGlubGluZSBib29sIEhlYXA6OmNvbGxlY3Rv
ckJlbGlldmVzVGhhdFQKICAgICByZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3Js
ZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG1l
dGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1aWNrbHkuCisv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNf
SU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKLSAgICBB
U1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKICAgICBIZWFw
Q2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChj
ZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxv
Y2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJr
ZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZCgKLSAgICAgICAgYmxvY2sudm0o
KS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwotfQotCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCogcmF3
Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJh
d0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAgICAgICByZXR1
cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJrZWRCbG9jayYg
YmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZENv
bmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtp
bmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9jay5pc01hcmtlZChibG9jay52bSgp
LT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZ
U19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAtMjY5LDQgKzI1OSwxNCBAQCBpbmxpbmUg
dm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnkoKQogICAgICAgICBzdG9wSWZOZWNlc3NhcnlTbG93
KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6OmZvckVhY2hTbG90
VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgZnVuYygqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcik7CisgICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0b3IpOworICAgIGZvciAoYXV0byYg
c2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBmdW5jKCpzbG90
VmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSGVhcFNuYXBzaG90QnVp
bGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9k
ZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RC
dWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAgICAgaWYgKGhh
c0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiAyMjUx
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBi
b29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBDZWxsKikg
eyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChI
ZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KLSAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikg
eyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChI
ZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgYm9vbCBp
c0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxvY2F0ZWQoKTsgfQogICAg
IAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZENlbGw7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU1LDYgKzQ1NSwzMyBAQCB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0KCkKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IE1h
cmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCkKK3sKKyAgICBjbGFz
cyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4geworICAg
IHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikKKyAgICAg
ICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHJ1bigpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAg
ICAgICAgIG1faW5kZXggPSBtX2FsbG9jYXRvci5tX21hcmtpbmdOb3RFbXB0eS5maW5kQml0KG1f
aW5kZXgsIHRydWUpOworICAgICAgICAgICAgaWYgKG1faW5kZXggPj0gbV9hbGxvY2F0b3IubV9i
bG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXhdOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7
CisgICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OworICAgICAgICBMb2NrIG1fbG9jazsKKyAg
ICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykpOworfQorCiB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRy
aWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksOCBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29uc3Qg
RnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5v
dEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRUYXNr
PE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKTsK
KyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICB2b2lk
IHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgs
NyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKik7CiAg
ICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCop
OwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRl
bmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kp
OwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtzU3RhbGUoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lXaXRoPGJvb2w+IGFyZU1h
cmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAg
CiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7
CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6
OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21hcmtpbmdW
ZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+IE1hcmtlZEJs
b2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247Ci0gICAg
cmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24gIT0gbWFy
a2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YWJvdXRU
b01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byByZXN1bHQgPSBh
cmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdW
ZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAg
ICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1cm4gcmVzdWx0
LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9CiAKIGlubGlu
ZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQpAQCAtNTI0
LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkUmF3KGNvbgog
CiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUobWFya2lu
Z1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
LCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVlKQorICAgIEhl
YXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2
ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5jeSk7CisgICAg
cmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVyc2lvbikpOwog
fQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDExIEBAIHB1Ymxp
YzoKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZmxpcHBl
ZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9vbCBpc01h
cmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQogICAgIAorICAgIFdlYWtTZXQq
IGFjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmJlZ2luKCk7
IH0KKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1fYWN0aXZlV2Vh
a1NldHMuZW5kKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0JlZ2luKCkgeyBy
ZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCogbmV3QWN0
aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9Cisg
ICAgCiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwog
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNpemVfdCwgbnVt
U2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyMjUx
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsyNywxNSBAQAogI2luY2x1ZGUgIk1hcmtpbmdDb25z
dHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmlzaXRDb3Vu
dGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1NYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0Nv
bnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4g
ZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCitN
YXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJi
cmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1
dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3ZvbGF0aWxpdHko
dm9sYXRpbGl0eSkKLXsKLX0KLQotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50
KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVG
dW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCi0g
ICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCi0gICAgLCBtX25hbWUoV1RG
TW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0
aW9uKSkKLSAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNrV29y
a0VzdGltYXRlRnVuY3Rpb24pKQogICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCisgICAg
LCBtX3BhcmFsbGVsaXNtKHBhcmFsbGVsaXNtKQogewogfQogCkBAIC02MywxNCArNDgsNTEgQEAg
dm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0VmlzaXRDb3Vu
dCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
CitDb25zdHJhaW50UGFyYWxsZWxpc20gTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRh
dGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1Rp
bWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0
ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3Vu
dCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29t
ZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAg
IFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIHJlc3VsdCA9IGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291
bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIG1fbGFzdEV4ZWN1dGVQYXJhbGxl
bGlzbSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitkb3VibGUgTWFya2luZ0Nv
bnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3sKKyAgICByZXR1cm4g
MDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtF
c3RpbWF0ZSh2aXNpdG9yKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxl
bFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291
bnRlcih2aXNpdG9yKTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgewor
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIG1fbGFzdFZp
c2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICB9Cit9CisKK3ZvaWQg
TWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGZpbmlz
aFBhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNp
dENvdW50ZXIudmlzaXRDb3VudCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1Bh
cmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJ
bXBsKFNsb3RWaXNpdG9yJikKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9u
IDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIgogI2luY2x1ZGUgIkNvbnN0cmFpbnRW
b2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCiAjaW5jbHVkZSA8bGlt
aXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDMsMTggKzQx
LDkgQEAgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE1hcmtpbmdDb25zdHJhaW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0Nv
bnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
Ci0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpPiwKLSAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCi0gICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5n
Q29uc3RyYWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJh
aW50Vm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpQYXJhbGxlbCk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1hcmtpbmdDb25z
dHJhaW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWFya2luZ0NvbnN0cmFp
bnQoKTsKICAgICAKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7
IH0KICAgICAKQEAgLTY0LDMzICs1MywzOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFN0YXRz
KCk7CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9s
YXN0VmlzaXRDb3VudDsgfQorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBsYXN0RXhlY3V0ZVBh
cmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtOyB9CiAg
ICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21ldGhp
bmcsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4
ZWN1dGUoU2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBpZiAoIW1fcXVpY2tXb3JrRXN0
aW1hdGVGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9x
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBkb3Vi
bGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKLSAgICB9
CisgICAgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpOworICAgIAorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
OworICAgIAorICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lk
IGZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOwogICAgIAogICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KICAg
ICAKKyAgICAvLyBJZiB0aGlzIGlzIFNlcXVlbnRpYWwsIGl0IG1lYW5zIHRoYXQgdGhlIGNvbnN0
cmFpbnQgaGFzIHRvIGJlIHJ1biBzZXF1ZW50aWFsbHksIHdpdGggbm8gY29uY3VycmVudAorICAg
IC8vIGNvbnN0cmFpbnRzLgorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7IC8vIFNvIGl0
IGNhbiBzZXQgbV9pbmRleC4KICAgICAKICAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVgg
fTsKICAgICBDU3RyaW5nIG1fYWJicmV2aWF0ZWROYW1lOwogICAgIENTdHJpbmcgbV9uYW1lOwot
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYg
dGltZW91dCk+IG1fZXhlY3V0ZUZ1bmN0aW9uOwotICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RW
aXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIG1fcGFyYWxs
ZWxpc207CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlz
bSB7IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwgfTsgLy8gSXQncyBhIGhldXJpc3Rp
Yywgd2UgY2FuIGJlIHdyb25nLiBUaGlzIGd1ZXNzIG9ubHkgYWZmZWN0cyB0aGUgZmlyc3QgcnVu
LgogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9sb2NrOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKIAorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
aCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4K
ICNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKQEAgLTM0LDUyICsz
NywyMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpF
eGVjdXRpb25Db250ZXh0IHsKIHB1YmxpYzoKLSAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdD
b25zdHJhaW50U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRp
bWVvdXQpCisgICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0KQog
ICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAg
ICAgLCBtX3RpbWVvdXQodGltZW91dCkKICAgICB7CisgICAgICAgIG1fc2V0Lm1faGVhcC5mb3JF
YWNoU2xvdFZpc2l0b3IoCisgICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7
CisgICAgICAgICAgICAgICAgbV92aXNpdENvdW50ZXJzLmFwcGVuZChWaXNpdENvdW50ZXIodmlz
aXRvcikpOworICAgICAgICAgICAgfSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgZGlkVmlzaXRT
b21ldGhpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhp
bmc7CisgICAgICAgIGZvciAoY29uc3QgVmlzaXRDb3VudGVyJiB2aXNpdENvdW50ZXIgOiBtX3Zp
c2l0Q291bnRlcnMpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdENvdW50ZXIudmlzaXRDb3VudCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KCkgY29uc3QKKyAg
ICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2UgeworICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwK
KyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJzdAorICAgIH07CisKKyAgICAvLyBwaWNrTmV4dCgp
IGlzIGNhbGxlZCB3aGlsZSBhIGxvY2sgaXMgaGVsZCwgc28gaXQgY2FuIHByZXRlbmQgbGlrZSBp
dCdzIGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBtYWluCisgICAgLy8gdGhyZWFkLiBGb3IgZXhhbXBs
ZSwgaXQncyB0b3RhbGx5IHNhZmUgZm9yIHRoYXQgbGFtYmRhIHRvIGNsb3NlIG92ZXIgdGhlIHN0
YWNrLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBleGVjdXRlKFNjaGVk
dWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgY29uc3QgRnVuYyYgcGlja05leHQpCiAgICAgewot
ICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91
dCk7CisgICAgICAgIG1fc2V0Lm1faGVhcC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAg
ICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICAgICAgZm9yICg7
OykgeworICAgICAgICAgICAgICAgICAgICBib29sIGRvUGFyYWxsZWxXb3JrTW9kZTsKKyAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhUb1J1bjsKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlQYXJhbGxlbFdvcmsg
PSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9IG1fdG9FeGVj
dXRlSW5QYXJhbGxlbC5maXJzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b1BhcmFsbGVsV29ya01vZGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5
TmV4dENvbnN0cmFpbnQgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBpY2tSZXN1bHQgPSBwaWNrTmV4dCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaWNrUmVzdWx0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KCpwaWNrUmVzdWx0KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFya2lu
Z0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbKnBpY2tSZXN1bHRdOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxp
c20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5hcHBl
bmQoKnBpY2tSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9ICpwaWNrUmVzdWx0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHByZWZlcmVuY2UgPT0gUGFyYWxsZWxXb3JrRmlyc3QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcmFsbGVsV29yaygpIHx8IHRyeU5l
eHRDb25zdHJhaW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodHJ5TmV4dENvbnN0cmFpbnQoKSB8fCB0cnlQYXJhbGxlbFdv
cmsoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbnVtQWN0aXZlVGhyZWFkcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBbnkgd2FpdGlu
ZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1c3QgcnVubmluZyB0aGUgU2xvdFZpc2l0b3IuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSSB3b25kZXIgaWYgdGhhdCB3b3VsZCBiZSBw
cm9maXRhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQo
bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzKys7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0W2luZGV4VG9S
dW5dOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRvUGFy
YWxsZWxXb3JrTW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuZG9QYXJh
bGxlbFdvcmsodmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKHZpc2l0b3IpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9QYXJhbGxlbFdvcmtN
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJh
bGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RyYWludC5maW5pc2hQYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rv
RXhlY3V0ZUluUGFyYWxsZWwudGFrZUZpcnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdICh1bnNpZ25lZCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gaW5kZXhUb1J1
bjsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJh
bGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVs
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxl
bC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX251bUFjdGl2ZVRocmVhZHMtLTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX3RvRXhlY3V0ZVNlcXVl
bnRpYWxseSkKKyAgICAgICAgICAgIGV4ZWN1dGUoKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuYml0Q291
bnQoKSk7CiAgICAgfQogICAgIAotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0
LgotICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQorICAgIHZvaWQgZHJhaW4o
Qml0VmVjdG9yJiB1bmV4ZWN1dGVkKQogICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXgg
OiB1bmV4ZWN1dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAgICAgICAgICAg
IHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGF1dG8gaXRlciA9IHVuZXhlY3V0ZWQuYmVnaW4oKTsKKyAgICAg
ICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVkLmVuZCgpOworICAgICAgICBpZiAoaXRlciA9PSBlbmQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGV4ZWN1dGUoCisgICAgICAgICAgICBOZXh0
Q29uc3RyYWludEZpcnN0LAorICAgICAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuICppdGVy
Kys7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgdW5leGVjdXRlZC5jbGVhckFsbCgpOwogICAg
IH0KICAgICAKLSAgICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0KKyAgICB2b2lkIGNvbnZlcmdlKGNvbnN0IFZlY3Rv
cjxNYXJraW5nQ29uc3RyYWludCo+JiBvcmRlcikKKyAgICB7CisgICAgICAgIGlmIChkaWRWaXNp
dFNvbWV0aGluZygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYg
KG9yZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IHNpemVfdCBpbmRleCA9IDA7CiAKLSAgICB2b2lkIGV4ZWN1dGUoc2l6ZV90IGluZGV4KQorICAg
ICAgICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbnN0cmFpbnQgc2VxdWVudGlh
bGx5IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVpY2tseSBnaXZlIHVzIGEKKyAgICAgICAgLy8gcmVz
dWx0LiBJZiB3ZSByYW4gaXQgaW4gcGFyYWxsZWwgdG8gb3RoZXIgY29uc3RyYWludHMsIHRoZW4g
d2UgbWlnaHQgZW5kIHVwIGhhdmluZyB0byB3YWl0IGZvcgorICAgICAgICAvLyB0aG9zZSBvdGhl
ciBjb25zdHJhaW50cyB0byBmaW5pc2gsIHdoaWNoIHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSBz
aW5jZSBkdXJpbmcgY29udmVyZ2VuY2UgaXQncworICAgICAgICAvLyBlbXBpcmljYWxseSBtb3N0
IG9wdGltYWwgdG8gcmV0dXJuIHRvIGRyYWluaW5nIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdl
bmVyYXRlcyB3b3JrLiBNb3N0CisgICAgICAgIC8vIGNvbnN0cmFpbnRzIGRvbid0IGdlbmVyYXRl
IGFueSB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUsIGFuZCB3aGVuIHRoZXkgZG8gZ2VuZXJhdGUgd29y
aywgdGhleSB0ZW5kCisgICAgICAgIC8vIHRvIGdlbmVyYXRlIGVub3VnaCBvZiBpdCB0byBmZWVk
IGEgZGVjZW50IGRyYWluaW5nIGN5Y2xlLiBUaGVyZWZvcmUsIHBhdXNlIHRpbWVzIGFyZSBsb3dl
c3QgaWYKKyAgICAgICAgLy8gd2UgZ2V0IHRoZSBoZWNrIG91dCBvZiBoZXJlIGFzIHNvb24gYXMg
YSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBJIHRoaW5rIHRoYXQgcGFydCBvZiB3aGF0Cisg
ICAgICAgIC8vIG1ha2VzIHRoaXMgb3B0aW1hbCBpcyB0aGF0IHdlIGFsc28gbmV2ZXIgYWJvcnQg
cnVubmluZyBhIGNvbnN0cmFpbnQgZWFybHksIHNvIHdoZW4gd2UgZG8gcnVuCisgICAgICAgIC8v
IG9uZSwgaXQgaGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdlbmVyYXRlIGFzIG11Y2ggd29yayBhcyBp
dCBwb3NzaWJseSBjYW4uCisgICAgICAgIC8vCisgICAgICAgIC8vIFNpbWlsYXIgcmVhc29uaW5n
IGFwcGxpZXMgdG8gY29uc3RyYWludHMgdGhhdCB0ZW5kIHRvIHJldHVybiBDb3NudHJhaW50UGFy
YWxsZWxpc206OlBhcmFsbGVsCisgICAgICAgIC8vIGZyb20gZXhlY3V0ZS4gVGhvc2UgY29uc3Ry
YWludHMgdHlwaWNhbGx5IGhhdmUgYSB2ZXJ5IGZhc3QtcnVubmluZyBleGVjdXRlIGZ1bmN0aW9u
LCB3aGljaCB0aGVuCisgICAgICAgIC8vIG9mZmxvYWRzIGFsbW9zdCBhbGwgb2YgdGhlIHdvcmsg
dG8gYSBwYXJhbGxlbCB3b3JrZXIuIEluIHRoYXQgY2FzZSwgaXQgbWFrZXMgc2Vuc2UgdG8gcnVu
IHRoZQorICAgICAgICAvLyBleGVjdXRlIGZ1bmN0aW9uIHNlcXVlbnRpYWxseS4KKyAgICAgICAg
aWYgKG9yZGVyW2luZGV4XS0+d29ya0VzdGltYXRlKG1fc2V0Lm1faGVhcC5jb2xsZWN0b3JTbG90
VmlzaXRvcigpKQorICAgICAgICAgICAgfHwgb3JkZXJbaW5kZXhdLT5sYXN0RXhlY3V0ZVBhcmFs
bGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAg
ICAgZXhlY3V0ZSgqb3JkZXJbaW5kZXgrK10pOworICAgICAgICAKKyAgICAgICAgICAgIGlmICht
X3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgJiYgKG9yZGVy
LmlzRW1wdHkoKSB8fCBkaWRWaXNpdFNvbWV0aGluZygpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4ZWN1dGUoCisgICAgICAgICAgICBQ
YXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiB7CisgICAgICAgICAgICAgICAgaWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG9yZGVyLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICByZXR1cm4gb3JkZXJbaW5kZXgrK10tPmluZGV4KCk7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBleGVjdXRlKE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50
KQogICAgIHsKLSAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhdLT5leGVjdXRlKG1fdmlzaXRvciwg
bV9kaWRWaXNpdFNvbWV0aGluZywgbV90aW1lb3V0KTsKLSAgICAgICAgbV9leGVjdXRlZC5zZXQo
aW5kZXgpOworICAgICAgICBpZiAobV9leGVjdXRlZC5nZXQoY29uc3RyYWludC5pbmRleCgpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSgKKyAgICAgICAgICAgIG1fc2V0
Lm1faGVhcC5jb2xsZWN0b3JTbG90VmlzaXRvcigpKTsKKyAgICAgICAgZGlkRXhlY3V0ZShwYXJh
bGxlbGlzbSwgY29uc3RyYWludC5pbmRleCgpKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgorICAg
IHZvaWQgZGlkRXhlY3V0ZShDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20sIHVuc2ln
bmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgICAg
ICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgewor
ICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleCk7CisgICAgICAg
ICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4KTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKICAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Ci0gICAgU2xvdFZpc2l0
b3ImIG1fdmlzaXRvcjsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKICAgICBCaXRWZWN0
b3IgbV9leGVjdXRlZDsKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9Owor
ICAgIERlcXVlPHVuc2lnbmVkLCAzMj4gbV90b0V4ZWN1dGVJblBhcmFsbGVsOworICAgIEJpdFZl
Y3RvciBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQ7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4g
bV90b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9u
IG1fY29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlVGhyZWFkcyB7IDAgfTsKKyAg
ICBWZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOwogfTsKIAotTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KCkKK01hcmtpbmdDb25zdHJhaW50
U2V0OjpNYXJraW5nQ29uc3RyYWludFNldChIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXAp
CiB7CiB9CiAKQEAgLTEwNywxOCArMjg0LDE5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVu
Y3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0
eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7Ci0gICAg
YWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0
ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsK
KyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oV1RGTW92
ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9s
YXRpbGl0eSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
YWRkKAogICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1
dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1
bmN0aW9uLAogICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0Vz
dGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKKyAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAorICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29u
c3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3Zl
KGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiksIHZv
bGF0aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3Ry
YWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4
ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0
aWxpdHksIHBhcmFsbGVsaXNtKSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFk
ZCgKQEAgLTEzMSw5ICszMDksOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAg
ICAgbV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtpbmdD
b25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1v
bm90b25pY1RpbWUgdGltZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVD
b252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIHJlc3VsdCA9IGV4
ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvciwgdGltZW91dCk7CisgICAgYm9vbCByZXN1bHQg
PSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dH
QygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0OCw5
ICszMjYsOSBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
Citib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4
dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRp
b25Db250ZXh0KCp0aGlzKTsKICAgICAKICAgICB1bnNpZ25lZCBpdGVyYXRpb24gPSBtX2l0ZXJh
dGlvbisrOwogICAgIApAQCAtMTU5LDE2ICszMzcsMTQgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcgogCiAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50
cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhl
bgogICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlv
bkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cyk7CiAgICAgCiAg
ICAgLy8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBhbnkgdmlzaXRvciBkcmFpbmluZywgc28g
aXQncyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25zdHJhaW50cyBvdGhlcgogICAgIC8vIHRo
YW4gcm9vdHMuCiAgICAgaWYgKGl0ZXJhdGlvbiA9PSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdy
b3d0aHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXhlY3V0aW9uQ29udGV4dC5kcmFp
bihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKTsKICAgICAKICAgICAvLyBXZSB3YW50IHRvIGtlZXAg
cHJlZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVk
IHRvIGJlIGZpeHBvaW50ZWQKICAgICAvLyBldmVuIGluIGEgc3RvcC10aGUtd29ybGQgR0MgLSB1
bnRpbCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBnbyB0b3Rh
bGx5CkBAIC0yMTUsMzMgKzM5MSwxNiBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVj
dXRlQ29udmVyCiAgICAgICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRp
bGl0eSgpOwogICAgICAgICB9KTsKICAgICAKLSAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBj
b25zdHJhaW50IDogbV9vcmRlcmVkKSB7Ci0gICAgICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+
aW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1
dGUoaSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5l
eGVjdXRlKGkpOwotICAgICAgICAKLSAgICAgICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5j
ZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55
dGltZQotICAgICAgICAvLyB3ZSBmaW5kIHdvcmsuCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB0
aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25zdHJhaW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xl
YXIgaWYgdGhhdCdzCi0gICAgICAgIC8vIGJldHRlciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0
ZXIgaXMgdGhpczoKLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBy
dW5uaW5nLgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRo
aW5ncywgcmV0dXJuLgotICAgICAgICAvLyAtIEVsc2UgcnVuIHVudGlsIHRpbWVvdXQuCi0gICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzIKLSAg
ICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgZXhlY3V0aW9uQ29udGV4dC5jb252ZXJnZSht
X29yZGVyZWQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIFJldHVybiB0cnVlIGlm
IHdlJ3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlmIHdlIGRpZCBub3QgdmlzaXQgYW55dGhp
bmcuCisgICAgcmV0dXJuICFleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9
CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOwogICAgIGZvciAo
YXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZp
c2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAg
ICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBN
YXJraW5nQ29uc3RyYWludFNldCB7CiBwdWJsaWM6Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTZXQo
KTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldChIZWFwJik7CiAgICAgfk1hcmtpbmdDb25zdHJh
aW50U2V0KCk7CiAgICAgCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKQEAgLTQxLDE1ICs0
MSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0
ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICB2b2lkIGFk
ZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFt
ZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCiAgICAg
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eSk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAg
ICAKICAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAg
ICAKQEAgLTYwLDkgKzYyLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2Vk
IG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0
ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJn
ZW5jZSgKLSAgICAgICAgU2xvdFZpc2l0b3ImLAotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVv
dXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJn
ZW5jZShTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJh
aW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KICAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZp
c2l0b3ImKTsKQEAgLTcxLDEwICs3MSwxMSBAQCBwcml2YXRlOgogICAgIGNsYXNzIEV4ZWN1dGlv
bkNvbnRleHQ7CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgCi0gICAg
Ym9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0
aW1lb3V0KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsK
ICAgICAKLSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSwgQml0VmVj
dG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0
aGluZyk7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIEJpdFZlY3RvciYgdW5leGVjdXRl
ZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOwogICAgIAor
ICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9vdHM7CiAgICAg
Qml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShub25leGlzdGVudCkKQEAgLTEsOTEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgT3BhcXVlUm9vdFNldCB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BhcXVlUm9vdFNldCk7Ci1wdWJsaWM6Ci0gICAgT3Bh
cXVlUm9vdFNldCgpCi0gICAgICAgIDogbV9sYXN0UXVlcmllZFJvb3QobnVsbHB0cikKLSAgICAg
ICAgLCBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBib29sIGNvbnRhaW5zKHZvaWQqIHJvb3QpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAocm9v
dCAhPSBtX2xhc3RRdWVyaWVkUm9vdCkgewotICAgICAgICAgICAgbV9sYXN0UXVlcmllZFJvb3Qg
PSByb290OwotICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IG1fcm9vdHMu
Y29udGFpbnMocm9vdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY29udGFpbnNMYXN0
UXVlcmllZFJvb3Q7Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3Jvb3RzLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFy
KCkKLSAgICB7Ci0gICAgICAgIG1fcm9vdHMuY2xlYXIoKTsKLSAgICAgICAgbV9sYXN0UXVlcmll
ZFJvb3QgPSBudWxscHRyOwotICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgYm9vbCBhZGQodm9pZCogcm9vdCkKLSAgICB7Ci0gICAgICAgIGlm
IChyb290ID09IG1fbGFzdFF1ZXJpZWRSb290KQotICAgICAgICAgICAgbV9jb250YWluc0xhc3RR
dWVyaWVkUm9vdCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmFkZChyb290KS5pc05l
d0VudHJ5OwotICAgIH0KLQotICAgIGludCBzaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3Jvb3RzLnNpemUoKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQqPjo6Y29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuYmVn
aW4oKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmVuZCgpOwotICAgIH0KLQotCi1w
cml2YXRlOgotICAgIEhhc2hTZXQ8dm9pZCo+IG1fcm9vdHM7Ci0gICAgbXV0YWJsZSB2b2lkKiBt
X2xhc3RRdWVyaWVkUm9vdDsKLSAgICBtdXRhYmxlIGJvb2wgbV9jb250YWluc0xhc3RRdWVyaWVk
Um9vdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5hbWUgSW5uZXJUeXBlLCB0eXBlbmFtZSBVbndy
YXBGdW5jPgorY2xhc3MgUGFyYWxsZWxTb3VyY2VBZGFwdGVyIDogcHVibGljIFNoYXJlZFRhc2s8
SW5uZXJUeXBlKCk+IHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRy
PFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYg
dW53cmFwRnVuYykKKyAgICAgICAgOiBtX291dGVyU291cmNlKG91dGVyU291cmNlKQorICAgICAg
ICAsIG1fdW53cmFwRnVuYyh1bndyYXBGdW5jKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5u
ZXJUeXBlIHJ1bigpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChtX2lubmVyU291cmNl
KSB7CisgICAgICAgICAgICAgICAgaWYgKElubmVyVHlwZSByZXN1bHQgPSBtX2lubmVyU291cmNl
LT5ydW4oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICBtX2lubmVyU291cmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9IHVud3JhcEZ1bmMobV9vdXRlclNvdXJjZS0+
cnVuKCkpOworICAgICAgICB9IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBtX291dGVyU291cmNlOwor
ICAgIFJlZlB0cjxTaGFyZWRUYXNrPElubmVyVHlwZSgpPj4gbV9pbm5lclNvdXJjZTsKKyAgICBM
b2NrIG1fbG9jazsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5hbWUg
SW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorUmVmPFBhcmFsbGVsU291cmNlQWRhcHRl
cjxPdXRlclR5cGUsIElubmVyVHlwZSwgVW53cmFwRnVuYz4+IGNyZWF0ZVBhcmFsbGVsU291cmNl
QWRhcHRlcihSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG91dGVyU291cmNlLCBjb25z
dCBVbndyYXBGdW5jJiB1bndyYXBGdW5jKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFy
YWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPihvdXRl
clNvdXJjZSwgdW53cmFwRnVuYykpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYp
PiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwg
Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQorICAgIDogTWFya2luZ0NvbnN0cmFp
bnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBw
YXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0
aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1
bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAor
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0
ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pCisgICAgLCBt
X2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCisgICAgLCBtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkK
K3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dCgpCit7Cit9CisKK2RvdWJsZSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0
aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKCFtX3F1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F1aWNrV29ya0Vz
dGltYXRlRnVuY3Rpb24odmlzaXRvcik7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50Lmgi
CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBT
aW1wbGVNYXJraW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CitwdWJs
aWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAg
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHks
CisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rp
b248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwK
KyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQ
YXJhbGxlbCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisKKyAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAgOjpGdW5jdGlv
bjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsOSArOTgsNyBA
QCBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3Rh
cnRNYXJraW5nKCkKIHsKLSAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xs
ZWN0aW9uU2NvcGU6OkZ1bGwpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BhcXVlUm9vdHMu
aXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KLSAgICBlbHNlCisgICAg
aWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKQog
ICAgICAgICByZXNldCgpOwogCiAgICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0g
dm0oKS5oZWFwUHJvZmlsZXIoKSkKQEAgLTExMSw3ICsxMDksNiBAQCB2b2lkIFNsb3RWaXNpdG9y
OjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBtX2J5dGVzVmlzaXRl
ZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIg
PSBudWxscHRyOwpAQCAtMjc3LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRv
TWFya1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUm
IGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAg
ICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFy
a2VkKCk7CkBAIC0zNDYsNyArMzQzLDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50
Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAgLTU2MSwxNyArNTU4LDE2IEBAIGJvb2wg
U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oKQogICAgIHJldHVybiBkaWRSZWFjaFRl
cm1pbmF0aW9uKGxvY2tlcik7CiB9CiAKLWJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWlu
YXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImKQorYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hU
ZXJtaW5hdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIHJldHVybiBp
c0VtcHR5KCkKLSAgICAgICAgJiYgIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzCi0gICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCi0gICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHko
KTsKKyAgICByZXR1cm4gIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCisg
ICAgICAgICYmICFoYXNXb3JrKGxvY2tlcik7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6Omhhc1dv
cmsoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewotICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVk
Q29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICByZXR1cm4gIWlzRW1wdHkoKQorICAg
ICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAg
ICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKIH0K
IApAQCAtNTgzLDEyICs1NzksMTQgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFyZWRE
cmFpblJlcwogCiAgICAgYm9vbCBpc0FjdGl2ZSA9IGZhbHNlOwogICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGJvbnVzVGFz
azsKKyAgICAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
aGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgICAgICAgICBpZiAoaXNBY3RpdmUpCiAgICAg
ICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKICAg
ICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycysrOwotCisg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJh
aW4pIHsKICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKQEAgLTYyOSwyOCArNjI3LDU3IEBAIE5FVkVSX0lO
TElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgICAgICAgICAgICAgIGF1dG8g
aXNSZWFkeSA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhh
c1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fYm9udXNW
aXNpdG9yVGFzawogICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFyYWxsZWxN
YXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAg
bV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChtX2hlYXAubV9tYXJr
aW5nTXV0ZXgsIHRpbWVvdXQsIGlzUmVhZHkpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmICghaGFzV29yayhsb2NrZXIpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVh
cC5tX2JvbnVzVmlzaXRvclRhc2spCisgICAgICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG1f
aGVhcC5tX2JvbnVzVmlzaXRvclRhc2s7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKLSAgICAgICAgICAgICAgICBbJl0gKE1hcmtT
dGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAgICAgICAgICAgY29y
cmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
aGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWJvbnVzVGFzayAmJiBpc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICBmb3JFYWNoTWFya1N0YWNrKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2spLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFy
a2Vycyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpD
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAg
ICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIGlmIChib251c1Rh
c2spIHsKKyAgICAgICAgICAgIGJvbnVzVGFzay0+cnVuKCp0aGlzKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHdvdWxkIG5vdCBoYXZlIHRvIGRvIHRo
aXMuIEhvd2V2ZXIsIHRoZSBwYXJhbGxlbCBtYXJraW5nIGFsZ29yaXRobSB3aWxsCisgICAgICAg
ICAgICAvLyBnZXQgY29uZnVzZWQgaWYgd2UgaW5pdGlhdGUgaXQgd2l0aCB0aGUgaGVscGVyIHZp
c2l0b3JzIGhhdmluZyBhbnl0aGluZyBpbiB0aGVpciBzdGFja3MuCisgICAgICAgICAgICAvLyBB
bHNvLCB0aGlzIHByb3RlY3RzIGJ1Z3MgdGhhdCBpbnZvbHZlIHJhY2VzIGJldHdlZW4gdmlzaXRD
aGlsZHJlbiBhbmQgb25lIG9mIHRoZQorICAgICAgICAgICAgLy8gY29uc3RyYWludHMuCisgICAg
ICAgICAgICAvL2RvbmF0ZUFsbCgpOworCisgICAgICAgICAgICAvLyBUaGUgbWFpbiB0aHJlYWQg
Y291bGQgc3RpbGwgYmUgcnVubmluZywgYW5kIG1heSBydW4gZm9yIGEgd2hpbGUuIFVubGVzcyB3
ZSBjbGVhciB0aGUgdGFzaworICAgICAgICAgICAgLy8gb3Vyc2VsdmVzLCB3ZSB3aWxsIGtlZXAg
bG9vcGluZyBhcm91bmQgdHJ5aW5nIHRvIHJ1biB0aGUgdGFzay4KKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRl
eCk7CisgICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPT0gYm9u
dXNUYXNrKQorICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID0g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFpc0VtcHR5KCkpOworICAgICAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGlzQWN0aXZlID0gdHJ1ZTsKICAgICB9CiB9CkBAIC02NzYsOSArNzAz
LDEzIEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAgICAg
cmV0dXJuIGRyYWluSW5QYXJhbGxlbCh0aW1lb3V0KTsKICAgICB9CiAKLSAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwotICAgIGRvbmF0ZUFsbChsb2NrZXIpOwot
ICAgIAorICAgIGRvbmF0ZUFsbChob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpKTsKKyAg
ICByZXR1cm4gd2FpdEZvclRlcm1pbmF0aW9uKHRpbWVvdXQpOworfQorCitTbG90VmlzaXRvcjo6
U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9u
aWNUaW1lIHRpbWVvdXQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9t
YXJraW5nTXV0ZXgpOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGlt
ZW91dCkpCiAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwpA
QCAtNzExLDYxICs3NDIsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbGwoY29uc3QgQWJz
dHJhCiAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwog
fQogCi12b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvb3QpCi17Ci0gICAg
aWYgKCFyb290KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1faWdub3JlTmV3T3Bh
cXVlUm9vdHMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6bnVtYmVy
T2ZHQ01hcmtlcnMoKSA9PSAxKSB7Ci0gICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBz
aGFyZWQgSGFzaFNldC4KLSAgICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1
dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KLSAgICAvLyBhIHdoaWxl
IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdlLgot
ICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJvb3RzLmFk
ZChyb290KTsKLX0KLQotYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQq
IHJvb3QpIGNvbnN0Ci17Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgIHJldHVybiBtX2hlYXAu
bV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKLX0KLQotVHJpU3RhdGUgU2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqIHJvb3QpIGNvbnN0Ci17Ci0gICAgaWYg
KCFyb290KQotICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKLSAgICAKLSAgICBpZiAobV9v
cGFxdWVSb290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsK
LSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4
KTsKLSAgICBpZiAobV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCkpCi0gICAgICAg
IHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Ci19Ci0KLXZv
aWQgU2xvdFZpc2l0b3I6Om1lcmdlSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX29wYXF1ZVJv
b3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsK
LX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpCi17
Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29wYXF1ZVJvb3RzLnNpemUoKSkgPCBP
cHRpb25zOjpvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1lcmdlT3BhcXVlUm9vdHMoKTsKLX0KLSAgICAKIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgp
CiB7CiAgICAgaWYgKCFtX2lzSW5QYXJhbGxlbE1vZGUpIHsKQEAgLTc4NSwxNiArNzYxLDYgQEAg
dm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oTW9ub3RvbgogICAgIGRyYWluKHRpbWVv
dXQpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzKCkKLXsKLSAgICB7
Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3Rz
TXV0ZXgpOwotICAgICAgICBmb3IgKGF1dG8qIHJvb3QgOiBtX29wYXF1ZVJvb3RzKQotICAgICAg
ICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotICAgIH0KLSAgICBtX29wYXF1
ZVJvb3RzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3Rlciogd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikK
IHsKICAgICBtX2hlYXAubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5hZGRUaHJlYWRTYWZlKHdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5j
bHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNs
dWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCiAjaW5jbHVkZSAi
VmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC05NSwxMCArOTQsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKICAgICB2b2lkIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkKEpTQ2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRP
cGFxdWVSb290KHZvaWQqKTsKKyAgICB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOwogICAgIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25z
dDsKLSAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7
CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogCiAgICAgYm9vbCBp
c0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9y
U3RhY2suaXNFbXB0eSgpOyB9CiAKQEAgLTEyMSw2ICsxMTksOCBAQCBwdWJsaWM6CiAKICAgICBT
aGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5J
blBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRGb3JUZXJtaW5h
dGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsK
IAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRyYWluaW5nIHRo
YXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4gVGhpcwogICAg
IC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0
LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpAQCAtMTk0LDEw
ICsxOTQsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxs
KEhlYXBDZWxsKik7CiAgICAgCi0gICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0KLSAgICB2
b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLQogICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihjb25zdCBKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwo
KTsKQEAgLTIxNSw3ICsyMTEsNiBAQCBwcml2YXRlOgogCiAgICAgTWFya1N0YWNrQXJyYXkgbV9j
b2xsZWN0b3JTdGFjazsKICAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKLSAgICBP
cGFxdWVSb290U2V0IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1
cmVzIG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KICAgICBib29sIG1faWdu
b3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9k
ZS4KICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjI1MTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsMjAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRWYQogICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwogfQog
CitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCit7Cisg
ICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVS
b290cykKKyAgICAgICAgcmV0dXJuOworICAgIGhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQocHRy
KTsKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lk
KiBwdHIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFxdWVSb290cy5jb250YWlu
cyhwdHIpOworfQorCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKHNpemVfdCBzaXplKQogewogICAgIGlmIChtX2lzRmlyc3RWaXNpdCkgewpAQCAtMTU5
LDEyICsxNzMsMTIgQEAgaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKIAog
aW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07
CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogaW5saW5lIGNvbnN0IFZNJiBTbG90Vmlz
aXRvcjo6dm0oKSBjb25zdAogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJu
ICptX2hlYXAudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYwLDYgKzE2MCw0MyBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9j
YXRvciooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpCit7CisgICAgY2xh
c3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4geworICAgIHB1
YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICAgICAg
ICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAg
TWFya2VkQWxsb2FjdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvcjsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQpCisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3IgPSByZXN1bHQtPm5leHRBbGxvY2F0
b3JJblN1YnNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Cisg
ICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0
b3I7CisgICAgICAgIExvY2sgbV9sb2NrOworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUYXNrKG1fZmlyc3RBbGxvY2F0b3IpKTsKK30KKworUmVmUHRyPFNoYXJlZFRhc2s8
TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2Vk
QmxvY2tTb3VyY2UoKQoreworICAgIHJldHVybiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8
TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkQmxvY2s6OkhhbmRsZSo+KAorICAgICAgICBwYXJhbGxl
bEFsbG9jYXRvclNvdXJjZSgpLAorICAgICAgICBbXSAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IpIC0+IFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiB7CisgICAg
ICAgICAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPnBhcmFsbGVsTm90RW1wcnR5QmxvY2tTb3Vy
Y2UoKTsKKyAgICAgICAgfSk7Cit9CisKIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE3ICs4MSwyNCBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3Io
Y29uc3QgRnVuYyYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRv
ciooKT4+IHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCk7CisgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hOb3RFbXB0
eU1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxN
YXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNl
KCk7CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hM
YXJnZUFsbG9jYXRpb24oY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZUlubGluZXMuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDUyIEBAIHZv
aWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KK1JlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnNw
YWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAg
ICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7Cisg
ICAgcHVibGljOgorICAgICAgICBUYXNrKFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVuYyYg
ZnVuYykKKyAgICAgICAgICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKKyAgICAgICAgICAgICwg
bV9ibG9ja1NvdXJjZShzdWJzcGFjZS5wYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2Uo
KSkKKyAgICAgICAgICAgICwgbV9mdW5jKGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUg
PSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFj
aE1hcmtlZENlbGwoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhl
YXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2Z1bmModmlzaXRvciwgY2VsbCwga2luZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIG1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25z
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3Vi
c3BhY2UuZm9yRWFjaExhcmdlQWxsb2NhdGlvbigKKyAgICAgICAgICAgICAgICBbJl0gKExhcmdl
QWxsb2NhdGlvbiogYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb2Nh
dGlvbi0+aXNNYXJrZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuYyh2aXNpdG9y
LCBhbGxvY2F0aW9uLT5jZWxsKCksIG1fYXR0cmlidXRlcy5jZWxsS2luZCk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vi
c3BhY2UmIG1fc3Vic3BhY2U7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKCk+PiBtX2Jsb2NrU291cmNlOworICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAg
ICAgYm9vbCBtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyB7IHRydWUgfTsKKyAgICB9Owor
ICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcywgZnVuYykpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaExpdmVDZWxsKGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yRWFjaE1hcmtlZEJsb2NrKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZpc2l0Q291bnRlciB7Citw
dWJsaWM6CisgICAgVmlzaXRDb3VudGVyKCkgeyB9CisgICAgCisgICAgVmlzaXRDb3VudGVyKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKKyAgICAg
ICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmlzaXRvci0+dmlzaXRDb3VudCgpIC0gbV9pbml0aWFsVmlzaXRDb3VudDsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxscHRy
IH07CisgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdU
aW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRp
bmdUaW1lb3V0LmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNs
dWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBWaXNpdGluZ1RpbWVvdXQgewotcHVibGljOgotICAgIFZpc2l0aW5nVGltZW91dCgp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBWaXNpdGluZ1RpbWVvdXQoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAg
ICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZpc2l0U29tZXRoaW5nKQotICAgICAgICAs
IG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0Q291bnQoKSkKLSAgICAgICAgLCBtX3Rp
bWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCB2aXNpdENvdW50
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHZpc2l0
b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENvdW50QmVmb3JlOwotICAgIH0KLQotICAgIGJvb2wg
ZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8fCB2aXNpdENvdW50KHZpc2l0b3IpOwot
ICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcikg
JiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgYm9v
bCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKLSAgICBzaXplX3QgbV92aXNpdENvdW50
QmVmb3JlIHsgMCB9OwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2Nr
LmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgV2Vha0Js
b2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7Ci0gICAgICAgIGlm
IChjb250YWluZXIuaXNNYXJrZWRDb25jdXJyZW50bHkobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUu
YXNDZWxsKCkpKQorICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9u
LCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAg
ICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhh
bmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFsdWUpKSwg
d2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvcikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MDEsMTQgKzExMDEsMTQgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQygpCiAgICAg
Ly8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9i
YWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9nbG9iYWxPYmplY3QuZ2V0
KCkpKQotICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVj
dCgpIHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHN0b3JlZFByb3RvdHlwZU9iamVjdCgp
KSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWQobV9nbG9i
YWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFBy
b3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgp
KSk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQygpKQotICAgICAgICByZXR1cm4gSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcyk7CisgICAgICAgIHJldHVybiBIZWFwOjppc01hcmtl
ZCh0aGlzKTsKICAgICAKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAg
IHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAvKiBCZWdpbiBQQlhC
dWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBGNTI2QjFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5n
TWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMEY1MjY5MUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwICovOyB9OwogCQkw
RjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4
NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgKi87IH07CisJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMy
MyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVu
dFB0ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0
b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNDNEOEVGMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICov
OyB9OwogCQkwRjVCRjE3NjFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNzQxRjIzRDQ5QTAw
MjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLzsgfTsKIAkJMEY2MEYzMkYxREZDQkQxQjAwNDE2RDZD
IC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0
cmVhbS5jcHAgKi87IH07CkBAIC0xODEsNiArMTgyLDggQEAKIAkJMEYzMEJBOEQxRTc4NzA4RTAw
MkNBODQ3IC8qIExvZ2dpbmdIYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExvZ2dpbmdIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBC
QThFMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjMwQkE4RjFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hUcmFpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hUcmFpdHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENv
bmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzFERDcwMUYxMzA4QkMwMDcyRUI0QSAvKiBM
b2NrQWxnb3JpdGhtSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0OEM3RDFGNDdBQTlEMDAzQ0ZF
RjIgLyogU3RyaW5nVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ZlY3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vh
a1JhbmRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmFuZG9tLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODcsNiArNzkwLDggQEAKIAkJCQkwRjhG
MkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0
NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVBQjFGNENE
NjFFMDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1ODFGQ0RG
MTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBGMzBDQjU5
MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJCTBGREI2
OThEMUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEyNjFFQjRF
MDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5
NTdEIC8qIENQVVRpbWUuaCAqLywKQEAgLTE0MTMsNiArMTQxOCw3IEBACiAJCQkJMEY4MjRBNjgx
Qjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFG
MTc1MkIxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFGMTc1MkMxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnREZWNvZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25jdXJy
ZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyRDFGM0Q0ODYwMDBD
NzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMz
NjIxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYvQXRvbWlj
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsMTEgKzM0NiwxNiBAQCBBTFdBWVNfSU5MSU5FIERl
cGVuZGVuY3kgbnVsbERlcGVuZGVuY3koCiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUq
ID0gbnVsbHB0cj4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSBEZXBlbmRl
bmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAg
IHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICB1bmlv
biB7CisgICAgICAgIHVpbnQzMl90IGNvcHk7CisgICAgICAgIFQgdmFsdWU7CisgICAgfSB1Owor
ICAgIHUuY29weSA9IDA7CisgICAgdS52YWx1ZSA9IHZhbHVlOwogI2lmIENQVShBUk02NCkKICAg
ICAvLyBDcmVhdGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNzZW1ibHks
IHdob3NlIGNvbXB1dGF0aW9uCiAgICAgLy8gaXNuJ3QgdmlzaWJsZSB0byB0aGUgb3B0aW1pemVy
LiBUaGlzIHplcm8gaXMgdGhlbiB1c2FibGUgYXMgYW4gb2Zmc2V0IGluCkBAIC0zNjMsODAgKzM2
OCwyMCBAQCBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhCiAgICAgLy8g
b3IgYW4gYWNxdWlyZSBsb2FkLgogICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0s
ICV3W2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAg
ICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbGlm
IENQVShBUk0pCiAgICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5dIgogICAg
ICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIo
Y29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2Vsc2UKICAgICAvLyBObyBk
ZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCiAgICAgbG9hZExvYWRG
ZW5jZSgpOwogICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKKyAg
ICBVTlVTRURfUEFSQU0odS5jb3B5KTsKICNlbmRpZgogICAgIHJldHVybiBkZXBlbmRlbmN5Owog
fQogCi0vLyBGSVhNRTogVGhpcyBjb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG90aGVy
IGRlcGVuZGVuY3koKSBvdmVybG9hZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjk0MDUKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzaXplb2YoVCkgPT0gND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5j
eTsKLSAgICB1aW50MzJfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSk7Ci0j
aWYgQ1BVKEFSTTY0KQotICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2lu
XSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtp
bl0gInIiKGNvcHkpKTsKLSNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5
XSwgJVtpbl0sICVbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kp
Ci0gICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2Vsc2UKLSAgICBsb2FkTG9hZEZlbmNlKCk7
Ci0gICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOwotI2VuZGlmCi0g
ICAgcmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRl
cGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUq
ID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdpdGggewotcHVi
bGljOgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5KG51bGxEZXBl
bmRlbmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVw
ZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKLSAgICAg
ICAgOiBkZXBlbmRlbmN5KGRlcGVuZGVuY3kpCi0gICAgICAgICwgdmFsdWUodmFsdWUpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7Ci0gICAgVCB2YWx1ZTsK
LX07Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIERlcGVuZGVuY3lXaXRoPFQ+
IGRlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsKLX0KLQog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUKiBjb25zdW1lKFQqIHBvaW50ZXIsIERlcGVu
ZGVuY3kgZGVwZW5kZW5jeSkKIHsKQEAgLTQ2OSwxMCArNDE0LDggQEAgQUxXQVlTX0lOTElORSBU
JiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKgogCiB1c2luZyBXVEY6OkF0b21pYzsKIHVzaW5nIFdU
Rjo6RGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmNv
bnN1bWU7CiB1c2luZyBXVEY6OmRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRo
OwogdXNpbmcgV1RGOjplbnN1cmVQb2ludGVyOwogdXNpbmcgV1RGOjpudWxsRGVwZW5kZW5jeTsK
IApJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDEzIEBAIHB1YmxpYzog
CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICBpdGVyYXRv
ciBvcGVyYXRvcisrKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0
ID0gKnRoaXM7CisgICAgICAgICAgICArKygqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisKICAgICAgICAgYm9vbCBpc0F0RW5kKCkgY29uc3QKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPj0gbV9iaXRWZWN0b3ItPnNpemUoKTsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsNyBAQCBzZXQoV1RG
X0hFQURFUlMKICAgICBDbG9ja1R5cGUuaAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmgKICAgICBD
b21waWxlci5oCisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQuaAogICAgIENvbmRpdGlvbi5oCiAg
ICAgQ3Jvc3NUaHJlYWRDb3BpZXIuaAogICAgIENyb3NzVGhyZWFkVGFzay5oCkBAIC0yMTYsNiAr
MjE3LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgQ1BVVGltZS5jcHAKICAgICBDbG9ja1R5cGUu
Y3BwCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuY3BwCisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQu
Y3BwCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY1V0aWxpdGll
cy5jcHAKICAgICBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25jdXJyZW50UHRySGFzaFNldC5oIgor
CituYW1lc3BhY2UgV1RGIHsKKworQ29uY3VycmVudFB0ckhhc2hTZXQ6OkNvbmN1cnJlbnRQdHJI
YXNoU2V0KCkKK3sKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0NvbmN1cnJlbnRQdHJIYXNoU2V0
Ojp+Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNo
U2V0OjpkZWxldGVPbGRUYWJsZXMoKQoreworICAgIC8vIFRoaXMgaXMganVzdCBpbiBjYXNlLiBJ
dCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRvIGNhbGwgYWRkKCkuIEJ1
dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBpZiB3ZSBkaWQgbWFr
ZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOyAKKyAg
ICAKKyAgICBtX2FsbFRhYmxlcy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChzdGQ6
OnVuaXF1ZV9wdHI8VGFibGU+JiB0YWJsZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
dGFibGUuZ2V0KCkgIT0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB9KTsKK30KKwor
dm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6Y2xlYXIoKQoreworICAgIC8vIFRoaXMgaXMganVz
dCBpbiBjYXNlLiBJdCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRvIGNh
bGwgYWRkKCkuIEJ1dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBp
ZiB3ZSBkaWQgbWFrZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOyAKKyAgICAKKyAgICBtX2FsbFRhYmxlcy5jbGVhcigpOworICAgIGluaXRpYWxpemUo
KTsKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6aW5pdGlhbGl6ZSgpCit7CisgICAg
Y29uc3RleHByIHVuc2lnbmVkIGluaXRpYWxTaXplID0gMzI7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFRhYmxlPiB0YWJsZSA9IFRhYmxlOjpjcmVhdGUoaW5pdGlhbFNpemUpOworICAgIG1fdGFibGUu
c3RvcmVSZWxheGVkKHRhYmxlLmdldCgpKTsKKyAgICBtX2FsbFRhYmxlcy5hcHBlbmQoV1RGTW92
ZSh0YWJsZSkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRTbG93KFRhYmxl
KiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgaW5k
ZXgsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAodGFibGUtPmxvYWQuZXhjaGFuZ2VBZGQoMSkgPj0g
dGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuIHJlc2l6ZUFuZEFkZChwdHIpOworICAg
IAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdm9pZCogb2xkRW50cnkgPSB0YWJsZS0+YXJyYXlb
aW5kZXhdLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhudWxscHRyLCBwdHIpOworICAgICAgICBpZiAo
IW9sZEVudHJ5KSB7CisgICAgICAgICAgICBpZiAobV90YWJsZS5sb2FkKCkgIT0gdGFibGUpIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSBhZGRlZCBhbiBlbnRyeSB0byBhbiBvbGQgdGFibGUhIFdl
IG5lZWQgdG8gcmVleGVjdXRlIHRoZSBhZGQgb24gdGhlIG5ldyB0YWJsZS4KKyAgICAgICAgICAg
ICAgICByZXR1cm4gYWRkKHB0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2xkRW50cnkgPT0gcHRyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgfQorfQorCit2
b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVJZk5lY2Vzc2FyeSgpCit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUu
bG9hZFJlbGF4ZWQoKTsKKyAgICBpZiAodGFibGUtPmxvYWQubG9hZFJlbGF4ZWQoKSA8IHRhYmxl
LT5tYXhMb2FkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
VGFibGU+IG5ld1RhYmxlID0gVGFibGU6OmNyZWF0ZSh0YWJsZS0+c2l6ZSAqIDIpOworICAgIHVu
c2lnbmVkIG1hc2sgPSBuZXdUYWJsZS0+bWFzazsKKyAgICB1bnNpZ25lZCBsb2FkID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUtPnNpemU7ICsraSkgeworICAgICAgICB2
b2lkKiBwdHIgPSB0YWJsZS0+YXJyYXlbaV0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgaWYgKCFw
dHIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHN0
YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0
YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIEF0b21pYzx2b2lkKj4m
IGVudHJ5UmVmID0gdGFibGUtPmFycmF5W2luZGV4XTsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5
ID0gZW50cnlSZWYubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50cnkpIHsKKyAg
ICAgICAgICAgICAgICBlbnRyeVJlZi5zdG9yZVJlbGF4ZWQocHRyKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5
ICE9IHB0cik7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBsb2FkKys7CisgICAgfQorICAgIAorICAgIG5ld1RhYmxlLT5sb2Fk
LnN0b3JlUmVsYXhlZChsb2FkKTsKKyAgICAKKyAgICBtX3RhYmxlLnN0b3JlKG5ld1RhYmxlLmdl
dCgpKTsKK30KKworYm9vbCBDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKHZvaWQq
IHB0cikKK3sKKyAgICByZXNpemVJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBhZGQocHRyKTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gQ29uY3Vy
cmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlPiByZXN1bHQobmV3IChmYXN0
TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgYXJyYXkpICsgc2l6ZW9mKEF0b21pYzx2b2lk
Kj4pICogc2l6ZSkpIFRhYmxlKCkpOworICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAgcmVz
dWx0LT5tYXNrID0gc2l6ZSAtIDE7CisgICAgcmVzdWx0LT5sb2FkLnN0b3JlUmVsYXhlZCgwKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICByZXN1bHQt
PmFycmF5W2ldLnN0b3JlUmVsYXhlZChudWxscHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0
ckhhc2hTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFz
aFNldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNo
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKKy8vIFRoaXMgaXMgYSBjb25jdXJyZW50IGhhc2gtYmFzZWQgc2V0IGZvciBwb2ludGVycy4g
SXQncyBvcHRpbWl6ZWQgZm9yOgorLy8KKy8vIC0gSGlnaCByYXRlIG9mIGNvbnRhaW5zKCkgY2Fs
bHMuCisvLyAtIEhpZ2ggcmF0ZSBvZiBhZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGlu
ZyBuZXcuIGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIChub3AgYWRkcykKKy8v
ICAgZG9uJ3QgbXV0YXRlIHRoZSB0YWJsZSBhdCBhbGwuCisvLyAtIE5vdCB0b28gbWFueSB0aHJl
YWRzLiBJIGRvdWJ0IHRoaXMgc2NhbGVzIGJleW9uZCB+NC4gVGhvdWdoLCBpdCBtYXkgYWN0dWFs
bHkgc2NhbGUgYmV0dGVyIHRoYW4gdGhhdAorLy8gICBpZiB0aGUgcmF0ZSBvZiBub3AgYWRkcyBp
cyBhYnN1cmRseSBoaWdoLgorLy8KKy8vIElmIHdlIHdhbnRlZCB0aGlzIHRvIHNjYWxlIGJldHRl
ciwgdGhlIG1haW4gY2hhbmdlIHdlJ2QgaGF2ZSB0byBtYWtlIGlzIGhvdyB0aGlzIHRhYmxlIGRl
dGVybWluZXMgd2hlbgorLy8gdG8gcmVzaXplLiBSaWdodCBub3cgaXQncyBhIHNoYXJlZCBjb3Vu
dGVyLiBXZSBsb2NrO3hhZGQgdGhpcyBjb3VudGVyLiBPbmUgZWFzeSB3YXkgdG8gbWFrZSB0aGF0
CisvLyBzY2FsYWJsZSBpcyB0byByZXF1aXJlIGVhY2ggdGhyZWFkIHRoYXQgd29ya3Mgd2l0aCB0
aGUgQ29uY3VycmVudFB0ckhhc2hTZXQgdG8gcmVnaXN0ZXIgaXRzZWxmIGZpcnN0LgorLy8gVGhl
biBlYWNoIHRocmVhZCB3b3VsZCBoYXZlIHNvbWUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSBj
b3VudGVyLiBXZSBjb3VsZCBpbnN0aXR1dGUgdGhlIHBvbGljeSB0aGF0CisvLyBlYWNoIHRocmVh
ZCBzaW1wbHkgaW5jcmVtZW50cyBpdHMgb3duIGxvYWQgY291bnRlciwgaW4gaXRzIG93biBkYXRh
IHN0cnVjdHVyZS4gVGhlbiwgaWYgYW55IHNlYXJjaCB0bworLy8gcmVzb2x2ZSBhIGNvbGxpc2lv
biBkb2VzIG1vcmUgdGhhbiBOIGl0ZXJhdGlvbnMsIHdlIGNhbiBjb21wdXRlIGEgY29tYmluZWQg
bG9hZCBieSBzdW1taW5nIHRoZSBsb2FkCisvLyBjb3VudGVycyBvZiBhbGwgb2YgdGhlIHRocmVh
ZCBkYXRhIHN0cnVjdHVyZXMuCisvLworLy8gQ29uY3VycmVudFB0ckhhc2hTZXQncyBtYWluIHVz
ZXIsIHRoZSBHQywgc2VlcyBhIDk4JSBub3AgYWRkIHJhdGUgaW4gU3BlZWRvbWV0ZXIuIFRoYXQn
cyB3aHkgdGhpcworLy8gZm9jdXNlcyBzbyBtdWNoIG9uIGNhc2VzIHdoZXJlIHRoZSB0YWJsZSBk
b2VzIG5vdCBjaGFuZ2UuCitjbGFzcyBDb25jdXJyZW50UHRySGFzaFNldCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudFB0ckhhc2hTZXQpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIENvbmN1cnJlbnRQ
dHJIYXNoU2V0KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5Db25jdXJyZW50UHRySGFzaFNl
dCgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBjb250YWlucyhU
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5zSW1wbChjYXN0KHZhbHVlKSk7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBhZGQoVCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRJbXBsKGNhc3QodmFsdWUpKTsKKyAgICB9
CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dGFibGUubG9hZFJlbGF4ZWQoKS0+bG9hZC5sb2FkUmVsYXhlZCgpOworICAgIH0KKyAgICAKKyAg
ICAvLyBPbmx5IGNhbGwgd2hlbiB5b3Uga25vdyB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gY2Fs
bCBhbnkgbm9uLWNvbnN0IG1ldGhvZHMgcmlnaHQgbm93LiBUaGlzIGZyZWVzCisgICAgLy8gdXAg
bWVtb3J5IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZS4KKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVPbGRUYWJsZXMoKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBjbGVhcigpOworICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVGFibGUg
eworICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIAorICAg
ICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBjcmVhdGUodW5zaWduZWQgc2l6ZSk7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBtYXhMb2FkKCkgY29uc3QgeyByZXR1cm4gc2l6
ZSAvIDI7IH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHNpemU7IC8vIFRoaXMgaXMgaW1t
dXRhYmxlLgorICAgICAgICB1bnNpZ25lZCBtYXNrOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4KKyAg
ICAgICAgQXRvbWljPHVuc2lnbmVkPiBsb2FkOworICAgICAgICBBdG9taWM8dm9pZCo+IGFycmF5
WzFdOworICAgIH07CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2godm9pZCogcHRyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKHB0cik7CisgICAgfQor
ICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgdm9pZCogY2FzdChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoVCkgPD0gc2l6ZW9mKHZvaWQqKSwgInR5cGUgdG9vIGJpZyIpOworICAgICAgICB1
bmlvbiB7CisgICAgICAgICAgICB2b2lkKiBwdHI7CisgICAgICAgICAgICBUIHZhbHVlOworICAg
ICAgICB9IHU7CisgICAgICAgIHUucHRyID0gbnVsbHB0cjsKKyAgICAgICAgdS52YWx1ZSA9IHZh
bHVlOworICAgICAgICByZXR1cm4gdS5wdHI7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFp
bnNJbXBsKHZvaWQqIHB0cikgY29uc3QKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1f
dGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNr
OworICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsK
KyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgaWYgKGVudHJ5ID09IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGEgbmV3IGVudHJ5IHdhcyBhZGRlZC4KKyAgICBi
b29sIGFkZEltcGwodm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxlID0gbV90
YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUtPm1hc2s7
CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgIHZvaWQqIGVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhlZCgpOwor
ICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkU2xvdyh0
YWJsZSwgbWFzaywgc3RhcnRJbmRleCwgaW5kZXgsIHB0cik7CisgICAgICAgICAgICBpZiAoZW50
cnkgPT0gcHRyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5k
ZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgYWRkU2xvdyhUYWJsZSogdGFibGUsIHVuc2lnbmVkIG1hc2ssIHVuc2ln
bmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4LCB2b2lkKiBwdHIpOworCisgICAgdm9pZCBy
ZXNpemVJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wgcmVzaXplQW5kQWRkKHZvaWQqIHB0cik7Cisg
ICAgCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4sIDQ+IG1fYWxsVGFibGVzOwor
ICAgIEF0b21pYzxUYWJsZSo+IG1fdGFibGU7IC8vIFRoaXMgaXMgbmV2ZXIgbnVsbC4KKyAgICBM
b2NrIG1fbG9jazsgLy8gV2UganVzdCB1c2UgdGhpcyB0byBjb250cm9sIHJlc2l6ZSByYWNlcy4K
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNvbmN1cnJlbnRQdHJIYXNo
U2V0OwpJbmRleDogU291cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDExIEBAIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgYXBwZW5kQW5kQnViYmxl
KFUmJiwgY29uc3QgRnVuYyYpOwogICAgIAorICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBm
aXJzdCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5z
IGEgbnVsbCB2ZXJzaW9uIG9mCisgICAgLy8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJl
dHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRha2VGaXJz
dChjb25zdCBGdW5jJik7CisKICAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgbGFzdCBlbGVt
ZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2
ZXJzaW9uIG9mCiAgICAgLy8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFs
c2UuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KQEAgLTU3MSw2ICs1NzYsMjUgQEAgaW5s
aW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcAogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5s
aW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlRmlyc3QoY29uc3QgRnVuYyYgZnVu
YykKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgdW5zaWduZWQgc2l6ZSA9IHRoaXMt
PnNpemUoKTsKKyAgICB3aGlsZSAoY291bnQgPCBzaXplKSB7CisgICAgICAgIFQgY2FuZGlkYXRl
ID0gdGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAg
ICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAgIHByZXBlbmQodGFrZUxhc3QoKSk7
CisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAgICB9CisgICAgICAgIGNvdW50
Kys7CisgICAgICAgIGFwcGVuZChXVEZNb3ZlKGNhbmRpZGF0ZSkpOworICAgIH0KKyAgICByZXR1
cm4gVCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogaW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+Ojp0YWtlTGFzdChjb25zdCBGdW5jJiBmdW5jKQogewogICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYv
d3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw3IEBAIHVzaW5n
IFdURjo6ZmFzdEFsaWduZWRGcmVlOwogI2RlZmluZSBXVEZfUFJJVkFURV9JTkxJTkUgaW5saW5l
CiAjZW5kaWYKIAotI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBcCi1wdWJsaWM6IFwK
KyNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfSU1QTCBcCiAgICAgdm9pZCogb3BlcmF0
b3IgbmV3KHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgdm9pZCogb3BlcmF0
b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IFwKICAgICBcCkBAIC0yNjMs
NyArMjYyLDE1IEBAIHB1YmxpYzogXAogICAgICAgICBBU1NFUlQobG9jYXRpb24pOyBcCiAgICAg
ICAgIHJldHVybiBsb2NhdGlvbjsgXAogICAgIH0gXAorCisjZGVmaW5lIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEIFwKK3B1YmxpYzogXAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwg
XAogcHJpdmF0ZTogXAogdHlwZWRlZiBpbnQgX190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25B
ZnRlclRoaXNNYWNybwogCisjZGVmaW5lIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRCBc
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfSU1QTCBcCit0eXBlZGVmIGludCBfX3RoaXNJ
c0hlcmVUb0ZvcmNlQVNlbWljb2xvbkFmdGVyVGhpc01hY3JvCisKICNlbmRpZiAvKiBXVEZfRmFz
dE1hbGxvY19oICovCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDEx
IEBAIG5hbWVzcGFjZSBXVEYgewogLy8gc3RhdGUgaW4gbWVtYmVyIGZpZWxkcy4gVGhpcyBjYW4g
YmUgbW9yZSBuYXR1cmFsIGlmIHlvdSB3YW50IGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgd2hh
dAogLy8gc3RhdGUgaXMgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoZSB0YXNrLgogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTaGFyZWRUYXNrOwotdGVtcGxhdGU8
dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KLWNsYXNzIFNo
YXJlZFRhc2s8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNzZWRSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dFR5cGVzPgorY2xhc3MgU2hhcmVkVGFzazxQYXNzZWRSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVz
Li4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFzazxQYXNzZWRSZXN1
bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3Nl
ZFJlc3VsdFR5cGUgUmVzdWx0VHlwZTsKKyAgICAKICAgICBTaGFyZWRUYXNrKCkgeyB9CiAgICAg
dmlydHVhbCB+U2hhcmVkVGFzaygpIHsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMgQEAKKyNwcmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50Lmg+CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1MTc4KQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDIgKzAsMCBAQAotI3ByYWdtYSBvbmNlCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVmlzaXRpbmdUaW1lb3V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjI1
MTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMCBAQAogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgPGhlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9NYXJraW5n
Q29uc3RyYWludC5oPgogI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgog
I2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oPgogI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8aGVhcC9WaXNpdGluZ1RpbWVvdXQuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZN
Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIApAQCAtNzIsNDMgKzcxLDY3IEBAIHZv
aWQgSlNWTUNsaWVudERhdGE6OmluaXROb3JtYWxXb3JsZChWTSoKICAgICBKU1ZNQ2xpZW50RGF0
YSogY2xpZW50RGF0YSA9IG5ldyBKU1ZNQ2xpZW50RGF0YSgqdm0pOwogICAgIHZtLT5jbGllbnRE
YXRhID0gY2xpZW50RGF0YTsgLy8gflZNIGRlbGV0ZXMgdGhpcyBwb2ludGVyLgogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAot
ICAgICAgICAiV2NvYyIsICJXZWJDb3JlIE91dHB1dCBDb25zdHJhaW50cyIsCi0gICAgICAgIFt2
bSwgY2xpZW50RGF0YSwgbGFzdEV4ZWN1dGlvblZlcnNpb24gPSB2bS0+aGVhcC5tdXRhdG9yRXhl
Y3V0aW9uVmVyc2lvbigpXQotICAgICAgICAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2
bS0+aGVhcDsKKyAgICBjbGFzcyBOb3JtYWxXb3JsZENvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2lu
Z0NvbnN0cmFpbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgTm9ybWFsV29ybGRDb25zdHJhaW50
KFZNJiB2bSwgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEpCisgICAgICAgICAgICA6IE1hcmtp
bmdDb25zdHJhaW50KCJXY29jIiwgIldlYkNvcmUgT3V0cHV0IENvbnN0cmFpbnRzIiwgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCkKKyAgICAgICAgICAgICwgbV92bSh2bSkKKyAg
ICAgICAgICAgICwgbV9jbGllbnREYXRhKGNsaWVudERhdGEpCisgICAgICAgICAgICAsIG1fbGFz
dEV4ZWN1dGlvblZlcnNpb24odm0uaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpKQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkg
PT0gbGFzdEV4ZWN1dGlvblZlcnNpb24pCisgICAgICAgICAgICBpZiAoaGVhcC5tdXRhdG9yRXhl
Y3V0aW9uVmVyc2lvbigpID09IG1fbGFzdEV4ZWN1dGlvblZlcnNpb24pCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0RXhlY3V0aW9uVmVyc2lv
biA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKKyAgICAgICAgICAgIG1fbGFzdEV4
ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CiAKICAgICAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gbWFuYWdlIHRoZSB2aXNpdCBjb3VudCBoZXJlIG91cnNlbHZl
cy4gV2UgbmVlZCB0byBrbm93IHRoYXQgaWYgdGhpcyBhZGRzCiAgICAgICAgICAgICAvLyBvcGFx
dWUgcm9vdHMgdGhlbiB3ZSBjYW5ub3QgZGVjbGFyZSB0ZXJtaW5hdGlvbiB5ZXQuIFRoZSB3YXkg
d2Ugc2lnbmFsIHRoaXMgdG8gdGhlCiAgICAgICAgICAgICAvLyBjb25zdHJhaW50IHNvbHZlciBp
cyBieSBhZGRpbmcgdG8gdGhlIHZpc2l0IGNvdW50LgorICAgICAgICAgICAgbV9udW1PcGFxdWVS
b290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9vdHMoKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2l6ZV90IG51bU9wYXF1ZVJvb3RzQmVmb3JlID0gaGVhcC5udW1PcGFxdWVSb290cygp
OwotCi0gICAgICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHBhcmFsbGVsIQotICAgICAgICAg
ICAgdW5zaWduZWQgbnVtUmV2aXNpdGVkID0gMDsKLSAgICAgICAgICAgIGNsaWVudERhdGEtPmZv
ckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X3Rhc2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1
dENvbnN0cmFpbnRTcGFjZSgKICAgICAgICAgICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFj
ZSkgewotICAgICAgICAgICAgICAgICAgICBzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6
S2luZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRp
Y19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
ZWxsLT5tZXRob2RUYWJsZSgqdm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHNsb3RW
aXNpdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1SZXZpc2l0ZWQrKzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBhdXRvIGZ1bmMg
PSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6
OktpbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPm1l
dGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlz
aXRvcik7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBtX3Rhc2tzLmFwcGVuZChzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2Vs
bEluUGFyYWxsZWwoZnVuYykpOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiKCIsIG51bVJldmlz
aXRlZCwgIikiKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90VmlzaXRvci5hZGRU
b1Zpc2l0Q291bnQoaGVhcC5udW1PcGFxdWVSb290cygpIC0gbnVtT3BhcXVlUm9vdHNCZWZvcmUp
OwotICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVk
KTsKLSAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKKyAgICAgICAgICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90
VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChh
dXRvJiB0YXNrIDogbV90YXNrcykKKyAgICAgICAgICAgICAgICB0YXNrLT5ydW4odmlzaXRvcik7
CisgICAgICAgICAgICB2aXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB2aXNpdG9yLmFkZFRvVmlz
aXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBtX251bU9wYXF1ZVJvb3RzQmVmb3JlKTsK
KyAgICAgICAgICAgIG1fdGFza3MuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBWTSYgbV92bTsKKyAgICAgICAgSlNWTUNsaWVudERhdGEmIG1fY2xp
ZW50RGF0YTsKKyAgICAgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsKKyAgICAg
ICAgc2l6ZV90IG1fbnVtT3BhcXVlUm9vdHNCZWZvcmUgeyAwIH07CisgICAgICAgIFZlY3RvcjxS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4gbV90YXNrczsKKyAgICB9OworICAgIAorICAgIHZt
LT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6bWFrZV91bmlxdWU8Tm9ybWFsV29ybGRD
b25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7CiAgICAgICAgIAogICAgIGNsaWVudERhdGEt
Pm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSgqdm0sIHRydWUpOwogICAg
IHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCShyZXZpc2lv
biAyMjUxNzgpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsOCBAQCBMT05HU1BJREVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RT
X1BBVEggCiBWOF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlN1blNwaWRlciIgKyAi
dGVzdHMiICsgInY4LXY2IgogVEFJTEJFTkNIX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEgg
KyAiVGFpbEJlbmNoOTAwMCIKIE1JQ1JPQkVOQ0hNQVJLU19QQVRIID0gT1BFTlNPVVJDRV9QQVRI
ICsgIkpTVGVzdHMiICsgIm1pY3JvYmVuY2htYXJrcyIKLU9DVEFORV9XUkFQUEVSX1BBVEggPSBQ
RVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiT2N0YW5lIiArICJ3cmFwcGVycyIKK09QRU5TT1VSQ0Vf
T0NUQU5FX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiT2N0YW5lIgorT0NUQU5FX1dS
QVBQRVJfUEFUSCA9IE9QRU5TT1VSQ0VfT0NUQU5FX1BBVEggKyAid3JhcHBlcnMiCiBKU0JFTkNI
X1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiSlNCZW5jaCIKIFNJWFNQRUVEX1BBVEgg
PSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU2l4U3BlZWQiICsgInRlc3RzIgogU0lYU1BFRURf
V1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ3cmFw
cGVycyIKQEAgLTg0MSw2ICs4NDIsMjAgQEAgY2xhc3MgU2luZ2xlRmlsZVRpbWVkQmVuY2htYXJr
UGFyYW1ldGVycwogICBlbmQKIGVuZAogCisjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIGEg
c2luZ2xlIGZpbGUgYW5kIG11c3QgYmUgbG9hZGVkIGluIGl0cyBvd24gZ2xvYmFsIG9iamVjdCBl
YWNoCisjIHRpbWUgKGkuZS4gcnVuKCkpLCBidXQgcmV0dXJucyBpdHMgcmVzdWx0IGluIGEgY3Vz
dG9tIHdheS4KK2NsYXNzIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFya1BhcmFtZXRlcnMK
KyAgYXR0cl9yZWFkZXIgOmJlbmNoUGF0aAorICAKKyAgZGVmIGluaXRpYWxpemUoYmVuY2hQYXRo
KQorICAgIEBiZW5jaFBhdGggPSBiZW5jaFBhdGgKKyAgZW5kCisgIAorICBkZWYga2luZAorICAg
IDpzaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgZW5kCitlbmQKKwogIyBCZW5jaG1h
cmsgdGhhdCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBkYXRhIGZpbGVzIHRoYXQgc2hvdWxkIGJl
IGxvYWRlZCBnbG9iYWxseSwgZm9sbG93ZWQKICMgYnkgYSBjb21tYW5kIHRvIHJ1biB0aGUgYmVu
Y2htYXJrLgogY2xhc3MgTXVsdGlGaWxlVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCkBAIC05NjUs
NiArOTgwLDI1IEBAIGRlZiBlbWl0QmVuY2hSdW5Db2RlRmlsZShuYW1lLCBwbGFuLCBiZW4KICAg
ICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICBpZiAoX19iZW5jaGVyX2luZGV4ID49
ICN7d2FybXVwfSkgcHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19OiAje3BsYW4uaXRlcmF0aW9u
fTogXCIgKyAoX19iZW5jaGVyX2luZGV4IC0gI3t3YXJtdXB9KSArIFwiOiBUaW1lOiBcIisoKF9f
YWZ0ZXItX19iZWZvcmUpL19fcnVucykpOyIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCJ9IikKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiN7YmVuY2hQYXJhbXMu
dGVhckRvd25Db21tYW5kLmpzfSIpCisgICAgICBlbHNpZiBiZW5jaFBhcmFtcy5raW5kID09IDpz
aW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsImZ1bmN0aW9uIF9fYmVuY2hlcl9ydW4oX19iZW5jaGVyX3doYXQpIHsiKQorICAgICAg
ICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgdmFyIF9fYmVuY2hlcl9yZXN1bHQgPSB7dmFs
dWU6IG51bGx9OyIpCisgICAgICAgICRyZXJ1bi50aW1lcyB7CisgICAgICAgICAgZG91YmxlUHV0
cygkc3RkZXJyLGZpbGUsIiAgIHJ1bihfX2JlbmNoZXJfd2hhdCwgX19iZW5jaGVyX3Jlc3VsdCk7
IikKKyAgICAgICAgfQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgaWYgKF9f
YmVuY2hlcl9yZXN1bHQudmFsdWUgPT0gbnVsbCkiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRl
cnIsZmlsZSwiICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTnVsbCByZXN1bHRcIik7IikKKyAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHJldHVybiBfX2JlbmNoZXJfcmVzdWx0LnZh
bHVlOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJ9IikKKyAgICAgICAgJHdh
cm11cC50aW1lcyB7CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIl9fYmVuY2hl
cl9ydW4oI3tiZW5jaFBhcmFtcy5iZW5jaFBhdGguaW5zcGVjdH0pIikKKyAgICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJl
R0MKKyAgICAgICAgfQorICAgICAgICAkaW5uZXIudGltZXMgeworICAgICAgICAgIHwgaW5uZXJJ
bmRleCB8CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsInByaW50KFwiI3tuYW1l
fTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06ICN7aW5uZXJJbmRleH06IFRpbWU6IFwi
K19fYmVuY2hlcl9ydW4oI3tiZW5jaFBhcmFtcy5iZW5jaFBhdGguaW5zcGVjdH0pKTsiKQorICAg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJnYygpOyIpIHVubGVzcyBwbGFuLnZtLnNo
b3VsZE1lYXN1cmVHQworICAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICAgIHJhaXNlIHVubGVz
cyBiZW5jaFBhcmFtcy5raW5kID09IDpzaW5nbGVGaWxlVGltZWRCZW5jaG1hcmsKICAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImZ1bmN0aW9uIF9fYmVuY2hlcl9ydW4oX19iZW5jaGVy
X3doYXQpIHsiKQpAQCAtMTU5NCw2ICsxNjI4LDE5IEBAIGNsYXNzIE9jdGFuZUJlbmNobWFyawog
ICBlbmQKIGVuZAogCitjbGFzcyBDdXN0b21UaW1lZEJlbmNobWFyaworICBpbmNsdWRlIEJlbmNo
bWFyaworICAKKyAgZGVmIGluaXRpYWxpemUobmFtZSwgZnVsbFBhdGgpCisgICAgQG5hbWUgPSBu
YW1lCisgICAgQGZ1bGxQYXRoID0gZnVsbFBhdGgKKyAgZW5kCisgIAorICBkZWYgZW1pdFJ1bkNv
ZGUocGxhbikKKyAgICBlbWl0QmVuY2hSdW5Db2RlKGZ1bGxuYW1lLCBwbGFuLCBTaW5nbGVGaWxl
Q3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzLm5ldyhlbnN1cmVGaWxlKCJDdXN0b21UaW1l
ZC0je0BuYW1lfSIsIEBmdWxsUGF0aCkpKQorICBlbmQKK2VuZAorCiBjbGFzcyBLcmFrZW5CZW5j
aG1hcmsKICAgaW5jbHVkZSBCZW5jaG1hcmsKICAgCkBAIC0zMDEwLDYgKzMwNTcsNyBAQCBiZWdp
bgogICAgIHwgYXJncyB8CiAgICAgT0NUQU5FLmFkZCBPY3RhbmVCZW5jaG1hcmsubmV3KCphcmdz
KQogICB9CisgIE9DVEFORS5hZGQgQ3VzdG9tVGltZWRCZW5jaG1hcmsubmV3KCJzcGxheS1sYXRl
bmN5IiwgKE9QRU5TT1VSQ0VfT0NUQU5FX1BBVEggKyAic3BsYXkuanMiKS50b19zKQogCiAgIEtS
QUtFTiA9IEJlbmNobWFya1N1aXRlLm5ldygiS3Jha2VuIiwgOmFyaXRobWV0aWNNZWFuLCAtMSkK
ICAgWyJhaS1hc3RhciIsICJhdWRpby1iZWF0LWRldGVjdGlvbiIsICJhdWRpby1kZnQiLCAiYXVk
aW8tZmZ0IiwKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1
MTc4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtOTgsNiArOTgsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9DU3RyaW5nLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dURi9DaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL0Nyb3NzVGhyZWFkVGFzay5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvRGF0ZU1hdGguY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjI1MTc4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAkJ
MEYxMzlFNzgxQTQyM0E2QjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3MjFBNDIz
QTJCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSAqLzsgfTsKIAkJMEYxMzlF
NzkxQTQyNDU3MDAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3MjFBNDIzQTJCMDBG
NTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSAqLzsgfTsKIAkJMEYyQzIwQjgxRENE
NTQ1MDAwNTQyRDlFIC8qIFRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovOyB9
OworCQkwRjMwQ0I1QzFGQ0UxNzk2MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMENCNUIx
RkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLzsgfTsKIAkJMEYz
Qjk0QTcxQTc3MjY3NDAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I5NEE1MUE3
NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi87IH07CiAJ
CTBGNEZGQTlFMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEZGQTlE
MUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLzsgfTsK
IAkJMTE1RUIzNDMxRUUwQkEwMzAwM0MyQzBBIC8qIFZpZXdwb3J0U2l6ZUZvclZpZXdwb3J0VW5p
dHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTVF
QjM0MjFFRTBCNzIwMDAzQzJDMEEgLyogVmlld3BvcnRTaXplRm9yVmlld3BvcnRVbml0cy5tbSAq
LzsgfTsKQEAgLTEwNjcsNiArMTA2OCw3IEBACiAJCTBGMTM5RTc1MUE0MjNBNTMwMEY1OTBGNSAv
KiBXZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFdlYWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2EvV2Vha09iakNQdHIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVBRjZDNEQwMDdBQjc1MyAvKiBXZWJDb3JlU3Rh
dGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJy
ZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
b25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
M0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdFdmFsdWF0
ZUphdmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEZGQTlEMUVE
M0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGRkFBMDFFRDNEMERFMDBGNzEx
MUYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEltYWdlSU8uZnJhbWV3
b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yazsg
c291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0yNTgxLDYgKzI1ODMsNyBAQAogCQkJCTI2RjFC
NDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNTdHJpbmcuY3BwICovLAogCQkJCUU0MDAxOTMw
MUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBF
Q0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJ
MEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywK
IAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0aW9uLmNwcCAqLywKIAkJCQk1
MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRUYXNrLmNwcCAqLywKIAkJCQky
NkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAgKi8sCkBAIC0zMTY1LDYgKzMx
NjgsNyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2
ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUMxRkNFMTc5NjAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNE
RjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9D
b25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwor
CituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25hbWVzcGFjZSB7CisKKy8vIGBjb21tYW5k
c2AgaXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlzIHRoaW5nIHdoYXQgdG8gZG8uIEl0IGhhcyB0
byBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisvLyBUaGUgY2hhcmFjdGVyIHBh
aXJzIGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6CisvLworLy8gK3ggICAgIEFkZHMgJ3gnIHRvIHRo
ZSBzZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBhbmQgYXNzZXJ0cyB0aGF0IGl0J3MgbmV3Lgor
Ly8gIXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgYW5kIGFzc2VydHMgdGhhdCBpdCB3YXMgdGhl
cmUgYWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIGluIHRoZSBzZXQKKy8v
IC14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5vdCBpbiB0aGUgc2V0Cit2b2lkIGRvVGVzdChj
b25zdCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBzZXQ7Cisg
ICAgZm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0gY29tbWFuZHM7IGNvbW1hbmRbMF0gJiYgY29t
bWFuZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IGJpdHdpc2VfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb21tYW5kWzFdKSk7CisgICAgICAgIHN3
aXRjaCAoY29tbWFuZFswXSkgeworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIEVYUEVD
VChzZXQuYWRkKHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyEnOgor
ICAgICAgICAgICAgRVhQRUNUKCFzZXQuYWRkKHB0cikpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgRVhQRUNUKHNldC5jb250YWlucyhwdHIpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVD
VCghc2V0LmNvbnRhaW5zKHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgRW1wdHkpCit7CisgICAgZG9UZXN0
KCIiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnQp
Cit7CisgICAgZG9UZXN0KCIreD14LXktMCIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRy
SGFzaFNldCwgQWRkT25lRWxlbWVudE11bHRpcGxlVGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4
IXgheCF4IXgheCF4IXgheCF4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJI
YXNoU2V0LCBBZGRPbmVFbGVtZW50TWFueVRpbWVzKQoreworICAgIGRvVGVzdCgiK3gheCF4IXgh
eCF4IXgheCF4IXgheD14LXktMCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4Iik7Cit9
CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50cykKK3sK
KyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStz
K2QrZitnK2graitrK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0Yr
RytIK0orSytMK1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11
PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89
UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29u
Y3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzTWFueVRpbWVzKQoreworICAgIGRv
VGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2cr
aCtqK2srbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitL
K0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9
YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1E
PUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIh
dCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFV
IUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkh
MCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFX
IUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQh
NSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2
IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4h
TSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFr
IWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVoh
WCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFk
IWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUch
SCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFp
IW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAh
QSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFl
IXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQh
WSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4
ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0h
USFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEz
ITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXgh
YyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFC
IU4hTSIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxl
bWVudHNBbmRRdWVyeVNvbWVCZWZvcmVBZGRpbmdUaGVSZXN0KQoreworICAgIGRvVGVzdCgiKzEr
MiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2s9MT0y
PTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9ay1sLXot
eC1jLXYtYi1uLW0tUS1XLUUtUi1ULVktVS1JLU8tUC1BLVMtRC1GLUctSC1KLUstTC1aLVgtQy1W
LUItTi1NK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0or
SytMK1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1w
PWE9cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9
RD1GPUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVu
dFB0ckhhc2hTZXQsIEFkZFNvbWVFbGVtZW50c011bHRpcGxlVGltZXNUaGVuQWRkVGhlUmVzdEFu
ZFF1ZXJ5U29tZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1
KzYrNys4KzkrMCtxK3crZStyK3QhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMh
NCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEy
ITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQh
MSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0x
PTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwt
ei14LWMtdi1iLW4tbS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1D
LVYtQi1OLU0rbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0gr
SitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1v
PXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9
Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327951</attachid>
            <date>2017-11-29 21:33:10 -0800</date>
            <delta_ts>2017-11-30 10:00:36 -0800</delta_ts>
            <desc>ConcurrentPtrHashSet unit tests pass</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>174589</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2
ICs1MDMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0zMTEsNiArMzEwLDkgQEAKIAkJ
MEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4
IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0
REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0
MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICov
OyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTcz
MDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi87IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFE
MzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJh
aW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjREOEM3ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNGMUM0
QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMx
NSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9OwogCQkw
RjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRG
ODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0
OTQsNyArMTQ5Niw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1
NEQ1MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVC
RjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5
NzAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdh
c21OYW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTgg
LyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFF
MDhGMURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4
IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNz
ZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5
TGlua0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlM
aW5rRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJv
clByb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xOTc2LDcgKzE5NzcsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyog
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNB
NjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhD
MUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1l
b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAg
LyogREZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
UGxhbklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5s
aW5lcy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjY0LDYgKzIyNjQsMTAgQEAKIAkJMEY0
QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09y
aWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1w
Lmg7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdENvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxl
bGlzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJhaW50UGFyYWxs
ZWxpc20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzYxRkNBM0NGMjAw
MUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERF
MUNDMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmg7
IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRERTFEMDFDNEQ3NjRCMDA0RDZDMTEgLyogQjNPcmlnaW5EdW1wLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5jcHA7IHBh
dGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDI1NCw3ICs0MjU4LDYgQEAKIAkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNz
ZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcx
MDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2Vj
dGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFEREIxRjYyMThE
NzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QURFODAyOTMxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2Vi
QXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJB
c3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NTAwLDYgKzU1MDMsNyBAQAogCQkJCTBGRDBFNUU2MUU0M0QzNDcwMDA2QUIwOCAvKiBD
b2xsZWN0b3JQaGFzZS5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBDb25z
ZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8qIENv
bnNlcnZhdGl2ZVJvb3RzLmggKi8sCisJCQkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENv
bnN0cmFpbnRQYXJhbGxlbGlzbS5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAv
KiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRG
NyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVm
ZXJHQy5oICovLApAQCAtNTU5NCwxMSArNTU5OCwxMiBAQAogCQkJCTBGMUZCMzk4MUUxRjY1Rjkw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEZBNzYyMDIxREI5MjQyMzAw
QjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5jcHAgKi8sCiAJCQkJMEZBNzYyMDMxREI5MjQyMzAwQjdB
MkZEIC8qIE11dGF0b3JTdGF0ZS5oICovLAotCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAv
KiBPcGFxdWVSb290U2V0LmggKi8sCiAJCQkJMEZCQjczQjYxREVGM0FBQzAwMkMwMDlFIC8qIFBy
ZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCAqLywKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFCMDgg
LyogUmVnaXN0ZXJTdGF0ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAvKiBS
ZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAwQzEzODM5
IC8qIFJ1bm5pbmdTY29wZS5oICovLAorCQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBT
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCisJCQkJMEY0RDhDNzcxRkNBM0NGMzAwMUQz
MkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJB
QTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1
QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIg
LyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC01NjIwLDcgKzU2MjUsNyBAQAogCQkJCTBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29t
RmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRp
bmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291
bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
Y3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAq
LywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04MTY5
LDYgKzgxNzQsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8q
IEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFD
IC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5MkUx
QkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFkZXJz
ICovLApAQCAtODg4Myw2ICs4ODg5LDcgQEAKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIg
LyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgy
QjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291
bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpT
V2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8q
IEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhE
RTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTkwMDIs
OSArOTAwOSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZGIC8qIE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQw
QTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0NjBF
MTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJzICov
LAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0OSw3ICs5MjU2LDYgQEAKIAkJCQkwRjZDNzM1MTFB
QzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1Rp
bWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBW
aXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8q
IFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjAsNyArMzIwLDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhTbAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX3N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpKSkKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5n
ZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05ODAsNyArOTgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIAogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVk
ID0gdHJ1ZTsKIAotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChz
aG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpIHsKQEAgLTExMzIsNyArMTEzMiw3IEBAIHN0YXRp
YyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0wKIAogYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKLSAg
ICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6Omlz
TWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2UoKSkpCkBAIC0xMTQ3
LDEwICsxMTQ3LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWcK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERG
Rzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCiB7Ci0gICAgaWYgKHRyYW5z
aXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0
aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2lu
ICYmICFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHRy
YW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAo
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKQEAg
LTEyNTQsMTQgKzEyNTQsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0gZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0
PENvZGVCbG9jayo+KCpyZWZlcmVuY2UtPnZtKCksIHJlZmVyZW5jZSkpOwotICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIg
PSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChh
bGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0Nv
bW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJl
UmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
ZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKICAgICAgICAg
ICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFp
bnRQYXJhbGxlbGlzbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBDb25zdHJhaW50
UGFyYWxsZWxpc20gOiB1aW50OF90IHsKKyAgICBTZXF1ZW50aWFsLAorICAgIFBhcmFsbGVsCit9
OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWludFBhcmFs
bGVsaXNtIHBhcmFsbGVsaXNtKQoreworICAgIHN3aXRjaCAocGFyYWxsZWxpc20pIHsKKyAgICBj
YXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOgorICAgICAgICBvdXQu
cHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsOgorICAgICAgICBvdXQucHJpbnQoIlBhcmFsbGVs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDcgKzI4MSw3IEBAIEhlYXA6Okhl
YXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9y
KHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRh
dG9yTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBt
X3JhY2VNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAs
IG1fY29uc3RyYWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0Pigp
KQorICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFp
bnRTZXQ+KCp0aGlzKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tz
KHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGlu
ZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTkxMSw3ICs5MTEs
NyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJy
aWVyc0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAg
ICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVu
dGx5KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAg
IC8vIER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2Jq
ZWN0IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3
aWxsIG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmpl
Y3QuIElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGlt
ZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAt
OTI0LDE1ICs5MjQsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlND
ZQogICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgog
ICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFy
dHMgb3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBk
byBpc01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4g
V2UgZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlz
IG1hcmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMg
c2Nhbm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0
b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAg
IC8vCiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0
aGUgb2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAg
ICAgICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2Uu
IFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtl
ZENvbmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAg
ICAgICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAg
IC8vIGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAg
ICAgICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mg
ZGlmZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBv
ciBibGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxh
Y2sgY29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0
ZShDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk0OCw3IEBAIHZvaWQgSGVh
cDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAg
IC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBt
ZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZp
bml0ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0
J3MgT0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYg
d2Ugd2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBA
IC0xMjY1LDYgKzEyNjUsOCBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBo
YXNlCiAgICAgCiAgICAgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yID0gKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3I7CiAgICAgCisgICAgbV9vcGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAg
ICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewogICAgICAgICBIYXNoTWFwPGNvbnN0IGNo
YXIqLCBzaXplX3Q+IHZpc2l0TWFwOwogICAgICAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCkBAIC0x
Mjg3LDEwICsxMjg5LDYgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFz
ZQogICAgICAgICAgICAgCiAgICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwog
ICAgICAgICAgICAgCi0gICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAg
ICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IFRha2UgbV9tdXRhdG9yRGlkUnVuIGludG8gYWNj
b3VudCB3aGVuIHNjaGVkdWxpbmcgY29uc3RyYWludHMuIE1vc3QgbGlrZWx5LAogICAgICAgICAv
LyB3ZSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyBhZ2FpbiB1bmxlc3Mg
dGhlIG11dGF0b3IgZGlkIHJ1bi4gQXQgYQogICAgICAgICAvLyBtaW5pbXVtLCB3ZSBjb3VsZCB1
c2UgdGhpcyBmb3Igd29yayBlc3RpbWF0ZXMgLSBidXQgaXQncyBwcm9iYWJseSBtb3JlIHRoYW4g
anVzdCBhbgpAQCAtMTMwNSw3ICsxMzAzLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVu
Rml4cG9pbnRQaGFzZQogICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sg
YXQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxz
bwogICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJh
aW50KCkuCiAgICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWlu
dFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKKyAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNl
KHNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKGNvbnZlcmdlZCAmJiBzbG90VmlzaXRvci5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAg
ICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNlOjpFbmQpOwpA
QCAtMjU3OCw3ICsyNTc2LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewog
ICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNj
YW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgq
dGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBtX29i
amVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAgICAgICAgICAgICBDb25z
ZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CkBAIC0yNTg4LDExICsyNTg2
LDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIGdhdGhl
clNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBzbG90
VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICB9LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRv
cik7CiAjZW5kaWYKQEAgLTI2MDksMTkgKzI2MDgsMjEgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92
bS0+ZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNo
IiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25n
SGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNs
b3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6Okdy
ZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAg
ICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgICAgIGlmIChTYW1wbGluZ1By
b2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CiAg
ICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9j
aygpKTsKQEAgLTI2MzcsMzQgKzI2MzgsMzggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWlu
dHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlz
aXRDaGlsZHJlbihzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQ
YXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3Ii
LCAiSklUIFN0dWIgUm91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRy
YWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFy
YWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0
V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6
OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcmgiLCAiV2Vh
ayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAgICAgICAgICAgICAgICBjdXJyZW50
LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwpOwogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAg
ICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVm
ZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2NzksMTIgKzI2ODQsMTMg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFM
b2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlBhcmFsbGVsKTsKICNlbmRpZgogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBpdGVyYXRlRXhlY3V0
aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoCiAgICAgICAgICAg
ICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAv
LyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2su
CkBAIC0yNjkzLDExICsyNjk5LDE1IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNv
ZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6U2VsZG9tR3JleWVkLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1ybXMiLCAi
TXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVl
ZHMgdG8gZ3JhYiBsb2NrcyB0byBmaWRkbGUgd2l0aCB0aGUgbXV0YXRvciBtYXJrIHN0YWNrIGFu
ZCB0aGUgcmFjZSBzdGFjay4KKyAgICAgICAgICAgIC8vIFRoZSBjaGFuY2VzIG9mIGNvbnRlbnRp
b24gb24gdGhvc2UgbG9ja3MgYXJlIHNsaW0sIGJ1dCB3ZSBzaG91bGQgZG8gaXQgYW55d2F5Lgor
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhh
dCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiAgICAgICAgICAg
ICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CkBAIC0yNzExLDcgKzI3MjEsOCBA
QCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImKSAtPiBkb3VibGUgewogICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRvck1hcmtTdGFj
ay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiAgICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpQYXJhbGxlbCk7CiB9CiAKIHZvaWQgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFp
bnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50PiBjb25zdHJhaW50KQpAQCAtMjc5
NCwxNiArMjgwNSw2IEBAIHZvaWQgSGVhcDo6YWxsb3dDb2xsZWN0aW9uKCkKICAgICBtX2NvbGxl
Y3RDb250aW51b3VzbHlMb2NrLnVubG9jaygpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgotdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKLXsKLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAg
IGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwotICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RW
aXNpdG9yKTsKLSAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNp
dG9ycykKLSAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OnNldE11
dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKQogewogICAgIG1fbXV0YXRvclNob3VsZEJl
RmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3LDQgKzI4NDgsMjQgQEAgdm9pZCBIZWFwOjpyZW1vdmVI
ZWFwRmluYWxpemVyQ2FsbGJhY2soYwogICAgIG1faGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1v
dmVGaXJzdChjYWxsYmFjayk7CiB9CiAKK3ZvaWQgSGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFz
ayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9
CisKK3ZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICB1bnNpZ25lZCBpbml0aWFsUmVmQ291bnQgPSB0
YXNrLT5yZWZDb3VudCgpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sodGFzayk7CisgICAgdGFz
ay0+cnVuKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNr
KG51bGxwdHIpOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtp
bmdNdXRleCk7CisgICAgICAgIHdoaWxlICh0YXNrLT5yZWZDb3VudCgpID4gaW5pdGlhbFJlZkNv
dW50KQorICAgICAgICAgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChtX21hcmtp
bmdNdXRleCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1
ZGUgIldlYWtIYW5kbGVPd25lci5oIgogI2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIu
aCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1
cnJlbnRQdHJIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTExNCw3ICsx
MTUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVz
b2x1dGlvbiA9IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwot
ICAgIHN0YXRpYyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBz
dGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAg
ICAgCiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0zNTgsNiAr
MzU4LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFj
ayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5h
bGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2
b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVu
Y3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNr
SW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xv
dFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxv
Y2F0aW5nU2NvcGU7CkBAIC01MjcsNiArNTM4LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0
b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAg
ICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7
CiAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTIsNiBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxT
bG90VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3Io
Y29uc3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0
YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9j
b2RlQmxvY2tzOwpAQCAtNjMzLDggKzY0Myw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9u
dW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVs
TWFya2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0
ZXg7Ci0gICAgSGFzaFNldDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsKKyAgICBDb25jdXJy
ZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
X2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1MSw3IEBAIHByaXZhdGU6
CiAgICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBl
ckNsaWVudDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2Jv
bnVzVmlzaXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90
IG1fYmxvY2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDE1
IEBAIGlubGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFQKICAgICByZXR1cm4g
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRo
ZSBtYXJraW5nVmVyc2lvbigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQo
Y29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdD
VGhyZWFkVHlwZTo6SGVscGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxI
ZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQog
ICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBN
YXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9j
ay5pc01hcmtlZCgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtp
bmdWZXJzaW9uKCksIGNlbGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2Vs
bCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xh
cmdlQWxsb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCku
aXNNYXJrZWQoKTsKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygp
OwotICAgIHJldHVybiBibG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2su
dm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJl
dHVybiBibG9jay5pc01hcmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2lu
Z1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5k
U2V0TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxs
KQpAQCAtMjY5LDQgKzI1OSwxNCBAQCBpbmxpbmUgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3Nhcnko
KQogICAgICAgICBzdG9wSWZOZWNlc3NhcnlTbG93KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Cit2b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7
CisgICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgZnVuYygqbV9tdXRhdG9y
U2xvdFZpc2l0b3IpOworICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xv
dFZpc2l0b3JzKQorICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVp
bGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNu
YXBzaG90QnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3
ICs2OSw3IEBAIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQg
SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNT
RVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6
aXNNYXJrZWQoY2VsbCkpOwogCiAgICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkp
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdl
QWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xh
cmdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBA
QCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9p
c01hcmtlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lO
TElORSBib29sIGlzTWFya2VkKEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0
dXJuIGlzTWFya2VkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJy
ZW50bHkoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJl
dHVybiBpc01hcmtlZCgpOyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgp
IHx8IGlzTmV3bHlBbGxvY2F0ZWQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZENlbGw7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDU1LDYgKzQ1NSwzMyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9V
bnN3ZXB0KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorUmVmUHRyPFNoYXJlZFRh
c2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RF
bXB0eUJsb2NrU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8
TWFya2VkQmxvY2s6OkhhbmRsZSooKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJr
ZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2Nh
dG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIHJ1bigpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIG1faW5kZXggPSBtX2FsbG9jYXRv
ci5tX21hcmtpbmdOb3RFbXB0eS5maW5kQml0KG1faW5kZXgsIHRydWUpOworICAgICAgICAgICAg
aWYgKG1faW5kZXggPj0gbV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxv
Y2tzW21faW5kZXhdOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IE1hcmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CisgICAgICAgIHNpemVfdCBtX2luZGV4IHsg
MCB9OworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGFzaygqdGhpcykpOworfQorCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMp
LCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjUxNzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKQEAgLTk5LDYgKzEwMCw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5j
dG9yJik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSoo
KT4+IHBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHZvaWQgYWRkQmxv
Y2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIHZvaWQgcmVtb3ZlQmxvY2soTWFya2VkQmxv
Y2s6OkhhbmRsZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNiBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBpc01hcmtlZENv
bmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCopOwogICAg
IGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAgIGJvb2wgdGVzdEFu
ZFNldE1hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgICAgIApAQCAtMjgwLDcg
KzI3OSw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYXJlTWFya3NT
dGFsZSgpOwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
bik7Ci0gICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5
KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAKICAgICBEZXBlbmRlbmN5IGFib3V0
VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAgICAgCkBAIC00OTgsMTgg
KzQ5NiwxMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZShICiAgICAg
cmV0dXJuIG1hcmtpbmdWZXJzaW9uICE9IG1fbWFya2luZ1ZlcnNpb247CiB9CiAKLUFMV0FZU19J
TkxJTkUgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gTWFya2VkQmxvY2s6OmFyZU1hcmtzU3RhbGVXaXRo
RGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKLXsKLSAgICBIZWFwVmVyc2lv
biB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKLSAgICByZXR1cm4gZGVwZW5kZW5jeVdpdGgo
ZGVwZW5kZW5jeSh2ZXJzaW9uKSwgdmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbik7Ci19Ci0KIGlu
bGluZSBEZXBlbmRlbmN5IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5k
ZW5jeShtYXJraW5nVmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHJlc3VsdC52YWx1ZSkpCisg
ICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElL
RUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBhYm91dFRvTWFya1Nsb3co
bWFya2luZ1ZlcnNpb24pOwotICAgIHJldHVybiByZXN1bHQuZGVwZW5kZW5jeTsKKyAgICByZXR1
cm4gZGVwZW5kZW5jeSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMTUgKzUxNiwxMCBAQCBpbmxpbmUg
Ym9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBib29sIE1hcmtlZEJs
b2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkK
IHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikgPyBmYWxzZSA6IGlz
TWFya2VkUmF3KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25j
dXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCi17Ci0g
ICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNp
b24pOwotICAgIGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1f
bWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNp
b24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21O
dW1iZXIocCksIHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRv
bU51bWJlcihwKSwgZGVwZW5kZW5jeSh2ZXJzaW9uKSk7CiB9CiAKIGlubGluZSBib29sIE1hcmtl
ZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2Myw2ICsxNjMsMTEgQEAgcHVibGljOgogICAgIC8vIFdoZW4gdGhpcyBp
cyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUgbWFyayBiaXRzIGhh
dmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlzTWFya2luZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNNYXJraW5nOyB9CiAgICAgCisgICAgV2Vha1NldCogYWN0aXZlV2Vha1NldHNCZWdpbigp
IHsgcmV0dXJuIG1fYWN0aXZlV2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQqIGFjdGl2
ZVdlYWtTZXRzRW5kKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQorICAgIFdl
YWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtT
ZXRzLmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0
dXJuIG1fbmV3QWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICAKICAgICB2b2lkIGR1bXBCaXRz
KFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHN0ZDo6YXJyYXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nlcz4gc19zaXplQ2xh
c3NGb3JTaXplU3RlcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
MzAgKzI3LDE1IEBACiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAg
Q29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK01hcmtpbmdDb25zdHJhaW50OjpNYXJr
aW5nQ29uc3RyYWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxs
ZWxpc20pCiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCiAgICAgLCBt
X25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQotewotfQotCi1N
YXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIDo6RnVuY3Rp
b248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAg
Q29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKLSAgICA6IG1fYWJicmV2aWF0ZWROYW1l
KGFiYnJldmlhdGVkTmFtZSkKLSAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9l
eGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV9xdWlja1dv
cmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikpCiAg
ICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKKyAgICAsIG1fcGFyYWxsZWxpc20ocGFyYWxs
ZWxpc20pCiB7CiB9CiAKQEAgLTYzLDE0ICs0OCw1MSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlz
bSBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUo
KSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNp
dFNvbWV0aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlz
aXRpbmdUaW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZp
c2l0Q291bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVv
dXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291
bnRlcih2aXNpdG9yKTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcmVzdWx0ID0gZXhlY3V0
ZUltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNp
dENvdW50KCk7CisgICAgbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtID0gcmVzdWx0OworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0
aW1hdGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUgTWFya2lu
Z0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBy
ZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGRv
UGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50
ZXIudmlzaXRDb3VudCgpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6Zmlu
aXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRl
ciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNp
dG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90Vmlz
aXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQorewog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMTIgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29uc3RyYWludFBh
cmFsbGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIKLSNpbmNsdWRl
ICJWaXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9N
b25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00MywxOCArNDEsOSBAQCBjbGFzcyBNYXJraW5nQ29u
c3RyYWludCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklW
QVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwg
Q1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAg
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1
bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5LCBDb25zdHJh
aW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB+TWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIH5NYXJraW5nQ29uc3RyYWludCgpOwogICAgIAogICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIApAQCAtNjQsMzMgKzUz
LDM5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0U3RhdHMoKTsKICAgICAKICAgICBzaXplX3Qg
bGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50OyB9CisgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtIGxhc3RFeGVjdXRlUGFyYWxsZWxpc20oKSBjb25zdCB7IHJl
dHVybiBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc207IH0KICAgICAKLSAgICB2b2lkIGV4ZWN1dGUo
U2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1l
b3V0KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZShTbG90VmlzaXRvciYpOwog
ICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
LSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rp
b24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSAr
IHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0KKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7
CisgICAgCisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7Cisg
ICAgCisgICAgdm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOworICAgIHZvaWQgZmlu
aXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAgIAor
ICAgIC8vIElmIHRoaXMgaXMgU2VxdWVudGlhbCwgaXQgbWVhbnMgdGhhdCB0aGUgY29uc3RyYWlu
dCBoYXMgdG8gYmUgcnVuIHNlcXVlbnRpYWxseSwgd2l0aCBubyBjb25jdXJyZW50CisgICAgLy8g
Y29uc3RyYWludHMuCisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBD
b25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2Fu
IHNldCBtX2luZGV4LgogICAgIAogICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9Owog
ICAgIENTdHJpbmcgbV9hYmJyZXZpYXRlZE5hbWU7CiAgICAgQ1N0cmluZyBtX25hbWU7Ci0gICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0aW1l
b3V0KT4gbV9leGVjdXRlRnVuY3Rpb247Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0
b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwogICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5IG1fdm9sYXRpbGl0eTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9wYXJhbGxlbGlz
bTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtIHsg
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCB9OyAvLyBJdCdzIGEgaGV1cmlzdGljLCB3
ZSBjYW4gYmUgd3JvbmcuIFRoaXMgZ3Vlc3Mgb25seSBhZmZlY3RzIHRoZSBmaXJzdCBydW4uCiAg
ICAgc2l6ZV90IG1fbGFzdFZpc2l0Q291bnQgeyAwIH07CisgICAgTG9jayBtX2xvY2s7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIgor
I2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIApAQCAtMzQsNTIgKzM3LDIy
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1
dGlvbkNvbnRleHQgewogcHVibGljOgotICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0
cmFpbnRTZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91
dCkKKyAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQpCiAgICAg
ICAgIDogbV9zZXQoc2V0KQotICAgICAgICAsIG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAs
IG1fdGltZW91dCh0aW1lb3V0KQogICAgIHsKKyAgICAgICAgbV9zZXQubV9oZWFwLmZvckVhY2hT
bG90VmlzaXRvcigKKyAgICAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAg
ICAgICAgICAgICAgICBtX3Zpc2l0Q291bnRlcnMuYXBwZW5kKFZpc2l0Q291bnRlcih2aXNpdG9y
KSk7CisgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBkaWRWaXNpdFNvbWV0
aGluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZzsK
KyAgICAgICAgZm9yIChjb25zdCBWaXNpdENvdW50ZXImIHZpc2l0Q291bnRlciA6IG1fdmlzaXRD
b3VudGVycykgeworICAgICAgICAgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAorICAgIGVu
dW0gU2NoZWR1bGVyUHJlZmVyZW5jZSB7CisgICAgICAgIFBhcmFsbGVsV29ya0ZpcnN0LAorICAg
ICAgICBOZXh0Q29uc3RyYWludEZpcnN0CisgICAgfTsKKworICAgIC8vIHBpY2tOZXh0KCkgaXMg
Y2FsbGVkIHdoaWxlIGEgbG9jayBpcyBoZWxkLCBzbyBpdCBjYW4gcHJldGVuZCBsaWtlIGl0J3Mg
YmVpbmcgY2FsbGVkIGZyb20gdGhlIG1haW4KKyAgICAvLyB0aHJlYWQuIEZvciBleGFtcGxlLCBp
dCdzIHRvdGFsbHkgc2FmZSBmb3IgdGhhdCBsYW1iZGEgdG8gY2xvc2Ugb3ZlciB0aGUgc3RhY2su
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVy
UHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBjb25zdCBGdW5jJiBwaWNrTmV4dCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZygpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsK
KyAgICAgICAgbV9zZXQubV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAgICAgICAgICAg
IFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOworICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleFRvUnVuOworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeVBhcmFsbGVsV29yayA9IFsm
XSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9F
eGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gbV90b0V4ZWN1dGVJ
blBhcmFsbGVsLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvUGFy
YWxsZWxXb3JrTW9kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlOZXh0
Q29uc3RyYWludCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gcGlja1Jlc3VsdCA9IHBpY2tOZXh0KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBpY2tSZXN1bHQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9leGVjdXRlZC5nZXQoKnBpY2tSZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJraW5nQ29u
c3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFsqcGlja1Jlc3VsdF07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RyYWludC5wYXJhbGxlbGlzbSgp
ID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmFwcGVuZCgq
cGlja1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gKnBpY2tSZXN1bHQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyYWxsZWxXb3JrKCkgfHwgdHJ5TmV4dENv
bnN0cmFpbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0cnlOZXh0Q29uc3RyYWludCgpIHx8IHRyeVBhcmFsbGVsV29yaygp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9udW1BY3RpdmVUaHJlYWRzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFueSB3YWl0aW5nIGNv
dWxkIGJlIHJlcGxhY2VkIHdpdGgganVzdCBydW5uaW5nIHRoZSBTbG90VmlzaXRvci4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJIHdvbmRlciBpZiB0aGF0IHdvdWxkIGJlIHByb2Zp
dGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX2xv
Y2spOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBtX251bUFjdGl2ZVRocmVhZHMrKzsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpTZXF1ZW50aWFsOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
TWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl07
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoZG9QYXJhbGxl
bFdvcmtNb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludC5kb1BhcmFsbGVs
V29yayh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRvcik7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVs
U2V0LmdldChpbmRleFRvUnVuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdHJhaW50LmZpbmlzaFBhcmFsbGVsV29yayh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVj
dXRlSW5QYXJhbGxlbC50YWtlRmlyc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbJl0gKHVuc2lnbmVkIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBpbmRleFRvUnVuOyB9
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVs
U2V0LmNsZWFyKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9leGVjdXRlZC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFw
cGVuZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4
ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcy0tOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6IG1fdG9FeGVjdXRlU2VxdWVudGlh
bGx5KQorICAgICAgICAgICAgZXhlY3V0ZSgqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0pOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5iaXRDb3VudCgp
KTsKICAgICB9CiAgICAgCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCB0aW1lcyBvdXQuCi0g
ICAgYm9vbCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCisgICAgdm9pZCBkcmFpbihCaXRW
ZWN0b3ImIHVuZXhlY3V0ZWQpCiAgICAgewotICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IHVu
ZXhlY3V0ZWQpIHsKLSAgICAgICAgICAgIGV4ZWN1dGUoaW5kZXgpOwotICAgICAgICAgICAgdW5l
eGVjdXRlZC5jbGVhcihpbmRleCk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGltZU91dCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgICAgICBh
dXRvIGVuZCA9IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZXhlY3V0ZSgKKyAgICAgICAgICAgIE5leHRDb25z
dHJhaW50Rmlyc3QsCisgICAgICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4geworICAgICAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyQWxsKCk7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQorICAgIHZvaWQgY29udmVyZ2UoY29uc3QgVmVjdG9yPE1h
cmtpbmdDb25zdHJhaW50Kj4mIG9yZGVyKQorICAgIHsKKyAgICAgICAgaWYgKGRpZFZpc2l0U29t
ZXRoaW5nKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAob3Jk
ZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc2l6
ZV90IGluZGV4ID0gMDsKIAotICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCisgICAgICAg
IC8vIFdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgY29uc3RyYWludCBzZXF1ZW50aWFsbHkg
aWYgd2UgdGhpbmsgaXQgd2lsbCBxdWlja2x5IGdpdmUgdXMgYQorICAgICAgICAvLyByZXN1bHQu
IElmIHdlIHJhbiBpdCBpbiBwYXJhbGxlbCB0byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3ZSBt
aWdodCBlbmQgdXAgaGF2aW5nIHRvIHdhaXQgZm9yCisgICAgICAgIC8vIHRob3NlIG90aGVyIGNv
bnN0cmFpbnRzIHRvIGZpbmlzaCwgd2hpY2ggd291bGQgYmUgYSB3YXN0ZSBvZiB0aW1lIHNpbmNl
IGR1cmluZyBjb252ZXJnZW5jZSBpdCdzCisgICAgICAgIC8vIGVtcGlyaWNhbGx5IG1vc3Qgb3B0
aW1hbCB0byByZXR1cm4gdG8gZHJhaW5pbmcgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJh
dGVzIHdvcmsuIE1vc3QKKyAgICAgICAgLy8gY29uc3RyYWludHMgZG9uJ3QgZ2VuZXJhdGUgYW55
IHdvcmsgbW9zdCBvZiB0aGUgdGltZSwgYW5kIHdoZW4gdGhleSBkbyBnZW5lcmF0ZSB3b3JrLCB0
aGV5IHRlbmQKKyAgICAgICAgLy8gdG8gZ2VuZXJhdGUgZW5vdWdoIG9mIGl0IHRvIGZlZWQgYSBk
ZWNlbnQgZHJhaW5pbmcgY3ljbGUuIFRoZXJlZm9yZSwgcGF1c2UgdGltZXMgYXJlIGxvd2VzdCBp
ZgorICAgICAgICAvLyB3ZSBnZXQgdGhlIGhlY2sgb3V0IG9mIGhlcmUgYXMgc29vbiBhcyBhIGNv
bnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsuIEkgdGhpbmsgdGhhdCBwYXJ0IG9mIHdoYXQKKyAgICAg
ICAgLy8gbWFrZXMgdGhpcyBvcHRpbWFsIGlzIHRoYXQgd2UgYWxzbyBuZXZlciBhYm9ydCBydW5u
aW5nIGEgY29uc3RyYWludCBlYXJseSwgc28gd2hlbiB3ZSBkbyBydW4KKyAgICAgICAgLy8gb25l
LCBpdCBoYXMgYW4gb3Bwb3J0dW5pdHkgdG8gZ2VuZXJhdGUgYXMgbXVjaCB3b3JrIGFzIGl0IHBv
c3NpYmx5IGNhbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2ltaWxhciByZWFzb25pbmcgYXBw
bGllcyB0byBjb25zdHJhaW50cyB0aGF0IHRlbmQgdG8gcmV0dXJuIENvc250cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwKKyAgICAgICAgLy8gZnJvbSBleGVjdXRlLiBUaG9zZSBjb25zdHJhaW50
cyB0eXBpY2FsbHkgaGF2ZSBhIHZlcnkgZmFzdC1ydW5uaW5nIGV4ZWN1dGUgZnVuY3Rpb24sIHdo
aWNoIHRoZW4KKyAgICAgICAgLy8gb2ZmbG9hZHMgYWxtb3N0IGFsbCBvZiB0aGUgd29yayB0byBh
IHBhcmFsbGVsIHdvcmtlci4gSW4gdGhhdCBjYXNlLCBpdCBtYWtlcyBzZW5zZSB0byBydW4gdGhl
CisgICAgICAgIC8vIGV4ZWN1dGUgZnVuY3Rpb24gc2VxdWVudGlhbGx5LgorICAgICAgICBpZiAo
b3JkZXJbaW5kZXhdLT53b3JrRXN0aW1hdGUobV9zZXQubV9oZWFwLmNvbGxlY3RvclNsb3RWaXNp
dG9yKCkpCisgICAgICAgICAgICB8fCBvcmRlcltpbmRleF0tPmxhc3RFeGVjdXRlUGFyYWxsZWxp
c20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgICAgICBl
eGVjdXRlKCpvcmRlcltpbmRleCsrXSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdG9F
eGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAmJiAob3JkZXIuaXNF
bXB0eSgpIHx8IGRpZFZpc2l0U29tZXRoaW5nKCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXhlY3V0ZSgKKyAgICAgICAgICAgIFBhcmFs
bGVsV29ya0ZpcnN0LAorICAgICAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHsKKyAgICAgICAgICAgICAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXIuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHJldHVybiBvcmRlcltpbmRleCsrXS0+aW5kZXgoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiAg
ICAgewotICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2Rp
ZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRl
eCk7CisgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldChjb25zdHJhaW50LmluZGV4KCkpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKAorICAgICAgICAgICAgbV9zZXQubV9o
ZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpOworICAgICAgICBkaWRFeGVjdXRlKHBhcmFsbGVs
aXNtLCBjb25zdHJhaW50LmluZGV4KCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6CisgICAgdm9p
ZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSwgdW5zaWduZWQg
aW5kZXgpCisgICAgeworICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgICAgIGlm
IChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAg
ICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAg
IG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXgpOworICAgICAgICB9CisgICAgfQor
ICAgIAogICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKLSAgICBTbG90VmlzaXRvciYg
bV92aXNpdG9yOwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwogICAgIEJpdFZlY3RvciBt
X2V4ZWN1dGVkOwotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07CisgICAg
RGVxdWU8dW5zaWduZWQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgQml0VmVjdG9y
IG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBtX3Rv
RXhlY3V0ZVNlcXVlbnRpYWxseTsKKyAgICBMb2NrIG1fbG9jazsKKyAgICBDb25kaXRpb24gbV9j
b25kaXRpb247CisgICAgdW5zaWduZWQgbV9udW1BY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIFZl
Y3RvcjxWaXNpdENvdW50ZXIsIDE2PiBtX3Zpc2l0Q291bnRlcnM7CiB9OwogCi1NYXJraW5nQ29u
c3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRTZXQ6
Ok1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsK
IH0KIApAQCAtMTA3LDE4ICsyODQsMTkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlk
U3RhcnRNYXJraQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlv
biwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZv
bGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQo
c3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5h
bWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAg
IGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFi
YnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGls
aXR5LCBwYXJhbGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQo
CiAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1
bmN0aW9uLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rp
b24sCiAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1h
dGVGdW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtKQogewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJh
aW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRp
bGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50
PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0
ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0
eSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKApA
QCAtMTMxLDkgKzMwOSw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBt
X3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZl
cmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0
ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBib29sIHJlc3VsdCA9IGV4
ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkp
CiAgICAgICAgIGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDkgKzMy
Niw5IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJn
ZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK2Jv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7Ci0gICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0
aGlzLCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNv
bnRleHQoKnRoaXMpOwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlvbiA9IG1faXRlcmF0aW9u
Kys7CiAgICAgCkBAIC0xNTksMTYgKzMzNywxNCBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0
OjpleGVjdXRlQ29udmVyCiAKICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFpbnRzIHRo
YXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0aGVuCiAg
ICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlmICghZXhlY3V0aW9uQ29u
dGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKICAgICAKICAgICAv
LyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdz
IHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzIG90aGVyCiAgICAgLy8gdGhhbiBy
b290cy4KICAgICBpZiAoaXRlcmF0aW9uID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3Ro
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBleGVjdXRpb25Db250ZXh0LmRyYWluKG1f
dW5leGVjdXRlZE91dGdyb3d0aHMpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBwcmVm
ZXJyaW5nIHRoZSBvdXRncm93dGggY29uc3RyYWludHMgLSB0aGUgb25lcyB0aGF0IG5lZWQgdG8g
YmUgZml4cG9pbnRlZAogICAgIC8vIGV2ZW4gaW4gYSBzdG9wLXRoZS13b3JsZCBHQyAtIHVudGls
IHRoZXkgc3RvcCBwcm9kdWNpbmcuIFRoZXkgaGF2ZSBhIHRlbmRlbmN5IHRvIGdvIHRvdGFsbHkK
QEAgLTIxNSwzMyArMzkxLDE2IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVD
b252ZXIKICAgICAgICAgICAgIHJldHVybiBhLT52b2xhdGlsaXR5KCkgPiBiLT52b2xhdGlsaXR5
KCk7CiAgICAgICAgIH0pOwogICAgIAotICAgIGZvciAoTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0
cmFpbnQgOiBtX29yZGVyZWQpIHsKLSAgICAgICAgc2l6ZV90IGkgPSBjb25zdHJhaW50LT5pbmRl
eCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkRXhlY3V0ZShp
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBleGVjdXRpb25Db250ZXh0LmV4ZWN1
dGUoaSk7Ci0gICAgICAgIAotICAgICAgICAvLyBPbmNlIHdlJ3JlIGluIGNvbnZlcmdlbmNlLCBp
dCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJraW5nIGhhcHBlbiBhbnl0aW1l
Ci0gICAgICAgIC8vIHdlIGZpbmQgd29yay4KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMg
c2hvdWxkIGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBp
ZiB0aGF0J3MKLSAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVuIGJldHRlciBp
cyB0aGlzOgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5p
bmcuCi0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdz
LCByZXR1cm4uCi0gICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4KLSAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMgotICAgICAg
ICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBleGVjdXRpb25Db250ZXh0LmNvbnZlcmdlKG1fb3Jk
ZXJlZCk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2Un
dmUgY29udmVyZ2VkLiBUaGF0IGhhcHBlbnMgaWYgd2UgZGlkIG5vdCB2aXNpdCBhbnl0aGluZy4K
KyAgICByZXR1cm4gIWV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAog
dm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChhdXRv
JiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRv
ciwgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAg
ICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygp
KQogICAgICAgICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDIyNTE3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtp
bmdDb25zdHJhaW50U2V0IHsKIHB1YmxpYzoKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOwor
ICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmKTsKICAgICB+TWFya2luZ0NvbnN0cmFpbnRT
ZXQoKTsKICAgICAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwpAQCAtNDEsMTUgKzQxLDE3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSk7CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIHZvaWQgYWRkKAog
ICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAot
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKT4sCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKICAgICAgICAg
OjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5KTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAog
ICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIApA
QCAtNjAsOSArNjIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
aXMgZXhlY3V0ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBub25lIG9mIHRoZW0gcHJvZHVjZWQgbmV3
IHdvcmsuIFRoaXMKICAgICAvLyBhc3N1bWVzIHRoYXQgeW91J3ZlIGFscmFlZHkgdmlzaXRlZCBy
b290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNl
KAotICAgICAgICBTbG90VmlzaXRvciYsCi0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZW91dCA9
IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNl
KFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRz
IHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgogICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRv
ciYpOwpAQCAtNzEsMTAgKzcxLDExIEBAIHByaXZhdGU6CiAgICAgY2xhc3MgRXhlY3V0aW9uQ29u
dGV4dDsKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKICAgICAKLSAgICBib29s
IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYpOwogICAg
IAotICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lLCBCaXRWZWN0b3Im
IHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5n
KTsKKyAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBC
aXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CiAgICAgCisgICAg
SGVhcCYgbV9oZWFwOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKICAgICBCaXRW
ZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3RoczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PE1hcmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9PcGFxdWVSb290U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvT3BhcXVlUm9vdFNldC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBPcGFxdWVSb290U2V0IHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVSb290U2V0KTsKLXB1YmxpYzoKLSAgICBPcGFxdWVS
b290U2V0KCkKLSAgICAgICAgOiBtX2xhc3RRdWVyaWVkUm9vdChudWxscHRyKQotICAgICAgICAs
IG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGJv
b2wgY29udGFpbnModm9pZCogcm9vdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChyb290ICE9
IG1fbGFzdFF1ZXJpZWRSb290KSB7Ci0gICAgICAgICAgICBtX2xhc3RRdWVyaWVkUm9vdCA9IHJv
b3Q7Ci0gICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gbV9yb290cy5jb250
YWlucyhyb290KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9jb250YWluc0xhc3RRdWVy
aWVkUm9vdDsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fcm9vdHMuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQot
ICAgIHsKLSAgICAgICAgbV9yb290cy5jbGVhcigpOwotICAgICAgICBtX2xhc3RRdWVyaWVkUm9v
dCA9IG51bGxwdHI7Ci0gICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBmYWxzZTsK
LSAgICB9Ci0KLSAgICBib29sIGFkZCh2b2lkKiByb290KQotICAgIHsKLSAgICAgICAgaWYgKHJv
b3QgPT0gbV9sYXN0UXVlcmllZFJvb3QpCi0gICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJp
ZWRSb290ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50
cnk7Ci0gICAgfQotCi0gICAgaW50IHNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fcm9vdHMuc2l6ZSgpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5iZWdpbigp
OwotICAgIH0KLQotICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuZW5kKCk7Ci0gICAgfQotCi0KLXByaXZh
dGU6Ci0gICAgSGFzaFNldDx2b2lkKj4gbV9yb290czsKLSAgICBtdXRhYmxlIHZvaWQqIG1fbGFz
dFF1ZXJpZWRSb290OwotICAgIG11dGFibGUgYm9vbCBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5lclR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1
bmM+CitjbGFzcyBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIgOiBwdWJsaWMgU2hhcmVkVGFzazxJbm5l
clR5cGUoKT4geworcHVibGljOgorICAgIFBhcmFsbGVsU291cmNlQWRhcHRlcihSZWZQdHI8U2hh
cmVkVGFzazxPdXRlclR5cGUoKT4+IG91dGVyU291cmNlLCBjb25zdCBVbndyYXBGdW5jJiB1bndy
YXBGdW5jKQorICAgICAgICA6IG1fb3V0ZXJTb3VyY2Uob3V0ZXJTb3VyY2UpCisgICAgICAgICwg
bV91bndyYXBGdW5jKHVud3JhcEZ1bmMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBJbm5lclR5
cGUgcnVuKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKG1faW5uZXJTb3VyY2UpIHsK
KyAgICAgICAgICAgICAgICBpZiAoSW5uZXJUeXBlIHJlc3VsdCA9IG1faW5uZXJTb3VyY2UtPnJ1
bigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAg
IG1faW5uZXJTb3VyY2UgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2lubmVyU291cmNlID0gbV91bndyYXBGdW5jKG1fb3V0ZXJTb3VyY2UtPnJ1
bigpKTsKKyAgICAgICAgfSB3aGlsZSAobV9pbm5lclNvdXJjZSk7CisgICAgICAgIHJldHVybiBJ
bm5lclR5cGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8T3V0
ZXJUeXBlKCk+PiBtX291dGVyU291cmNlOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPElubmVyVHlw
ZSgpPj4gbV9pbm5lclNvdXJjZTsKKyAgICBVbndyYXBGdW5jIG1fdW53cmFwRnVuYzsKKyAgICBM
b2NrIG1fbG9jazsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5hbWUg
SW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorUmVmPFBhcmFsbGVsU291cmNlQWRhcHRl
cjxPdXRlclR5cGUsIElubmVyVHlwZSwgVW53cmFwRnVuYz4+IGNyZWF0ZVBhcmFsbGVsU291cmNl
QWRhcHRlcihSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG91dGVyU291cmNlLCBjb25z
dCBVbndyYXBGdW5jJiB1bndyYXBGdW5jKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBh
cmFsbGVsU291cmNlQWRhcHRlcjxPdXRlclR5cGUsIElubmVyVHlwZSwgVW53cmFwRnVuYz4ob3V0
ZXJTb3VyY2UsIHVud3JhcEZ1bmMpKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVNYXJraW5n
Q29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHks
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdDb25zdHJh
aW50KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwg
cGFyYWxsZWxpc20pCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5j
dGlvbikpCit7Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29u
c3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpG
dW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwK
KyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxp
c20gcGFyYWxsZWxpc20pCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlh
dGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKQorICAgICwg
bV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQorICAgICwgbV9xdWlj
a1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikp
Cit7Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQoKQoreworfQorCitkb3VibGUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0Vz
dGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICghbV9xdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9xdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIHJldHVybiBDb25zdHJhaW50
UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5o
IgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgeworcHVi
bGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAg
ICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29u
c3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
KyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1bmN0
aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHks
CisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29u
c3RyYWludCgpOworICAgIAorICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikgb3ZlcnJpZGU7CisgICAgCitwcml2YXRlOgorICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworCisgICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOworICAgIDo6RnVuY3Rp
b248ZG91YmxlKFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDkgKzk4LDcg
QEAgU2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0
YXJ0TWFya2luZygpCiB7Ci0gICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29s
bGVjdGlvblNjb3BlOjpGdWxsKQotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29wYXF1ZVJvb3Rz
LmlzRW1wdHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cuCi0gICAgZWxzZQorICAg
IGlmIChoZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbikK
ICAgICAgICAgcmVzZXQoKTsKIAogICAgIGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9
IHZtKCkuaGVhcFByb2ZpbGVyKCkpCkBAIC0xMTEsNyArMTA5LDYgQEAgdm9pZCBTbG90VmlzaXRv
cjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogewotICAg
IFJFTEVBU0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0
ZWQgPSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVy
ID0gbnVsbHB0cjsKQEAgLTI3Nyw3ICsyNzQsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRU
b01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgogQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhDb250YWluZXJUeXBl
JiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAg
ICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAKICAgICBjb250YWluZXIubm90ZU1h
cmtlZCgpOwpAQCAtMzQ2LDcgKzM0Myw3IEBAIHByaXZhdGU6CiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAg
QVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVu
dENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCkBAIC00OTAsOCArNDg3LDYgQEAgTkVWRVJf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbgogICAgICAgICBtX3JpZ2h0VG9SdW4u
c2FmZXBvaW50KCk7CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9Ci0gICAg
Ci0gICAgbWVyZ2VJZk5lY2Vzc2FyeSgpOwogfQogCiBzaXplX3QgU2xvdFZpc2l0b3I6OnBlcmZv
cm1JbmNyZW1lbnRPZkRyYWluaW5nKHNpemVfdCBieXRlc1JlcXVlc3RlZCkKQEAgLTU1MCw3ICs1
NDUsNiBAQCBzaXplX3QgU2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyCiAgICAgfQog
CiAgICAgZG9uYXRlQWxsKCk7Ci0gICAgbWVyZ2VJZk5lY2Vzc2FyeSgpOwogCiAgICAgcmV0dXJu
IGJ5dGVzVmlzaXRlZCgpOwogfQpAQCAtNTYxLDE3ICs1NTUsMTYgQEAgYm9vbCBTbG90VmlzaXRv
cjo6ZGlkUmVhY2hUZXJtaW5hdGlvbigpCiAgICAgcmV0dXJuIGRpZFJlYWNoVGVybWluYXRpb24o
bG9ja2VyKTsKIH0KIAotYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25z
dCBBYnN0cmFjdExvY2tlciYpCitib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9u
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKQot
ICAgICAgICAmJiAhbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKLSAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgIHJl
dHVybiAhbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKKyAgICAgICAgJiYg
IWhhc1dvcmsobG9ja2VyKTsKIH0KIAogYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBB
YnN0cmFjdExvY2tlciYpCiB7Ci0gICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JN
YXJrU3RhY2stPmlzRW1wdHkoKQorICAgIHJldHVybiAhaXNFbXB0eSgpCisgICAgICAgIHx8ICFt
X2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICB8fCAh
bV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwogfQogCkBAIC01ODMs
MTIgKzU3NiwxNCBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAK
ICAgICBib29sIGlzQWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gYm9udXNUYXNrOworICAgICAg
ICAKICAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFy
a2luZ011dGV4KTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1f
bWFya2luZ011dGV4KTsKICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSkKICAgICAgICAgICAgICAg
ICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICAgICAg
bV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKys7Ci0KKyAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHNoYXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbikgewogICAg
ICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNF
bGFwc2VkKHRpbWVvdXQpKQpAQCAtNjI5LDI4ICs2MjQsNTcgQEAgTkVWRVJfSU5MSU5FIFNsb3RW
aXNpdG9yOjpTaGFyZWREcmFpblJlcwogCiAgICAgICAgICAgICAgICAgYXV0byBpc1JlYWR5ID0g
WyZdICgpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yayhsb2Nr
ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNr
CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0OwogICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICBtX2hlYXAubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwg
dGltZW91dCwgaXNSZWFkeSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KCFoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fYm9udXNW
aXNpdG9yVGFzaykKKyAgICAgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbV9oZWFwLm1fYm9u
dXNWaXNpdG9yVGFzazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9o
ZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBmb3JFYWNoTWFya1N0YWNrKAotICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkm
IHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgICAgICAgICBzdGFjay5z
dGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5n
R2xvYmFsU3RhY2soc3RhY2spLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVt
YmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghYm9udXNUYXNrICYmIGlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTWFy
a1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9o
ZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVh
cC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgaWYgKGJvbnVzVGFzaykgeworICAg
ICAgICAgICAgYm9udXNUYXNrLT5ydW4oKnRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBGSVhNRTogSWRlYWxseSwgd2Ugd291bGQgbm90IGhhdmUgdG8gZG8gdGhpcy4gSG93ZXZl
ciwgdGhlIHBhcmFsbGVsIG1hcmtpbmcgYWxnb3JpdGhtIHdpbGwKKyAgICAgICAgICAgIC8vIGdl
dCBjb25mdXNlZCBpZiB3ZSBpbml0aWF0ZSBpdCB3aXRoIHRoZSBoZWxwZXIgdmlzaXRvcnMgaGF2
aW5nIGFueXRoaW5nIGluIHRoZWlyIHN0YWNrcy4KKyAgICAgICAgICAgIC8vIEFsc28sIHRoaXMg
cHJvdGVjdHMgYnVncyB0aGF0IGludm9sdmUgcmFjZXMgYmV0d2VlbiB2aXNpdENoaWxkcmVuIGFu
ZCBvbmUgb2YgdGhlCisgICAgICAgICAgICAvLyBjb25zdHJhaW50cy4KKyAgICAgICAgICAgIC8v
ZG9uYXRlQWxsKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGls
bCBiZSBydW5uaW5nLCBhbmQgbWF5IHJ1biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRo
ZSB0YXNrCisgICAgICAgICAgICAvLyBvdXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFy
b3VuZCB0cnlpbmcgdG8gcnVuIHRoZSB0YXNrLgorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisg
ICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOwor
ICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9o
ZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHko
KSk7CisgICAgICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgaXNBY3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAgLTY3Niw5ICs3MDAsMTMgQEAgU2xv
dFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgICAgICByZXR1cm4gZHJh
aW5JblBhcmFsbGVsKHRpbWVvdXQpOwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
aGVhcC5tX21hcmtpbmdNdXRleCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAg
ZG9uYXRlQWxsKGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3
YWl0Rm9yVGVybWluYXRpb24odGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFp
blJlc3VsdCBTbG90VmlzaXRvcjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGlt
ZW91dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRl
eCk7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAg
ICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkBAIC03MTEsNjEg
KzczOSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFsbChjb25zdCBBYnN0cmEKICAgICBt
X2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQg
U2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm9vdCkKLXsKLSAgICBpZiAoIXJvb3Qp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vy
cygpID09IDEpIHsKLSAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNo
U2V0LgotICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdp
dGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgotICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBz
dXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAgbWVyZ2VP
cGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwot
fQotCi1ib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29u
c3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBB
U1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJv
b3RzLmNvbnRhaW5zKHJvb3QpOwotfQotCi1UcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNP
cGFxdWVSb290VHJpU3RhdGUodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0g
ICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotICAgIAotICAgIGlmIChtX29wYXF1ZVJvb3Rz
LmNvbnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgIGlm
IChtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRy
dWVUcmlTdGF0ZTsKLSAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKLX0KLQotdm9pZCBTbG90Vmlz
aXRvcjo6bWVyZ2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotCi12b2lk
IFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKLXsKLSAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9w
YXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFx
dWVSb290cygpOwotfQotICAgIAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAgICBp
ZiAoIW1faXNJblBhcmFsbGVsTW9kZSkgewpAQCAtNzg1LDE2ICs3NTgsNiBAQCB2b2lkIFNsb3RW
aXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uCiAgICAgZHJhaW4odGltZW91dCk7CiB9CiAK
LXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQotewotICAgIHsKLSAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0g
ICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCi0gICAgICAgICAgICBtX2hl
YXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgfQotICAgIG1fb3BhcXVlUm9vdHMuY2xl
YXIoKTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1f
aGVhcC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5j
ZUhhcnZlc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIYW5k
bGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtT
dGFjay5oIgotI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKICNpbmNsdWRlICJWaXNpdFJhY2VL
ZXkuaCIKICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KQEAgLTk1LDEwICs5NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEhp
ZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVy
ZWQoSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qo
dm9pZCopOworICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgcm9vdCB3YXMgbmV3LgogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29u
dGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKLSAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1
ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qo
dm9pZCopIGNvbnN0OwogCiAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JT
dGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKQEAgLTEyMSw2
ICsxMTksOCBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxs
ZWwoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAg
ICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJl
ZERyYWluUmVzdWx0IHdhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBN
b25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0g
YW4gaW5jcmVtZW50IG9mIGRyYWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRl
c2Agd29ydGggb2YgZGF0YS4gVGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkg
d2FsayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRo
YW4gYnl0ZXMuIEl0IG1heQpAQCAtMTI4LDggKzEyOCw2IEBAIHB1YmxpYzoKICAgICAvLyByYXJl
IGNhc2VzIGhhcHBlbiB0ZW1wb3JhcmlseSBldmVuIGlmIHdlJ3JlIG5vdCByZWFjaGluZyB0ZXJt
aW5hdGlvbikuCiAgICAgc2l6ZV90IHBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKHNpemVfdCBi
eXRlcyk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZUlmTmVjZXNzYXJ5
KCk7Ci0KICAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21l
IHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8g
dGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KICAgICB2b2lk
IG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7CkBAIC0xOTQsMTAgKzE5Miw2IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsK
ICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLQotICAgIHZvaWQgbWVyZ2VPcGFx
dWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpT
Q2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOwpAQCAtMjE1LDcg
KzIwOSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNr
OwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAgIE9wYXF1ZVJvb3RTZXQg
bV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2li
bGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVS
b290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2RlLgogICAgIAogICAg
IHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTM2LDYgKzEzNiwyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFZhCiAgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CiB9CiAKK2lubGluZSBib29s
IFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIXB0cikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFoZWFwKCktPm1fb3BhcXVlUm9vdHMuYWRk
KHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVl
Um9vdCh2b2lkKiBwdHIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFxdWVSb290
cy5jb250YWlucyhwdHIpOworfQorCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewogICAgIGlmIChtX2lzRmlyc3RWaXNpdCkg
ewpAQCAtMTU5LDEyICsxNzYsMTIgQEAgaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkg
Y29uc3QKIAogaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQogewotICAgIHJldHVybiAqbV9o
ZWFwLm1fdm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogaW5saW5lIGNvbnN0IFZN
JiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07Cisg
ICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNTE3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgiCiAjaW5jbHVkZSAiUHJldmVu
dENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCkBAIC0x
NjAsNiArMTYxLDQzIEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2Nh
dG9yKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCkKK3sKKyAgICBjbGFz
cyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgcHVi
bGljOgorICAgICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAg
ICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBN
YXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAgICAgICAgaWYgKHJl
c3VsdCkKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRv
ckluU3Vic3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRv
cjsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRhc2sobV9maXJzdEFsbG9jYXRvcikpOworfQorCitSZWZQdHI8U2hhcmVkVGFzazxN
YXJrZWRCbG9jazo6SGFuZGxlKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRC
bG9ja1NvdXJjZSgpCit7CisgICAgcmV0dXJuIGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcjxN
YXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4oCisgICAgICAgIHBhcmFsbGVs
QWxsb2NhdG9yU291cmNlKCksCisgICAgICAgIFtdIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
cikgLT4gUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAg
ICAgICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNl
KCk7CisgICAgICAgIH0pOworfQorCiBNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0
b3JGb3JTbG93KHNpemVfdCBzaXplKQogewogICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNl
OjpzaXplQ2xhc3NUb0luZGV4KHNpemUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZS5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxNyArODEsMjQgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNv
bnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3Iq
KCk+PiBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTm90RW1wdHlN
YXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVm
UHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlN
YXJrZWRCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAg
ICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3Qg
RnVuYyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUmVmUHRyPFNo
YXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
KGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBm
b3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NCw2ICs4NCw1MyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1
bmMmIGZ1bmMpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3Bh
Y2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2Up
CisgICAgICAgICAgICAsIG1fYmxvY2tTb3VyY2Uoc3Vic3BhY2UucGFyYWxsZWxOb3RFbXB0eU1h
cmtlZEJsb2NrU291cmNlKCkpCisgICAgICAgICAgICAsIG1fZnVuYyhmdW5jKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6
OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKKyAgICAgICAgICAgICAg
ICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEhl
YXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGNlbGwsIGtpbmQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICAgICAgICAgIGlmICghbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBtX25lZWRUb1Zpc2l0
TGFyZ2VBbGxvY2F0aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX3N1YnNwYWNlLmZvckVhY2hMYXJnZUFsbG9jYXRpb24oCisgICAgICAgICAg
ICAgICAgWyZdIChMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsbG9jYXRpb24tPmlzTWFya2VkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2Z1bmModmlzaXRvciwgYWxsb2NhdGlvbi0+Y2VsbCgpLCBtX3N1YnNwYWNlLm1fYXR0cmli
dXRlcy5jZWxsS2luZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vic3BhY2UmIG1fc3Vic3BhY2U7CisgICAgICAgIFJl
ZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBtX2Jsb2NrU291cmNlOwor
ICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgICAgIGJvb2wg
bV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgeyB0cnVlIH07CisgICAgfTsKKyAgICAKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMsIGZ1bmMpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5j
JiBmdW5jKQogewogICAgIGZvckVhY2hNYXJrZWRCbG9jaygKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgeworcHVibGljOgor
ICAgIFZpc2l0Q291bnRlcigpIHsgfQorICAgIAorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKyAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCisgICAgICAgICwgbV9p
bml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3Zpc2l0b3ItPnZpc2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291bnQ7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAg
IHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91
dC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNp
dGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3Rm
L1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
VmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoKLSAgICBWaXNpdGluZ1RpbWVvdXQoKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBi
b29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAgIDog
bV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKLSAgICAgICAgLCBtX3Zpc2l0
Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCi0gICAgICAgICwgbV90aW1lb3V0KHRp
bWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgdmlzaXRDb3VudChTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0
Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFZpc2l0
U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0Vs
YXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIGJvb2wgbV9kaWRW
aXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7
IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJl
dmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFdlYWtCbG9jazo6c3Bl
Y2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFp
bmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgp
KSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1
ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlm
ICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5r
bm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBs
LT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsx
MTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoKQogICAgIC8vIGhhcyBh
bnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0
IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAg
ICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAg
IHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0
LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVP
YmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQog
CiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KHRoaXMpOworICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7
CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogLyogQmVnaW4gUEJYQnVpbGRGaWxl
IHNlY3Rpb24gKi8KIAkJMEYwRjUyNkIxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGNTI2
OTFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCAqLzsgfTsKIAkJMEYzMEJBOTAx
RTc4NzA4RTAwMkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMEJBOEExRTc4NzA4RTAwMkNBODQ3IC8qIEds
b2JhbFZlcnNpb24uY3BwICovOyB9OworCQkwRjMwQ0I1QTFGQ0RGMTM0MDA0QjUzMjMgLyogQ29u
Y3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNo
U2V0LmNwcCAqLzsgfTsKIAkJMEY0M0Q4RjExREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1Ro
cmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQzRDhFRjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCAqLzsgfTsKIAkJ
MEY1QkYxNzYxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTc0MUYyM0Q0OUEwMDI5RDkxRCAv
KiBHaWdhY2FnZS5jcHAgKi87IH07CiAJCTBGNjBGMzJGMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2Nr
ZWRQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYwRjMyRDFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3Bw
ICovOyB9OwpAQCAtMTgxLDYgKzE4Miw4IEBACiAJCTBGMzBCQThEMUU3ODcwOEUwMDJDQTg0NyAv
KiBMb2dnaW5nSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dn
aW5nSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwQkE4RTFFNzg3
MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9nZ2luZ0hhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzMEJBOEYxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoVHJhaXRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoVHJhaXRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50
UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25j
dXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBD
QjU5MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjMxREQ3MDFGMTMwOEJDMDA3MkVCNEEgLyogTG9ja0FsZ29y
aXRobUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNDhDN0QxRjQ3QUE5RDAwM0NGRUYyIC8qIFN0
cmluZ1ZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdWZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg3LDYgKzc5MCw4IEBACiAJCQkJMEY4RjJCOTAxNzJF
MDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCiAJCQkJQThBNDcyNzAxNTFB
ODI1QTAwNDEyM0ZGIC8qIENvbXBpbGVyLmggKi8sCiAJCQkJNDZCQTlFQUIxRjRDRDYxRTAwOUEy
QkJDIC8qIENvbXBsZXRpb25IYW5kbGVyLmggKi8sCisJCQkJMEYzMENCNTgxRkNERjEzMzAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKKwkJCQkwRjMwQ0I1OTFGQ0RGMTMz
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLywKIAkJCQkwRkRCNjk4RDFCN0M2
NDNBMDAwQzEwNzggLyogQ29uZGl0aW9uLmggKi8sCiAJCQkJRTM4QzQxMjYxRUI0RTA2ODAwNDI5
NTdEIC8qIENQVVRpbWUuY3BwICovLAogCQkJCUUzOEM0MTI3MUVCNEUwNjgwMDQyOTU3RCAvKiBD
UFVUaW1lLmggKi8sCkBAIC0xNDEzLDYgKzE0MTgsNyBAQAogCQkJCTBGODI0QTY4MUI3NDQzQTAw
MDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJCMUYz
RDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50Q29kZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxRjE3NTJDMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjMwQ0I1QTFGQ0RGMTM0MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1MkQxRjNENDg2MDAwQzc0OTUwIC8q
IFBlcnNpc3RlbnRFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzYyMTY1REJB
NzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDNGNjEx
RjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9t
aWNzLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQ2LDExICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5
IG51bGxEZXBlbmRlbmN5KAogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9IG51bGxw
dHI+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5KFQgdmFsdWUpCiB7CiAgICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50NjRf
dCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5pb24geworICAg
ICAgICB1aW50MzJfdCBjb3B5OworICAgICAgICBUIHZhbHVlOworICAgIH0gdTsKKyAgICB1LmNv
cHkgPSAwOworICAgIHUudmFsdWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAgICAgLy8gQ3Jl
YXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBj
b21wdXRhdGlvbgogICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6
ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICszNjgsMjAgQEAg
QUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8vIG9yIGFuIGFj
cXVpcmUgbG9hZC4KICAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0i
CiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5d
ICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxpZiBDUFUoQVJN
KQogICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAgICAgICAgOiBb
ZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsK
KyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVwZW5kZW5j
eSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVuY2UoKTsK
ICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgVU5VU0VE
X1BBUkFNKHUuY29weSk7CiAjZW5kaWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAotLy8g
RklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBlbmRl
bmN5KCkgb3ZlcmxvYWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVu
Y3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAg
dWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lmIENQVShB
Uk02NCkKLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0gICAg
ICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihj
b3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5d
LCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAg
ICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwotICAgIGRl
cGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAgIHJldHVy
biBkZXBlbmRlbmN5OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c2l6ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5F
IERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5
KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51bGxw
dHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAg
IHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAg
ICBEZXBlbmRlbmN5V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgp
KQotICAgICAgICAsIHZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3lX
aXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDogZGVw
ZW5kZW5jeShkZXBlbmRlbmN5KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19OwotICAg
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRl
bmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJl
dHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRl
cGVuZGVuY3kpCiB7CkBAIC00NjksMTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUgVCYgZW5zdXJl
UG9pbnRlcihBdG9taWM8VCoKIAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6OkRlcGVu
ZGVuY3k7Ci11c2luZyBXVEY6OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpjb25zdW1lOwog
dXNpbmcgV1RGOjpkZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKIHVzaW5n
IFdURjo6ZW5zdXJlUG9pbnRlcjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0
b3IrKyhpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlz
OworICAgICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDcgQEAgc2V0KFdURl9IRUFERVJT
CiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIu
aAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKICAgICBDb25kaXRpb24uaAogICAgIENyb3Nz
VGhyZWFkQ29waWVyLmgKICAgICBDcm9zc1RocmVhZFRhc2suaApAQCAtMjE2LDYgKzIxNyw3IEBA
IHNldChXVEZfU09VUkNFUwogICAgIENQVVRpbWUuY3BwCiAgICAgQ2xvY2tUeXBlLmNwcAogICAg
IENvbXBpbGF0aW9uVGhyZWFkLmNwcAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAg
IENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAg
ICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudFB0ckhhc2hTZXQuaCIKKworI2luY2x1
ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitDb25jdXJyZW50UHRySGFz
aFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworICAgIGluaXRpYWxpemUoKTsKK30KKwor
Q29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCgpCit7Cit9CisKK3Zv
aWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcygpCit7CisgICAgLy8gVGhp
cyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVh
ZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBj
cmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFibGVzLnJlbW92ZUFsbE1hdGNoaW5n
KAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4mIHRhYmxlKSAtPiBib29sIHsK
KyAgICAgICAgICAgIHJldHVybiB0YWJsZS5nZXQoKSAhPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7
CisgICAgICAgIH0pOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcigpCit7
CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9y
IG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAv
LyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFibGVzLmNsZWFy
KCk7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0Ojpp
bml0aWFsaXplKCkKK3sKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgaW5pdGlhbFNpemUgPSAzMjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IHRhYmxlID0gVGFibGU6OmNyZWF0ZShpbml0aWFs
U2l6ZSk7CisgICAgbV90YWJsZS5zdG9yZVJlbGF4ZWQodGFibGUuZ2V0KCkpOworICAgIG1fYWxs
VGFibGVzLmFwcGVuZChXVEZNb3ZlKHRhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhh
c2hTZXQ6OmFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFy
dEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKQoreworICAgIGlmICh0YWJsZS0+bG9h
ZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJsZS0+bWF4TG9hZCgpKQorICAgICAgICByZXR1cm4gcmVz
aXplQW5kQWRkKHB0cik7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICB2b2lkKiBvbGRF
bnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0uY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG51bGxwdHIs
IHB0cik7CisgICAgICAgIGlmICghb2xkRW50cnkpIHsKKyAgICAgICAgICAgIGlmIChtX3RhYmxl
LmxvYWQoKSAhPSB0YWJsZSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGFkZGVkIGFuIGVudHJ5
IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVlZCB0byByZWV4ZWN1dGUgdGhlIGFkZCBvbiB0aGUgbmV3
IHRhYmxlLgorICAgICAgICAgICAgICAgIHJldHVybiBhZGQocHRyKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChvbGRFbnRy
eSA9PSBwdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGluZGV4ID0gKGlu
ZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydElu
ZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVj
ZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgVGFi
bGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgIGlmICh0YWJsZS0+bG9hZC5s
b2FkUmVsYXhlZCgpIDwgdGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gbmV3VGFibGUgPSBUYWJsZTo6Y3JlYXRlKHRhYmxl
LT5zaXplICogMik7CisgICAgdW5zaWduZWQgbWFzayA9IG5ld1RhYmxlLT5tYXNrOworICAgIHVu
c2lnbmVkIGxvYWQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2l6
ZTsgKytpKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IHRhYmxlLT5hcnJheVtpXS5sb2FkUmVsYXhl
ZCgpOworICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAg
ICAgICAgQXRvbWljPHZvaWQqPiYgZW50cnlSZWYgPSBuZXdUYWJsZS0+YXJyYXlbaW5kZXhdOwor
ICAgICAgICAgICAgdm9pZCogZW50cnkgPSBlbnRyeVJlZi5sb2FkUmVsYXhlZCgpOworICAgICAg
ICAgICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgICAgIGVudHJ5UmVmLnN0b3JlUmVsYXhl
ZChwdHIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZW50cnkgIT0gcHRyKTsKKyAgICAgICAgICAgIGluZGV4ID0gKGlu
ZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3Rh
cnRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvYWQrKzsKKyAgICB9Cisg
ICAgCisgICAgbmV3VGFibGUtPmxvYWQuc3RvcmVSZWxheGVkKGxvYWQpOworICAgIAorICAgIG1f
dGFibGUuc3RvcmUobmV3VGFibGUuZ2V0KCkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNo
U2V0OjpyZXNpemVBbmRBZGQodm9pZCogcHRyKQoreworICAgIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7
CisgICAgcmV0dXJuIGFkZChwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q29uY3VycmVudFB0
ckhhc2hTZXQ6OlRhYmxlPiBDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU6OmNyZWF0ZSh1bnNp
Z25lZCBzaXplKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6
VGFibGU+IHJlc3VsdChuZXcgKGZhc3RNYWxsb2MoT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBhcnJh
eSkgKyBzaXplb2YoQXRvbWljPHZvaWQqPikgKiBzaXplKSkgVGFibGUoKSk7CisgICAgcmVzdWx0
LT5zaXplID0gc2l6ZTsKKyAgICByZXN1bHQtPm1hc2sgPSBzaXplIC0gMTsKKyAgICByZXN1bHQt
PmxvYWQuc3RvcmVSZWxheGVkKDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCisgICAgICAgIHJlc3VsdC0+YXJyYXlbaV0uc3RvcmVSZWxheGVkKG51bGxwdHIpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dU
Ri93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyBhIGNvbmN1cnJlbnQgaGFzaC1i
YXNlZCBzZXQgZm9yIHBvaW50ZXJzLiBJdCdzIG9wdGltaXplZCBmb3I6CisvLworLy8gLSBIaWdo
IHJhdGUgb2YgY29udGFpbnMoKSBjYWxscy4KKy8vIC0gSGlnaCByYXRlIG9mIGFkZCgpIGNhbGxz
IHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIG5ldy4gYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQg
YW55dGhpbmcgKG5vcCBhZGRzKQorLy8gICBkb24ndCBtdXRhdGUgdGhlIHRhYmxlIGF0IGFsbC4K
Ky8vIC0gTm90IHRvbyBtYW55IHRocmVhZHMuIEkgZG91YnQgdGhpcyBzY2FsZXMgYmV5b25kIH40
LiBUaG91Z2gsIGl0IG1heSBhY3R1YWxseSBzY2FsZSBiZXR0ZXIgdGhhbiB0aGF0CisvLyAgIGlm
IHRoZSByYXRlIG9mIG5vcCBhZGRzIGlzIGFic3VyZGx5IGhpZ2guCisvLworLy8gSWYgd2Ugd2Fu
dGVkIHRoaXMgdG8gc2NhbGUgYmV0dGVyLCB0aGUgbWFpbiBjaGFuZ2Ugd2UnZCBoYXZlIHRvIG1h
a2UgaXMgaG93IHRoaXMgdGFibGUgZGV0ZXJtaW5lcyB3aGVuCisvLyB0byByZXNpemUuIFJpZ2h0
IG5vdyBpdCdzIGEgc2hhcmVkIGNvdW50ZXIuIFdlIGxvY2s7eGFkZCB0aGlzIGNvdW50ZXIuIE9u
ZSBlYXN5IHdheSB0byBtYWtlIHRoYXQKKy8vIHNjYWxhYmxlIGlzIHRvIHJlcXVpcmUgZWFjaCB0
aHJlYWQgdGhhdCB3b3JrcyB3aXRoIHRoZSBDb25jdXJyZW50UHRySGFzaFNldCB0byByZWdpc3Rl
ciBpdHNlbGYgZmlyc3QuCisvLyBUaGVuIGVhY2ggdGhyZWFkIHdvdWxkIGhhdmUgc29tZSBkYXRh
IHN0cnVjdHVyZSB0aGF0IGhhcyBhIGNvdW50ZXIuIFdlIGNvdWxkIGluc3RpdHV0ZSB0aGUgcG9s
aWN5IHRoYXQKKy8vIGVhY2ggdGhyZWFkIHNpbXBseSBpbmNyZW1lbnRzIGl0cyBvd24gbG9hZCBj
b3VudGVyLCBpbiBpdHMgb3duIGRhdGEgc3RydWN0dXJlLiBUaGVuLCBpZiBhbnkgc2VhcmNoIHRv
CisvLyByZXNvbHZlIGEgY29sbGlzaW9uIGRvZXMgbW9yZSB0aGFuIE4gaXRlcmF0aW9ucywgd2Ug
Y2FuIGNvbXB1dGUgYSBjb21iaW5lZCBsb2FkIGJ5IHN1bW1pbmcgdGhlIGxvYWQKKy8vIGNvdW50
ZXJzIG9mIGFsbCBvZiB0aGUgdGhyZWFkIGRhdGEgc3RydWN0dXJlcy4KKy8vCisvLyBDb25jdXJy
ZW50UHRySGFzaFNldCdzIG1haW4gdXNlciwgdGhlIEdDLCBzZWVzIGEgOTglIG5vcCBhZGQgcmF0
ZSBpbiBTcGVlZG9tZXRlci4gVGhhdCdzIHdoeSB0aGlzCisvLyBmb2N1c2VzIHNvIG11Y2ggb24g
Y2FzZXMgd2hlcmUgdGhlIHRhYmxlIGRvZXMgbm90IGNoYW5nZS4KK2NsYXNzIENvbmN1cnJlbnRQ
dHJIYXNoU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50UHRySGFzaFNl
dCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgQ29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgfkNvbmN1cnJlbnRQdHJIYXNoU2V0KCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBib29sIGNvbnRhaW5zKFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29u
dGFpbnNJbXBsKGNhc3QodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBib29sIGFkZChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZElt
cGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV90YWJsZS5sb2FkUmVsYXhlZCgpLT5sb2FkLmxvYWRSZWxh
eGVkKCk7CisgICAgfQorICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQg
bm8gb3RoZXIgdGhyZWFkIGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZyZWVzIHVwIG1lbW9yeSB3aXRo
b3V0IGNoYW5naW5nCisgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZS4KKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVPbGRUYWJsZXMoKTsKKyAgICAKKyAgICAvLyBPbmx5
IGNhbGwgd2hlbiB5b3Uga25vdyB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQoKS4g
VGhpcyBmcmVlcyB1cCBhbGwgbWVtb3J5IGV4Y2VwdCBmb3IKKyAgICAvLyB0aGUgc21hbGxlc3Qg
cG9zc2libGUgaGFzaHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyKCk7
CisgICAgCitwcml2YXRlOgorICAgIHN0cnVjdCBUYWJsZSB7CisgICAgICAgIFdURl9NQUtFX1NU
UlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8VGFibGU+IGNyZWF0ZSh1bnNpZ25lZCBzaXplKTsKKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIG1heExvYWQoKSBjb25zdCB7IHJldHVybiBzaXplIC8gMjsgfQorICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgc2l6ZTsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAgIHVuc2ln
bmVkIG1hc2s7IC8vIFRoaXMgaXMgaW1tdXRhYmxlLgorICAgICAgICBBdG9taWM8dW5zaWduZWQ+
IGxvYWQ7CisgICAgICAgIEF0b21pYzx2b2lkKj4gYXJyYXlbMV07CisgICAgfTsKKyAgICAKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaCh2b2lkKiBwdHIpCisgICAgeworICAgICAgICByZXR1cm4g
UHRySGFzaDx2b2lkKj46Omhhc2gocHRyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFs
aXplKCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkKiBjYXN0KFQg
dmFsdWUpCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA8PSBzaXplb2Yo
dm9pZCopLCAidHlwZSB0b28gYmlnIik7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHZv
aWQqIHB0cjsKKyAgICAgICAgICAgIFQgdmFsdWU7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5w
dHIgPSBudWxscHRyOworICAgICAgICB1LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiB1
LnB0cjsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb250YWluc0ltcGwodm9pZCogcHRyKSBjb25z
dAorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOwor
ICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUtPm1hc2s7CisgICAgICAgIHVuc2lnbmVkIHN0
YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0
YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5ID0g
dGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRy
eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoZW50cnkg
PT0gcHRyKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaW5kZXgg
PSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAh
PSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgYSBuZXcgZW50cnkgd2FzIGFkZGVkLgorICAgIGJvb2wgYWRkSW1wbCh2b2lkKiBwdHIp
CisgICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7Cisg
ICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3Rh
cnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3Rh
cnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0
YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5
KQorICAgICAgICAgICAgICAgIHJldHVybiBhZGRTbG93KHRhYmxlLCBtYXNrLCBzdGFydEluZGV4
LCBpbmRleCwgcHRyKTsKKyAgICAgICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1h
c2s7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBhZGRTbG93
KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWdu
ZWQgaW5kZXgsIHZvaWQqIHB0cik7CisKKyAgICB2b2lkIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7Cisg
ICAgYm9vbCByZXNpemVBbmRBZGQodm9pZCogcHRyKTsKKyAgICAKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFRhYmxlPiwgND4gbV9hbGxUYWJsZXM7CisgICAgQXRvbWljPFRhYmxlKj4gbV90
YWJsZTsgLy8gVGhpcyBpcyBuZXZlciBudWxsLgorICAgIExvY2sgbV9sb2NrOyAvLyBXZSBqdXN0
IHVzZSB0aGlzIHRvIGNvbnRyb2wgcmVzaXplIHJhY2VzLgorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMCw2ICsxMDAsMTEgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVu
YW1lIEZ1bmM+CiAgICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25zdCBGdW5jJik7CiAg
ICAgCisgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNo
IHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAg
ICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFQgdGFrZUZpcnN0KGNvbnN0IEZ1bmMmKTsKKwogICAg
IC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxs
YmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKICAgICAvLyBUIGlm
IGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgpAQCAtNTcxLDYgKzU3NiwyNSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OmFwCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVD
YXBhY2l0eT46OnRha2VGaXJzdChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHVuc2lnbmVkIGNv
dW50ID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gdGhpcy0+c2l6ZSgpOworICAgIHdoaWxlIChj
b3VudCA8IHNpemUpIHsKKyAgICAgICAgVCBjYW5kaWRhdGUgPSB0YWtlRmlyc3QoKTsKKyAgICAg
ICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisg
ICAgICAgICAgICAgICAgcHJlcGVuZCh0YWtlTGFzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBj
YW5kaWRhdGU7CisgICAgICAgIH0KKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgYXBwZW5kKFdU
Rk1vdmUoY2FuZGlkYXRlKSk7CisgICAgfQorICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiBpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1
bmMmIGZ1bmMpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpJbmRleDogU291cmNlL1dURi93
dGYvRmFzdE1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2Mu
aAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDcgQEAgdXNpbmcgV1RGOjpmYXN0QWxpZ25lZEZyZWU7
CiAjZGVmaW5lIFdURl9QUklWQVRFX0lOTElORSBpbmxpbmUKICNlbmRpZgogCi0jZGVmaW5lIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEIFwKLXB1YmxpYzogXAorI2RlZmluZSBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRF9JTVBMIFwKICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBw
KSB7IHJldHVybiBwOyB9IFwKICAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQq
IHApIHsgcmV0dXJuIHA7IH0gXAogICAgIFwKQEAgLTI2Myw3ICsyNjIsMTUgQEAgcHVibGljOiBc
CiAgICAgICAgIEFTU0VSVChsb2NhdGlvbik7IFwKICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOyBc
CiAgICAgfSBcCisKKyNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAorcHVibGljOiBc
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfSU1QTCBcCiBwcml2YXRlOiBcCiB0eXBlZGVm
IGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xvbkFmdGVyVGhpc01hY3JvCiAKKyNkZWZp
bmUgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEIFwKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRF9JTVBMIFwKK3R5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9u
QWZ0ZXJUaGlzTWFjcm8KKwogI2VuZGlmIC8qIFdURl9GYXN0TWFsbG9jX2ggKi8KSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
aGFyZWRUYXNrLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRh
c2suaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAv
LyBzdGF0ZSBpbiBtZW1iZXIgZmllbGRzLiBUaGlzIGNhbiBiZSBtb3JlIG5hdHVyYWwgaWYgeW91
IHdhbnQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB3aGF0CiAvLyBzdGF0ZSBpcyBzaGFyZWQg
YmV0d2VlbiBpbnN0YW5jZXMgb2YgdGhlIHRhc2suCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0
eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotY2xhc3MgU2hhcmVkVGFzazxSZXN1bHRUeXBlIChB
cmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFz
azxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFBh
c3NlZFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTaGFyZWRU
YXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMu
Li4pPj4gewogcHVibGljOgorICAgIHR5cGVkZWYgUGFzc2VkUmVzdWx0VHlwZSBSZXN1bHRUeXBl
OworICAgIAogICAgIFNoYXJlZFRhc2soKSB7IH0KICAgICB2aXJ0dWFsIH5TaGFyZWRUYXNrKCkg
eyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29u
c3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdtYSBvbmNlCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KKwpJbmRl
eDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zp
c2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEs
MiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WaXNpdGlu
Z1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0Ns
aWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksMTEgKzI5LDEwIEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8aGVh
cC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPGhlYXAvSGVh
cElubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CiAjaW5jbHVk
ZSA8aGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJrZWRC
bG9ja0lubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg+
CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Zpc2l0
aW5nVGltZW91dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogCkBAIC03Miw0MyArNzEsNjUgQEAgdm9pZCBKU1ZNQ2xpZW50RGF0YTo6aW5p
dE5vcm1hbFdvcmxkKFZNKgogICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gbmV3IEpT
Vk1DbGllbnREYXRhKCp2bSk7CiAgICAgdm0tPmNsaWVudERhdGEgPSBjbGllbnREYXRhOyAvLyB+
Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAgICAgCi0gICAgYXV0byBjb25zdHJhaW50ID0gc3Rk
OjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oCi0gICAgICAgICJXY29jIiwgIldlYkNv
cmUgT3V0cHV0IENvbnN0cmFpbnRzIiwKLSAgICAgICAgW3ZtLCBjbGllbnREYXRhLCBsYXN0RXhl
Y3V0aW9uVmVyc2lvbiA9IHZtLT5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCldCi0gICAg
ICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIG11
dGFibGUgewotICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLT5oZWFwOworICAgIGNsYXNzIE5v
cm1hbFdvcmxkQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CisgICAgcHVi
bGljOgorICAgICAgICBOb3JtYWxXb3JsZENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0
YSYgY2xpZW50RGF0YSkKKyAgICAgICAgICAgIDogTWFya2luZ0NvbnN0cmFpbnQoIldjb2MiLCAi
V2ViQ29yZSBPdXRwdXQgQ29uc3RyYWludHMiLCBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9t
R3JleWVkKQorICAgICAgICAgICAgLCBtX3ZtKHZtKQorICAgICAgICAgICAgLCBtX2NsaWVudERh
dGEoY2xpZW50RGF0YSkKKyAgICAgICAgICAgICwgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbih2bS5o
ZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVj
dXRlSW1wbChTbG90VmlzaXRvciYpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhl
YXAmIGhlYXAgPSBtX3ZtLmhlYXA7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoZWFw
Lm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGhlYXAubXV0YXRvckV4ZWN1dGlv
blZlcnNpb24oKSA9PSBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKQorICAgICAgICAgICAgICAgIHJl
dHVybiBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGxhc3RFeGVjdXRpb25WZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVy
c2lvbigpOworICAgICAgICAgICAgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRv
ckV4ZWN1dGlvblZlcnNpb24oKTsKIAogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2Ug
dGhlIHZpc2l0IGNvdW50IGhlcmUgb3Vyc2VsdmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0
aGlzIGFkZHMKICAgICAgICAgICAgIC8vIG9wYXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNs
YXJlIHRlcm1pbmF0aW9uIHlldC4gVGhlIHdheSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKICAgICAg
ICAgICAgIC8vIGNvbnN0cmFpbnQgc29sdmVyIGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291
bnQuCisgICAgICAgICAgICBtX251bU9wYXF1ZVJvb3RzQmVmb3JlID0gaGVhcC5udW1PcGFxdWVS
b290cygpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgbnVtT3BhcXVlUm9vdHNC
ZWZvcmUgPSBoZWFwLm51bU9wYXF1ZVJvb3RzKCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBN
YWtlIHRoaXMgcGFyYWxsZWwhCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1SZXZpc2l0ZWQgPSAw
OwotICAgICAgICAgICAgY2xpZW50RGF0YS0+Zm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdGFza3MuaXNFbXB0eSgpKTsKKyAgICAgICAg
ICAgIG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAogICAgICAgICAg
ICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1
YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChI
ZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bVJldmlzaXRlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwg
SGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlz
aXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fdGFza3MuYXBw
ZW5kKHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChmdW5jKSk7CiAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzbG90VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJv
b3RzKCkgLSBudW1PcGFxdWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdD
b25zdHJhaW50KFdURk1vdmUoY29uc3RyYWludCkpOworICAgICAgICAgICAgcmV0dXJuIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX3Rhc2tzKQorICAgICAg
ICAgICAgICAgIHRhc2stPnJ1bih2aXNpdG9yKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgbV90YXNrcy5jbGVhcigpOworICAgICAgICB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIFZNJiBtX3ZtOworICAgICAgICBKU1ZNQ2xpZW50RGF0
YSYgbV9jbGllbnREYXRhOworICAgICAgICB1aW50NjRfdCBtX2xhc3RFeGVjdXRpb25WZXJzaW9u
OworICAgICAgICBzaXplX3QgbV9udW1PcGFxdWVSb290c0JlZm9yZSB7IDAgfTsKKyAgICAgICAg
VmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+PiBtX3Rhc2tzOwor
ICAgIH07CisgICAgCisgICAgdm0tPmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjptYWtl
X3VuaXF1ZTxOb3JtYWxXb3JsZENvbnN0cmFpbnQ+KCp2bSwgKmNsaWVudERhdGEpKTsKICAgICAg
ICAgCiAgICAgY2xpZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3Jl
YXRlKCp2bSwgdHJ1ZSk7CiAgICAgdm0tPm1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJl
ZihuZXcgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkpOwpJbmRleDogVG9vbHMvU2NyaXB0
cy9ydW4tanNjLWJlbmNobWFya3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNj
LWJlbmNobWFya3MJKHJldmlzaW9uIDIyNTE3OCkKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1i
ZW5jaG1hcmtzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIExPTkdTUElERVJfUEFU
SCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAKIFY4X1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BB
VEggKyAiU3VuU3BpZGVyIiArICJ0ZXN0cyIgKyAidjgtdjYiCiBUQUlMQkVOQ0hfUEFUSCA9IFBF
UkZPUk1BTkNFVEVTVFNfUEFUSCArICJUYWlsQmVuY2g5MDAwIgogTUlDUk9CRU5DSE1BUktTX1BB
VEggPSBPUEVOU09VUkNFX1BBVEggKyAiSlNUZXN0cyIgKyAibWljcm9iZW5jaG1hcmtzIgotT0NU
QU5FX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJPY3RhbmUiICsgIndy
YXBwZXJzIgorT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAr
ICJPY3RhbmUiCitPQ1RBTkVfV1JBUFBFUl9QQVRIID0gT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCAr
ICJ3cmFwcGVycyIKIEpTQkVOQ0hfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJKU0Jl
bmNoIgogU0lYU1BFRURfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIg
KyAidGVzdHMiCiBTSVhTUEVFRF9XUkFQUEVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEgg
KyAiU2l4U3BlZWQiICsgIndyYXBwZXJzIgpAQCAtODQxLDYgKzg0MiwyMCBAQCBjbGFzcyBTaW5n
bGVGaWxlVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCiAgIGVuZAogZW5kCiAKKyMgQmVuY2htYXJr
IHRoYXQgY29uc2lzdHMgb2YgYSBzaW5nbGUgZmlsZSBhbmQgbXVzdCBiZSBsb2FkZWQgaW4gaXRz
IG93biBnbG9iYWwgb2JqZWN0IGVhY2gKKyMgdGltZSAoaS5lLiBydW4oKSksIGJ1dCByZXR1cm5z
IGl0cyByZXN1bHQgaW4gYSBjdXN0b20gd2F5LgorY2xhc3MgU2luZ2xlRmlsZUN1c3RvbVRpbWVk
QmVuY2htYXJrUGFyYW1ldGVycworICBhdHRyX3JlYWRlciA6YmVuY2hQYXRoCisgIAorICBkZWYg
aW5pdGlhbGl6ZShiZW5jaFBhdGgpCisgICAgQGJlbmNoUGF0aCA9IGJlbmNoUGF0aAorICBlbmQK
KyAgCisgIGRlZiBraW5kCisgICAgOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyaworICBl
bmQKK2VuZAorCiAjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGRhdGEg
ZmlsZXMgdGhhdCBzaG91bGQgYmUgbG9hZGVkIGdsb2JhbGx5LCBmb2xsb3dlZAogIyBieSBhIGNv
bW1hbmQgdG8gcnVuIHRoZSBiZW5jaG1hcmsuCiBjbGFzcyBNdWx0aUZpbGVUaW1lZEJlbmNobWFy
a1BhcmFtZXRlcnMKQEAgLTk2NSw2ICs5ODAsMjUgQEAgZGVmIGVtaXRCZW5jaFJ1bkNvZGVGaWxl
KG5hbWUsIHBsYW4sIGJlbgogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgIGlm
IChfX2JlbmNoZXJfaW5kZXggPj0gI3t3YXJtdXB9KSBwcmludChcIiN7bmFtZX06ICN7cGxhbi52
bX06ICN7cGxhbi5pdGVyYXRpb259OiBcIiArIChfX2JlbmNoZXJfaW5kZXggLSAje3dhcm11cH0p
ICsgXCI6IFRpbWU6IFwiKygoX19hZnRlci1fX2JlZm9yZSkvX19ydW5zKSk7IikKICAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0iKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIs
ZmlsZSwiI3tiZW5jaFBhcmFtcy50ZWFyRG93bkNvbW1hbmQuanN9IikKKyAgICAgIGVsc2lmIGJl
bmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyaworICAgICAg
ICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5jaGVyX3J1bihfX2JlbmNo
ZXJfd2hhdCkgeyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICB2YXIgX19i
ZW5jaGVyX3Jlc3VsdCA9IHt2YWx1ZTogbnVsbH07IikKKyAgICAgICAgJHJlcnVuLnRpbWVzIHsK
KyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcnVuKF9fYmVuY2hlcl93aGF0
LCBfX2JlbmNoZXJfcmVzdWx0KTsiKQorICAgICAgICB9CisgICAgICAgIGRvdWJsZVB1dHMoJHN0
ZGVycixmaWxlLCIgICBpZiAoX19iZW5jaGVyX3Jlc3VsdC52YWx1ZSA9PSBudWxsKSIpCisgICAg
ICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdWxs
IHJlc3VsdFwiKTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcmV0dXJu
IF9fYmVuY2hlcl9yZXN1bHQudmFsdWU7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZp
bGUsIn0iKQorICAgICAgICAkd2FybXVwLnRpbWVzIHsKKyAgICAgICAgICBkb3VibGVQdXRzKCRz
dGRlcnIsZmlsZSwiX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5pbnNwZWN0
fSkiKQorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJnYygpOyIpIHVubGVzcyBw
bGFuLnZtLnNob3VsZE1lYXN1cmVHQworICAgICAgICB9CisgICAgICAgICRpbm5lci50aW1lcyB7
CisgICAgICAgICAgfCBpbm5lckluZGV4IHwKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIs
ZmlsZSwicHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19OiAje3BsYW4uaXRlcmF0aW9ufTogI3tp
bm5lckluZGV4fTogVGltZTogXCIrX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0
aC5pbnNwZWN0fSkpOyIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7
IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KICAgICAgIGVsc2UK
ICAgICAgICAgcmFpc2UgdW5sZXNzIGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVUaW1l
ZEJlbmNobWFyawogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19i
ZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCkBAIC0xNTk0LDYgKzE2MjgsMTkgQEAgY2xh
c3MgT2N0YW5lQmVuY2htYXJrCiAgIGVuZAogZW5kCiAKK2NsYXNzIEN1c3RvbVRpbWVkQmVuY2ht
YXJrCisgIGluY2x1ZGUgQmVuY2htYXJrCisgIAorICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBmdWxs
UGF0aCkKKyAgICBAbmFtZSA9IG5hbWUKKyAgICBAZnVsbFBhdGggPSBmdWxsUGF0aAorICBlbmQK
KyAgCisgIGRlZiBlbWl0UnVuQ29kZShwbGFuKQorICAgIGVtaXRCZW5jaFJ1bkNvZGUoZnVsbG5h
bWUsIHBsYW4sIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFya1BhcmFtZXRlcnMubmV3KGVu
c3VyZUZpbGUoIkN1c3RvbVRpbWVkLSN7QG5hbWV9IiwgQGZ1bGxQYXRoKSkpCisgIGVuZAorZW5k
CisKIGNsYXNzIEtyYWtlbkJlbmNobWFyawogICBpbmNsdWRlIEJlbmNobWFyawogICAKQEAgLTMw
MTAsNiArMzA1Nyw3IEBAIGJlZ2luCiAgICAgfCBhcmdzIHwKICAgICBPQ1RBTkUuYWRkIE9jdGFu
ZUJlbmNobWFyay5uZXcoKmFyZ3MpCiAgIH0KKyAgT0NUQU5FLmFkZCBDdXN0b21UaW1lZEJlbmNo
bWFyay5uZXcoInNwbGF5LWxhdGVuY3kiLCAoT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCArICJzcGxh
eS5qcyIpLnRvX3MpCiAKICAgS1JBS0VOID0gQmVuY2htYXJrU3VpdGUubmV3KCJLcmFrZW4iLCA6
YXJpdGhtZXRpY01lYW4sIC0xKQogICBbImFpLWFzdGFyIiwgImF1ZGlvLWJlYXQtZGV0ZWN0aW9u
IiwgImF1ZGlvLWRmdCIsICJhdWRpby1mZnQiLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBAIHNldChUZXN0V1RGX1NPVVJD
RVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NTdHJpbmcuY3BwCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAK
KyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQu
Y3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKICAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ3Jvc3NUaHJlYWRUYXNrLmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5jcHAKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxhdGZvcm1V
dGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29h
Lm1tICovOyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRp
ZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICov
OyB9OwogCQkwRjJDMjBCODFEQ0Q1NDUwMDA1NDJEOUUgLyogVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJE
OUUgLyogVGltZS5jcHAgKi87IH07CisJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwICovOyB9OwogCQkwRjNCOTRBNzFBNzcyNjc0MDBERTMyNzIgLyogV0tXZWJWaWV3RXZh
bHVhdGVKYXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2
YVNjcmlwdC5tbSAqLzsgfTsKIAkJMEY0RkZBOUUxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90
VmlhUmVuZGVySW5Db250ZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVuZGVy
SW5Db250ZXh0Lm1tICovOyB9OwogCQkxMTVFQjM0MzFFRTBCQTAzMDAzQzJDMEEgLyogVmlld3Bv
cnRTaXplRm9yVmlld3BvcnRVbml0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDExNUVCMzQyMUVFMEI3MjAwMDNDMkMwQSAvKiBWaWV3cG9ydFNpemVG
b3JWaWV3cG9ydFVuaXRzLm1tICovOyB9OwpAQCAtMTA2Nyw2ICsxMDY4LDcgQEAKIAkJMEYxMzlF
NzUxQTQyM0E1MzAwRjU5MEY1IC8qIFdlYWtPYmpDUHRyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vha09iakNQdHIubW07IHBhdGggPSBjb2NvYS9XZWFrT2Jq
Q1B0ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxN0JCRDQxNUFGNkM0RDAw
N0FCNzUzIC8qIFdlYkNvcmVTdGF0aXN0aWNzV2l0aE5vV2ViUHJvY2Vzcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlBy
b2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDMjBCNzFEQ0Q1NDQ4
MDA1NDJEOUUgLyogVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENCNUIxRkNFMTc5
MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2
YWx1YXRlSmF2YVNjcmlwdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVuZGVySW5D
b250ZXh0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU25hcHNo
b3RWaWFSZW5kZXJJbkNvbnRleHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NEZGQUEwMUVEM0QwREUwMEY3MTExRiAvKiBJbWFnZUlPLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBu
YW1lID0gSW1hZ2VJTy5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0ltYWdlSU8uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKQEAgLTI1ODEsNiAr
MjU4Myw3IEBACiAJCQkJMjZGMUI0NDIxNUNBNDM0RjAwRDFFNEJGIC8qIEF0b21pY1N0cmluZy5j
cHAgKi8sCiAJCQkJRTQwMDE5MzAxQUNFOUI1QzAwMUIwQTJBIC8qIEJsb29tRmlsdGVyLmNwcCAq
LywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFyaXRobWV0aWNPcGVy
YXRpb25zLmNwcCAqLywKKwkJCQkwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUzMjMgLyogQ29uY3VycmVu
dFB0ckhhc2hTZXQuY3BwICovLAogCQkJCTBGRUFFMzY3MUI3RDE5Q0IwMENFMTdGMiAvKiBDb25k
aXRpb24uY3BwICovLAogCQkJCTUxNzE0RUI5MUQwODc0MTYwMDQ3MjNDNCAvKiBDcm9zc1RocmVh
ZFRhc2suY3BwICovLAogCQkJCTI2QTJDNzJFMTVFMkU3M0MwMDVCMUExNCAvKiBDU3RyaW5nLmNw
cCAqLywKQEAgLTMxNjUsNiArMzE2OCw3IEBACiAJCQkJN0M4M0RFRjYxRDBBNTkwQzAwRkVCQ0Yz
IC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRkUxRDBBNTkw
QzAwRkVCQ0YzIC8qIE5ha2VkUHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0Q1NEYzMUYz
MzhDMzYwMEE5N0FBNyAvKiBOZXZlckRlc3Ryb3llZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjMwQ0I1QzFGQ0UxNzk2MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RGMDExRDBBNTkwQzAwRkVCQ0YzIC8qIE9wdGlvbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBNzdCQUEzMUQ5QUZGRkMwMDVGQzU2OCAvKiBPcHRpb25TZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDIxRDBBNTkwQzAwRkVCQ0YzIC8qIE9TT2Jq
ZWN0UHRyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworbmFtZXNw
YWNlIHsKKworLy8gYGNvbW1hbmRzYCBpcyBhIHN0cmluZyB0aGF0IHRlbGxzIHRoaXMgdGhpbmcg
d2hhdCB0byBkby4gSXQgaGFzIHRvIGhhdmUgYW4gZXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycy4K
Ky8vIFRoZSBjaGFyYWN0ZXIgcGFpcnMgYXJlIGNvbW1hbmRzLiBDb21tYW5kczoKKy8vCisvLyAr
eCAgICAgQWRkcyAneCcgdG8gdGhlIHNldCAoY2FzdHMgJ3gnIHRvIGEgdm9pZCopIGFuZCBhc3Nl
cnRzIHRoYXQgaXQncyBuZXcuCisvLyAheCAgICAgQWRkcyAneCcgdG8gdGhlIHNldCBhbmQgYXNz
ZXJ0cyB0aGF0IGl0IHdhcyB0aGVyZSBhbHJlYWR5LgorLy8gPXggICAgIEFzc2VydHMgdGhhdCAn
eCcgaXMgaW4gdGhlIHNldAorLy8gLXggICAgIEFzc2VydHMgdGhhdCAneCcgaXMgbm90IGluIHRo
ZSBzZXQKK3ZvaWQgZG9UZXN0KGNvbnN0IGNoYXIqIGNvbW1hbmRzKQoreworICAgIENvbmN1cnJl
bnRQdHJIYXNoU2V0IHNldDsKKyAgICBmb3IgKGNvbnN0IGNoYXIqIGNvbW1hbmQgPSBjb21tYW5k
czsgY29tbWFuZFswXSAmJiBjb21tYW5kWzFdOyBjb21tYW5kICs9IDIpIHsKKyAgICAgICAgdm9p
ZCogcHRyID0gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbW1h
bmRbMV0pKTsKKyAgICAgICAgc3dpdGNoIChjb21tYW5kWzBdKSB7CisgICAgICAgIGNhc2UgJysn
OgorICAgICAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICchJzoKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuYWRk
KHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJz0nOgorICAgICAgICAg
ICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKHB0cikpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhw
dHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworVEVTVChXVEZfQ29u
Y3VycmVudFB0ckhhc2hTZXQsIEVtcHR5KQoreworICAgIGRvVGVzdCgiIik7Cit9CisKK1RFU1Qo
V1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50KQoreworICAgIGRvVGVzdCgi
K3g9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVs
ZW1lbnRNdWx0aXBsZVRpbWVzKQoreworICAgIGRvVGVzdCgiK3gheCF4IXgheCF4IXgheCF4IXgh
eD14LXktMCIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxl
bWVudE1hbnlUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4IXgheCF4IXg9eC15
LTAheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCIpOworfQorCitURVNUKFdURl9Db25j
dXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHMpCit7CisgICAgZG9UZXN0KCIrMSsy
KzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraytsK3or
eCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytW
K0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9
aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1L
PUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0
LCBBZGRMb3RzT2ZFbGVtZW50c01hbnlUaW1lcykKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUr
Nis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2graitrK2wreit4K2Mrditi
K24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytMK1orWCtDK1YrQitOK009
MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1s
PXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9
Qz1WPUI9Tj1NLS4hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFk
IWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUch
SCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFp
IW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAh
QSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFl
IXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQh
WSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4
ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0h
USFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEz
ITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXgh
YyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFC
IU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWgh
aiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFM
IVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEh
cyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFG
IUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkh
dSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFP
IVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEh
dyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFS
IVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0iKTsKK30KKworVEVT
VChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzQW5kUXVlcnlTb21l
QmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSsw
K3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9
cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWItbi1tLVEtVy1F
LVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTStsK3oreCtjK3Yr
YituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitN
PTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9
bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1Y
PUM9Vj1CPU49TS0uIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRT
b21lRWxlbWVudHNNdWx0aXBsZVRpbWVzVGhlbkFkZFRoZVJlc3RBbmRRdWVyeVNvbWVCZWZvcmVB
ZGRpbmdUaGVSZXN0KQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Ur
cit0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3
IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAh
cSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5
ITAhcSF3IWUhciF0K3krdStpK28rcCthK3MrZCtmK2craCtqK2s9MT0yPTM9ND01PTY9Nz04PTk9
MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9ay1sLXoteC1jLXYtYi1uLW0tUS1X
LUUtUi1ULVktVS1JLU8tUC1BLVMtRC1GLUctSC1KLUstTC1aLVgtQy1WLUItTi1NK2wreit4K2Mr
ditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytMK1orWCtDK1YrQitO
K009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9
az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9SD1KPUs9TD1a
PVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327984</attachid>
            <date>2017-11-30 10:00:36 -0800</date>
            <delta_ts>2017-11-30 11:15:53 -0800</delta_ts>
            <desc>maybe 0.5% faster on Speedometer</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>174875</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2
ICs1MDMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0zMTEsNiArMzEwLDkgQEAKIAkJ
MEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4
IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0
REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0
MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICov
OyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTcz
MDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi87IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFE
MzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJh
aW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjREOEM3ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNGMUM0
QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMx
NSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9OwogCQkw
RjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRG
ODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0
OTQsNyArMTQ5Niw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1
NEQ1MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVC
RjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5
NzAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdh
c21OYW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTgg
LyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFF
MDhGMURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4
IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNz
ZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5
TGlua0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlM
aW5rRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJv
clByb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xOTc2LDcgKzE5NzcsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyog
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNB
NjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhD
MUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1l
b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAg
LyogREZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
UGxhbklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5s
aW5lcy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjY0LDYgKzIyNjQsMTAgQEAKIAkJMEY0
QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09y
aWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1w
Lmg7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdENvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxl
bGlzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJhaW50UGFyYWxs
ZWxpc20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzYxRkNBM0NGMjAw
MUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERF
MUNDMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmg7
IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRERTFEMDFDNEQ3NjRCMDA0RDZDMTEgLyogQjNPcmlnaW5EdW1wLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5jcHA7IHBh
dGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDI1NCw3ICs0MjU4LDYgQEAKIAkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNz
ZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcx
MDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2Vj
dGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFEREIxRjYyMThE
NzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QURFODAyOTMxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2Vi
QXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJB
c3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NTAwLDYgKzU1MDMsNyBAQAogCQkJCTBGRDBFNUU2MUU0M0QzNDcwMDA2QUIwOCAvKiBD
b2xsZWN0b3JQaGFzZS5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBDb25z
ZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8qIENv
bnNlcnZhdGl2ZVJvb3RzLmggKi8sCisJCQkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENv
bnN0cmFpbnRQYXJhbGxlbGlzbS5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAv
KiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRG
NyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVm
ZXJHQy5oICovLApAQCAtNTU5NCwxMSArNTU5OCwxMiBAQAogCQkJCTBGMUZCMzk4MUUxRjY1Rjkw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEZBNzYyMDIxREI5MjQyMzAw
QjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5jcHAgKi8sCiAJCQkJMEZBNzYyMDMxREI5MjQyMzAwQjdB
MkZEIC8qIE11dGF0b3JTdGF0ZS5oICovLAotCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAv
KiBPcGFxdWVSb290U2V0LmggKi8sCiAJCQkJMEZCQjczQjYxREVGM0FBQzAwMkMwMDlFIC8qIFBy
ZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCAqLywKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFCMDgg
LyogUmVnaXN0ZXJTdGF0ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAvKiBS
ZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAwQzEzODM5
IC8qIFJ1bm5pbmdTY29wZS5oICovLAorCQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBT
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCisJCQkJMEY0RDhDNzcxRkNBM0NGMzAwMUQz
MkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJB
QTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1
QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIg
LyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC01NjIwLDcgKzU2MjUsNyBAQAogCQkJCTBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29t
RmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRp
bmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291
bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
Y3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAq
LywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04MTY5
LDYgKzgxNzQsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8q
IEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFD
IC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5MkUx
QkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFkZXJz
ICovLApAQCAtODg4Myw2ICs4ODg5LDcgQEAKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIg
LyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgy
QjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291
bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpT
V2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8q
IEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhE
RTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTkwMDIs
OSArOTAwOSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZGIC8qIE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQw
QTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0NjBF
MTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJzICov
LAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0OSw3ICs5MjU2LDYgQEAKIAkJCQkwRjZDNzM1MTFB
QzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1Rp
bWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBW
aXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8q
IFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjAsNyArMzIwLDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhTbAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX3N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpKSkKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5n
ZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05ODAsNyArOTgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIAogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVk
ID0gdHJ1ZTsKIAotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChz
aG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpIHsKQEAgLTExMzIsNyArMTEzMiw3IEBAIHN0YXRp
YyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0wKIAogYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKLSAg
ICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6Omlz
TWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2UoKSkpCkBAIC0xMTQ3
LDEwICsxMTQ3LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWcK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERG
Rzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCiB7Ci0gICAgaWYgKHRyYW5z
aXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0
aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2lu
ICYmICFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHRy
YW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAo
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKQEAg
LTEyNTQsMTQgKzEyNTQsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0gZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0
PENvZGVCbG9jayo+KCpyZWZlcmVuY2UtPnZtKCksIHJlZmVyZW5jZSkpOwotICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIg
PSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChh
bGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0Nv
bW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJl
UmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
ZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKICAgICAgICAg
ICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFp
bnRQYXJhbGxlbGlzbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBDb25zdHJhaW50
UGFyYWxsZWxpc20gOiB1aW50OF90IHsKKyAgICBTZXF1ZW50aWFsLAorICAgIFBhcmFsbGVsCit9
OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWludFBhcmFs
bGVsaXNtIHBhcmFsbGVsaXNtKQoreworICAgIHN3aXRjaCAocGFyYWxsZWxpc20pIHsKKyAgICBj
YXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOgorICAgICAgICBvdXQu
cHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsOgorICAgICAgICBvdXQucHJpbnQoIlBhcmFsbGVs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDcgKzI4MSw3IEBAIEhlYXA6Okhl
YXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9y
KHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRh
dG9yTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBt
X3JhY2VNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAs
IG1fY29uc3RyYWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0Pigp
KQorICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFp
bnRTZXQ+KCp0aGlzKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tz
KHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGlu
ZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTkxMSw3ICs5MTEs
NyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJy
aWVyc0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAg
ICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVu
dGx5KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAg
IC8vIER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2Jq
ZWN0IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3
aWxsIG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmpl
Y3QuIElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGlt
ZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAt
OTI0LDE1ICs5MjQsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlND
ZQogICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgog
ICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFy
dHMgb3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBk
byBpc01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4g
V2UgZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlz
IG1hcmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMg
c2Nhbm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0
b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAg
IC8vCiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0
aGUgb2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAg
ICAgICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2Uu
IFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtl
ZENvbmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAg
ICAgICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAg
IC8vIGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAg
ICAgICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mg
ZGlmZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBv
ciBibGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxh
Y2sgY29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0
ZShDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk0OCw3IEBAIHZvaWQgSGVh
cDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAg
IC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBt
ZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZp
bml0ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0
J3MgT0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYg
d2Ugd2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBA
IC0xMjY1LDYgKzEyNjUsOCBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBo
YXNlCiAgICAgCiAgICAgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yID0gKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3I7CiAgICAgCisgICAgbV9vcGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAg
ICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewogICAgICAgICBIYXNoTWFwPGNvbnN0IGNo
YXIqLCBzaXplX3Q+IHZpc2l0TWFwOwogICAgICAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCkBAIC0x
Mjg3LDEwICsxMjg5LDYgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFz
ZQogICAgICAgICAgICAgCiAgICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwog
ICAgICAgICAgICAgCi0gICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAg
ICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IFRha2UgbV9tdXRhdG9yRGlkUnVuIGludG8gYWNj
b3VudCB3aGVuIHNjaGVkdWxpbmcgY29uc3RyYWludHMuIE1vc3QgbGlrZWx5LAogICAgICAgICAv
LyB3ZSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyBhZ2FpbiB1bmxlc3Mg
dGhlIG11dGF0b3IgZGlkIHJ1bi4gQXQgYQogICAgICAgICAvLyBtaW5pbXVtLCB3ZSBjb3VsZCB1
c2UgdGhpcyBmb3Igd29yayBlc3RpbWF0ZXMgLSBidXQgaXQncyBwcm9iYWJseSBtb3JlIHRoYW4g
anVzdCBhbgpAQCAtMTMwNSw3ICsxMzAzLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVu
Rml4cG9pbnRQaGFzZQogICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sg
YXQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxz
bwogICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJh
aW50KCkuCiAgICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWlu
dFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKKyAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNl
KHNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKGNvbnZlcmdlZCAmJiBzbG90VmlzaXRvci5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAg
ICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNlOjpFbmQpOwpA
QCAtMjU3OCw3ICsyNTc2LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewog
ICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNj
YW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgq
dGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBtX29i
amVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAgICAgICAgICAgICBDb25z
ZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CkBAIC0yNTg4LDExICsyNTg2
LDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIGdhdGhl
clNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBzbG90
VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICB9LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRv
cik7CiAjZW5kaWYKQEAgLTI2MDksMTkgKzI2MDgsMjEgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92
bS0+ZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNo
IiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25n
SGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNs
b3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6Okdy
ZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAg
ICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgICAgIGlmIChTYW1wbGluZ1By
b2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CiAg
ICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9j
aygpKTsKQEAgLTI2MzcsMzQgKzI2MzgsMzggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWlu
dHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlz
aXRDaGlsZHJlbihzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQ
YXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3Ii
LCAiSklUIFN0dWIgUm91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRy
YWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFy
YWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0
V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6
OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcmgiLCAiV2Vh
ayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAgICAgICAgICAgICAgICBjdXJyZW50
LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwpOwogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7
CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAg
ICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVm
ZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2NzksMTIgKzI2ODQsMTMg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFM
b2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlBhcmFsbGVsKTsKICNlbmRpZgogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBpdGVyYXRlRXhlY3V0
aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoCiAgICAgICAgICAg
ICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAv
LyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2su
CkBAIC0yNjkzLDExICsyNjk5LDE1IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNv
ZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6U2VsZG9tR3JleWVkLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1ybXMiLCAi
TXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVl
ZHMgdG8gZ3JhYiBsb2NrcyB0byBmaWRkbGUgd2l0aCB0aGUgbXV0YXRvciBtYXJrIHN0YWNrIGFu
ZCB0aGUgcmFjZSBzdGFjay4KKyAgICAgICAgICAgIC8vIFRoZSBjaGFuY2VzIG9mIGNvbnRlbnRp
b24gb24gdGhvc2UgbG9ja3MgYXJlIHNsaW0sIGJ1dCB3ZSBzaG91bGQgZG8gaXQgYW55d2F5Lgor
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhh
dCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiAgICAgICAgICAg
ICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CkBAIC0yNzExLDcgKzI3MjEsOCBA
QCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImKSAtPiBkb3VibGUgewogICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRvck1hcmtTdGFj
ay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiAgICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpQYXJhbGxlbCk7CiB9CiAKIHZvaWQgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFp
bnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50PiBjb25zdHJhaW50KQpAQCAtMjc5
NCwxNiArMjgwNSw2IEBAIHZvaWQgSGVhcDo6YWxsb3dDb2xsZWN0aW9uKCkKICAgICBtX2NvbGxl
Y3RDb250aW51b3VzbHlMb2NrLnVubG9jaygpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
Pgotdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKLXsKLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAg
IGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwotICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RW
aXNpdG9yKTsKLSAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNp
dG9ycykKLSAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OnNldE11
dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKQogewogICAgIG1fbXV0YXRvclNob3VsZEJl
RmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3LDQgKzI4NDgsMjQgQEAgdm9pZCBIZWFwOjpyZW1vdmVI
ZWFwRmluYWxpemVyQ2FsbGJhY2soYwogICAgIG1faGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1v
dmVGaXJzdChjYWxsYmFjayk7CiB9CiAKK3ZvaWQgSGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFz
ayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9
CisKK3ZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICB1bnNpZ25lZCBpbml0aWFsUmVmQ291bnQgPSB0
YXNrLT5yZWZDb3VudCgpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sodGFzayk7CisgICAgdGFz
ay0+cnVuKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNr
KG51bGxwdHIpOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtp
bmdNdXRleCk7CisgICAgICAgIHdoaWxlICh0YXNrLT5yZWZDb3VudCgpID4gaW5pdGlhbFJlZkNv
dW50KQorICAgICAgICAgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChtX21hcmtp
bmdNdXRleCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1
ZGUgIldlYWtIYW5kbGVPd25lci5oIgogI2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIu
aCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1
cnJlbnRQdHJIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTExNCw3ICsx
MTUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVz
b2x1dGlvbiA9IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwot
ICAgIHN0YXRpYyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBz
dGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAg
ICAgCiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0zNTgsNiAr
MzU4LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFj
ayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5h
bGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2
b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVu
Y3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNr
SW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xv
dFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxv
Y2F0aW5nU2NvcGU7CkBAIC01MjcsNiArNTM4LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0
b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAg
ICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7
CiAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTIsNiBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxT
bG90VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3Io
Y29uc3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0
YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9j
b2RlQmxvY2tzOwpAQCAtNjMzLDggKzY0Myw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9u
dW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVs
TWFya2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0
ZXg7Ci0gICAgSGFzaFNldDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsKKyAgICBDb25jdXJy
ZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
X2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1MSw3IEBAIHByaXZhdGU6
CiAgICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBl
ckNsaWVudDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2Jv
bnVzVmlzaXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90
IG1fYmxvY2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDE1
IEBAIGlubGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFQKICAgICByZXR1cm4g
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRo
ZSBtYXJraW5nVmVyc2lvbigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQo
Y29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdD
VGhyZWFkVHlwZTo6SGVscGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxI
ZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQog
ICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBN
YXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9j
ay5pc01hcmtlZCgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtp
bmdWZXJzaW9uKCksIGNlbGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2Vs
bCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xh
cmdlQWxsb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCku
aXNNYXJrZWQoKTsKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygp
OwotICAgIHJldHVybiBibG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2su
dm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJl
dHVybiBibG9jay5pc01hcmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2lu
Z1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5k
U2V0TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxs
KQpAQCAtMjY5LDQgKzI1OSwxNCBAQCBpbmxpbmUgdm9pZCBIZWFwOjpzdG9wSWZOZWNlc3Nhcnko
KQogICAgICAgICBzdG9wSWZOZWNlc3NhcnlTbG93KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Cit2b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7
CisgICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgZnVuYygqbV9tdXRhdG9y
U2xvdFZpc2l0b3IpOworICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xv
dFZpc2l0b3JzKQorICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVp
bGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNu
YXBzaG90QnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3
ICs2OSw3IEBAIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQg
SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNT
RVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6
aXNNYXJrZWQoY2VsbCkpOwogCiAgICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkp
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdl
QWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xh
cmdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBA
QCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9p
c01hcmtlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lO
TElORSBib29sIGlzTWFya2VkKEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0
dXJuIGlzTWFya2VkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJy
ZW50bHkoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJl
dHVybiBpc01hcmtlZCgpOyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgp
IHx8IGlzTmV3bHlBbGxvY2F0ZWQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZENlbGw7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDU1LDYgKzQ1NSwzMyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9V
bnN3ZXB0KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorUmVmUHRyPFNoYXJlZFRh
c2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RF
bXB0eUJsb2NrU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8
TWFya2VkQmxvY2s6OkhhbmRsZSooKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJr
ZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2Nh
dG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIHJ1bigpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIG1faW5kZXggPSBtX2FsbG9jYXRv
ci5tX21hcmtpbmdOb3RFbXB0eS5maW5kQml0KG1faW5kZXgsIHRydWUpOworICAgICAgICAgICAg
aWYgKG1faW5kZXggPj0gbV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxv
Y2tzW21faW5kZXgrK107CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgTWFya2VkQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXgg
eyAwIH07CisgICAgICAgIExvY2sgbV9sb2NrOworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUYXNrKCp0aGlzKSk7Cit9CisKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhp
cyksICI6IiwgbV9jZWxsU2l6ZSwgIi8iLCBtX2F0dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyNTE3OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNs
dWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtOTksNiArMTAwLDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1
bmN0b3ImKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxl
KigpPj4gcGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAgCiAgICAgdm9pZCBhZGRC
bG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRC
bG9jazo6SGFuZGxlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw2IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFya2Vk
Q29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAg
ICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgYm9vbCB0ZXN0
QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICAgICAgCkBAIC0yODAs
NyArMjc5LDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBhcmVNYXJr
c1N0YWxlKCk7CiAgICAgYm9vbCBhcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJz
aW9uKTsKLSAgICBEZXBlbmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVu
Y3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIAogICAgIERlcGVuZGVuY3kgYWJv
dXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKQEAgLTQ5OCwx
OCArNDk2LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKEgKICAg
ICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAotQUxXQVlT
X0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdp
dGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQotewotICAgIEhlYXBWZXJz
aW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwotICAgIHJldHVybiBkZXBlbmRlbmN5V2l0
aChkZXBlbmRlbmN5KHZlcnNpb24pLCB2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKTsKLX0KLQog
aW5saW5lIERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBl
bmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkocmVzdWx0LnZhbHVlKSkK
KyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5M
SUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFib3V0VG9NYXJrU2xv
dyhtYXJraW5nVmVyc2lvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRlbmN5OworICAgIHJl
dHVybiBkZXBlbmRlbmN5KHZlcnNpb24pOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjphc3NlcnRNYXJrc05vdFN0YWxlKCkKQEAgLTUyNCwxNSArNTE2LDEwIEBAIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyhjb24KIAogaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBw
KQogewotICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSA/IGZhbHNlIDog
aXNNYXJrZWRSYXcocCk7Ci19Ci0KLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZENv
bmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKLXsK
LSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVy
c2lvbik7Ci0gICAgaWYgKHJlc3VsdC52YWx1ZSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0g
bV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVy
c2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRv
bU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworICAgIHJldHVybiBtX21hcmtzLmdldChh
dG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KHZlcnNpb24pKTsKIH0KIAogaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24g
MjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2MywxMSBAQCBwdWJsaWM6CiAgICAgLy8gV2hlbiB0aGlz
IGlzIHRydWUgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQgYnV0IHRoZSBtYXJrIGJpdHMg
aGF2ZW4ndCBjb252ZXJnZWQgeWV0LgogICAgIGJvb2wgaXNNYXJraW5nKCkgY29uc3QgeyByZXR1
cm4gbV9pc01hcmtpbmc7IH0KICAgICAKKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0JlZ2lu
KCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCogYWN0
aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9CisgICAg
V2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0dXJuIG1fbmV3QWN0aXZlV2Vh
a1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzRW5kKCkgeyBy
ZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQorICAgIAogICAgIHZvaWQgZHVtcEJp
dHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgc3RkOjphcnJheTxzaXplX3QsIG51bVNpemVDbGFzc2VzPiBzX3NpemVD
bGFzc0ZvclNpemVTdGVwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NywzMCArMjcsMTUgQEAKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENTdHJp
bmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorTWFya2luZ0NvbnN0cmFpbnQ6Ok1h
cmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIENv
bnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJh
bGxlbGlzbSkKICAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKICAgICAs
IG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShl
eGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCi17Ci19Ci0K
LU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRv
ciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgOjpGdW5j
dGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKLSAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQotICAgIDogbV9hYmJyZXZpYXRlZE5h
bWUoYWJicmV2aWF0ZWROYW1lKQotICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAgLCBt
X2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkK
ICAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorICAgICwgbV9wYXJhbGxlbGlzbShwYXJh
bGxlbGlzbSkKIHsKIH0KIApAQCAtNjMsMTQgKzQ4LDUxIEBAIHZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBkaWRW
aXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorQ29uc3RyYWludFBhcmFsbGVs
aXNtIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKGFiYnJldmlhdGVkTmFt
ZSgpKTsKLSAgICBWaXNpdGluZ1RpbWVvdXQgdmlzaXRpbmdUaW1lb3V0KHZpc2l0b3IsIGRpZFZp
c2l0U29tZXRoaW5nLCB0aW1lb3V0KTsKLSAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yLCB2
aXNpdGluZ1RpbWVvdXQpOwotICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNpdGluZ1RpbWVvdXQu
dmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICBkaWRWaXNpdFNvbWV0aGluZyA9IHZpc2l0aW5nVGlt
ZW91dC5kaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKTsKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRD
b3VudGVyKHZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSByZXN1bHQgPSBleGVj
dXRlSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRDb3VudGVyLnZp
c2l0Q291bnQoKTsKKyAgICBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20gPSByZXN1bHQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtF
c3RpbWF0ZShTbG90VmlzaXRvciYpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBNYXJr
aW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Cit9
CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAg
ZG9QYXJhbGxlbFdvcmtJbXBsKHZpc2l0b3IpOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291
bnRlci52aXNpdENvdW50KCk7CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpm
aW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3Vu
dGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKHZp
c2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQo
KTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RW
aXNpdG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwordm9pZCBN
YXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMiArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb25zdHJhaW50
UGFyYWxsZWxpc20uaCIKICNpbmNsdWRlICJDb25zdHJhaW50Vm9sYXRpbGl0eS5oIgotI2luY2x1
ZGUgIlZpc2l0aW5nVGltZW91dC5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3Rm
L01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQzLDE4ICs0MSw5IEBAIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwot
ICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6
RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHksIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAg
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAgICAgCiAgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCkBAIC02NCwzMyAr
NTMsMzkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRTdGF0cygpOwogICAgIAogICAgIHNpemVf
dCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KKyAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbTsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0
ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRp
bWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7
CiAgICAgCi0gICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5j
dGlvbih2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgp
ICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Ci0gICAgfQorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KTsKKyAgICAKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsK
KyAgICAKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBm
aW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAg
CisgICAgLy8gSWYgdGhpcyBpcyBTZXF1ZW50aWFsLCBpdCBtZWFucyB0aGF0IHRoZSBjb25zdHJh
aW50IGhhcyB0byBiZSBydW4gc2VxdWVudGlhbGx5LCB3aXRoIG5vIGNvbmN1cnJlbnQKKyAgICAv
LyBjb25zdHJhaW50cy4KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBj
b25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmly
dHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBj
YW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07
CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRp
bWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90Vmlz
aXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVs
aXNtOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20g
eyBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsIH07IC8vIEl0J3MgYSBoZXVyaXN0aWMs
IHdlIGNhbiBiZSB3cm9uZy4gVGhpcyBndWVzcyBvbmx5IGFmZmVjdHMgdGhlIGZpcnN0IHJ1bi4K
ICAgICBzaXplX3QgbV9sYXN0VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmgi
CisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCkBAIC0zNCw1MiArMzcs
MjMxIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhl
Y3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6Ci0gICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29u
c3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1l
b3V0KQorICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCkKICAg
ICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAg
ICwgbV90aW1lb3V0KHRpbWVvdXQpCiAgICAgeworICAgICAgICBtX3NldC5tX2hlYXAuZm9yRWFj
aFNsb3RWaXNpdG9yKAorICAgICAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgewor
ICAgICAgICAgICAgICAgIG1fdmlzaXRDb3VudGVycy5hcHBlbmQoVmlzaXRDb3VudGVyKHZpc2l0
b3IpKTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKICAgICBib29sIGRpZFZpc2l0U29t
ZXRoaW5nKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5n
OworICAgICAgICBmb3IgKGNvbnN0IFZpc2l0Q291bnRlciYgdmlzaXRDb3VudGVyIDogbV92aXNp
dENvdW50ZXJzKSB7CisgICAgICAgICAgICBpZiAodmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0CisgICAg
ZW51bSBTY2hlZHVsZXJQcmVmZXJlbmNlIHsKKyAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisg
ICAgICAgIE5leHRDb25zdHJhaW50Rmlyc3QKKyAgICB9OworCisgICAgLy8gcGlja05leHQoKSBp
cyBjYWxsZWQgd2hpbGUgYSBsb2NrIGlzIGhlbGQsIHNvIGl0IGNhbiBwcmV0ZW5kIGxpa2UgaXQn
cyBiZWluZyBjYWxsZWQgZnJvbSB0aGUgbWFpbgorICAgIC8vIHRocmVhZC4gRm9yIGV4YW1wbGUs
IGl0J3MgdG90YWxseSBzYWZlIGZvciB0aGF0IGxhbWJkYSB0byBjbG9zZSBvdmVyIHRoZSBzdGFj
ay4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZXhlY3V0ZShTY2hlZHVs
ZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIGNvbnN0IEZ1bmMmIHBpY2tOZXh0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQp
OworICAgICAgICBtX3NldC5tX2hlYXAucnVuRnVuY3Rpb25JblBhcmFsbGVsKAorICAgICAgICAg
ICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4VG9SdW47CisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7
OykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0g
WyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV90
b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0
ZUluUGFyYWxsZWwuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9Q
YXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeU5l
eHRDb25zdHJhaW50ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwaWNrUmVzdWx0ID0gcGlja05leHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGlja1Jlc3VsdCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2V4ZWN1dGVkLmdldCgqcGlja1Jlc3VsdCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdD
b25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNt
KCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5k
KCpwaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJhbGxlbFdvcmsoKSB8fCB0cnlOZXh0
Q29uc3RyYWludCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyeU5leHRDb25zdHJhaW50KCkgfHwgdHJ5UGFyYWxsZWxXb3Jr
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX251bUFjdGl2ZVRocmVhZHMpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQW55IHdhaXRpbmcg
Y291bGQgYmUgcmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5pbmcgdGhlIFNsb3RWaXNpdG9yLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQgd291bGQgYmUgcHJv
Zml0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1f
bG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcysrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxp
c206OlNlcXVlbnRpYWw7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFtpbmRleFRvUnVu
XTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChkb1BhcmFs
bGVsV29ya01vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxs
ZWxXb3JrKHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSh2aXNpdG9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9k
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxs
ZWxTZXQuZ2V0KGluZGV4VG9SdW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4
ZWN1dGVJblBhcmFsbGVsLnRha2VGaXJzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsmXSAodW5zaWduZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGluZGV4VG9SdW47
IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWxTZXQuY2xlYXIoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2V4ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwu
YXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rv
RXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzLS07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV9kaWRFeGVjdXRlSW5QYXJh
bGxlbCkKKyAgICAgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dLT5maW5pc2hQYXJhbGxl
bFdvcmsobV9zZXQubV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpOworICAgICAgICBtX2Rp
ZEV4ZWN1dGVJblBhcmFsbGVsLmNsZWFyQWxsKCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleFRvUnVuIDogbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkpCisgICAgICAgICAgICBleGVjdXRl
KCptX3NldC5tX3NldFtpbmRleFRvUnVuXSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdG9F
eGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV90
b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOwogICAgIH0KICAgICAKLSAgICAvLyBS
ZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KLSAgICBib29sIGRyYWluKEJpdFZlY3RvciYg
dW5leGVjdXRlZCkKKyAgICB2b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKICAgICB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgewotICAgICAgICAgICAg
ZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsKLSAg
ICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBhdXRvIGl0ZXIg
PSB1bmV4ZWN1dGVkLmJlZ2luKCk7CisgICAgICAgIGF1dG8gZW5kID0gdW5leGVjdXRlZC5lbmQo
KTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBleGVjdXRlKAorICAgICAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJzdCwKKyAgICAgICAgICAg
IFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAgICAgICAgaWYg
KGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAgICAgICAgICAgfSk7CisgICAgICAg
IHVuZXhlY3V0ZWQuY2xlYXJBbGwoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBkaWRFeGVjdXRl
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRlZC5nZXQoaW5kZXgpOyB9Cisg
ICAgdm9pZCBjb252ZXJnZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIp
CisgICAgeworICAgICAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChvcmRlci5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgaW5kZXggPSAwOwogCi0gICAgdm9p
ZCBleGVjdXRlKHNpemVfdCBpbmRleCkKKyAgICAgICAgLy8gV2Ugd2FudCB0byBleGVjdXRlIHRo
ZSBmaXJzdCBjb25zdHJhaW50IHNlcXVlbnRpYWxseSBpZiB3ZSB0aGluayBpdCB3aWxsIHF1aWNr
bHkgZ2l2ZSB1cyBhCisgICAgICAgIC8vIHJlc3VsdC4gSWYgd2UgcmFuIGl0IGluIHBhcmFsbGVs
IHRvIG90aGVyIGNvbnN0cmFpbnRzLCB0aGVuIHdlIG1pZ2h0IGVuZCB1cCBoYXZpbmcgdG8gd2Fp
dCBmb3IKKyAgICAgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3RyYWludHMgdG8gZmluaXNoLCB3aGlj
aCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVyaW5nIGNvbnZlcmdlbmNlIGl0J3MK
KyAgICAgICAgLy8gZW1waXJpY2FsbHkgbW9zdCBvcHRpbWFsIHRvIHJldHVybiB0byBkcmFpbmlu
ZyBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29yay4gTW9zdAorICAgICAgICAv
LyBjb25zdHJhaW50cyBkb24ndCBnZW5lcmF0ZSBhbnkgd29yayBtb3N0IG9mIHRoZSB0aW1lLCBh
bmQgd2hlbiB0aGV5IGRvIGdlbmVyYXRlIHdvcmssIHRoZXkgdGVuZAorICAgICAgICAvLyB0byBn
ZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmluZyBjeWNsZS4gVGhl
cmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisgICAgICAgIC8vIHdlIGdldCB0aGUg
aGVjayBvdXQgb2YgaGVyZSBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29yay4g
SSB0aGluayB0aGF0IHBhcnQgb2Ygd2hhdAorICAgICAgICAvLyBtYWtlcyB0aGlzIG9wdGltYWwg
aXMgdGhhdCB3ZSBhbHNvIG5ldmVyIGFib3J0IHJ1bm5pbmcgYSBjb25zdHJhaW50IGVhcmx5LCBz
byB3aGVuIHdlIGRvIHJ1bgorICAgICAgICAvLyBvbmUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0
byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2libHkgY2FuLgorICAgICAgICAvLwor
ICAgICAgICAvLyBTaW1pbGFyIHJlYXNvbmluZyBhcHBsaWVzIHRvIGNvbnN0cmFpbnRzIHRoYXQg
dGVuZCB0byByZXR1cm4gQ29zbnRyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbAorICAgICAgICAv
LyBmcm9tIGV4ZWN1dGUuIFRob3NlIGNvbnN0cmFpbnRzIHR5cGljYWxseSBoYXZlIGEgdmVyeSBm
YXN0LXJ1bm5pbmcgZXhlY3V0ZSBmdW5jdGlvbiwgd2hpY2ggdGhlbgorICAgICAgICAvLyBvZmZs
b2FkcyBhbG1vc3QgYWxsIG9mIHRoZSB3b3JrIHRvIGEgcGFyYWxsZWwgd29ya2VyLiBJbiB0aGF0
IGNhc2UsIGl0IG1ha2VzIHNlbnNlIHRvIHJ1biB0aGUKKyAgICAgICAgLy8gZXhlY3V0ZSBmdW5j
dGlvbiBzZXF1ZW50aWFsbHkuCisgICAgICAgIGlmIChvcmRlcltpbmRleF0tPndvcmtFc3RpbWF0
ZShtX3NldC5tX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAgICAgICAgICAgIHx8IG9y
ZGVyW2luZGV4XS0+bGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpID09IENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgIGV4ZWN1dGUoKm9yZGVyW2luZGV4KytdKTsK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHko
KQorICAgICAgICAgICAgICAgICYmIChvcmRlci5pc0VtcHR5KCkgfHwgZGlkVmlzaXRTb21ldGhp
bmcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBleGVjdXRlKAorICAgICAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisgICAgICAgICAg
ICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAgICAgIGlm
IChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBv
cmRlci5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIG9yZGVyW2luZGV4KytdLT5p
bmRleCgpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZXhlY3V0ZShN
YXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKICAgICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0
W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91
dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICAgICAgaWYgKG1fZXhlY3V0
ZWQuZ2V0KGNvbnN0cmFpbnQuaW5kZXgoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBjb25zdHJhaW50
LmV4ZWN1dGUoCisgICAgICAgICAgICBtX3NldC5tX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3Io
KSk7CisgICAgICAgIGRpZEV4ZWN1dGUocGFyYWxsZWxpc20sIGNvbnN0cmFpbnQuaW5kZXgoKSk7
CiAgICAgfQogICAgIAogcHJpdmF0ZToKKyAgICB2b2lkIGRpZEV4ZWN1dGUoQ29uc3RyYWludFBh
cmFsbGVsaXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIG1f
ZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICAgICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJh
bGxlbC5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0
LnNldChpbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgTWFya2luZ0NvbnN0cmFp
bnRTZXQmIG1fc2V0OwotICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAgTW9ub3Rvbmlj
VGltZSBtX3RpbWVvdXQ7CiAgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7Ci0gICAgYm9vbCBtX2Rp
ZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKKyAgICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1fdG9F
eGVjdXRlSW5QYXJhbGxlbDsKKyAgICBCaXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0
OworICAgIEJpdFZlY3RvciBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsOworICAgIFZlY3Rvcjx1bnNp
Z25lZCwgMzI+IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5OworICAgIExvY2sgbV9sb2NrOworICAg
IENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1bnNpZ25lZCBtX251bUFjdGl2ZVRocmVhZHMg
eyAwIH07CisgICAgVmVjdG9yPFZpc2l0Q291bnRlciwgMTY+IG1fdmlzaXRDb3VudGVyczsKIH07
CiAKLU1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgpCitNYXJraW5n
Q29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYgaGVhcCkKKyAgICA6IG1f
aGVhcChoZWFwKQogewogfQogCkBAIC0xMDcsMTggKzI4OSwxOSBAQCB2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJp
bmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBN
YXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5n
IG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWlu
dFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNt
KQogewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3Zl
KGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xh
dGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5j
dGlvbiksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+
IGV4ZWN1dGVGdW5jdGlvbiwKICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBx
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkpCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKKyAgICBDb25zdHJh
aW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8
TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb24pLCB2b2xhdGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwg
V1RGTW92ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rp
b24pLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJh
aW50U2V0OjphZGQoCkBAIC0xMzEsOSArMzE0LDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6YWRkKAogICAgIG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0
OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCBy
ZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJv
b2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7
CkBAIC0xNDgsOSArMzMxLDkgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJv
bnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1
dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIEV4ZWN1dGlvbkNvbnRl
eHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9u
ID0gbV9pdGVyYXRpb24rKzsKICAgICAKQEAgLTE1OSwxNiArMzQyLDE0IEBAIGJvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKIAogICAgIC8vIElmIHRoZXJlIGFyZSBhbnkg
Y29uc3RyYWludHMgdGhhdCB3ZSBoYXZlIG5vdCBleGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMg
Y3ljbGUsIHRoZW4KICAgICAvLyB3ZSBzaG91bGQgZXhlY3V0ZSB0aG9zZSBub3cuCi0gICAgaWYg
KCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMp
OwogICAgIAogICAgIC8vIEZpcnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3IgZHJh
aW5pbmcsIHNvIGl0J3MgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMgb3RoZXIK
ICAgICAvLyB0aGFuIHJvb3RzLgogICAgIGlmIChpdGVyYXRpb24gPT0gMSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhl
Y3V0ZWRPdXRncm93dGhzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4ZWN1dGlvbkNv
bnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocyk7CiAgICAgCiAgICAgLy8gV2Ugd2Fu
dCB0byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVz
IHRoYXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdv
cmxkIEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kg
dG8gZ28gdG90YWxseQpAQCAtMjE1LDMzICszOTYsMTYgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+
IGItPnZvbGF0aWxpdHkoKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29u
c3RyYWludCogY29uc3RyYWludCA6IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3QgaSA9IGNv
bnN0cmFpbnQtPmluZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4
dC5kaWRFeGVjdXRlKGkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlv
bkNvbnRleHQuZXhlY3V0ZShpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4g
Y29udmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcg
aGFwcGVuIGFueXRpbWUKLSAgICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhN
RTogTWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91
dD8gTm90IGNsZWFyIGlmIHRoYXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJl
IGV2ZW4gYmV0dGVyIGlzIHRoaXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1w
dHksIGtlZXAgcnVubmluZy4KLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQg
bGVhc3QgTiB0aGluZ3MsIHJldHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1l
b3V0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2ODMyCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGV4ZWN1dGlvbkNvbnRleHQu
Y29udmVyZ2UobV9vcmRlcmVkKTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiB3ZSd2ZSBjb252ZXJnZWQuIFRoYXQgaGFwcGVucyBpZiB3ZSBkaWQgbm90IHZp
c2l0IGFueXRoaW5nLgorICAgIHJldHVybiAhZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0
aGluZygpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsK
ICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWludC0+
ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSk7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CiAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNp
b24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgewogcHVibGljOgotICAgIE1hcmtpbmdDb25z
dHJhaW50U2V0KCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYpOwogICAgIH5NYXJr
aW5nQ29uc3RyYWludFNldCgpOwogICAgIAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CkBA
IC00MSwxNSArNDEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAg
ICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAgICBD
U3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
Jik+LAogICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAg
ICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCk7CiAgICAgCiAgICAgdm9pZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJh
aW50Pik7CiAgICAgCkBAIC02MCw5ICs2Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhl
bSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxy
YWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9vbCBleGVj
dXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RWaXNpdG9yJiwKLSAgICAgICAgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgYm9vbCBleGVj
dXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBTaW1wbHkgcnVucyBh
bGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAgICAgdm9pZCBleGVjdXRl
QWxsKFNsb3RWaXNpdG9yJik7CkBAIC03MSwxMCArNzEsMTEgQEAgcHJpdmF0ZToKICAgICBjbGFz
cyBFeGVjdXRpb25Db250ZXh0OwogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRpb25Db250ZXh0Owog
ICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYsIE1vbm90
b25pY1RpbWUgdGltZW91dCk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RW
aXNpdG9yJik7CiAgICAgCi0gICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1Rp
bWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlk
VmlzaXRTb21ldGhpbmcpOworICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRWZWN0b3Im
IHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5n
KTsKICAgICAKKyAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJv
b3RzOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHJldmlzaW9uIDIyNTE3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIE9wYXF1ZVJv
b3RTZXQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZVJvb3RTZXQpOwotcHVibGlj
OgotICAgIE9wYXF1ZVJvb3RTZXQoKQotICAgICAgICA6IG1fbGFzdFF1ZXJpZWRSb290KG51bGxw
dHIpCi0gICAgICAgICwgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdChmYWxzZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgYm9vbCBjb250YWlucyh2b2lkKiByb290KSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKHJvb3QgIT0gbV9sYXN0UXVlcmllZFJvb3QpIHsKLSAgICAgICAgICAgIG1fbGFzdFF1
ZXJpZWRSb290ID0gcm9vdDsKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Qg
PSBtX3Jvb3RzLmNvbnRhaW5zKHJvb3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2Nv
bnRhaW5zTGFzdFF1ZXJpZWRSb290OwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAg
dm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX3Jvb3RzLmNsZWFyKCk7Ci0gICAgICAgIG1f
bGFzdFF1ZXJpZWRSb290ID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVk
Um9vdCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCi0gICAgewot
ICAgICAgICBpZiAocm9vdCA9PSBtX2xhc3RRdWVyaWVkUm9vdCkKLSAgICAgICAgICAgIG1fY29u
dGFpbnNMYXN0UXVlcmllZFJvb3QgPSB0cnVlOwotICAgICAgICByZXR1cm4gbV9yb290cy5hZGQo
cm9vdCkuaXNOZXdFbnRyeTsKLSAgICB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9yb290cy5zaXplKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lk
Kj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3Jvb3RzLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5lbmQoKTsKLSAg
ICB9Ci0KLQotcHJpdmF0ZToKLSAgICBIYXNoU2V0PHZvaWQqPiBtX3Jvb3RzOwotICAgIG11dGFi
bGUgdm9pZCogbV9sYXN0UXVlcmllZFJvb3Q7Ci0gICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNM
YXN0UXVlcmllZFJvb3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRh
cHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlw
ZW5hbWUgVW53cmFwRnVuYz4KK2NsYXNzIFBhcmFsbGVsU291cmNlQWRhcHRlciA6IHB1YmxpYyBT
aGFyZWRUYXNrPElubmVyVHlwZSgpPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxTb3VyY2VBZGFw
dGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVu
d3JhcEZ1bmMmIHVud3JhcEZ1bmMpCisgICAgICAgIDogbV9vdXRlclNvdXJjZShvdXRlclNvdXJj
ZSkKKyAgICAgICAgLCBtX3Vud3JhcEZ1bmModW53cmFwRnVuYykKKyAgICB7CisgICAgfQorICAg
IAorICAgIElubmVyVHlwZSBydW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobV9p
bm5lclNvdXJjZSkgeworICAgICAgICAgICAgICAgIGlmIChJbm5lclR5cGUgcmVzdWx0ID0gbV9p
bm5lclNvdXJjZS0+cnVuKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5uZXJTb3VyY2UgPSBtX3Vud3JhcEZ1bmMobV9v
dXRlclNvdXJjZS0+cnVuKCkpOworICAgICAgICB9IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAg
ICAgICAgcmV0dXJuIElubmVyVHlwZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG1fb3V0ZXJTb3VyY2U7CisgICAgUmVmUHRyPFNoYXJl
ZFRhc2s8SW5uZXJUeXBlKCk+PiBtX2lubmVyU291cmNlOworICAgIFVud3JhcEZ1bmMgbV91bndy
YXBGdW5jOworICAgIExvY2sgbV9sb2NrOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJU
eXBlLCB0eXBlbmFtZSBJbm5lclR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitSZWY8UGFyYWxs
ZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPj4gY3JlYXRl
UGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0
ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBV
bndyYXBGdW5jPihvdXRlclNvdXJjZSwgdW53cmFwRnVuYykpOworfQorICAgIAorfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K1NpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQorICAgIDog
TWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUp
LCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1v
dmUoZXhlY3V0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5j
dGlvbiwKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdU
Rk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxs
ZWxpc20pCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikp
CisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVN
YXJraW5nQ29uc3RyYWludCgpCit7Cit9CisKK2RvdWJsZSBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKCFt
X3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Cit9CisKK0NvbnN0cmFpbnRQ
YXJhbGxlbGlzbSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgcmV0
dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29u
c3RyYWludCB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwg
Q1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisg
ICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29ya0VzdGlt
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247
CisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0
ZUZ1bmN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTgsOSArOTgsNyBAQCBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIAogdm9pZCBTbG90
VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIHsKLSAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9u
U2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4K
LSAgICBlbHNlCisgICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlv
blNjb3BlOjpFZGVuKQogICAgICAgICByZXNldCgpOwogCiAgICAgaWYgKEhlYXBQcm9maWxlciog
aGVhcFByb2ZpbGVyID0gdm0oKS5oZWFwUHJvZmlsZXIoKSkKQEAgLTExMSw3ICsxMDksNiBAQCB2
b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpy
ZXNldCgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAg
ICBtX2J5dGVzVmlzaXRlZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBT
bmFwc2hvdEJ1aWxkZXIgPSBudWxscHRyOwpAQCAtMjc3LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5l
clR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNr
KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFy
a2VkKGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNv
bnRhaW5lci5ub3RlTWFya2VkKCk7CkBAIC0zNDYsNyArMzQzLDcgQEAgcHJpdmF0ZToKIAogQUxX
QVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCog
Y2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOwor
ICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENl
bGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAgLTQ5MCw4ICs0
ODcsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAgICAg
IG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgp
OwogICAgIH0KLSAgICAKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBTbG90
VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVzdGVk
KQpAQCAtNTUwLDcgKzU0NSw2IEBAIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVu
dE9mRHIKICAgICB9CiAKICAgICBkb25hdGVBbGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7
CiAKICAgICByZXR1cm4gYnl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1NSwxNiBAQCBi
b29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlkUmVh
Y2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRl
cm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRpZFJl
YWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICByZXR1
cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVs
TWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlz
RW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0Vt
cHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vy
cworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9yOjpo
YXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5tX3No
YXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5KCkK
KyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgp
CiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7
CiB9CiAKQEAgLTU4MywxMiArNTc2LDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBib251
c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZlKQog
ICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLS07
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMrKzsK
LQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3Rl
ckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYyNCw1NyBAQCBORVZF
Ul9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAgICBh
dXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX2Jv
bnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFs
bGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAg
ICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1f
bWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAmJiBt
X2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rhc2sg
PSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZdIChN
YXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxl
bE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAg
ICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAoYm9u
dXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSB3b3VsZCBub3QgaGF2ZSB0byBk
byB0aGlzLiBIb3dldmVyLCB0aGUgcGFyYWxsZWwgbWFya2luZyBhbGdvcml0aG0gd2lsbAorICAg
ICAgICAgICAgLy8gZ2V0IGNvbmZ1c2VkIGlmIHdlIGluaXRpYXRlIGl0IHdpdGggdGhlIGhlbHBl
ciB2aXNpdG9ycyBoYXZpbmcgYW55dGhpbmcgaW4gdGhlaXIgc3RhY2tzLgorICAgICAgICAgICAg
Ly8gQWxzbywgdGhpcyBwcm90ZWN0cyBidWdzIHRoYXQgaW52b2x2ZSByYWNlcyBiZXR3ZWVuIHZp
c2l0Q2hpbGRyZW4gYW5kIG9uZSBvZiB0aGUKKyAgICAgICAgICAgIC8vIGNvbnN0cmFpbnRzLgor
ICAgICAgICAgICAgLy9kb25hdGVBbGwoKTsKKworICAgICAgICAgICAgLy8gVGhlIG1haW4gdGhy
ZWFkIGNvdWxkIHN0aWxsIGJlIHJ1bm5pbmcsIGFuZCBtYXkgcnVuIGZvciBhIHdoaWxlLiBVbmxl
c3Mgd2UgY2xlYXIgdGhlIHRhc2sKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcywgd2Ugd2lsbCBr
ZWVwIGxvb3BpbmcgYXJvdW5kIHRyeWluZyB0byBydW4gdGhlIHRhc2suCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5n
TXV0ZXgpOworICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID09
IGJvbnVzVGFzaykKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFz
ayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBpc0FjdGl2ZSA9IHRydWU7CiAgICAgfQogfQpAQCAtNjc2LDkg
KzcwMCwxMyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAg
ICAgIHJldHVybiBkcmFpbkluUGFyYWxsZWwodGltZW91dCk7CiAgICAgfQogCi0gICAgTG9ja0hv
bGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKLSAgICBkb25hdGVBbGwobG9ja2Vy
KTsKLSAgICAKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KSk7
CisgICAgcmV0dXJuIHdhaXRGb3JUZXJtaW5hdGlvbih0aW1lb3V0KTsKK30KKworU2xvdFZpc2l0
b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24oTW9u
b3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFw
Lm1fbWFya2luZ011dGV4KTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmIChoYXNFbGFwc2Vk
KHRpbWVvdXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91
dDsKQEAgLTcxMSw2MSArNzM5LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQWxsKGNvbnN0
IEFic3RyYQogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwo
KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQotewot
ICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChtX2lnbm9yZU5l
d09wYXF1ZVJvb3RzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6Om51
bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewotICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0
aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBQdXQgaW50byB0aGUgbG9jYWwgc2V0
LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNlIGluCi0gICAgLy8gYSB3
aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24ndCBncm93IHRvbyBsYXJn
ZS4KLSAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0gICAgbV9vcGFxdWVSb290
cy5hZGQocm9vdCk7Ci19Ci0KLWJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2
b2lkKiByb290KSBjb25zdAotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICByZXR1cm4gbV9o
ZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Ci19Ci0KLVRyaVN0YXRlIFNsb3RWaXNp
dG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKiByb290KSBjb25zdAotewotICAg
IGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7Ci0gICAgCi0gICAgaWYg
KG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCkpCi0gICAgICAgIHJldHVybiBUcnVlVHJpU3Rh
dGU7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNN
dXRleCk7Ci0gICAgaWYgKG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwotfQot
Ci12b2lkIFNsb3RWaXNpdG9yOjptZXJnZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAobV9vcGFx
dWVSb290cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3Rz
KCk7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUo
KQotewotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkp
IDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0gICAgCiB2b2lkIFNsb3RWaXNpdG9yOjpkb25h
dGUoKQogewogICAgIGlmICghbV9pc0luUGFyYWxsZWxNb2RlKSB7CkBAIC03ODUsMTYgKzc1OCw2
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKE1vbm90b24KICAgICBkcmFpbih0
aW1lb3V0KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCi17Ci0g
ICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVS
b290c011dGV4KTsKLSAgICAgICAgZm9yIChhdXRvKiByb290IDogbV9vcGFxdWVSb290cykKLSAg
ICAgICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLSAgICB9Ci0gICAgbV9v
cGFxdWVSb290cy5jbGVhcigpOwotfQotCiB2b2lkIFNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJl
bmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIpCiB7CiAgICAgbV9oZWFwLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2Fm
ZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
I2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAj
aW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAiT3BhcXVlUm9vdFNldC5oIgogI2luY2x1
ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTUsMTAgKzk0LDkgQEAgcHVibGljOgogICAg
IHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CiAgICAgdm9pZCBhcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
YWRkT3BhcXVlUm9vdCh2b2lkKik7CisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCiAgICAgCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwotICAgIFRyaVN0YXRl
IGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKKyAgICBib29sIGNvbnRh
aW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAKICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVy
biBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7
IH0KIApAQCAtMTIxLDYgKzExOSw4IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZERyYWluUmVzdWx0
IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWxQYXNzaXZl
bHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7Cisg
ICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQgd2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgLy8gQXR0ZW1w
dHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQgb2YgZHJhaW5pbmcgdGhhdCBpbnZvbHZlcyBvbmx5
IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBkYXRhLiBUaGlzCiAgICAgLy8gaXMgbGlrZWx5IHRv
IGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3IgbGVzcyB0aGFuIHRoYXQuIEl0IHdpbGwgdXN1YWxs
eSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQgbWF5CkBAIC0xMjgsOCArMTI4LDYgQEAgcHVibGlj
OgogICAgIC8vIHJhcmUgY2FzZXMgaGFwcGVuIHRlbXBvcmFyaWx5IGV2ZW4gaWYgd2UncmUgbm90
IHJlYWNoaW5nIHRlcm1pbmF0aW9uKS4KICAgICBzaXplX3QgcGVyZm9ybUluY3JlbWVudE9mRHJh
aW5pbmcoc2l6ZV90IGJ5dGVzKTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1l
cmdlSWZOZWNlc3NhcnkoKTsKLQogICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4
aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9u
J3QgZG8KICAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9m
IEdDLgogICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKQEAgLTE5NCwx
MCArMTkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2Vs
bChIZWFwQ2VsbCopOwogICAgIAotICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwotCi0gICAg
dm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0KICAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oY29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVs
KCk7CkBAIC0yMTUsNyArMjA5LDYgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5IG1f
Y29sbGVjdG9yU3RhY2s7CiAgICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAg
T3BhcXVlUm9vdFNldCBtX29wYXF1ZVJvb3RzOyAvLyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0
dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCiAgICAgYm9vbCBtX2ln
bm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1v
ZGUuCiAgICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTE3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kVmEKICAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0K
IAoraW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQorewor
ICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3
T3BhcXVlUm9vdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhlYXAoKS0+bV9v
cGFxdWVSb290cy5hZGQocHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRD
b3VudCsrOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gaGVhcCgp
LT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7Cit9CisKIGlubGluZSB2b2lkIFNsb3RWaXNp
dG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKG1f
aXNGaXJzdFZpc2l0KSB7CkBAIC0xNTksMTIgKzE3NiwxMiBAQCBpbmxpbmUgSGVhcCogU2xvdFZp
c2l0b3I6OmhlYXAoKSBjb25zdAogCiBpbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCiB7Ci0g
ICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiBp
bmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICpt
X2hlYXAubV92bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAko
cmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJr
ZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCIKICNp
bmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VJbmxp
bmVzLmgiCiAKQEAgLTE2MCw2ICsxNjEsNDMgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vic3Bh
Y2U6OmZpbmRFbXB0eQogICAgIHJldHVybiBudWxscHRyOwogfQogCitSZWZQdHI8U2hhcmVkVGFz
azxNYXJrZWRBbGxvY2F0b3IqKCk+PiBTdWJzcGFjZTo6cGFyYWxsZWxBbGxvY2F0b3JTb3VyY2Uo
KQoreworICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3Iq
KCk+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IpCisgICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJ1bigpIG92ZXJyaWRl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogcmVzdWx0ID0gbV9hbGxvY2F0b3I7CisgICAg
ICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yID0gcmVzdWx0
LT5uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0
b3IqIG1fYWxsb2NhdG9yOworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICB9OworICAgIAorICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGFzayhtX2ZpcnN0QWxsb2NhdG9yKSk7Cit9CisKK1JlZlB0
cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBTdWJzcGFjZTo6cGFyYWxsZWxO
b3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCkKK3sKKyAgICByZXR1cm4gY3JlYXRlUGFyYWxsZWxT
b3VyY2VBZGFwdGVyPE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZEJsb2NrOjpIYW5kbGUqPigKKyAg
ICAgICAgcGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UoKSwKKyAgICAgICAgW10gKE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yKSAtPiBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxl
KigpPj4geworICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT5wYXJhbGxlbE5vdEVt
cHR5QmxvY2tTb3VyY2UoKTsKKyAgICAgICAgfSk7Cit9CisKIE1hcmtlZEFsbG9jYXRvciogU3Vi
c3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4
ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE3ICs4MSwy
NCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVh
Y2hBbGxvY2F0b3IoY29uc3QgRnVuYyYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1h
cmtlZEFsbG9jYXRvciooKT4+IHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCk7CisgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRCbG9jayhjb25z
dCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZv
ckVhY2hOb3RFbXB0eU1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFy
YWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCk7CisgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMYXJnZUFsbG9jYXRpb24oY29uc3QgRnVuYyYp
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFy
a2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
KyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2Vk
Q2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjI1MTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDYgKzg0LDUzIEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRD
ZWxsKGNvbnN0IEYKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK1JlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFy
YWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJl
ZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKFN1
YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVuYyYgZnVuYykKKyAgICAgICAgICAgIDogbV9zdWJz
cGFjZShzdWJzcGFjZSkKKyAgICAgICAgICAgICwgbV9ibG9ja1NvdXJjZShzdWJzcGFjZS5wYXJh
bGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKSkKKyAgICAgICAgICAgICwgbV9mdW5jKGZ1
bmMpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBydW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxl
IChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewor
ICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJh
dGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgY2Vs
bCwga2luZCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFtX25lZWRUb1Zpc2l0TGFyZ2VB
bGxvY2F0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IG1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zID0gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3Vic3BhY2UuZm9yRWFjaExhcmdlQWxsb2NhdGlv
bigKKyAgICAgICAgICAgICAgICBbJl0gKExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbikgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbi0+aXNNYXJrZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZnVuYyh2aXNpdG9yLCBhbGxvY2F0aW9uLT5jZWxsKCksIG1fc3Vi
c3BhY2UubV9hdHRyaWJ1dGVzLmNlbGxLaW5kKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBTdWJzcGFjZSYgbV9zdWJzcGFj
ZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IG1f
YmxvY2tTb3VyY2U7CisgICAgICAgIEZ1bmMgbV9mdW5jOworICAgICAgICBMb2NrIG1fbG9jazsK
KyAgICAgICAgYm9vbCBtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyB7IHRydWUgfTsKKyAg
ICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcywgZnVuYykpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaExpdmVD
ZWxsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yRWFjaE1hcmtlZEJsb2NrKApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZpc2l0Q291bnRl
ciB7CitwdWJsaWM6CisgICAgVmlzaXRDb3VudGVyKCkgeyB9CisgICAgCisgICAgVmlzaXRDb3Vu
dGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikK
KyAgICAgICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmlzaXRvci0+dmlzaXRDb3VudCgpIC0gbV9pbml0aWFsVmlzaXRDb3Vu
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBu
dWxscHRyIH07CisgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlz
aXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIK
LSNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBWaXNpdGluZ1RpbWVvdXQgewotcHVibGljOgotICAgIFZpc2l0aW5nVGlt
ZW91dCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBWaXNpdGluZ1RpbWVvdXQoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91
dCkKLSAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZpc2l0U29tZXRoaW5nKQotICAg
ICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0Q291bnQoKSkKLSAgICAgICAg
LCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCB2aXNp
dENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENvdW50QmVmb3JlOwotICAgIH0KLQotICAg
IGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8fCB2aXNpdENvdW50KHZpc2l0
b3IpOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcodmlz
aXRvcikgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0g
ICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKLSAgICBzaXplX3QgbV92aXNp
dENvdW50QmVmb3JlIHsgMCB9OwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0Jsb2NrLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQg
V2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7Ci0gICAg
ICAgIGlmIChjb250YWluZXIuaXNNYXJrZWRDb25jdXJyZW50bHkobWFya2luZ1ZlcnNpb24sIGpz
VmFsdWUuYXNDZWxsKCkpKQorICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdW
ZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFs
dWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvcikpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMDEsMTQgKzExMDEsMTQgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQygp
CiAgICAgLy8gaGFzIGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICgh
bV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9nbG9iYWxPYmpl
Y3QuZ2V0KCkpKQotICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlw
ZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHN0b3JlZFByb3RvdHlwZU9i
amVjdCgpKSk7CisgICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWQo
bV9nbG9iYWxPYmplY3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0
b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9i
amVjdCgpKSk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQygpKQotICAgICAgICByZXR1cm4g
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcyk7CisgICAgICAgIHJldHVybiBIZWFwOjpp
c01hcmtlZCh0aGlzKTsKICAgICAKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMp
OwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAvKiBCZWdp
biBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBGNTI2QjFGNDIxRkY4MDA0QTQ1MkMgLyog
U3RyaW5nTWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMEY1MjY5MUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwICovOyB9
OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhF
MDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgKi87IH07CisJCTBGMzBDQjVBMUZDREYxMzQw
MDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29u
Y3VycmVudFB0ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYg
LyogQXV0b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDNEOEVGMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQu
Y3BwICovOyB9OwogCQkwRjVCRjE3NjFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNzQxRjIz
RDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLzsgfTsKIAkJMEY2MEYzMkYxREZDQkQxQjAw
NDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQ
cmludFN0cmVhbS5jcHAgKi87IH07CkBAIC0xODEsNiArMTgyLDggQEAKIAkJMEYzMEJBOEQxRTc4
NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExvZ2dpbmdIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMzBCQThFMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjMwQkE4RjFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hUcmFp
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hUcmFpdHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENCNTgxRkNERjEzMzAwNEI1MzIz
IC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzFERDcwMUYxMzA4QkMwMDcyRUI0
QSAvKiBMb2NrQWxnb3JpdGhtSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGht
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0OEM3RDFGNDdBQTlE
MDAzQ0ZFRjIgLyogU3RyaW5nVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ZlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMg
LyogV2Vha1JhbmRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmFu
ZG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODcsNiArNzkwLDggQEAKIAkJ
CQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJ
CQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVB
QjFGNENENjFFMDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1
ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBG
MzBDQjU5MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJ
CTBGREI2OThEMUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEy
NjFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2
ODAwNDI5NTdEIC8qIENQVVRpbWUuaCAqLywKQEAgLTE0MTMsNiArMTQxOCw3IEBACiAJCQkJMEY4
MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTFGMTc1MkIxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRDb2RlcnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTFGMTc1MkMxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnREZWNv
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBD
b25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyRDFGM0Q0
ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY5RDMzNjIxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYv
QXRvbWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsMTEgKzM0NiwxNiBAQCBBTFdBWVNfSU5M
SU5FIERlcGVuZGVuY3kgbnVsbERlcGVuZGVuY3koCiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gOD46
OnR5cGUqID0gbnVsbHB0cj4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSBE
ZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBkZXBlbmRlbmN5
OwotICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAg
ICB1bmlvbiB7CisgICAgICAgIHVpbnQzMl90IGNvcHk7CisgICAgICAgIFQgdmFsdWU7CisgICAg
fSB1OworICAgIHUuY29weSA9IDA7CisgICAgdS52YWx1ZSA9IHZhbHVlOwogI2lmIENQVShBUk02
NCkKICAgICAvLyBDcmVhdGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNz
ZW1ibHksIHdob3NlIGNvbXB1dGF0aW9uCiAgICAgLy8gaXNuJ3QgdmlzaWJsZSB0byB0aGUgb3B0
aW1pemVyLiBUaGlzIHplcm8gaXMgdGhlbiB1c2FibGUgYXMgYW4gb2Zmc2V0IGluCkBAIC0zNjMs
ODAgKzM2OCwyMCBAQCBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhCiAg
ICAgLy8gb3IgYW4gYWNxdWlyZSBsb2FkLgogICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAl
d1tpbl0sICV3W2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQot
ICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsK
ICNlbGlmIENQVShBUk0pCiAgICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5d
IgogICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2lu
XSAiciIoY29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2Vsc2UKICAgICAv
LyBObyBkZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCiAgICAgbG9h
ZExvYWRGZW5jZSgpOwogICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5
KTsKKyAgICBVTlVTRURfUEFSQU0odS5jb3B5KTsKICNlbmRpZgogICAgIHJldHVybiBkZXBlbmRl
bmN5OwogfQogCi0vLyBGSVhNRTogVGhpcyBjb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhl
IG90aGVyIGRlcGVuZGVuY3koKSBvdmVybG9hZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjk0MDUKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19J
TkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVw
ZW5kZW5jeTsKLSAgICB1aW50MzJfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1
ZSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0s
ICV3W2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAg
ICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBl
bmRlbmN5XSwgJVtpbl0sICVbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVu
ZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2Vsc2UKLSAgICBsb2FkTG9hZEZl
bmNlKCk7Ci0gICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOwotI2Vu
ZGlmCi0gICAgcmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0cj4K
LUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMT46
OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZh
bHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdpdGgg
ewotcHVibGljOgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5KG51
bGxEZXBlbmRlbmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgRGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkK
LSAgICAgICAgOiBkZXBlbmRlbmN5KGRlcGVuZGVuY3kpCi0gICAgICAgICwgdmFsdWUodmFsdWUp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7Ci0gICAgVCB2
YWx1ZTsKLX07Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIERlcGVuZGVuY3lX
aXRoPFQ+IGRlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUKiBjb25zdW1lKFQqIHBvaW50ZXIs
IERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKQEAgLTQ2OSwxMCArNDE0LDggQEAgQUxXQVlTX0lO
TElORSBUJiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKgogCiB1c2luZyBXVEY6OkF0b21pYzsKIHVz
aW5nIFdURjo6RGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7CiB1c2luZyBX
VEY6OmNvbnN1bWU7CiB1c2luZyBXVEY6OmRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OmRlcGVuZGVu
Y3lXaXRoOwogdXNpbmcgV1RGOjplbnN1cmVQb2ludGVyOwogdXNpbmcgV1RGOjpudWxsRGVwZW5k
ZW5jeTsKIApJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDEzIEBAIHB1
YmxpYzogCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICBp
dGVyYXRvciBvcGVyYXRvcisrKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3Ig
cmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICArKygqdGhpcyk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKICAgICAgICAgYm9vbCBpc0F0RW5kKCkgY29uc3QKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPj0gbV9iaXRWZWN0b3ItPnNpemUo
KTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBDbG9ja1R5cGUuaAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmgK
ICAgICBDb21waWxlci5oCisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQuaAogICAgIENvbmRpdGlv
bi5oCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIuaAogICAgIENyb3NzVGhyZWFkVGFzay5oCkBAIC0y
MTYsNiArMjE3LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgQ1BVVGltZS5jcHAKICAgICBDbG9j
a1R5cGUuY3BwCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuY3BwCisgICAgQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY1V0
aWxpdGllcy5jcHAKICAgICBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25jdXJyZW50UHRySGFzaFNl
dC5oIgorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK0Nv
bmN1cnJlbnRQdHJIYXNoU2V0OjpDb25jdXJyZW50UHRySGFzaFNldCgpCit7CisgICAgaW5pdGlh
bGl6ZSgpOworfQorCitDb25jdXJyZW50UHRySGFzaFNldDo6fkNvbmN1cnJlbnRQdHJIYXNoU2V0
KCkKK3sKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6ZGVsZXRlT2xkVGFibGVzKCkK
K3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4gY2FzZS4gSXQgZG9lcyBub3QgbWFrZSBpdCBPSyBm
b3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFkZCgpLiBCdXQgaXQgbWlnaHQgcHJldmVudAorICAg
IC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2UgZGlkIG1ha2UgdGhhdCBtaXN0YWtlLgorICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsgCisgICAgCisgICAgbV9hbGxUYWJsZXMucmVt
b3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiYgdGFi
bGUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHRhYmxlLmdldCgpICE9IG1fdGFibGUu
bG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hT
ZXQ6OmNsZWFyKCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4gY2FzZS4gSXQgZG9lcyBub3Qg
bWFrZSBpdCBPSyBmb3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFkZCgpLiBCdXQgaXQgbWlnaHQg
cHJldmVudAorICAgIC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2UgZGlkIG1ha2UgdGhhdCBtaXN0
YWtlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsgCisgICAgCisgICAgbV9h
bGxUYWJsZXMuY2xlYXIoKTsKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgQ29uY3VycmVu
dFB0ckhhc2hTZXQ6OmluaXRpYWxpemUoKQoreworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBpbml0
aWFsU2l6ZSA9IDMyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gdGFibGUgPSBUYWJsZTo6
Y3JlYXRlKGluaXRpYWxTaXplKTsKKyAgICBtX3RhYmxlLnN0b3JlUmVsYXhlZCh0YWJsZS5nZXQo
KSk7CisgICAgbV9hbGxUYWJsZXMuYXBwZW5kKFdURk1vdmUodGFibGUpKTsKK30KKworYm9vbCBD
b25jdXJyZW50UHRySGFzaFNldDo6YWRkU2xvdyhUYWJsZSogdGFibGUsIHVuc2lnbmVkIG1hc2ss
IHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4LCB2b2lkKiBwdHIpCit7CisgICAg
aWYgKHRhYmxlLT5sb2FkLmV4Y2hhbmdlQWRkKDEpID49IHRhYmxlLT5tYXhMb2FkKCkpCisgICAg
ICAgIHJldHVybiByZXNpemVBbmRBZGQocHRyKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAg
ICAgIHZvaWQqIG9sZEVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5jb21wYXJlRXhjaGFuZ2VT
dHJvbmcobnVsbHB0ciwgcHRyKTsKKyAgICAgICAgaWYgKCFvbGRFbnRyeSkgeworICAgICAgICAg
ICAgaWYgKG1fdGFibGUubG9hZCgpICE9IHRhYmxlKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ug
YWRkZWQgYW4gZW50cnkgdG8gYW4gb2xkIHRhYmxlISBXZSBuZWVkIHRvIHJlZXhlY3V0ZSB0aGUg
YWRkIG9uIHRoZSBuZXcgdGFibGUuCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZChwdHIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG9sZEVudHJ5ID09IHB0cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlu
ZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgIH0KK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNl
dDo6cmVzaXplSWZOZWNlc3NhcnkoKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKyAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgaWYg
KHRhYmxlLT5sb2FkLmxvYWRSZWxheGVkKCkgPCB0YWJsZS0+bWF4TG9hZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBuZXdUYWJsZSA9IFRhYmxl
OjpjcmVhdGUodGFibGUtPnNpemUgKiAyKTsKKyAgICB1bnNpZ25lZCBtYXNrID0gbmV3VGFibGUt
Pm1hc2s7CisgICAgdW5zaWduZWQgbG9hZCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRhYmxlLT5zaXplOyArK2kpIHsKKyAgICAgICAgdm9pZCogcHRyID0gdGFibGUtPmFycmF5
W2ldLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlmICghcHRyKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYg
bWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICBBdG9taWM8dm9pZCo+JiBlbnRyeVJlZiA9IG5ld1RhYmxlLT5h
cnJheVtpbmRleF07CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IGVudHJ5UmVmLmxvYWRSZWxh
eGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgICAgICAgICAgZW50cnlS
ZWYuc3RvcmVSZWxheGVkKHB0cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeSAhPSBwdHIpOworICAgICAgICAg
ICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbG9h
ZCsrOworICAgIH0KKyAgICAKKyAgICBuZXdUYWJsZS0+bG9hZC5zdG9yZVJlbGF4ZWQobG9hZCk7
CisgICAgCisgICAgbV90YWJsZS5zdG9yZShuZXdUYWJsZS5nZXQoKSk7CisgICAgbV9hbGxUYWJs
ZXMuYXBwZW5kKFdURk1vdmUobmV3VGFibGUpKTsKK30KKworYm9vbCBDb25jdXJyZW50UHRySGFz
aFNldDo6cmVzaXplQW5kQWRkKHZvaWQqIHB0cikKK3sKKyAgICByZXNpemVJZk5lY2Vzc2FyeSgp
OworICAgIHJldHVybiBhZGQocHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENvbmN1cnJlbnRQ
dHJIYXNoU2V0OjpUYWJsZT4gQ29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUodW5z
aWduZWQgc2l6ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29uY3VycmVudFB0ckhhc2hTZXQ6
OlRhYmxlPiByZXN1bHQobmV3IChmYXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgYXJy
YXkpICsgc2l6ZW9mKEF0b21pYzx2b2lkKj4pICogc2l6ZSkpIFRhYmxlKCkpOworICAgIHJlc3Vs
dC0+c2l6ZSA9IHNpemU7CisgICAgcmVzdWx0LT5tYXNrID0gc2l6ZSAtIDE7CisgICAgcmVzdWx0
LT5sb2FkLnN0b3JlUmVsYXhlZCgwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQorICAgICAgICByZXN1bHQtPmFycmF5W2ldLnN0b3JlUmVsYXhlZChudWxscHRyKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291
cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgYSBjb25jdXJyZW50IGhhc2gt
YmFzZWQgc2V0IGZvciBwb2ludGVycy4gSXQncyBvcHRpbWl6ZWQgZm9yOgorLy8KKy8vIC0gSGln
aCByYXRlIG9mIGNvbnRhaW5zKCkgY2FsbHMuCisvLyAtIEhpZ2ggcmF0ZSBvZiBhZGQoKSBjYWxs
cyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyBuZXcuIGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3QgYWRk
IGFueXRoaW5nIChub3AgYWRkcykKKy8vICAgZG9uJ3QgbXV0YXRlIHRoZSB0YWJsZSBhdCBhbGwu
CisvLyAtIE5vdCB0b28gbWFueSB0aHJlYWRzLiBJIGRvdWJ0IHRoaXMgc2NhbGVzIGJleW9uZCB+
NC4gVGhvdWdoLCBpdCBtYXkgYWN0dWFsbHkgc2NhbGUgYmV0dGVyIHRoYW4gdGhhdAorLy8gICBp
ZiB0aGUgcmF0ZSBvZiBub3AgYWRkcyBpcyBhYnN1cmRseSBoaWdoLgorLy8KKy8vIElmIHdlIHdh
bnRlZCB0aGlzIHRvIHNjYWxlIGJldHRlciwgdGhlIG1haW4gY2hhbmdlIHdlJ2QgaGF2ZSB0byBt
YWtlIGlzIGhvdyB0aGlzIHRhYmxlIGRldGVybWluZXMgd2hlbgorLy8gdG8gcmVzaXplLiBSaWdo
dCBub3cgaXQncyBhIHNoYXJlZCBjb3VudGVyLiBXZSBsb2NrO3hhZGQgdGhpcyBjb3VudGVyLiBP
bmUgZWFzeSB3YXkgdG8gbWFrZSB0aGF0CisvLyBzY2FsYWJsZSBpcyB0byByZXF1aXJlIGVhY2gg
dGhyZWFkIHRoYXQgd29ya3Mgd2l0aCB0aGUgQ29uY3VycmVudFB0ckhhc2hTZXQgdG8gcmVnaXN0
ZXIgaXRzZWxmIGZpcnN0LgorLy8gVGhlbiBlYWNoIHRocmVhZCB3b3VsZCBoYXZlIHNvbWUgZGF0
YSBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSBjb3VudGVyLiBXZSBjb3VsZCBpbnN0aXR1dGUgdGhlIHBv
bGljeSB0aGF0CisvLyBlYWNoIHRocmVhZCBzaW1wbHkgaW5jcmVtZW50cyBpdHMgb3duIGxvYWQg
Y291bnRlciwgaW4gaXRzIG93biBkYXRhIHN0cnVjdHVyZS4gVGhlbiwgaWYgYW55IHNlYXJjaCB0
bworLy8gcmVzb2x2ZSBhIGNvbGxpc2lvbiBkb2VzIG1vcmUgdGhhbiBOIGl0ZXJhdGlvbnMsIHdl
IGNhbiBjb21wdXRlIGEgY29tYmluZWQgbG9hZCBieSBzdW1taW5nIHRoZSBsb2FkCisvLyBjb3Vu
dGVycyBvZiBhbGwgb2YgdGhlIHRocmVhZCBkYXRhIHN0cnVjdHVyZXMuCisvLworLy8gQ29uY3Vy
cmVudFB0ckhhc2hTZXQncyBtYWluIHVzZXIsIHRoZSBHQywgc2VlcyBhIDk4JSBub3AgYWRkIHJh
dGUgaW4gU3BlZWRvbWV0ZXIuIFRoYXQncyB3aHkgdGhpcworLy8gZm9jdXNlcyBzbyBtdWNoIG9u
IGNhc2VzIHdoZXJlIHRoZSB0YWJsZSBkb2VzIG5vdCBjaGFuZ2UuCitjbGFzcyBDb25jdXJyZW50
UHRySGFzaFNldCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudFB0ckhhc2hT
ZXQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIENvbmN1cnJlbnRQdHJIYXNoU2V0KCk7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIH5Db25jdXJyZW50UHRySGFzaFNldCgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgYm9vbCBjb250YWlucyhUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
bnRhaW5zSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgYm9vbCBhZGQoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRJ
bXBsKGNhc3QodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUubG9hZFJlbGF4ZWQoKS0+bG9hZC5sb2FkUmVs
YXhlZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBPbmx5IGNhbGwgd2hlbiB5b3Uga25vdyB0aGF0
IG5vIG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQoKS4gVGhpcyBmcmVlcyB1cCBtZW1vcnkgd2l0
aG91dCBjaGFuZ2luZworICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUuCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlT2xkVGFibGVzKCk7CisgICAgCisgICAgLy8gT25s
eSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCku
IFRoaXMgZnJlZXMgdXAgYWxsIG1lbW9yeSBleGNlcHQgZm9yCisgICAgLy8gdGhlIHNtYWxsZXN0
IHBvc3NpYmxlIGhhc2h0YWJsZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhcigp
OworICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVGFibGUgeworICAgICAgICBXVEZfTUFLRV9T
VFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFRhYmxlPiBjcmVhdGUodW5zaWduZWQgc2l6ZSk7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBtYXhMb2FkKCkgY29uc3QgeyByZXR1cm4gc2l6ZSAvIDI7IH0KKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIHNpemU7IC8vIFRoaXMgaXMgaW1tdXRhYmxlLgorICAgICAgICB1bnNp
Z25lZCBtYXNrOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4KKyAgICAgICAgQXRvbWljPHVuc2lnbmVk
PiBsb2FkOworICAgICAgICBBdG9taWM8dm9pZCo+IGFycmF5WzFdOworICAgIH07CisgICAgCisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2godm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFB0ckhhc2g8dm9pZCo+OjpoYXNoKHB0cik7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlh
bGl6ZSgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCogY2FzdChU
IHZhbHVlKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gc2l6ZW9m
KHZvaWQqKSwgInR5cGUgdG9vIGJpZyIpOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICB2
b2lkKiBwdHI7CisgICAgICAgICAgICBUIHZhbHVlOworICAgICAgICB9IHU7CisgICAgICAgIHUu
cHRyID0gbnVsbHB0cjsKKyAgICAgICAgdS52YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4g
dS5wdHI7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnNJbXBsKHZvaWQqIHB0cikgY29u
c3QKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsK
KyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAgICAgICB1bnNpZ25lZCBz
dGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBz
dGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9
IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50
cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGVudHJ5
ID09IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGluZGV4
ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXgg
IT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIGEgbmV3IGVudHJ5IHdhcyBhZGRlZC4KKyAgICBib29sIGFkZEltcGwodm9pZCogcHRy
KQorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOwor
ICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUtPm1hc2s7CisgICAgICAgIHVuc2lnbmVkIHN0
YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0
YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5ID0g
dGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRy
eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkU2xvdyh0YWJsZSwgbWFzaywgc3RhcnRJbmRl
eCwgaW5kZXgsIHB0cik7CisgICAgICAgICAgICBpZiAoZW50cnkgPT0gcHRyKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBt
YXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYWRkU2xv
dyhUYWJsZSogdGFibGUsIHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGluZGV4LCB2b2lkKiBwdHIpOworCisgICAgdm9pZCByZXNpemVJZk5lY2Vzc2FyeSgpOwor
ICAgIGJvb2wgcmVzaXplQW5kQWRkKHZvaWQqIHB0cik7CisgICAgCisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxUYWJsZT4sIDQ+IG1fYWxsVGFibGVzOworICAgIEF0b21pYzxUYWJsZSo+IG1f
dGFibGU7IC8vIFRoaXMgaXMgbmV2ZXIgbnVsbC4KKyAgICBMb2NrIG1fbG9jazsgLy8gV2UganVz
dCB1c2UgdGhpcyB0byBjb250cm9sIHJlc2l6ZSByYWNlcy4KK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCit1c2luZyBXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OwpJbmRleDogU291cmNlL1dU
Ri93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNiArMTAwLDExIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBl
bmFtZSBGdW5jPgogICAgIHZvaWQgYXBwZW5kQW5kQnViYmxlKFUmJiwgY29uc3QgRnVuYyYpOwog
ICAgIAorICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IGZvciB3aGlj
aCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCisg
ICAgLy8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRha2VGaXJzdChjb25zdCBGdW5jJik7CisKICAg
ICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgbGFzdCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2Fs
bGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCiAgICAgLy8gVCBp
ZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KQEAgLTU3MSw2ICs1NzYsMjUgQEAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5s
aW5lQ2FwYWNpdHk+OjphcAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFQgRGVxdWU8VCwgaW5saW5l
Q2FwYWNpdHk+Ojp0YWtlRmlyc3QoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CisgICAgdW5zaWduZWQgc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICB3aGlsZSAo
Y291bnQgPCBzaXplKSB7CisgICAgICAgIFQgY2FuZGlkYXRlID0gdGFrZUZpcnN0KCk7CisgICAg
ICAgIGlmIChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQor
ICAgICAgICAgICAgICAgIHByZXBlbmQodGFrZUxhc3QoKSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FuZGlkYXRlOworICAgICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIGFwcGVuZChX
VEZNb3ZlKGNhbmRpZGF0ZSkpOworICAgIH0KKyAgICByZXR1cm4gVCgpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogaW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlTGFzdChjb25zdCBG
dW5jJiBmdW5jKQogewogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0Zhc3RNYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9j
LmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29y
a2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw3IEBAIHVzaW5nIFdURjo6ZmFzdEFsaWduZWRGcmVl
OwogI2RlZmluZSBXVEZfUFJJVkFURV9JTkxJTkUgaW5saW5lCiAjZW5kaWYKIAotI2RlZmluZSBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBcCi1wdWJsaWM6IFwKKyNkZWZpbmUgV1RGX01BS0VfRkFT
VF9BTExPQ0FURURfSU1QTCBcCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCog
cCkgeyByZXR1cm4gcDsgfSBcCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lk
KiBwKSB7IHJldHVybiBwOyB9IFwKICAgICBcCkBAIC0yNjMsNyArMjYyLDE1IEBAIHB1YmxpYzog
XAogICAgICAgICBBU1NFUlQobG9jYXRpb24pOyBcCiAgICAgICAgIHJldHVybiBsb2NhdGlvbjsg
XAogICAgIH0gXAorCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIFwKK3B1YmxpYzog
XAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogcHJpdmF0ZTogXAogdHlwZWRl
ZiBpbnQgX190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybwogCisjZGVm
aW5lIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRCBcCisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURURfSU1QTCBcCit0eXBlZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xv
bkFmdGVyVGhpc01hY3JvCisKICNlbmRpZiAvKiBXVEZfRmFzdE1hbGxvY19oICovCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
U2hhcmVkVGFzay5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRU
YXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDExIEBAIG5hbWVzcGFjZSBXVEYgewog
Ly8gc3RhdGUgaW4gbWVtYmVyIGZpZWxkcy4gVGhpcyBjYW4gYmUgbW9yZSBuYXR1cmFsIGlmIHlv
dSB3YW50IGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgd2hhdAogLy8gc3RhdGUgaXMgc2hhcmVk
IGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoZSB0YXNrLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b25UeXBlPiBjbGFzcyBTaGFyZWRUYXNrOwotdGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KLWNsYXNzIFNoYXJlZFRhc2s8UmVzdWx0VHlwZSAo
QXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRh
c2s8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
YXNzZWRSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2hhcmVk
VGFzazxQYXNzZWRSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFzazxQYXNzZWRSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVz
Li4uKT4+IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NlZFJlc3VsdFR5cGUgUmVzdWx0VHlw
ZTsKKyAgICAKICAgICBTaGFyZWRUYXNrKCkgeyB9CiAgICAgdmlydHVhbCB+U2hhcmVkVGFzaygp
IHsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKyNwcmFnbWEgb25jZQor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg+CisKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9W
aXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDIgKzAsMCBAQAotI3ByYWdtYSBvbmNlCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVmlzaXRp
bmdUaW1lb3V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlND
bGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDExICsyOSwxMCBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhl
YXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxoZWFwL0hl
YXBJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgogI2luY2x1
ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvTWFya2Vk
QmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
PgogI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9WaXNp
dGluZ1RpbWVvdXQuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KIApAQCAtNzIsNDMgKzcxLDY1IEBAIHZvaWQgSlNWTUNsaWVudERhdGE6Omlu
aXROb3JtYWxXb3JsZChWTSoKICAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG5ldyBK
U1ZNQ2xpZW50RGF0YSgqdm0pOwogICAgIHZtLT5jbGllbnREYXRhID0gY2xpZW50RGF0YTsgLy8g
flZNIGRlbGV0ZXMgdGhpcyBwb2ludGVyLgogICAgIAotICAgIGF1dG8gY29uc3RyYWludCA9IHN0
ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAotICAgICAgICAiV2NvYyIsICJXZWJD
b3JlIE91dHB1dCBDb25zdHJhaW50cyIsCi0gICAgICAgIFt2bSwgY2xpZW50RGF0YSwgbGFzdEV4
ZWN1dGlvblZlcnNpb24gPSB2bS0+aGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpXQotICAg
ICAgICAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS0+aGVhcDsKKyAgICBjbGFzcyBO
b3JtYWxXb3JsZENvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgTm9ybWFsV29ybGRDb25zdHJhaW50KFZNJiB2bSwgSlNWTUNsaWVudERh
dGEmIGNsaWVudERhdGEpCisgICAgICAgICAgICA6IE1hcmtpbmdDb25zdHJhaW50KCJXY29jIiwg
IldlYkNvcmUgT3V0cHV0IENvbnN0cmFpbnRzIiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRv
bUdyZXllZCkKKyAgICAgICAgICAgICwgbV92bSh2bSkKKyAgICAgICAgICAgICwgbV9jbGllbnRE
YXRhKGNsaWVudERhdGEpCisgICAgICAgICAgICAsIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24odm0u
aGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhl
Y3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBI
ZWFwJiBoZWFwID0gbV92bS5oZWFwOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGVh
cC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpID09IGxhc3RFeGVjdXRpb25WZXJzaW9uKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRp
b25WZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVyc2lvbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZl
cnNpb24oKTsKKyAgICAgICAgICAgIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0
b3JFeGVjdXRpb25WZXJzaW9uKCk7CiAKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFuYWdl
IHRoZSB2aXNpdCBjb3VudCBoZXJlIG91cnNlbHZlcy4gV2UgbmVlZCB0byBrbm93IHRoYXQgaWYg
dGhpcyBhZGRzCiAgICAgICAgICAgICAvLyBvcGFxdWUgcm9vdHMgdGhlbiB3ZSBjYW5ub3QgZGVj
bGFyZSB0ZXJtaW5hdGlvbiB5ZXQuIFRoZSB3YXkgd2Ugc2lnbmFsIHRoaXMgdG8gdGhlCiAgICAg
ICAgICAgICAvLyBjb25zdHJhaW50IHNvbHZlciBpcyBieSBhZGRpbmcgdG8gdGhlIHZpc2l0IGNv
dW50LgorICAgICAgICAgICAgbV9udW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVl
Um9vdHMoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IG51bU9wYXF1ZVJvb3Rz
QmVmb3JlID0gaGVhcC5udW1PcGFxdWVSb290cygpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTog
TWFrZSB0aGlzIHBhcmFsbGVsIQotICAgICAgICAgICAgdW5zaWduZWQgbnVtUmV2aXNpdGVkID0g
MDsKLSAgICAgICAgICAgIGNsaWVudERhdGEtPmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2Uo
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Rhc2tzLmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKICAgICAgICAg
ICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBz
dWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
SGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSgqdm0pLT52aXNp
dE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1SZXZpc2l0ZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3Rhc2tzLmFw
cGVuZChzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoZnVuYykpOwogICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiKCIsIG51bVJldmlzaXRlZCwgIikiKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoaGVhcC5udW1PcGFxdWVS
b290cygpIC0gbnVtT3BhcXVlUm9vdHNCZWZvcmUpOwotICAgICAgICB9LAotICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKLSAgICB2bS0+aGVhcC5hZGRNYXJraW5n
Q29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKKyAgICAgICAgICAgIHJldHVybiBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChhdXRvJiB0YXNrIDogbV90YXNrcykKKyAgICAg
ICAgICAgICAgICB0YXNrLT5ydW4odmlzaXRvcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fdGFza3MuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBWTSYgbV92bTsKKyAgICAgICAgSlNWTUNsaWVudERh
dGEmIG1fY2xpZW50RGF0YTsKKyAgICAgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lv
bjsKKyAgICAgICAgc2l6ZV90IG1fbnVtT3BhcXVlUm9vdHNCZWZvcmUgeyAwIH07CisgICAgICAg
IFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pj4gbV90YXNrczsK
KyAgICB9OworICAgIAorICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6bWFr
ZV91bmlxdWU8Tm9ybWFsV29ybGRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7CiAgICAg
ICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNy
ZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRS
ZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvcnVuLWpzYy1iZW5jaG1hcmtzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1iZW5jaG1hcmtzCShyZXZpc2lvbiAyMjUxNzgpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
YmVuY2htYXJrcwkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsOCBAQCBMT05HU1BJREVSX1BB
VEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggCiBWOF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19Q
QVRIICsgIlN1blNwaWRlciIgKyAidGVzdHMiICsgInY4LXY2IgogVEFJTEJFTkNIX1BBVEggPSBQ
RVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiVGFpbEJlbmNoOTAwMCIKIE1JQ1JPQkVOQ0hNQVJLU19Q
QVRIID0gT1BFTlNPVVJDRV9QQVRIICsgIkpTVGVzdHMiICsgIm1pY3JvYmVuY2htYXJrcyIKLU9D
VEFORV9XUkFQUEVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiT2N0YW5lIiArICJ3
cmFwcGVycyIKK09QRU5TT1VSQ0VfT0NUQU5FX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEgg
KyAiT2N0YW5lIgorT0NUQU5FX1dSQVBQRVJfUEFUSCA9IE9QRU5TT1VSQ0VfT0NUQU5FX1BBVEgg
KyAid3JhcHBlcnMiCiBKU0JFTkNIX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiSlNC
ZW5jaCIKIFNJWFNQRUVEX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU2l4U3BlZWQi
ICsgInRlc3RzIgogU0lYU1BFRURfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRI
ICsgIlNpeFNwZWVkIiArICJ3cmFwcGVycyIKQEAgLTg0MSw2ICs4NDIsMjAgQEAgY2xhc3MgU2lu
Z2xlRmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwogICBlbmQKIGVuZAogCisjIEJlbmNobWFy
ayB0aGF0IGNvbnNpc3RzIG9mIGEgc2luZ2xlIGZpbGUgYW5kIG11c3QgYmUgbG9hZGVkIGluIGl0
cyBvd24gZ2xvYmFsIG9iamVjdCBlYWNoCisjIHRpbWUgKGkuZS4gcnVuKCkpLCBidXQgcmV0dXJu
cyBpdHMgcmVzdWx0IGluIGEgY3VzdG9tIHdheS4KK2NsYXNzIFNpbmdsZUZpbGVDdXN0b21UaW1l
ZEJlbmNobWFya1BhcmFtZXRlcnMKKyAgYXR0cl9yZWFkZXIgOmJlbmNoUGF0aAorICAKKyAgZGVm
IGluaXRpYWxpemUoYmVuY2hQYXRoKQorICAgIEBiZW5jaFBhdGggPSBiZW5jaFBhdGgKKyAgZW5k
CisgIAorICBkZWYga2luZAorICAgIDpzaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAg
ZW5kCitlbmQKKwogIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBkYXRh
IGZpbGVzIHRoYXQgc2hvdWxkIGJlIGxvYWRlZCBnbG9iYWxseSwgZm9sbG93ZWQKICMgYnkgYSBj
b21tYW5kIHRvIHJ1biB0aGUgYmVuY2htYXJrLgogY2xhc3MgTXVsdGlGaWxlVGltZWRCZW5jaG1h
cmtQYXJhbWV0ZXJzCkBAIC05NjUsNiArOTgwLDI1IEBAIGRlZiBlbWl0QmVuY2hSdW5Db2RlRmls
ZShuYW1lLCBwbGFuLCBiZW4KICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICBp
ZiAoX19iZW5jaGVyX2luZGV4ID49ICN7d2FybXVwfSkgcHJpbnQoXCIje25hbWV9OiAje3BsYW4u
dm19OiAje3BsYW4uaXRlcmF0aW9ufTogXCIgKyAoX19iZW5jaGVyX2luZGV4IC0gI3t3YXJtdXB9
KSArIFwiOiBUaW1lOiBcIisoKF9fYWZ0ZXItX19iZWZvcmUpL19fcnVucykpOyIpCiAgICAgICAg
IGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJ9IikKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsIiN7YmVuY2hQYXJhbXMudGVhckRvd25Db21tYW5kLmpzfSIpCisgICAgICBlbHNpZiBi
ZW5jaFBhcmFtcy5raW5kID09IDpzaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImZ1bmN0aW9uIF9fYmVuY2hlcl9ydW4oX19iZW5j
aGVyX3doYXQpIHsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgdmFyIF9f
YmVuY2hlcl9yZXN1bHQgPSB7dmFsdWU6IG51bGx9OyIpCisgICAgICAgICRyZXJ1bi50aW1lcyB7
CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHJ1bihfX2JlbmNoZXJfd2hh
dCwgX19iZW5jaGVyX3Jlc3VsdCk7IikKKyAgICAgICAgfQorICAgICAgICBkb3VibGVQdXRzKCRz
dGRlcnIsZmlsZSwiICAgaWYgKF9fYmVuY2hlcl9yZXN1bHQudmFsdWUgPT0gbnVsbCkiKQorICAg
ICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTnVs
bCByZXN1bHRcIik7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHJldHVy
biBfX2JlbmNoZXJfcmVzdWx0LnZhbHVlOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCJ9IikKKyAgICAgICAgJHdhcm11cC50aW1lcyB7CisgICAgICAgICAgZG91YmxlUHV0cygk
c3RkZXJyLGZpbGUsIl9fYmVuY2hlcl9ydW4oI3tiZW5jaFBhcmFtcy5iZW5jaFBhdGguaW5zcGVj
dH0pIikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3Mg
cGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQorICAgICAgICAkaW5uZXIudGltZXMg
eworICAgICAgICAgIHwgaW5uZXJJbmRleCB8CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsInByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06ICN7
aW5uZXJJbmRleH06IFRpbWU6IFwiK19fYmVuY2hlcl9ydW4oI3tiZW5jaFBhcmFtcy5iZW5jaFBh
dGguaW5zcGVjdH0pKTsiKQorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJnYygp
OyIpIHVubGVzcyBwbGFuLnZtLnNob3VsZE1lYXN1cmVHQworICAgICAgICB9CiAgICAgICBlbHNl
CiAgICAgICAgIHJhaXNlIHVubGVzcyBiZW5jaFBhcmFtcy5raW5kID09IDpzaW5nbGVGaWxlVGlt
ZWRCZW5jaG1hcmsKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImZ1bmN0aW9uIF9f
YmVuY2hlcl9ydW4oX19iZW5jaGVyX3doYXQpIHsiKQpAQCAtMTU5NCw2ICsxNjI4LDE5IEBAIGNs
YXNzIE9jdGFuZUJlbmNobWFyawogICBlbmQKIGVuZAogCitjbGFzcyBDdXN0b21UaW1lZEJlbmNo
bWFyaworICBpbmNsdWRlIEJlbmNobWFyaworICAKKyAgZGVmIGluaXRpYWxpemUobmFtZSwgZnVs
bFBhdGgpCisgICAgQG5hbWUgPSBuYW1lCisgICAgQGZ1bGxQYXRoID0gZnVsbFBhdGgKKyAgZW5k
CisgIAorICBkZWYgZW1pdFJ1bkNvZGUocGxhbikKKyAgICBlbWl0QmVuY2hSdW5Db2RlKGZ1bGxu
YW1lLCBwbGFuLCBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzLm5ldyhl
bnN1cmVGaWxlKCJDdXN0b21UaW1lZC0je0BuYW1lfSIsIEBmdWxsUGF0aCkpKQorICBlbmQKK2Vu
ZAorCiBjbGFzcyBLcmFrZW5CZW5jaG1hcmsKICAgaW5jbHVkZSBCZW5jaG1hcmsKICAgCkBAIC0z
MDEwLDYgKzMwNTcsNyBAQCBiZWdpbgogICAgIHwgYXJncyB8CiAgICAgT0NUQU5FLmFkZCBPY3Rh
bmVCZW5jaG1hcmsubmV3KCphcmdzKQogICB9CisgIE9DVEFORS5hZGQgQ3VzdG9tVGltZWRCZW5j
aG1hcmsubmV3KCJzcGxheS1sYXRlbmN5IiwgKE9QRU5TT1VSQ0VfT0NUQU5FX1BBVEggKyAic3Bs
YXkuanMiKS50b19zKQogCiAgIEtSQUtFTiA9IEJlbmNobWFya1N1aXRlLm5ldygiS3Jha2VuIiwg
OmFyaXRobWV0aWNNZWFuLCAtMSkKICAgWyJhaS1hc3RhciIsICJhdWRpby1iZWF0LWRldGVjdGlv
biIsICJhdWRpby1kZnQiLCAiYXVkaW8tZmZ0IiwKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMjI1MTc4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsNyBAQCBzZXQoVGVzdFdURl9TT1VS
Q0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9DU3RyaW5nLmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9DaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3Bw
CisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0
LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0Nyb3NzVGhyZWFkVGFzay5jcHAKICAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvRGF0ZU1hdGguY3BwCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI1MTc4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDcgQEAKIAkJMEYxMzlFNzgxQTQyM0E2QjAwRjU5MEY1IC8qIFBsYXRmb3Jt
VXRpbGl0aWVzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjEzOUU3MjFBNDIzQTJCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2Nv
YS5tbSAqLzsgfTsKIAkJMEYxMzlFNzkxQTQyNDU3MDAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0
aWVzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjEzOUU3MjFBNDIzQTJCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSAq
LzsgfTsKIAkJMEYyQzIwQjgxRENENTQ1MDAwNTQyRDlFIC8qIFRpbWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzIwQjcxRENENTQ0ODAwNTQy
RDlFIC8qIFRpbWUuY3BwICovOyB9OworCQkwRjMwQ0I1QzFGQ0UxNzk2MDA0QjUzMjMgLyogQ29u
Y3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNo
U2V0LmNwcCAqLzsgfTsKIAkJMEYzQjk0QTcxQTc3MjY3NDAwREUzMjcyIC8qIFdLV2ViVmlld0V2
YWx1YXRlSmF2YVNjcmlwdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUph
dmFTY3JpcHQubW0gKi87IH07CiAJCTBGNEZGQTlFMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hv
dFZpYVJlbmRlckluQ29udGV4dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRl
ckluQ29udGV4dC5tbSAqLzsgfTsKIAkJMTE1RUIzNDMxRUUwQkEwMzAwM0MyQzBBIC8qIFZpZXdw
b3J0U2l6ZUZvclZpZXdwb3J0VW5pdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxMTVFQjM0MjFFRTBCNzIwMDAzQzJDMEEgLyogVmlld3BvcnRTaXpl
Rm9yVmlld3BvcnRVbml0cy5tbSAqLzsgfTsKQEAgLTEwNjcsNiArMTA2OCw3IEBACiAJCTBGMTM5
RTc1MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2EvV2Vha09i
akNQdHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVBRjZDNEQw
MDdBQjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQ
cm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcxRENENTQ0
ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVCMUZDRTE3
OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdF
dmFsdWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlcklu
Q29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNuYXBz
aG90VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjRGRkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
bmFtZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9JbWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0yNTgxLDYg
KzI1ODMsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNTdHJpbmcu
Y3BwICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAg
Ki8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3Bl
cmF0aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29u
ZGl0aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJl
YWRUYXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5j
cHAgKi8sCkBAIC0zMTY1LDYgKzMxNjgsNyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMwMEZFQkNG
MyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUZFMUQwQTU5
MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFG
MzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09i
amVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25hbWVz
cGFjZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlzIHRoaW5n
IHdoYXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMu
CisvLyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6CisvLworLy8g
K3ggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBhbmQgYXNz
ZXJ0cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgYW5kIGFz
c2VydHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRzIHRoYXQg
J3gnIGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5vdCBpbiB0
aGUgc2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBDb25jdXJy
ZW50UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0gY29tbWFu
ZHM7IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAgICAgIHZv
aWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb21t
YW5kWzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZFswXSkgeworICAgICAgICBjYXNlICcr
JzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5hZGQocHRyKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmFk
ZChwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMo
cHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoV1RGX0Nv
bmN1cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAgICBkb1Rlc3QoIiIpOworfQorCitURVNU
KFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudCkKK3sKKyAgICBkb1Rlc3Qo
Iit4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVF
bGVtZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4IXgheCF4
IXg9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVs
ZW1lbnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgt
eS0wIXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgiKTsKK30KKworVEVTVChXVEZfQ29u
Y3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzKQoreworICAgIGRvVGVzdCgiKzEr
MiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6
K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0Mr
VitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1n
PWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9
Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNl
dCwgQWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1
KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraytsK3oreCtjK3Yr
YituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitN
PTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9
bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1Y
PUM9Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMh
ZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFH
IUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUh
aSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQ
IUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXch
ZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFU
IVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITch
OCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFt
IVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIh
MyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4
IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYh
QiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFo
IWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUsh
TCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFh
IXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQh
RiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5
IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkh
TyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFx
IXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUh
UiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNIik7Cit9CisKK1RF
U1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c0FuZFF1ZXJ5U29t
ZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4Kzkr
MCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0w
PXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVct
RS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2
K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04r
TT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1r
PWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9
WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRk
U29tZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRUaGVSZXN0QW5kUXVlcnlTb21lQmVmb3Jl
QWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3Erdytl
K3IrdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEh
dyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITgh
OSEwIXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02PTc9OD05
PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWItbi1tLVEt
Vy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTStsK3oreCtj
K3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0Ir
TitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1q
PWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9
Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327996</attachid>
            <date>2017-11-30 11:15:53 -0800</date>
            <delta_ts>2017-12-01 09:30:01 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>185263</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2
ICs1MDMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0zMTEsNiArMzEwLDkgQEAKIAkJ
MEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4
IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0
REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0
MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICov
OyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTcz
MDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi87IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFE
MzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJh
aW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjREOEM3ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNGMUM0
QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMx
NSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9OwogCQkw
RjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRG
ODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0
OTQsNyArMTQ5Niw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1
NEQ1MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVC
RjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5
NzAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdh
c21OYW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTgg
LyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFF
MDhGMURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4
IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNz
ZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5
TGlua0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlM
aW5rRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJv
clByb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xOTc2LDcgKzE5NzcsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyog
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNB
NjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhD
MUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1l
b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAg
LyogREZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
UGxhbklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5s
aW5lcy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjY0LDYgKzIyNjQsMTAgQEAKIAkJMEY0
QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09y
aWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1w
Lmg7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdENvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxl
bGlzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJhaW50UGFyYWxs
ZWxpc20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzYxRkNBM0NGMjAw
MUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERF
MUNDMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmg7
IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRERTFEMDFDNEQ3NjRCMDA0RDZDMTEgLyogQjNPcmlnaW5EdW1wLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5jcHA7IHBh
dGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDI1NCw3ICs0MjU4LDYgQEAKIAkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNz
ZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcx
MDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2Vj
dGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFEREIxRjYyMThE
NzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QURFODAyOTMxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2Vi
QXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJB
c3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NTAwLDYgKzU1MDMsNyBAQAogCQkJCTBGRDBFNUU2MUU0M0QzNDcwMDA2QUIwOCAvKiBD
b2xsZWN0b3JQaGFzZS5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBDb25z
ZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8qIENv
bnNlcnZhdGl2ZVJvb3RzLmggKi8sCisJCQkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENv
bnN0cmFpbnRQYXJhbGxlbGlzbS5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAv
KiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRG
NyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVm
ZXJHQy5oICovLApAQCAtNTU5NCwxMSArNTU5OCwxMiBAQAogCQkJCTBGMUZCMzk4MUUxRjY1Rjkw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEZBNzYyMDIxREI5MjQyMzAw
QjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5jcHAgKi8sCiAJCQkJMEZBNzYyMDMxREI5MjQyMzAwQjdB
MkZEIC8qIE11dGF0b3JTdGF0ZS5oICovLAotCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAv
KiBPcGFxdWVSb290U2V0LmggKi8sCiAJCQkJMEZCQjczQjYxREVGM0FBQzAwMkMwMDlFIC8qIFBy
ZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCAqLywKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFCMDgg
LyogUmVnaXN0ZXJTdGF0ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAvKiBS
ZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAwQzEzODM5
IC8qIFJ1bm5pbmdTY29wZS5oICovLAorCQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBT
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCisJCQkJMEY0RDhDNzcxRkNBM0NGMzAwMUQz
MkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJB
QTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1
QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIg
LyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC01NjIwLDcgKzU2MjUsNyBAQAogCQkJCTBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29t
RmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRp
bmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291
bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
Y3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAq
LywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04MTY5
LDYgKzgxNzQsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8q
IEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFD
IC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5MkUx
QkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFkZXJz
ICovLApAQCAtODg4Myw2ICs4ODg5LDcgQEAKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIg
LyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgy
QjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291
bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpT
V2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8q
IEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhE
RTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTkwMDIs
OSArOTAwOSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZGIC8qIE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQw
QTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0NjBF
MTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJzICov
LAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0OSw3ICs5MjU2LDYgQEAKIAkJCQkwRjZDNzM1MTFB
QzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1Rp
bWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBW
aXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8q
IFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjAsNyArMzIwLDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhTbAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX3N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpKSkKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5n
ZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05ODAsNyArOTgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIAogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVk
ID0gdHJ1ZTsKIAotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChz
aG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpIHsKQEAgLTExMzIsNyArMTEzMiw3IEBAIHN0YXRp
YyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0wKIAogYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKLSAg
ICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6Omlz
TWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2UoKSkpCkBAIC0xMTQ3
LDEwICsxMTQ3LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWcK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERG
Rzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCiB7Ci0gICAgaWYgKHRyYW5z
aXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0
aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2lu
ICYmICFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHRy
YW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAo
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKQEAg
LTEyNTQsMTQgKzEyNTQsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0gZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0
PENvZGVCbG9jayo+KCpyZWZlcmVuY2UtPnZtKCksIHJlZmVyZW5jZSkpOwotICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIg
PSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChh
bGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0Nv
bW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJl
UmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
ZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKICAgICAgICAg
ICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMTMgQEAgcHJvdGVj
dGVkOgogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0LCAiOiBDb21waWxpbmcgIiwgbV9w
bGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBU
aGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNhZmVwb2ludGluZyBzaW5jZSB3ZSBvd24g
cmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2
ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVh
cC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3Bl
ZCBidXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1fcGxhbi0+Y29tcGlsZUluVGhyZWFk
KCZtX2RhdGEpOwogICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSAhPSBQbGFuOjpDYW5jZWxsZWQp
IHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0
b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMilcbiIpOwogICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB9CkBAIC0xMzAsNyArMTMwLDcgQEAg
cHJvdGVjdGVkOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcmVhZHlQ
bGFucy5hcHBlbmQobV9wbGFuKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wbGFuLT52bS0+aGVhcC53
b3JsZElzU3RvcHBlZCgpKTsKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9wbGFuQ29tcGlsZWQu
bm90aWZ5QWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcx
LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYg
KHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBo
Lm1fdm0uaGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAKICAgICBpZiAoc3RhdGUuYWxsb2Nh
dGlvbkZhaWxlZCkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNs
YXNzIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA6IHVpbnQ4X3QgeworICAgIFNlcXVlbnRpYWwsCisg
ICAgUGFyYWxsZWwKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpD
b25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCit7CisgICAgc3dpdGNoIChwYXJhbGxl
bGlzbSkgeworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw6
CisgICAgICAgIG91dC5wcmludCgiU2VxdWVudGlhbCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWw6CisgICAgICAgIG91dC5w
cmludCgiUGFyYWxsZWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgx
LDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9tdXRh
dG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMsICJNIikp
CiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJh
eT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0Fy
cmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0Nv
bnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtlX3VuaXF1ZTxN
YXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAg
LCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBt
X2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQpA
QCAtOTExLDcgKzkxMSw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpT
Q2UKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQrKzsKICAgICBpZiAobV9tdXRhdG9yU2hvdWxkQmVG
ZW5jZWQpIHsKICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGlmICghaXNN
YXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgaWYgKCFpc01hcmtlZChjZWxsKSkg
ewogICAgICAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBh
biB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKICAgICAgICAgICAgIC8v
IGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9yZSB0byBhbiB1bm1hcmtlZCBQb3Nz
aWJseUJsYWNrIG9iamVjdC4gSWYgdGhlCiAgICAgICAgICAgICAvLyBvYmplY3QgZ2V0cyBtYXJr
ZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3aWxsIGdvIGRvd24gdGhlIG5vcm1h
bCBtYXJraW5nCkBAIC05MjQsMTUgKzkyNCwxNSBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJl
ZFNldChjb25zdCBKU0NlCiAgICAgICAgICAgICAgICAgLy8gTm93IHdlIHByb3RlY3QgYWdhaW5z
dCB0aGlzIHJhY2U6CiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyAgICAg
MSkgT2JqZWN0IHN0YXJ0cyBvdXQgYmxhY2sgKyB1bm1hcmtlZC4KLSAgICAgICAgICAgICAgICAv
LyAgICAgLS0+IFdlIGRvIGlzTWFya2VkQ29uY3VycmVudGx5IGhlcmUuCisgICAgICAgICAgICAg
ICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZCBoZXJlLgogICAgICAgICAgICAgICAgIC8vICAg
ICAyKSBPYmplY3QgaXMgbWFya2VkIGFuZCBncmV5ZWQuCiAgICAgICAgICAgICAgICAgLy8gICAg
IDMpIE9iamVjdCBpcyBzY2FubmVkIGFuZCBibGFja2VkLgogICAgICAgICAgICAgICAgIC8vICAg
ICAtLT4gV2UgZG8gYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nIGhlcmUuCiAg
ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugd291
bGQgaGF2ZSBtYWRlIHRoZSBvYmplY3Qgd2hpdGUgYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHNob3Vs
ZAogICAgICAgICAgICAgICAgIC8vIGJlIGJsYWNrLiBUaGlzIGNoZWNrIGxldHMgdXMgY29ycmVj
dCBvdXIgbWlzdGFrZS4gVGhpcyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdAotICAgICAgICAgICAg
ICAgIC8vIGlzTWFya2VkQ29uY3VycmVudGx5IGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRy
dWUuCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gaXNNYXJrZWQgY29udmVyZ2VzIG1vbm90b25pY2FsbHkgdG8gdHJ1
ZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gSXQncyBkaWZmaWN1bHQgdG8gd29yayBvdXQgd2hldGhlciB0aGUgb2JqZWN0IHNo
b3VsZCBiZSBncmV5IG9yIGJsYWNrIGF0CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgcG9p
bnQuIFdlIHNheSBibGFjayBjb25zZXJ2YXRpdmVseS4KICAgICAgICAgICAgICAgICAgICAgY2Vs
bC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlCbGFjayk7CkBAIC05NDgsNyArOTQ4
LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgICAgIEFTU0VSVChIZWFwOjppc01hcmtl
ZChjZWxsKSk7CiAgICAgLy8gSXQgY291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IHdhcyAqanVzdCog
bWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvciBtYXkgc2V0IHRoZQogICAgIC8v
IHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFuZCB0aGVuIHRvIFBvc3NpYmx5T2xkT3JCbGFjayBh
dCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8KICAgICAvLyByYWNlIHdpdGggdGhlIGNvbGxl
Y3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFjY3VyYXRlIGJlY2F1c2UgdGhlIG9i
amVjdCBfd2lsbF8KQEAgLTEyNjUsNiArMTI2NSw4IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6
OnJ1bkZpeHBvaW50UGhhc2UKICAgICAKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKICAgICAKKyAgICBtX29wYXF1ZVJvb3RzLmRlbGV0ZU9s
ZFRhYmxlcygpOworICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CiAgICAgICAgIEhh
c2hNYXA8Y29uc3QgY2hhciosIHNpemVfdD4gdmlzaXRNYXA7CiAgICAgICAgIGZvckVhY2hTbG90
VmlzaXRvcigKQEAgLTEyODcsMTAgKzEyODksNiBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpy
dW5GaXhwb2ludFBoYXNlCiAgICAgICAgICAgICAKICAgICAgICAgYXNzZXJ0U2hhcmVkTWFya1N0
YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VJZk5l
Y2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxs
ZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlSWZOZWNl
c3NhcnkoKTsKLSAgICAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogVGFrZSBtX211dGF0b3JE
aWRSdW4gaW50byBhY2NvdW50IHdoZW4gc2NoZWR1bGluZyBjb25zdHJhaW50cy4gTW9zdCBsaWtl
bHksCiAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gZXhlY3V0ZSByb290IGNvbnN0cmFpbnRz
IGFnYWluIHVubGVzcyB0aGUgbXV0YXRvciBkaWQgcnVuLiBBdCBhCiAgICAgICAgIC8vIG1pbmlt
dW0sIHdlIGNvdWxkIHVzZSB0aGlzIGZvciB3b3JrIGVzdGltYXRlcyAtIGJ1dCBpdCdzIHByb2Jh
Ymx5IG1vcmUgdGhhbiBqdXN0IGFuCkBAIC0xMzA1LDcgKzEzMDMsNyBAQCBORVZFUl9JTkxJTkUg
Ym9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgICAgIC8vIFdvbmRlcmluZyB3aGF0IHRo
aXMgZG9lcz8gTG9vayBhdCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKS4gVGhlIERPTSBhbmQg
b3RoZXJzIGNhbiBhbHNvCiAgICAgICAgIC8vIGFkZCB0aGVpciBvd24gdXNpbmcgSGVhcDo6YWRk
TWFya2luZ0NvbnN0cmFpbnQoKS4KICAgICAgICAgYm9vbCBjb252ZXJnZWQgPQotICAgICAgICAg
ICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IsIE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVj
dXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IpOwogICAgICAgICBpZiAoY29udmVyZ2VkICYmIHNs
b3RWaXNpdG9yLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNr
c0VtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gY2hhbmdlUGhhc2UoY29ubiwgQ29sbGVjdG9y
UGhhc2U6OkVuZCk7CkBAIC0xNTI2LDcgKzE1MjQsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFw
OjpmaW5pc2hDaGFuZ2luZ1BoCiAKIHZvaWQgSGVhcDo6c3RvcFRoZVBlcmlwaGVyeShHQ0NvbmR1
Y3RvciBjb25uKQogewotICAgIGlmIChtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNT
dG9wcGVkKSB7CisgICAgaWYgKG1fd29ybGRJc1N0b3BwZWQpIHsKICAgICAgICAgZGF0YUxvZygi
RkFUQUw6IHdvcmxkIGFscmVhZHkgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE1MzcsNyArMTUzNSw3IEBAIHZvaWQgSGVhcDo6
c3RvcFRoZVBlcmlwaGVyeShHQ0NvbmR1Y3RvciAKICAgICBtX211dGF0b3JEaWRSdW4gPSBmYWxz
ZTsKIAogICAgIHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsKLSAgICBtX2NvbGxlY3RvckJlbGll
dmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gdHJ1ZTsKKyAgICBtX3dvcmxkSXNTdG9wcGVkID0g
dHJ1ZTsKIAogICAgIGZvckVhY2hTbG90VmlzaXRvcigKICAgICAgICAgWyZdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpIHsKQEAgLTE1NzQsMTEgKzE1NzIsMTEgQEAgTkVWRVJfSU5MSU5FIHZv
aWQgSGVhcDo6cmVzdW1lVGhlUGVyaXBoZQogICAgIAogICAgIG1fYmFycmllcnNFeGVjdXRlZCA9
IDA7CiAgICAgCi0gICAgaWYgKCFtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9w
cGVkKSB7CisgICAgaWYgKCFtX3dvcmxkSXNTdG9wcGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZh
dGFsOiBjb2xsZWN0b3IgZG9lcyBub3QgYmVsaWV2ZSB0aGF0IHRoZSB3b3JsZCBpcyBzdG9wcGVk
LlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotICAg
IG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKKyAgICBt
X3dvcmxkSXNTdG9wcGVkID0gZmFsc2U7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgY291bGQg
YmUgdmFzdGx5IGltcHJvdmVkOiB3ZSB3YW50IHRvIGdyYWIgdGhlIGxvY2tzIGluIHRoZSBvcmRl
ciBpbiB3aGljaCB0aGV5CiAgICAgLy8gYmVjb21lIGF2YWlsYWJsZS4gV2UgYmFzaWNhbGx5IHdh
bnQgYSBsb2NrQW55KCkgbWV0aG9kIHRoYXQgd2lsbCBsb2NrIHdoYXRldmVyIGxvY2sgaXMgYXZh
aWxhYmxlCkBAIC0yNTc4LDcgKzI1NzYsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDcyIsICJDb25zZXJ2
YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBj
b25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWlu
Z1Njb3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKICAgICAgICAg
ICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKICAgICAgICAg
ICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKQEAgLTI1ODgs
MTEgKzI1ODYsMTIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAg
ICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgIH0sCi0g
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5h
ZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290cyIsCi0gICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIHNs
b3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYwOSwxOSArMjYwOCwyMSBAQCB2b2lkIEhlYXA6OmFk
ZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOwogICAgICAgICB9LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlz
aXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgICAgIG1faGFuZGxlU3RhY2su
dmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxs
ZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1
Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yKSB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNh
bXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVy
KCkpIHsKICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVy
LT5nZXRMb2NrKCkpOwpAQCAtMjYzNywzNCArMjYzOCwzOCBAQCB2b2lkIEhlYXA6OmFkZENvcmVD
b25zdHJhaW50cygpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fdm0tPnNoYWRvd0NoaWNr
ZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIkpzciIsICJKSVQgU3R1YiBSb3V0aW5lcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0
aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldy
aCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIGZvciAoV2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVh
ZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQogICAgICAgICAgICAgICAg
IGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEdyIsICJERkcgV29ya2xpc3RzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0t
OykKICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNp
dFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgICAgIApAQCAtMjY3OSwxMiAr
MjY4NCwxMyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CisgICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAgICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogI2VuZGlmCiAgICAgCiAgICAgbV9jb25zdHJhaW50
U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tzIiwKLSAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKICAg
ICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQn
cyBibGFjay4KQEAgLTI2OTMsMTEgKzI2OTksMTUgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMoKQogICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IudmlzaXRBc0NvbnN0
cmFpbnQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCk7CisgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
TXJtcyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBuZWVkcyB0byBncmFiIGxvY2tzIHRvIGZpZGRsZSB3aXRoIHRoZSBtdXRhdG9yIG1hcmsg
c3RhY2sgYW5kIHRoZSByYWNlIHN0YWNrLgorICAgICAgICAgICAgLy8gVGhlIGNoYW5jZXMgb2Yg
Y29udGVudGlvbiBvbiB0aG9zZSBsb2NrcyBhcmUgc2xpbSwgYnV0IHdlIHNob3VsZCBkbyBpdCBh
bnl3YXkuCisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEluZGljYXRlIHRvIHRoZSBmaXhw
b2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKICAgICAgICAgICAgIHNpemVfdCBzaXplID0g
bV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKICAg
ICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXplKTsKQEAgLTI3MTEsNyAr
MjcyMSw4IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYpIC0+IGRvdWJsZSB7CiAgICAgICAgICAgICByZXR1cm4gbV9tdXRhdG9y
TWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKICAgICAgICAgfSwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKIH0KIAogdm9pZCBIZWFwOjphZGRNYXJraW5n
Q29uc3RyYWludChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQp
CkBAIC0yNzk0LDE2ICsyODA1LDYgQEAgdm9pZCBIZWFwOjphbGxvd0NvbGxlY3Rpb24oKQogICAg
IG1fY29sbGVjdENvbnRpbnVvdXNseUxvY2sudW5sb2NrKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci12b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5j
KQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9j
ayk7Ci0gICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0gICAgZnVuYygqbV9tdXRh
dG9yU2xvdFZpc2l0b3IpOwotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVs
U2xvdFZpc2l0b3JzKQotICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Ci19Ci0KIHZvaWQgSGVh
cDo6c2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9tdXRhdG9y
U2hvdWxkQmVGZW5jZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCArMjg0OCwyNCBAQCB2b2lkIEhlYXA6
OnJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9oZWFwRmluYWxpemVyQ2FsbGJh
Y2tzLnJlbW92ZUZpcnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBIZWFwOjpzZXRCb251c1Zpc2l0
b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7Cisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgbV9ib251c1Zp
c2l0b3JUYXNrID0gdGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlB
bGwoKTsKK30KKwordm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxSZWZD
b3VudCA9IHRhc2stPnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayh0YXNrKTsK
KyAgICB0YXNrLT5ydW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIHNldEJvbnVzVmlz
aXRvclRhc2sobnVsbHB0cik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbWFya2luZ011dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2stPnJlZkNvdW50KCkgPiBpbml0
aWFsUmVmQ291bnQpCisgICAgICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0
KG1fbWFya2luZ011dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBA
CiAjaW5jbHVkZSAiV2Vha0hhbmRsZU93bmVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhh
cnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3
dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAt
MTE0LDcgKzExNSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc190aW1l
Q2hlY2tSZXNvbHV0aW9uID0gMTY7CiAKICAgICBzdGF0aWMgYm9vbCBpc01hcmtlZChjb25zdCB2
b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCop
OwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24sIGNvbnN0IHZv
aWQqKTsKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0IHZvaWQqKTsKQEAg
LTE1NCw3ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAgTXV0YXRvclN0YXRlIG11dGF0b3JTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YXRlOyB9CiAgICAgc3RkOjpvcHRpb25hbDxDb2xs
ZWN0aW9uU2NvcGU+IGNvbGxlY3Rpb25TY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdGlv
blNjb3BlOyB9CiAgICAgYm9vbCBoYXNIZWFwQWNjZXNzKCkgY29uc3Q7Ci0gICAgYm9vbCBjb2xs
ZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpIGNvbnN0OworICAgIGJvb2wgd29y
bGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNSdW5uaW5nKCkgY29uc3QgeyBy
ZXR1cm4gIXdvcmxkSXNTdG9wcGVkKCk7IH0KIAogICAgIC8vIFdlJ3JlIGFsd2F5cyBidXN5IG9u
IHRoZSBjb2xsZWN0aW9uIHRocmVhZHMuIE9uIHRoZSBtYWluIHRocmVhZCwgdGhpcyByZXR1cm5z
IHRydWUgaWYgd2UncmUKICAgICAvLyBoZWxwaW5nIGhlYXAuCkBAIC0zNTgsNiArMzU5LDE3IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBI
ZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxs
YmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lkIHJ1blRh
c2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBh
cmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5QYXJhbGxl
bChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3Io
Y29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2Nv
cGU7CkBAIC01MjcsNiArNTM5LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFzc2VydFNo
YXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JUYXNrKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBjb25zdCBI
ZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAgICAgY29u
c3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTMsNiBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRv
cnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVu
YyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNrIG1faGFu
ZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9jb2RlQmxvY2tz
OwpAQCAtNjMzLDggKzY0NCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZldh
aXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0ZXg7Ci0gICAg
SGFzaFNldDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsKKyAgICBDb25jdXJyZW50UHRySGFz
aFNldCBtX29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJh
Z21lbnRMZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1Miw3IEBAIHByaXZhdGU6CiAgICAgTGlz
dGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25h
bEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsK
KyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlzaXRv
clRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxvY2tC
eXRlc0FsbG9jYXRlZCB7IDAgfTsKQEAgLTY1Nyw3ICs2NjgsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBuZWVkRmluYWxpemVCaXQgPSAxdSA8PCA0dTsKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsgLy8gQWxsb3dz
IHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxlLgogICAgIEF0
b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwotICAgIGJvb2wgbV9jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dvcmxkSXNTdG9w
cGVkIHsgZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1fYmVmb3JlR0M7CiAgICAgTW9ub3Rv
bmljVGltZSBtX2FmdGVyR0M7CiAgICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MywzMCArNjMsMjAgQEAgaW5saW5lIGJvb2wgSGVhcDo6aGFzSGVhcEFjY2Vzcygp
IGNvbnN0CiAgICAgcmV0dXJuIG1fd29ybGRTdGF0ZS5sb2FkKCkgJiBoYXNBY2Nlc3NCaXQ7CiB9
CiAKLWlubGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9w
cGVkKCkgY29uc3QKK2lubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKKyAg
ICByZXR1cm4gbV93b3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5nVmVyc2lv
bigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3
Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlwZTo6SGVs
cGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0Nl
bGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4g
Y2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxv
Y2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZCgKLSAg
ICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNl
bGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHko
Y29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigp
KQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKLSAg
ICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBi
bG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmpl
Y3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9jay5pc01h
cmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2Vs
bCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAtMTc5LDE5ICsx
NjksMTkgQEAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPAogCiBpbmxp
bmUgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKLSAgICBBU1NFUlQoIW1h
eUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVk
KTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAg
ICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhy
ZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiB9CiAK
IGlubGluZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkK
IHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dv
cmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKICAgICAKICAgICBpZiAoVU5M
SUtFTFkobV9kaWREZWZlckdDV29yaykpIHsKQEAgLTI2OSw0ICsyNTksMTQgQEAgaW5saW5lIHZv
aWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5KCkKICAgICAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygp
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZp
c2l0b3IoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOworICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHNs
b3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgZnVuYygqc2xvdFZp
c2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjUx
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxk
ZXI6OmJ1aWxkU25hcHNob3QoCiB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUo
SlNDZWxsKiBjZWxsKQogewogICAgIEFTU0VSVChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVp
bGRlcigpID09IHRoaXMpOwotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShj
ZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKIAogICAgIGlmIChoYXNF
eGlzdGluZ05vZGVGb3JDZWxsKGNlbGwpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjI1MTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc01hcmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCopIHsg
cmV0dXJuIGlzTWFya2VkKCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVh
cENlbGwqLCBEZXBlbmRlbmN5KSB7IHJldHVybiBpc01hcmtlZCgpOyB9Ci0gICAgQUxXQVlTX0lO
TElORSBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsg
cmV0dXJuIGlzTWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVh
cFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNM
aXZlKCkgeyByZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAK
ICAgICBib29sIGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5n
LmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tE
dXJpbmdNYXJraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQgKzMzLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAvLyBVc2UgdGhpcyBsb2NrIHNjb3BlIGxpa2Ugc286CiAvLyBhdXRvIGxvY2tlciA9IGxv
Y2tEdXJpbmdNYXJraW5nKGhlYXAsIGxvY2spOwogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+
Ci1Mb2NrZXI8TG9ja1R5cGU+IGxvY2tEdXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tUeXBl
JiBwYXNzZWRMb2NrKQorYXV0byBsb2NrRHVyaW5nTWFya2luZyhIZWFwJiBoZWFwLCBMb2NrVHlw
ZSYgcGFzc2VkTG9jaykKIHsKLSAgICBMb2NrVHlwZSogbG9jazsKLSAgICBpZiAoaGVhcC5tdXRh
dG9yU2hvdWxkQmVGZW5jZWQoKSkKLSAgICAgICAgbG9jayA9ICZwYXNzZWRMb2NrOwotICAgIGVs
c2UKLSAgICAgICAgbG9jayA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4o
bG9jayk7CisgICAgcmV0dXJuIGhvbGRMb2NrSWYocGFzc2VkTG9jaywgaGVhcC5tdXRhdG9yU2hv
dWxkQmVGZW5jZWQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjUx
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDMzIEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjph
c3NlcnROb1Vuc3dlcHQoKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitSZWZQdHI8
U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gTWFya2VkQWxsb2NhdG9yOjpwYXJh
bGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKQoreworICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hh
cmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPiB7CisgICAgcHVibGljOgorICAgICAgICBU
YXNrKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2FsbG9jYXRv
cihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgbV9pbmRleCA9IG1f
YWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZpbmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAg
ICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9jYXRvci5tX2Jsb2Nrcy5zaXplKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0
b3IubV9ibG9ja3NbbV9pbmRleCsrXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOworICAgICAgICBzaXplX3Qg
bV9pbmRleCB7IDAgfTsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMpKTsKK30KKwogdm9pZCBNYXJrZWRBbGxvY2F0
b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9p
bnRlcih0aGlzKSwgIjoiLCBtX2NlbGxTaXplLCAiLyIsIG1fYXR0cmlidXRlcyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24g
MjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJNYXJrZWRCbG9jay5o
IgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC05OSw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5QmxvY2so
Y29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKTsKKyAgICAKICAgICB2
b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICB2b2lkIHJlbW92ZUJsb2Nr
KE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDYgQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKik7CiAgICAgYm9vbCBpc01h
cmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCopOwotICAgIGJvb2wg
aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZv
aWQqKTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAgICAgICAK
QEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtzU3RhbGUoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lXaXRoPGJvb2w+IGFyZU1hcmtzU3RhbGVXaXRo
RGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgCiAgICAgRGVwZW5k
ZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgICAgIApA
QCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmFyZU1hcmtzU3Rh
bGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21hcmtpbmdWZXJzaW9uOwogfQog
Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+IE1hcmtlZEJsb2NrOjphcmVNYXJr
c1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAg
SGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247Ci0gICAgcmV0dXJuIGRlcGVu
ZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24p
OwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxl
V2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShyZXN1bHQu
dmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAg
IGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRU
b01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7
CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQpAQCAtNTI0LDE1ICs1MTYsMTAg
QEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkUmF3KGNvbgogCiBpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0
IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pID8g
ZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Omlz
TWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lk
KiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1h
cmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVlKQorICAgIEhlYXBWZXJzaW9uIHZl
cnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1h
cmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtz
LmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIG1fbWFy
a3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVyc2lvbikpOwogfQogCiBpbmxpbmUg
Ym9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShy
ZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDExIEBAIHB1YmxpYzoKICAgICAvLyBX
aGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZmxpcHBlZCBidXQgdGhlIG1h
cmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9vbCBpc01hcmtpbmcoKSBjb25z
dCB7IHJldHVybiBtX2lzTWFya2luZzsgfQogICAgIAorICAgIFdlYWtTZXQqIGFjdGl2ZVdlYWtT
ZXRzQmVnaW4oKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmJlZ2luKCk7IH0KKyAgICBXZWFr
U2V0KiBhY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1fYWN0aXZlV2Vha1NldHMuZW5kKCk7
IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0JlZ2luKCkgeyByZXR1cm4gbV9uZXdB
Y3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNF
bmQoKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9CisgICAgCiAgICAgdm9p
ZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNpemVfdCwgbnVtU2l6ZUNsYXNzZXM+
IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDMwICsyNywxNSBAQAogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCiAK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCi1NYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0g
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0
aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCitNYXJraW5nQ29uc3Ry
YWludDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcg
bmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtKQogICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1l
KQogICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihX
VEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkK
LXsKLX0KLQotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENTdHJp
bmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAg
ICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0
aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCi0gICAgOiBtX2FiYnJl
dmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCi0gICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkK
LSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAs
IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb24pKQogICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCisgICAgLCBtX3BhcmFsbGVs
aXNtKHBhcmFsbGVsaXNtKQogewogfQogCkBAIC02MywxNCArNDgsNTEgQEAgdm9pZCBNYXJraW5n
Q29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7CiB9CiAK
LXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJv
b2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitDb25zdHJhaW50
UGFyYWxsZWxpc20gTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coYWJicmV2
aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRv
ciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZp
c2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5n
VGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlz
aXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAgIFZpc2l0Q291bnRl
ciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHJlc3Vs
dCA9IGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNpdENv
dW50ZXIudmlzaXRDb3VudCgpOworICAgIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSA9IHJlc3Vs
dDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OnF1
aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3sKKyAgICByZXR1cm4gMDsKK30KKworZG91
YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNp
dG9yKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9y
KTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgeworICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIG1fbGFzdFZpc2l0Q291bnQgKz0g
dmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBW
aXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGZpbmlzaFBhcmFsbGVsV29y
a0ltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlz
aXRDb3VudCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0lt
cGwoU2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNp
dG9yJikKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDIyNTE3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDEyICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNv
bnN0cmFpbnRQYXJhbGxlbGlzbS5oIgogI2luY2x1ZGUgIkNvbnN0cmFpbnRWb2xhdGlsaXR5Lmgi
Ci0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNs
dWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDMsMTggKzQxLDkgQEAgY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25z
dHJhaW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0g
ICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAg
ICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCi0gICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludChD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0
eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bCk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1hcmtpbmdDb25zdHJhaW50KCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWFya2luZ0NvbnN0cmFpbnQoKTsKICAgICAK
ICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKQEAg
LTY0LDMzICs1MywzOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFN0YXRzKCk7CiAgICAgCiAg
ICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3Vu
dDsgfQorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBsYXN0RXhlY3V0ZVBhcmFsbGVsaXNtKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtOyB9CiAgICAgCi0gICAgdm9p
ZCBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25p
Y1RpbWUgdGltZW91dCk7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGUoU2xvdFZp
c2l0b3ImKTsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCi0gICAgewotICAgICAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
bikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9xdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBkb3VibGUgd29ya0VzdGlt
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3RWaXNp
dENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKLSAgICB9CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpOworICAgIAorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpOworICAgIAorICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIGZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOwogICAgIAogICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7
IH0KICAgICAKKyAgICAvLyBJZiB0aGlzIGlzIFNlcXVlbnRpYWwsIGl0IG1lYW5zIHRoYXQgdGhl
IGNvbnN0cmFpbnQgaGFzIHRvIGJlIHJ1biBzZXF1ZW50aWFsbHksIHdpdGggbm8gY29uY3VycmVu
dAorICAgIC8vIGNvbnN0cmFpbnRzLgorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxl
bGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KKworcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOwor
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7IC8v
IFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KICAgICAKICAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlO
VF9NQVggfTsKICAgICBDU3RyaW5nIG1fYWJicmV2aWF0ZWROYW1lOwogICAgIENTdHJpbmcgbV9u
YW1lOwotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYgdGltZW91dCk+IG1fZXhlY3V0ZUZ1bmN0aW9uOwotICAgIDo6RnVuY3Rpb248ZG91Ymxl
KFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIG1f
cGFyYWxsZWxpc207CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIG1fbGFzdEV4ZWN1dGVQYXJh
bGxlbGlzbSB7IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwgfTsgLy8gSXQncyBhIGhl
dXJpc3RpYywgd2UgY2FuIGJlIHdyb25nLiBUaGlzIGd1ZXNzIG9ubHkgYWZmZWN0cyB0aGUgZmly
c3QgcnVuLgogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9s
b2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyMjUx
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKIAorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKQEAgLTM0
LDUyICszNywyMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpFeGVjdXRpb25Db250ZXh0IHsKIHB1YmxpYzoKLSAgICBFeGVjdXRpb25Db250ZXh0KE1h
cmtpbmdDb25zdHJhaW50U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCisgICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYg
c2V0KQogICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikK
LSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKICAgICB7CisgICAgICAgIG1fc2V0Lm1faGVh
cC5mb3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSB7CisgICAgICAgICAgICAgICAgbV92aXNpdENvdW50ZXJzLmFwcGVuZChWaXNpdENvdW50
ZXIodmlzaXRvcikpOworICAgICAgICAgICAgfSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgZGlk
VmlzaXRTb21ldGhpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRT
b21ldGhpbmc7CisgICAgICAgIGZvciAoY29uc3QgVmlzaXRDb3VudGVyJiB2aXNpdENvdW50ZXIg
OiBtX3Zpc2l0Q291bnRlcnMpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KCkgY29u
c3QKKyAgICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2UgeworICAgICAgICBQYXJhbGxlbFdvcmtG
aXJzdCwKKyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJzdAorICAgIH07CisKKyAgICAvLyBwaWNr
TmV4dCgpIGlzIGNhbGxlZCB3aGlsZSBhIGxvY2sgaXMgaGVsZCwgc28gaXQgY2FuIHByZXRlbmQg
bGlrZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBtYWluCisgICAgLy8gdGhyZWFkLiBGb3Ig
ZXhhbXBsZSwgaXQncyB0b3RhbGx5IHNhZmUgZm9yIHRoYXQgbGFtYmRhIHRvIGNsb3NlIG92ZXIg
dGhlIHN0YWNrLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBleGVjdXRl
KFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgY29uc3QgRnVuYyYgcGlja05leHQpCiAg
ICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1f
dGltZW91dCk7CisgICAgICAgIG1fc2V0Lm1faGVhcC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisg
ICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBib29sIGRvUGFyYWxsZWxXb3JrTW9kZTsK
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhUb1J1bjsKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlQYXJhbGxl
bFdvcmsgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9IG1f
dG9FeGVjdXRlSW5QYXJhbGxlbC5maXJzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gdHJ5TmV4dENvbnN0cmFpbnQgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBpY2tSZXN1bHQgPSBwaWNrTmV4dCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaWNrUmVzdWx0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KCpwaWNrUmVzdWx0KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbKnBpY2tSZXN1bHRd
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFy
YWxsZWxpc20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxs
eS5hcHBlbmQoKnBpY2tSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9ICpwaWNrUmVz
dWx0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtN
b2RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZWZlcmVuY2UgPT0gUGFyYWxsZWxXb3JrRmlyc3QpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcmFsbGVsV29yaygpIHx8
IHRyeU5leHRDb25zdHJhaW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJ5TmV4dENvbnN0cmFpbnQoKSB8fCB0cnlQYXJh
bGxlbFdvcmsoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbnVtQWN0aXZlVGhyZWFkcykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBbnkg
d2FpdGluZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1c3QgcnVubmluZyB0aGUgU2xvdFZpc2l0
b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSSB3b25kZXIgaWYgdGhhdCB3b3Vs
ZCBiZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9u
LndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzKys7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0W2lu
ZGV4VG9SdW5dOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRvUGFyYWxsZWxXb3JrTW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQu
ZG9QYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKHZpc2l0
b3IpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9QYXJhbGxl
bFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRl
SW5QYXJhbGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kaWRFeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwudGFrZUZpcnN0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0g
aW5kZXhUb1J1bjsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVj
dXRlSW5QYXJhbGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRl
SW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX251bUFjdGl2ZVRo
cmVhZHMtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX2RpZEV4
ZWN1dGVJblBhcmFsbGVsKQorICAgICAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0tPmZp
bmlzaFBhcmFsbGVsV29yayhtX3NldC5tX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSk7Cisg
ICAgICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwuY2xlYXIoKTsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4VG9SdW4gOiBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseSkKKyAgICAgICAgICAg
IGV4ZWN1dGUoKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dKTsKKyAgICAgICAgbV90b0V4ZWN1dGVT
ZXF1ZW50aWFsbHkuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
dG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOwogICAgIH0KICAgICAKLSAgICAv
LyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KLSAgICBib29sIGRyYWluKEJpdFZlY3Rv
ciYgdW5leGVjdXRlZCkKKyAgICB2b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKICAg
ICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgewotICAgICAgICAg
ICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsK
LSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBhdXRvIGl0
ZXIgPSB1bmV4ZWN1dGVkLmJlZ2luKCk7CisgICAgICAgIGF1dG8gZW5kID0gdW5leGVjdXRlZC5l
bmQoKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBleGVjdXRlKAorICAgICAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJzdCwKKyAgICAgICAg
ICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgICAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIHVuZXhlY3V0ZWQuY2xlYXJBbGwoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBkaWRFeGVj
dXRlKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRlZC5nZXQoaW5kZXgpOyB9
CisgICAgdm9pZCBjb252ZXJnZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3Jk
ZXIpCisgICAgeworICAgICAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChvcmRlci5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgaW5kZXggPSAwOwogCi0gICAg
dm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKKyAgICAgICAgLy8gV2Ugd2FudCB0byBleGVjdXRl
IHRoZSBmaXJzdCBjb25zdHJhaW50IHNlcXVlbnRpYWxseSBpZiB3ZSB0aGluayBpdCB3aWxsIHF1
aWNrbHkgZ2l2ZSB1cyBhCisgICAgICAgIC8vIHJlc3VsdC4gSWYgd2UgcmFuIGl0IGluIHBhcmFs
bGVsIHRvIG90aGVyIGNvbnN0cmFpbnRzLCB0aGVuIHdlIG1pZ2h0IGVuZCB1cCBoYXZpbmcgdG8g
d2FpdCBmb3IKKyAgICAgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3RyYWludHMgdG8gZmluaXNoLCB3
aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVyaW5nIGNvbnZlcmdlbmNlIGl0
J3MKKyAgICAgICAgLy8gZW1waXJpY2FsbHkgbW9zdCBvcHRpbWFsIHRvIHJldHVybiB0byBkcmFp
bmluZyBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29yay4gTW9zdAorICAgICAg
ICAvLyBjb25zdHJhaW50cyBkb24ndCBnZW5lcmF0ZSBhbnkgd29yayBtb3N0IG9mIHRoZSB0aW1l
LCBhbmQgd2hlbiB0aGV5IGRvIGdlbmVyYXRlIHdvcmssIHRoZXkgdGVuZAorICAgICAgICAvLyB0
byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmluZyBjeWNsZS4g
VGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisgICAgICAgIC8vIHdlIGdldCB0
aGUgaGVjayBvdXQgb2YgaGVyZSBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29y
ay4gSSB0aGluayB0aGF0IHBhcnQgb2Ygd2hhdAorICAgICAgICAvLyBtYWtlcyB0aGlzIG9wdGlt
YWwgaXMgdGhhdCB3ZSBhbHNvIG5ldmVyIGFib3J0IHJ1bm5pbmcgYSBjb25zdHJhaW50IGVhcmx5
LCBzbyB3aGVuIHdlIGRvIHJ1bgorICAgICAgICAvLyBvbmUsIGl0IGhhcyBhbiBvcHBvcnR1bml0
eSB0byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2libHkgY2FuLgorICAgICAgICAv
LworICAgICAgICAvLyBTaW1pbGFyIHJlYXNvbmluZyBhcHBsaWVzIHRvIGNvbnN0cmFpbnRzIHRo
YXQgdGVuZCB0byByZXR1cm4gQ29zbnRyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbAorICAgICAg
ICAvLyBmcm9tIGV4ZWN1dGUuIFRob3NlIGNvbnN0cmFpbnRzIHR5cGljYWxseSBoYXZlIGEgdmVy
eSBmYXN0LXJ1bm5pbmcgZXhlY3V0ZSBmdW5jdGlvbiwgd2hpY2ggdGhlbgorICAgICAgICAvLyBv
ZmZsb2FkcyBhbG1vc3QgYWxsIG9mIHRoZSB3b3JrIHRvIGEgcGFyYWxsZWwgd29ya2VyLiBJbiB0
aGF0IGNhc2UsIGl0IG1ha2VzIHNlbnNlIHRvIHJ1biB0aGUKKyAgICAgICAgLy8gZXhlY3V0ZSBm
dW5jdGlvbiBzZXF1ZW50aWFsbHkuCisgICAgICAgIGlmIChvcmRlcltpbmRleF0tPndvcmtFc3Rp
bWF0ZShtX3NldC5tX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAgICAgICAgICAgIHx8
IG9yZGVyW2luZGV4XS0+bGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpID09IENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgIGV4ZWN1dGUoKm9yZGVyW2luZGV4Kytd
KTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1w
dHkoKQorICAgICAgICAgICAgICAgICYmIChvcmRlci5pc0VtcHR5KCkgfHwgZGlkVmlzaXRTb21l
dGhpbmcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisgICAgICAg
ICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAgICAg
IGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+
PSBvcmRlci5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIG9yZGVyW2luZGV4Kytd
LT5pbmRleCgpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZXhlY3V0
ZShNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKICAgICB7Ci0gICAgICAgIG1fc2V0Lm1f
c2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcsIG1fdGlt
ZW91dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICAgICAgaWYgKG1fZXhl
Y3V0ZWQuZ2V0KGNvbnN0cmFpbnQuaW5kZXgoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBjb25zdHJh
aW50LmV4ZWN1dGUoCisgICAgICAgICAgICBtX3NldC5tX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0
b3IoKSk7CisgICAgICAgIGRpZEV4ZWN1dGUocGFyYWxsZWxpc20sIGNvbnN0cmFpbnQuaW5kZXgo
KSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKKyAgICB2b2lkIGRpZEV4ZWN1dGUoQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICAgICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbC5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVs
U2V0LnNldChpbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgTWFya2luZ0NvbnN0
cmFpbnRTZXQmIG1fc2V0OwotICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAgTW9ub3Rv
bmljVGltZSBtX3RpbWVvdXQ7CiAgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7Ci0gICAgYm9vbCBt
X2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKKyAgICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1f
dG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBCaXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVs
U2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWw7Cisg
ICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9j
ayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVt
QWN0aXZlVGhyZWFkcyB7IDAgfTsKKyAgICBWZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNp
dENvdW50ZXJzOwogfTsKIAotTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50
U2V0KCkKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldChIZWFwJiBo
ZWFwKQorICAgIDogbV9oZWFwKGhlYXApCiB7CiB9CiAKQEAgLTEwNywxOCArMjkxLDE5IEBAIHZv
aWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9
IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0
aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxp
c20gcGFyYWxsZWxpc20pCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0
cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShm
dW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVN
YXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9p
ZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAogICAgIDo6RnVuY3Rpb248ZG91YmxlKFNs
b3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSkKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5
LAorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQoc3Rk
OjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUp
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tX
b3JrRXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3Vu
aXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKSk7CiB9CiAKIHZvaWQg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTEzMSw5ICszMTYsOSBAQCB2b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgbV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWlu
dCkpOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2Uo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK2Jvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvciwgdGlt
ZW91dCk7CisgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3Ip
OwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTE0OCw5ICszMzMsOSBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50
U2V0Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdD
b25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVj
dXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEV4ZWN1dGlv
bkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAg
RXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0KCp0aGlzKTsKICAgICAKICAgICB1bnNp
Z25lZCBpdGVyYXRpb24gPSBtX2l0ZXJhdGlvbisrOwogICAgIApAQCAtMTU5LDE2ICszNDQsMTQg
QEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogCiAgICAgLy8gSWYg
dGhlcmUgYXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0IGFs
bCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhlbgogICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRob3Nl
IG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3Vu
ZXhlY3V0ZWRSb290cyk7CiAgICAgCiAgICAgLy8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBh
bnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQncyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25z
dHJhaW50cyBvdGhlcgogICAgIC8vIHRoYW4gcm9vdHMuCiAgICAgaWYgKGl0ZXJhdGlvbiA9PSAx
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0
LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKTsKICAgICAK
ICAgICAvLyBXZSB3YW50IHRvIGtlZXAgcHJlZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0cmFp
bnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50ZWQKICAgICAvLyBldmVuIGlu
IGEgc3RvcC10aGUtd29ybGQgR0MgLSB1bnRpbCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBUaGV5IGhh
dmUgYSB0ZW5kZW5jeSB0byBnbyB0b3RhbGx5CkBAIC0yMTUsMzMgKzM5OCwxNiBAQCBib29sIE1h
cmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgICAgICAgICByZXR1cm4gYS0+
dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgpOwogICAgICAgICB9KTsKICAgICAKLSAgICBm
b3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRlcmVkKSB7Ci0gICAgICAg
IHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChl
eGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOwotICAgICAgICAKLSAgICAgICAgLy8g
T25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gbGV0
IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQotICAgICAgICAvLyB3ZSBmaW5kIHdvcmsuCi0g
ICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25zdHJhaW50
cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCi0gICAgICAgIC8vIGJldHRlciBv
ciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKLSAgICAgICAgLy8gLSBJZiB0aGUg
dmlzaXRvciBpcyBlbXB0eSwga2VlcCBydW5uaW5nLgotICAgICAgICAvLyAtIElmIHRoZSB2aXNp
dG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgotICAgICAgICAvLyAtIEVsc2Ug
cnVuIHVudGlsIHRpbWVvdXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjY4MzIKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlz
aXRTb21ldGhpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgZXhl
Y3V0aW9uQ29udGV4dC5jb252ZXJnZShtX29yZGVyZWQpOwogICAgIAotICAgIHJldHVybiB0cnVl
OworICAgIC8vIFJldHVybiB0cnVlIGlmIHdlJ3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlm
IHdlIGRpZCBub3QgdmlzaXQgYW55dGhpbmcuCisgICAgcmV0dXJuICFleGVjdXRpb25Db250ZXh0
LmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4
ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCBkaWRWaXNpdFNvbWV0
aGluZyA9IGZhbHNlOwogICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAg
ICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9u
aWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9y
KTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldCB7CiBwdWJsaWM6Ci0g
ICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldChIZWFw
Jik7CiAgICAgfk1hcmtpbmdDb25zdHJhaW50U2V0KCk7CiAgICAgCiAgICAgdm9pZCBkaWRTdGFy
dE1hcmtpbmcoKTsKQEAgLTQxLDE1ICs0MSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAg
ICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0g
ICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsKTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImKT4sCiAgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9y
Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFy
YWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8
TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTYwLDkgKzYyLDcgQEAgcHVibGljOgogICAg
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBh
bmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0
aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4K
LSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKLSAgICAgICAgU2xvdFZpc2l0b3ImLAotICAg
ICAgICBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsK
KyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8v
IFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KICAg
ICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKQEAgLTcxLDEwICs3MSwxMSBAQCBwcml2
YXRlOgogICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1
dGlvbkNvbnRleHQ7CiAgICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RW
aXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJn
ZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9y
JiwgTW9ub3RvbmljVGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1
dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRv
ciYsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlk
VmlzaXRTb21ldGhpbmcpOwogICAgIAorICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3Ig
bV91bmV4ZWN1dGVkUm9vdHM7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7
CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNp
b24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5o
CShub25leGlzdGVudCkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
Y2xhc3MgT3BhcXVlUm9vdFNldCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BhcXVlUm9v
dFNldCk7Ci1wdWJsaWM6Ci0gICAgT3BhcXVlUm9vdFNldCgpCi0gICAgICAgIDogbV9sYXN0UXVl
cmllZFJvb3QobnVsbHB0cikKLSAgICAgICAgLCBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290KGZh
bHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRhaW5zKHZvaWQqIHJvb3QpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAocm9vdCAhPSBtX2xhc3RRdWVyaWVkUm9vdCkgewotICAgICAg
ICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSByb290OwotICAgICAgICAgICAgbV9jb250YWluc0xh
c3RRdWVyaWVkUm9vdCA9IG1fcm9vdHMuY29udGFpbnMocm9vdCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci0gICAgfQotCi0gICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmlzRW1wdHkoKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fcm9vdHMuY2xlYXIo
KTsKLSAgICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSBudWxscHRyOwotICAgICAgICBtX2NvbnRh
aW5zTGFzdFF1ZXJpZWRSb290ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBhZGQodm9pZCog
cm9vdCkKLSAgICB7Ci0gICAgICAgIGlmIChyb290ID09IG1fbGFzdFF1ZXJpZWRSb290KQotICAg
ICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IHRydWU7Ci0gICAgICAgIHJldHVy
biBtX3Jvb3RzLmFkZChyb290KS5pc05ld0VudHJ5OwotICAgIH0KLQotICAgIGludCBzaXplKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLnNpemUoKTsKLSAgICB9Ci0KLSAg
ICBIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fcm9vdHMuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQq
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jv
b3RzLmVuZCgpOwotICAgIH0KLQotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8dm9pZCo+IG1fcm9v
dHM7Ci0gICAgbXV0YWJsZSB2b2lkKiBtX2xhc3RRdWVyaWVkUm9vdDsKLSAgICBtdXRhYmxlIGJv
b2wgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VB
ZGFwdGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5hbWUg
SW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorY2xhc3MgUGFyYWxsZWxTb3VyY2VBZGFw
dGVyIDogcHVibGljIFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+IHsKK3B1YmxpYzoKKyAgICBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNv
dXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53cmFwRnVuYykKKyAgICAgICAgOiBtX291dGVyU291
cmNlKG91dGVyU291cmNlKQorICAgICAgICAsIG1fdW53cmFwRnVuYyh1bndyYXBGdW5jKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgSW5uZXJUeXBlIHJ1bigpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIGlmIChtX2lubmVyU291cmNlKSB7CisgICAgICAgICAgICAgICAgaWYgKElubmVyVHlw
ZSByZXN1bHQgPSBtX2lubmVyU291cmNlLT5ydW4oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBtX2lubmVyU291cmNlID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9IG1f
dW53cmFwRnVuYyhtX291dGVyU291cmNlLT5ydW4oKSk7CisgICAgICAgIH0gd2hpbGUgKG1faW5u
ZXJTb3VyY2UpOworICAgICAgICByZXR1cm4gSW5uZXJUeXBlKCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gbV9vdXRlclNvdXJjZTsKKyAg
ICBSZWZQdHI8U2hhcmVkVGFzazxJbm5lclR5cGUoKT4+IG1faW5uZXJTb3VyY2U7CisgICAgVW53
cmFwRnVuYyBtX3Vud3JhcEZ1bmM7CisgICAgTG9jayBtX2xvY2s7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVu
Yz4KK1JlZjxQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBlLCBJbm5lclR5cGUsIFVud3Jh
cEZ1bmM+PiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0
ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53cmFwRnVuYykKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBl
LCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+KG91dGVyU291cmNlLCB1bndyYXBGdW5jKSk7Cit9Cisg
ICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxs
ZWxpc20pCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSks
IFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKQorICAgICwgbV9leGVjdXRl
RnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQoreworfQorCitTaW1wbGVNYXJraW5n
Q29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+
IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9s
YXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQorICAgIDogTWFya2lu
Z0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xh
dGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSkKKyAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3Zl
KHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQoreworfQorCitTaW1wbGVNYXJraW5nQ29uc3Ry
YWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKworZG91YmxlIFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbih2aXNpdG9yKTsKK30K
KworQ29uc3RyYWludFBhcmFsbGVsaXNtIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNp
dG9yKTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IDogcHVi
bGljIE1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBT
aW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAor
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCisg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKKyAgICAKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICBkb3VibGUg
cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlOworICAgIAor
cHJpdmF0ZToKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKKworICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4
ZWN1dGVGdW5jdGlvbjsKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24g
MjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05OCw5ICs5OCw3IEBAIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3Io
KQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogewotICAgIGlmIChoZWFw
KCktPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgaGF2ZSBt
ZXJnZWQgYnkgbm93LgotICAgIGVsc2UKKyAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUo
KSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pCiAgICAgICAgIHJlc2V0KCk7CiAKICAgICBpZiAo
SGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSB2bSgpLmhlYXBQcm9maWxlcigpKQpAQCAtMTEx
LDcgKzEwOSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQg
U2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290
cy5zaXplKCkpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAw
OwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7CkBAIC0yNzcsNyArMjc0LDcg
QEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZQogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGFpbmVyVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwpCiB7
Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NF
UlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7
CiAgICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKQEAgLTM0Niw3ICszNDMsNyBAQCBw
cml2YXRlOgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4o
Y29uc3QgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJl
bnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAKICAg
ICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwogICAg
IApAQCAtNDM1LDcgKzQzMiw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxs
ZWwoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikKIHsKLSAgICBtX211dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFwLmNvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3Rv
cHBlZE11dGF0b3IpOworICAgIG1fbXV0YXRvcklzU3RvcHBlZCA9IChtX2hlYXAud29ybGRJc1N0
b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7CiB9CiAKIHZvaWQgU2xv
dFZpc2l0b3I6OnVwZGF0ZU11dGF0b3JJc1N0b3BwZWQoKQpAQCAtNDUyLDcgKzQ0OSw3IEBAIGJv
b2wgU2xvdFZpc2l0b3I6Omhhc0Fja25vd2xlZGdlZFRoYXRUaGUKIAogYm9vbCBTbG90VmlzaXRv
cjo6bXV0YXRvcklzU3RvcHBlZElzVXBUb0RhdGUoKSBjb25zdAogewotICAgIHJldHVybiBtX211
dGF0b3JJc1N0b3BwZWQgPT0gKG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICByZXR1cm4g
bV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAud29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0
aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om9wdGltaXpl
Rm9yU3RvcHBlZE11dGF0b3IoKQpAQCAtNDkwLDggKzQ4Nyw2IEBAIE5FVkVSX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjpkcmFpbihNb24KICAgICAgICAgbV9yaWdodFRvUnVuLnNhZmVwb2ludCgp
OwogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAgICAgfQotICAgIAotICAgIG1lcmdl
SWZOZWNlc3NhcnkoKTsKIH0KIAogc2l6ZV90IFNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50
T2ZEcmFpbmluZyhzaXplX3QgYnl0ZXNSZXF1ZXN0ZWQpCkBAIC01NTAsNyArNTQ1LDYgQEAgc2l6
ZV90IFNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcgogICAgIH0KIAogICAgIGRvbmF0
ZUFsbCgpOwotICAgIG1lcmdlSWZOZWNlc3NhcnkoKTsKIAogICAgIHJldHVybiBieXRlc1Zpc2l0
ZWQoKTsKIH0KQEAgLTU2MSwxNyArNTU1LDE2IEBAIGJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNo
VGVybWluYXRpb24oKQogICAgIHJldHVybiBkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcik7CiB9
CiAKLWJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RM
b2NrZXImKQorYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBBYnN0
cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIHJldHVybiBpc0VtcHR5KCkKLSAgICAgICAgJiYg
IW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICYmIG1faGVh
cC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCi0gICAgICAgICYmIG1faGVh
cC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1faGVh
cC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCisgICAgICAgICYmICFoYXNXb3JrKGxv
Y2tlcik7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6Omhhc1dvcmsoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImKQogewotICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCkKKyAgICByZXR1cm4gIWlzRW1wdHkoKQorICAgICAgICB8fCAhbV9oZWFwLm1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgfHwgIW1faGVhcC5tX3No
YXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKIH0KIApAQCAtNTgzLDEyICs1NzYsMTQg
QEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlcwogCiAgICAgYm9vbCBp
c0FjdGl2ZSA9IGZhbHNlOwogICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGJvbnVzVGFzazsKKyAgICAgICAgCiAgICAgICAg
IHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7
CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRl
eCk7CiAgICAgICAgICAgICBpZiAoaXNBY3RpdmUpCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1f
bnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgICAgIG1faGVhcC5tX251
bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycysrOwotCisgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4pIHsKICAgICAgICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1l
b3V0KSkKQEAgLTYyOSwyOCArNjI0LDU3IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXMKIAogICAgICAgICAgICAgICAgIGF1dG8gaXNSZWFkeSA9IFsmXSAoKSAtPiBi
b29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsobG9ja2VyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzawogICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAg
ICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRp
dGlvblZhcmlhYmxlLndhaXRVbnRpbChtX2hlYXAubV9tYXJraW5nTXV0ZXgsIHRpbWVvdXQsIGlz
UmVhZHkpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaGFzV29yayhs
b2NrZXIpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sp
CisgICAgICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG1faGVhcC5tX2JvbnVzVmlzaXRvclRh
c2s7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX3BhcmFs
bGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWRE
cmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yRWFjaE1h
cmtTdGFjaygKLSAgICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4g
SXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suc3RlYWxTb21lQ2Vs
bHNGcm9tKAotICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNr
KHN0YWNrKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGlu
Z1BhcmFsbGVsTWFya2Vycyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIWJvbnVzVGFzayAmJiBpc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBm
b3JFYWNoTWFya1N0YWNrKAorICAgICAgICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5
JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Jy
ZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1faGVhcC5tX251bWJl
ck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJP
ZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
ZHJhaW4odGltZW91dCk7CisgICAgICAgIGlmIChib251c1Rhc2spIHsKKyAgICAgICAgICAgIGJv
bnVzVGFzay0+cnVuKCp0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6
IElkZWFsbHksIHdlIHdvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMuIEhvd2V2ZXIsIHRoZSBwYXJh
bGxlbCBtYXJraW5nIGFsZ29yaXRobSB3aWxsCisgICAgICAgICAgICAvLyBnZXQgY29uZnVzZWQg
aWYgd2UgaW5pdGlhdGUgaXQgd2l0aCB0aGUgaGVscGVyIHZpc2l0b3JzIGhhdmluZyBhbnl0aGlu
ZyBpbiB0aGVpciBzdGFja3MuCisgICAgICAgICAgICAvLyBBbHNvLCB0aGlzIHByb3RlY3RzIGJ1
Z3MgdGhhdCBpbnZvbHZlIHJhY2VzIGJldHdlZW4gdmlzaXRDaGlsZHJlbiBhbmQgb25lIG9mIHRo
ZQorICAgICAgICAgICAgLy8gY29uc3RyYWludHMuCisgICAgICAgICAgICAvL2RvbmF0ZUFsbCgp
OworCisgICAgICAgICAgICAvLyBUaGUgbWFpbiB0aHJlYWQgY291bGQgc3RpbGwgYmUgcnVubmlu
ZywgYW5kIG1heSBydW4gZm9yIGEgd2hpbGUuIFVubGVzcyB3ZSBjbGVhciB0aGUgdGFzaworICAg
ICAgICAgICAgLy8gb3Vyc2VsdmVzLCB3ZSB3aWxsIGtlZXAgbG9vcGluZyBhcm91bmQgdHJ5aW5n
IHRvIHJ1biB0aGUgdGFzay4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgICAgICAgICAgICAg
aWYgKG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPT0gYm9udXNUYXNrKQorICAgICAgICAgICAg
ICAgICAgICBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICBib251c1Rhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc0VtcHR5KCkpOworICAgICAg
ICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlzQWN0
aXZlID0gdHJ1ZTsKICAgICB9CiB9CkBAIC02NzAsMTUgKzY5NCwxOSBAQCBTbG90VmlzaXRvcjo6
U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzKCkgPT0gMQogICAgICAgICB8fCAobV9oZWFwLm1fd29ybGRTdGF0ZS5sb2FkKCkgJiBI
ZWFwOjptdXRhdG9yV2FpdGluZ0JpdCkKICAgICAgICAgfHwgIW1faGVhcC5oYXNIZWFwQWNjZXNz
KCkKLSAgICAgICAgfHwgbV9oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9w
cGVkKCkpIHsKKyAgICAgICAgfHwgbV9oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAg
Ly8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gb3ZlciBkcmFpbkluUGFyYWxsZWwoKSB3aGVuIHdl
IGhhdmUgYSBjb25jdXJyZW50IG11dGF0b3IgYnV0CiAgICAgICAgIC8vIG90aGVyd2lzZSBpdCBp
cyBub3QgcHJvZml0YWJsZS4KICAgICAgICAgcmV0dXJuIGRyYWluSW5QYXJhbGxlbCh0aW1lb3V0
KTsKICAgICB9CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgp
OwotICAgIGRvbmF0ZUFsbChsb2NrZXIpOwotICAgIAorICAgIGRvbmF0ZUFsbChob2xkTG9jayht
X2hlYXAubV9tYXJraW5nTXV0ZXgpKTsKKyAgICByZXR1cm4gd2FpdEZvclRlcm1pbmF0aW9uKHRp
bWVvdXQpOworfQorCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6
OndhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgIGZvciAoOzspIHsK
ICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAgICByZXR1cm4gU2hh
cmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwpAQCAtNzExLDYxICs3MzksNiBAQCB2b2lkIFNsb3RW
aXNpdG9yOjpkb25hdGVBbGwoY29uc3QgQWJzdHJhCiAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRp
dGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFx
dWVSb290KHZvaWQqIHJvb3QpCi17Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKSB7Ci0gICAgICAg
IC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4KLSAgICAgICAgbV9oZWFw
Lm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8v
IFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2
ZXJ5IG9uY2UgaW4KLSAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBz
ZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdlLgotICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFi
bGUoKTsKLSAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLX0KLQotYm9vbCBTbG90VmlzaXRv
cjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3QpIGNvbnN0Ci17Ci0gICAgaWYgKCFyb290
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxl
bE1vZGUpOwotICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsK
LX0KLQotVHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZv
aWQqIHJvb3QpIGNvbnN0Ci17Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gRmFsc2VU
cmlTdGF0ZTsKLSAgICAKLSAgICBpZiAobV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKLSAg
ICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4KTsKLSAgICBpZiAobV9oZWFwLm1fb3BhcXVlUm9v
dHMuY29udGFpbnMocm9vdCkpCi0gICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgcmV0
dXJuIE1peGVkVHJpU3RhdGU7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlSWZOZWNlc3Nh
cnkoKQotewotICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VP
cGFxdWVSb290c0lmUHJvZml0YWJsZSgpCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihtX29wYXF1ZVJvb3RzLnNpemUoKSkgPCBPcHRpb25zOjpvcGFxdWVSb290TWVyZ2VUaHJlc2hv
bGQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKLX0KLSAgICAK
IHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCiB7CiAgICAgaWYgKCFtX2lzSW5QYXJhbGxlbE1v
ZGUpIHsKQEAgLTc4NSwxNiArNzU4LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJh
aW4oTW9ub3RvbgogICAgIGRyYWluKHRpbWVvdXQpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpt
ZXJnZU9wYXF1ZVJvb3RzKCkKLXsKLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgICAgICBmb3IgKGF1dG8qIHJv
b3QgOiBtX29wYXF1ZVJvb3RzKQotICAgICAgICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRk
KHJvb3QpOwotICAgIH0KLSAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgU2xv
dFZpc2l0b3I6OmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ciogd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikKIHsKICAgICBtX2hlYXAubV93ZWFrUmVmZXJlbmNl
SGFydmVzdGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRl
ICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJP
cGFxdWVSb290U2V0LmgiCiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8d3Rm
L01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC05NSwx
MCArOTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1Zh
bHVlKTsKICAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopOwogCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKKyAgICBib29sIGFk
ZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4K
ICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lk
KikgY29uc3Q7Ci0gICAgVHJpU3RhdGUgY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCop
IGNvbnN0OworICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKIAogICAg
IGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1f
bXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQogCkBAIC0xMjEsNiArMTE5LDggQEAgcHVibGljOgog
CiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsKE1vbm90b25pY1RpbWUgdGlt
ZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogICAgIFNoYXJlZERyYWluUmVzdWx0
IGRyYWluSW5QYXJhbGxlbFBhc3NpdmVseShNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9u
aWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAgICBTaGFyZWREcmFpblJlc3VsdCB3YWl0Rm9y
VGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSk7CiAKICAgICAvLyBBdHRlbXB0cyB0byBwZXJmb3JtIGFuIGluY3JlbWVudCBvZiBkcmFp
bmluZyB0aGF0IGludm9sdmVzIG9ubHkgd2Fsa2luZyBgYnl0ZXNgIHdvcnRoIG9mIGRhdGEuIFRo
aXMKICAgICAvLyBpcyBsaWtlbHkgdG8gYWNjaWRlbnRhbGx5IHdhbGsgbW9yZSBvciBsZXNzIHRo
YW4gdGhhdC4gSXQgd2lsbCB1c3VhbGx5IG1hcmsgbW9yZSB0aGFuIGJ5dGVzLiBJdCBtYXkKQEAg
LTEyOCw4ICsxMjgsNiBAQCBwdWJsaWM6CiAgICAgLy8gcmFyZSBjYXNlcyBoYXBwZW4gdGVtcG9y
YXJpbHkgZXZlbiBpZiB3ZSdyZSBub3QgcmVhY2hpbmcgdGVybWluYXRpb24pLgogICAgIHNpemVf
dCBwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyhzaXplX3QgYnl0ZXMpOwogICAgIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VJZk5lY2Vzc2FyeSgpOwotCiAgICAgLy8gVGhpcyBp
bmZvcm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtl
ZXBpbmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ug
d2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCiAgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0
IHZvaWQqIGJhc2UpOwpAQCAtMTk0LDEwICsxOTIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKEhlYXBDZWxsKik7CiAgICAgCi0gICAgdm9pZCBtZXJn
ZU9wYXF1ZVJvb3RzKCk7Ci0KLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUo
KTsKLQogICAgIHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKICAgICAKICAgICB2
b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKQEAgLTIxNSw3ICsyMDksNiBAQCBwcml2YXRlOgog
CiAgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKICAgICBNYXJrU3RhY2tBcnJh
eSBtX211dGF0b3JTdGFjazsKLSAgICBPcGFxdWVSb290U2V0IG1fb3BhcXVlUm9vdHM7IC8vIEhh
bmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNv
bGxlY3Rvci4KICAgICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBV
c2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4KICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0
ZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklu
bGluZXMuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsMjMgQEAg
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYQogICAgICAgICBhcHBlbmRI
aWRkZW4oYmFycmllcnNbaV0pOwogfQogCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6YWRkT3Bh
cXVlUm9vdCh2b2lkKiBwdHIpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmFkZChwdHIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgbV92aXNpdENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
bGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcHRyKSBjb25z
dAoreworICAgIHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsKK30K
KwogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXpl
X3Qgc2l6ZSkKIHsKICAgICBpZiAobV9pc0ZpcnN0VmlzaXQpIHsKQEAgLTE1OSwxMiArMTc2LDEy
IEBAIGlubGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0CiAKIGlubGluZSBWTSYg
U2xvdFZpc2l0b3I6OnZtKCkKIHsKLSAgICByZXR1cm4gKm1faGVhcC5tX3ZtOworICAgIHJldHVy
biAqbV9oZWFwLnZtKCk7CiB9CiAKIGlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gKm1faGVhcC5tX3ZtOworICAgIHJldHVybiAqbV9oZWFwLnZt
KCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIlBhcmFs
bGVsU291cmNlQWRhcHRlci5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIK
ICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIApAQCAtMTYwLDYgKzE2MSw0MyBAQCBNYXJr
ZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IFN1YnNwYWNlOjpw
YXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFy
ZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxs
b2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEFs
bG9jYXRvciogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiByZXN1
bHQgPSBtX2FsbG9jYXRvcjsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAg
ICAgbV9hbGxvY2F0b3IgPSByZXN1bHQtPm5leHRBbGxvY2F0b3JJblN1YnNwYWNlKCk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6
CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgICAgIExvY2sgbV9s
b2NrOworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKG1fZmlyc3RB
bGxvY2F0b3IpKTsKK30KKworUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSoo
KT4+IFN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKQoreworICAg
IHJldHVybiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8TWFya2VkQWxsb2NhdG9yKiwgTWFy
a2VkQmxvY2s6OkhhbmRsZSo+KAorICAgICAgICBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpLAor
ICAgICAgICBbXSAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIC0+IFJlZlB0cjxTaGFyZWRU
YXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiB7CisgICAgICAgICAgICBpZiAoIWFsbG9jYXRv
cikKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBh
bGxvY2F0b3ItPnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAgICAgICB9KTsKK30K
KwogTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2xvdyhzaXplX3Qgc2l6
ZSkKIHsKICAgICBzaXplX3QgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChz
aXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24g
MjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODEsMTcgKzgxLDI0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5jJik7CiAgICAgCisg
ICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gcGFyYWxsZWxBbGxvY2F0
b3JTb3VyY2UoKTsKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaE1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2soY29uc3QgRnVu
YyYpOwogICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtl
ZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKTsK
KyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExhcmdl
QWxsb2NhdGlvbihjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0
IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5s
aW5lcy5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNTMgQEAgdm9pZCBT
dWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6
OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGNs
YXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5j
KQorICAgICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQorICAgICAgICAgICAgLCBtX2Js
b2NrU291cmNlKHN1YnNwYWNlLnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpKQor
ICAgICAgICAgICAgLCBtX2Z1bmMoZnVuYykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAgICAg
ICAgeworICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1f
YmxvY2tTb3VyY2UtPnJ1bigpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFy
a2VkQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENl
bGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZnVuYyh2aXNpdG9yLCBjZWxsLCBraW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9zdWJzcGFj
ZS5mb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKAorICAgICAgICAgICAgICAgIFsmXSAoTGFyZ2VBbGxv
Y2F0aW9uKiBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9u
LT5pc01hcmtlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGFs
bG9jYXRpb24tPmNlbGwoKSwgbV9zdWJzcGFjZS5tX2F0dHJpYnV0ZXMuY2VsbEtpbmQpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIFN1YnNwYWNlJiBtX3N1YnNwYWNlOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJr
ZWRCbG9jazo6SGFuZGxlKigpPj4gbV9ibG9ja1NvdXJjZTsKKyAgICAgICAgRnVuYyBtX2Z1bmM7
CisgICAgICAgIExvY2sgbV9sb2NrOworICAgICAgICBib29sIG1fbmVlZFRvVmlzaXRMYXJnZUFs
bG9jYXRpb25zIHsgdHJ1ZSB9OworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUYXNrKCp0aGlzLCBmdW5jKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiB2b2lk
IFN1YnNwYWNlOjpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3JF
YWNoTWFya2VkQmxvY2soCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENv
dW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENv
dW50ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNp
dENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgVmlzaXRDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBWaXNpdENvdW50ZXIoKSB7
IH0KKyAgICAKKyAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAg
IDogbV92aXNpdG9yKCZ2aXNpdG9yKQorICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlz
aXRvci52aXNpdENvdW50KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRD
b3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92aXNpdG9yLT52aXNpdENvdW50
KCkgLSBtX2luaXRpYWxWaXNpdENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU2xv
dFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9pbml0aWFsVmlz
aXRDb3VudCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1MTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFZpc2l0aW5nVGltZW91dCB7Ci1w
dWJsaWM6Ci0gICAgVmlzaXRpbmdUaW1lb3V0KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZp
c2l0aW5nVGltZW91dChTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCBkaWRWaXNpdFNvbWV0aGlu
ZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fZGlkVmlzaXRTb21ldGhpbmco
ZGlkVmlzaXRTb21ldGhpbmcpCi0gICAgICAgICwgbV92aXNpdENvdW50QmVmb3JlKHZpc2l0b3Iu
dmlzaXRDb3VudCgpKQotICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgc2l6ZV90IHZpc2l0Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdENvdW50KCkgLSBtX3Zpc2l0Q291
bnRCZWZvcmU7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyhTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRo
aW5nIHx8IHZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxk
VGltZU91dChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBkaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0g
ICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxz
ZSB9OwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnRCZWZvcmUgeyAwIH07Ci0gICAgTW9ub3Rvbmlj
VGltZSBtX3RpbWVvdXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTEsNyArMTExLDcgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFp
bgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vh
a0ltcGwtPmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZENvbmN1cnJl
bnRseShtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChjb250
YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29u
c3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9y
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwMSwxNCArMTEwMSwxNCBAQCBib29sIFN0cnVj
dHVyZTo6aXNDaGVhcER1cmluZ0dDKCkKICAgICAvLyBoYXMgYW55IGxhcmdlIHByb3BlcnR5IG5h
bWVzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcz
MzQKICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJv
dG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9i
amVjdCB8fCBIZWFwOjppc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAgICYm
IChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNN
YXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNDaGVhcER1cmlu
Z0dDKCkpCi0gICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKTsK
KyAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKHRoaXMpOwogICAgIAogICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEY1
MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8q
IFN0cmluZ01hbGxvYy5jcHAgKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBH
bG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsg
fTsKKwkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4
MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBG
NDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4
RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi87IH07CiAJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5
RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjVCRjE3NDFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovOyB9
OwogCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMkQxREZD
QkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4MSw2ICsx
ODIsOCBAQAogCQkwRjMwQkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dp
bmdIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNo
U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBCQThGMUU3ODcwOEUwMDJD
QTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMb2dnaW5nSGFzaFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMg
LyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29uY3VycmVudFB0ckhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzMURENzAxRjEzMDhCQzAwNzJFQjRBIC8qIExvY2tBbGdvcml0aG1JbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExvY2tBbGdvcml0aG1JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQwMDNDRkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc4Nyw2ICs3OTAsOCBAQAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUxQTgyNUEwMDQxMjNGRiAvKiBDb21w
aWxlci5oICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlBMkJCQyAvKiBDb21wbGV0aW9uSGFu
ZGxlci5oICovLAorCQkJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAgKi8sCisJCQkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmggKi8sCiAJCQkJMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRp
dGlvbi5oICovLAogCQkJCUUzOEM0MTI2MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCAq
LywKIAkJCQlFMzhDNDEyNzFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5oICovLApAQCAtMTQx
Myw2ICsxNDE4LDcgQEAKIAkJCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xv
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyQjFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVy
c2lzdGVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyQzFGM0Q0ODYwMDBD
NzQ5NTAgLyogUGVyc2lzdGVudERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENC
NUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxRjE3NTJEMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RW5jb2Rlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcgLyogUHJpbnRT
dHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8q
IFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyMjUx
NzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Niwx
MSArMzQ2LDE2IEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVwZW5kZW5jeSgKICAg
ICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHNpemVvZihUKSA9PSA4Pjo6dHlwZSogPSBudWxscHRyPgordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CiBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewog
ICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDY0X3QgY29weSA9IGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4odmFsdWUpOworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDMyX3QgY29weTsK
KyAgICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5ID0gMDsKKyAgICB1LnZhbHVl
ID0gdmFsdWU7CiAjaWYgQ1BVKEFSTTY0KQogICAgIC8vIENyZWF0ZSBhIG1hZ2ljYWwgemVybyB2
YWx1ZSB0aHJvdWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRpb24KICAgICAvLyBp
c24ndCB2aXNpYmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVzYWJsZSBh
cyBhbiBvZmZzZXQgaW4KQEAgLTM2Myw4MCArMzY4LDIwIEBAIEFMV0FZU19JTkxJTkUgRGVwZW5k
ZW5jeSBkZXBlbmRlbmN5KFQgdmEKICAgICAvLyBvciBhbiBhY3F1aXJlIGxvYWQuCiAgICAgYXNt
KCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgogICAgICAgICA6IFtkZXBlbmRl
bmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAg
ICA6IFtpbl0gInIiKHUuY29weSkpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBhc20oImVvciAlW2Rl
cGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVw
ZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIo
dS5jb3B5KSk7CiAjZWxzZQogICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZvciB0aGlz
IGFyY2hpdGVjdHVyZS4KICAgICBsb2FkTG9hZEZlbmNlKCk7CiAgICAgZGVwZW5kZW5jeSA9IDA7
Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOworICAgIFVOVVNFRF9QQVJBTSh1LmNvcHkpOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGNvZGUgaXMg
YWxtb3N0IGlkZW50aWNhbCB0byB0aGUgb3RoZXIgZGVwZW5kZW5jeSgpIG92ZXJsb2FkLgotLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwNQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA0Pjo6dHlw
ZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1
ZSkKLXsKLSAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQzMl90IGNvcHkgPSBiaXR3
aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgYXNtKCJlb3Ig
JXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAi
PXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2VsaWYgQ1BVKEFS
TSkKLSAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCi0gICAgICAgIDog
W2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7
Ci0jZWxzZQotICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBV
TlVTRURfUEFSQU0oY29weSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVwZW5kZW5jeTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9
PSAyPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJf
dD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHNpemVvZihUKSA9PSAxPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBE
ZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShz
dGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXN0cnVjdCBEZXBlbmRlbmN5V2l0aCB7Ci1wdWJsaWM6Ci0gICAgRGVwZW5kZW5jeVdpdGgoKQot
ICAgICAgICA6IGRlcGVuZGVuY3kobnVsbERlcGVuZGVuY3koKSkKLSAgICAgICAgLCB2YWx1ZSgp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVu
ZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotICAgICAgICA6IGRlcGVuZGVuY3koZGVwZW5kZW5jeSkK
LSAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVu
Y3kgZGVwZW5kZW5jeTsKLSAgICBUIHZhbHVlOwotfTsKLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1pbmxpbmUgRGVwZW5kZW5jeVdpdGg8VD4gZGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGVwZW5kZW5jeVdpdGg8
VD4oZGVwZW5kZW5jeSwgdmFsdWUpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5l
IFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewpAQCAtNDY5
LDEwICs0MTQsOCBAQCBBTFdBWVNfSU5MSU5FIFQmIGVuc3VyZVBvaW50ZXIoQXRvbWljPFQqCiAK
IHVzaW5nIFdURjo6QXRvbWljOwogdXNpbmcgV1RGOjpEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpE
ZXBlbmRlbmN5V2l0aDsKIHVzaW5nIFdURjo6Y29uc3VtZTsKIHVzaW5nIFdURjo6ZGVwZW5kZW5j
eTsKLXVzaW5nIFdURjo6ZGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmVuc3VyZVBvaW50ZXI7
CiB1c2luZyBXVEY6Om51bGxEZXBlbmRlbmN5OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRW
ZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNp
b24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwOCw2ICszMDgsMTMgQEAgcHVibGljOiAKICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgICAgfQogCisgICAgICAgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7
CisgICAgICAgICAgICBpdGVyYXRvciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgICAgICsrKCp0
aGlzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKwogICAgICAgICBi
b29sIGlzQXRFbmQoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbmRl
eCA+PSBtX2JpdFZlY3Rvci0+c2l6ZSgpOwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xOCw2ICsxOCw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIENsb2NrVHlwZS5oCiAg
ICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKKyAgICBDb25jdXJyZW50UHRy
SGFzaFNldC5oCiAgICAgQ29uZGl0aW9uLmgKICAgICBDcm9zc1RocmVhZENvcGllci5oCiAgICAg
Q3Jvc3NUaHJlYWRUYXNrLmgKQEAgLTIxNiw2ICsyMTcsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAg
ICBDUFVUaW1lLmNwcAogICAgIENsb2NrVHlwZS5jcHAKICAgICBDb21waWxhdGlvblRocmVhZC5j
cHAKKyAgICBDb25jdXJyZW50UHRySGFzaFNldC5jcHAKICAgICBDcm9zc1RocmVhZENvcGllci5j
cHAKICAgICBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcAogICAgIENyeXB0b2dyYXBoaWNhbGx5
UmFuZG9tTnVtYmVyLmNwcApJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNvbmN1cnJlbnRQdHJIYXNoU2V0LmgiCisKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworQ29uY3VycmVudFB0ckhhc2hTZXQ6OkNvbmN1cnJlbnRQdHJI
YXNoU2V0KCkKK3sKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0NvbmN1cnJlbnRQdHJIYXNoU2V0
Ojp+Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNo
U2V0OjpkZWxldGVPbGRUYWJsZXMoKQoreworICAgIC8vIFRoaXMgaXMganVzdCBpbiBjYXNlLiBJ
dCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRvIGNhbGwgYWRkKCkuIEJ1
dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBpZiB3ZSBkaWQgbWFr
ZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOyAKKyAg
ICAKKyAgICBtX2FsbFRhYmxlcy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChzdGQ6
OnVuaXF1ZV9wdHI8VGFibGU+JiB0YWJsZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
dGFibGUuZ2V0KCkgIT0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB9KTsKK30KKwor
dm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6Y2xlYXIoKQoreworICAgIC8vIFRoaXMgaXMganVz
dCBpbiBjYXNlLiBJdCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRvIGNh
bGwgYWRkKCkuIEJ1dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBp
ZiB3ZSBkaWQgbWFrZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOyAKKyAgICAKKyAgICBtX2FsbFRhYmxlcy5jbGVhcigpOworICAgIGluaXRpYWxpemUo
KTsKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6aW5pdGlhbGl6ZSgpCit7CisgICAg
Y29uc3RleHByIHVuc2lnbmVkIGluaXRpYWxTaXplID0gMzI7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFRhYmxlPiB0YWJsZSA9IFRhYmxlOjpjcmVhdGUoaW5pdGlhbFNpemUpOworICAgIG1fdGFibGUu
c3RvcmVSZWxheGVkKHRhYmxlLmdldCgpKTsKKyAgICBtX2FsbFRhYmxlcy5hcHBlbmQoV1RGTW92
ZSh0YWJsZSkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRTbG93KFRhYmxl
KiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgaW5k
ZXgsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAodGFibGUtPmxvYWQuZXhjaGFuZ2VBZGQoMSkgPj0g
dGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuIHJlc2l6ZUFuZEFkZChwdHIpOworICAg
IAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdm9pZCogb2xkRW50cnkgPSB0YWJsZS0+YXJyYXlb
aW5kZXhdLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhudWxscHRyLCBwdHIpOworICAgICAgICBpZiAo
IW9sZEVudHJ5KSB7CisgICAgICAgICAgICBpZiAobV90YWJsZS5sb2FkKCkgIT0gdGFibGUpIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSBhZGRlZCBhbiBlbnRyeSB0byBhbiBvbGQgdGFibGUhIFdl
IG5lZWQgdG8gcmVleGVjdXRlIHRoZSBhZGQgb24gdGhlIG5ldyB0YWJsZS4KKyAgICAgICAgICAg
ICAgICByZXR1cm4gYWRkKHB0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2xkRW50cnkgPT0gcHRyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgfQorfQorCit2
b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVJZk5lY2Vzc2FyeSgpCit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUu
bG9hZFJlbGF4ZWQoKTsKKyAgICBpZiAodGFibGUtPmxvYWQubG9hZFJlbGF4ZWQoKSA8IHRhYmxl
LT5tYXhMb2FkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
VGFibGU+IG5ld1RhYmxlID0gVGFibGU6OmNyZWF0ZSh0YWJsZS0+c2l6ZSAqIDIpOworICAgIHVu
c2lnbmVkIG1hc2sgPSBuZXdUYWJsZS0+bWFzazsKKyAgICB1bnNpZ25lZCBsb2FkID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUtPnNpemU7ICsraSkgeworICAgICAgICB2
b2lkKiBwdHIgPSB0YWJsZS0+YXJyYXlbaV0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgaWYgKCFw
dHIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHN0
YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0
YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIEF0b21pYzx2b2lkKj4m
IGVudHJ5UmVmID0gbmV3VGFibGUtPmFycmF5W2luZGV4XTsKKyAgICAgICAgICAgIHZvaWQqIGVu
dHJ5ID0gZW50cnlSZWYubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50cnkpIHsK
KyAgICAgICAgICAgICAgICBlbnRyeVJlZi5zdG9yZVJlbGF4ZWQocHRyKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVu
dHJ5ICE9IHB0cik7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBsb2FkKys7CisgICAgfQorICAgIAorICAgIG5ld1RhYmxlLT5s
b2FkLnN0b3JlUmVsYXhlZChsb2FkKTsKKyAgICAKKyAgICBtX3RhYmxlLnN0b3JlKG5ld1RhYmxl
LmdldCgpKTsKKyAgICBtX2FsbFRhYmxlcy5hcHBlbmQoV1RGTW92ZShuZXdUYWJsZSkpOworfQor
Citib29sIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVBbmRBZGQodm9pZCogcHRyKQorewor
ICAgIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGFkZChwdHIpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlPiBDb25jdXJyZW50UHRySGFz
aFNldDo6VGFibGU6OmNyZWF0ZSh1bnNpZ25lZCBzaXplKQoreworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IHJlc3VsdChuZXcgKGZhc3RNYWxsb2MoT0JK
RUNUX09GRlNFVE9GKFRhYmxlLCBhcnJheSkgKyBzaXplb2YoQXRvbWljPHZvaWQqPikgKiBzaXpl
KSkgVGFibGUoKSk7CisgICAgcmVzdWx0LT5zaXplID0gc2l6ZTsKKyAgICByZXN1bHQtPm1hc2sg
PSBzaXplIC0gMTsKKyAgICByZXN1bHQtPmxvYWQuc3RvcmVSZWxheGVkKDApOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJlc3VsdC0+YXJyYXlbaV0u
c3RvcmVSZWxheGVkKG51bGxwdHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhp
cyBpcyBhIGNvbmN1cnJlbnQgaGFzaC1iYXNlZCBzZXQgZm9yIHBvaW50ZXJzLiBJdCdzIG9wdGlt
aXplZCBmb3I6CisvLworLy8gLSBIaWdoIHJhdGUgb2YgY29udGFpbnMoKSBjYWxscy4KKy8vIC0g
SGlnaCByYXRlIG9mIGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIG5ldy4gYWRk
KCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgKG5vcCBhZGRzKQorLy8gICBkb24ndCBt
dXRhdGUgdGhlIHRhYmxlIGF0IGFsbC4KKy8vIC0gTm90IHRvbyBtYW55IHRocmVhZHMuIEkgZG91
YnQgdGhpcyBzY2FsZXMgYmV5b25kIH40LiBUaG91Z2gsIGl0IG1heSBhY3R1YWxseSBzY2FsZSBi
ZXR0ZXIgdGhhbiB0aGF0CisvLyAgIGlmIHRoZSByYXRlIG9mIG5vcCBhZGRzIGlzIGFic3VyZGx5
IGhpZ2guCisvLworLy8gSWYgd2Ugd2FudGVkIHRoaXMgdG8gc2NhbGUgYmV0dGVyLCB0aGUgbWFp
biBjaGFuZ2Ugd2UnZCBoYXZlIHRvIG1ha2UgaXMgaG93IHRoaXMgdGFibGUgZGV0ZXJtaW5lcyB3
aGVuCisvLyB0byByZXNpemUuIFJpZ2h0IG5vdyBpdCdzIGEgc2hhcmVkIGNvdW50ZXIuIFdlIGxv
Y2s7eGFkZCB0aGlzIGNvdW50ZXIuIE9uZSBlYXN5IHdheSB0byBtYWtlIHRoYXQKKy8vIHNjYWxh
YmxlIGlzIHRvIHJlcXVpcmUgZWFjaCB0aHJlYWQgdGhhdCB3b3JrcyB3aXRoIHRoZSBDb25jdXJy
ZW50UHRySGFzaFNldCB0byByZWdpc3RlciBpdHNlbGYgZmlyc3QuCisvLyBUaGVuIGVhY2ggdGhy
ZWFkIHdvdWxkIGhhdmUgc29tZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhhcyBhIGNvdW50ZXIuIFdl
IGNvdWxkIGluc3RpdHV0ZSB0aGUgcG9saWN5IHRoYXQKKy8vIGVhY2ggdGhyZWFkIHNpbXBseSBp
bmNyZW1lbnRzIGl0cyBvd24gbG9hZCBjb3VudGVyLCBpbiBpdHMgb3duIGRhdGEgc3RydWN0dXJl
LiBUaGVuLCBpZiBhbnkgc2VhcmNoIHRvCisvLyByZXNvbHZlIGEgY29sbGlzaW9uIGRvZXMgbW9y
ZSB0aGFuIE4gaXRlcmF0aW9ucywgd2UgY2FuIGNvbXB1dGUgYSBjb21iaW5lZCBsb2FkIGJ5IHN1
bW1pbmcgdGhlIGxvYWQKKy8vIGNvdW50ZXJzIG9mIGFsbCBvZiB0aGUgdGhyZWFkIGRhdGEgc3Ry
dWN0dXJlcy4KKy8vCisvLyBDb25jdXJyZW50UHRySGFzaFNldCdzIG1haW4gdXNlciwgdGhlIEdD
LCBzZWVzIGEgOTglIG5vcCBhZGQgcmF0ZSBpbiBTcGVlZG9tZXRlci4gVGhhdCdzIHdoeSB0aGlz
CisvLyBmb2N1c2VzIHNvIG11Y2ggb24gY2FzZXMgd2hlcmUgdGhlIHRhYmxlIGRvZXMgbm90IGNo
YW5nZS4KK2NsYXNzIENvbmN1cnJlbnRQdHJIYXNoU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDb25jdXJyZW50UHRySGFzaFNldCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisKK3B1YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ29uY3VycmVudFB0ckhhc2hTZXQo
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkNvbmN1cnJlbnRQdHJIYXNoU2V0KCk7CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvbnRhaW5zKFQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gY29udGFpbnNJbXBsKGNhc3QodmFsdWUpKTsKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGFkZChUIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkZEltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90YWJsZS5sb2Fk
UmVsYXhlZCgpLT5sb2FkLmxvYWRSZWxheGVkKCk7CisgICAgfQorICAgIAorICAgIC8vIE9ubHkg
Y2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBjYWxsIGFkZCgpLiBU
aGlzIGZyZWVzIHVwIG1lbW9yeSB3aXRob3V0IGNoYW5naW5nCisgICAgLy8gdGhlIGNvbnRlbnRz
IG9mIHRoZSB0YWJsZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVPbGRUYWJs
ZXMoKTsKKyAgICAKKyAgICAvLyBPbmx5IGNhbGwgd2hlbiB5b3Uga25vdyB0aGF0IG5vIG90aGVy
IHRocmVhZCBjYW4gY2FsbCBhZGQoKS4gVGhpcyBmcmVlcyB1cCBhbGwgbWVtb3J5IGV4Y2VwdCBm
b3IKKyAgICAvLyB0aGUgc21hbGxlc3QgcG9zc2libGUgaGFzaHRhYmxlLgorICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGNsZWFyKCk7CisgICAgCitwcml2YXRlOgorICAgIHN0cnVjdCBUYWJs
ZSB7CisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IGNyZWF0ZSh1bnNpZ25lZCBzaXpl
KTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG1heExvYWQoKSBjb25zdCB7IHJldHVybiBz
aXplIC8gMjsgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc2l6ZTsgLy8gVGhpcyBpcyBp
bW11dGFibGUuCisgICAgICAgIHVuc2lnbmVkIG1hc2s7IC8vIFRoaXMgaXMgaW1tdXRhYmxlLgor
ICAgICAgICBBdG9taWM8dW5zaWduZWQ+IGxvYWQ7CisgICAgICAgIEF0b21pYzx2b2lkKj4gYXJy
YXlbMV07CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaCh2b2lkKiBwdHIp
CisgICAgeworICAgICAgICByZXR1cm4gUHRySGFzaDx2b2lkKj46Omhhc2gocHRyKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICB2b2lkKiBjYXN0KFQgdmFsdWUpCisgICAgeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihUKSA8PSBzaXplb2Yodm9pZCopLCAidHlwZSB0b28gYmlnIik7CisgICAgICAg
IHVuaW9uIHsKKyAgICAgICAgICAgIHZvaWQqIHB0cjsKKyAgICAgICAgICAgIFQgdmFsdWU7Cisg
ICAgICAgIH0gdTsKKyAgICAgICAgdS5wdHIgPSBudWxscHRyOworICAgICAgICB1LnZhbHVlID0g
dmFsdWU7CisgICAgICAgIHJldHVybiB1LnB0cjsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb250
YWluc0ltcGwodm9pZCogcHRyKSBjb25zdAorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxlID0g
bV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUtPm1h
c2s7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgIHZvaWQqIGVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhlZCgp
OworICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpZiAoZW50cnkgPT0gcHRyKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBuZXcgZW50cnkgd2FzIGFkZGVkLgorICAg
IGJvb2wgYWRkSW1wbCh2b2lkKiBwdHIpCisgICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBt
X3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFz
azsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7
CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBhZGRTbG93
KHRhYmxlLCBtYXNrLCBzdGFydEluZGV4LCBpbmRleCwgcHRyKTsKKyAgICAgICAgICAgIGlmIChl
bnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBhZGRTbG93KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5z
aWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgaW5kZXgsIHZvaWQqIHB0cik7CisKKyAgICB2b2lk
IHJlc2l6ZUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCByZXNpemVBbmRBZGQodm9pZCogcHRyKTsK
KyAgICAKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRhYmxlPiwgND4gbV9hbGxUYWJsZXM7
CisgICAgQXRvbWljPFRhYmxlKj4gbV90YWJsZTsgLy8gVGhpcyBpcyBuZXZlciBudWxsLgorICAg
IExvY2sgbV9sb2NrOyAvLyBXZSBqdXN0IHVzZSB0aGlzIHRvIGNvbnRyb2wgcmVzaXplIHJhY2Vz
LgorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q29uY3VycmVudFB0ckhh
c2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0Rl
cXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTEgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBhcHBlbmRBbmRCdWJi
bGUoVSYmLCBjb25zdCBGdW5jJik7CiAgICAgCisgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhl
IGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVy
bnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMg
cmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFQgdGFrZUZp
cnN0KGNvbnN0IEZ1bmMmKTsKKwogICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVs
ZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxs
IHZlcnNpb24gb2YKICAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBm
YWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTcxLDYgKzU3NiwyNSBAQCBp
bmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwCiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Citp
bmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdChjb25zdCBGdW5jJiBm
dW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gdGhp
cy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgVCBjYW5kaWRh
dGUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkgeworICAgICAg
ICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgcHJlcGVuZCh0YWtlTGFzdCgp
KTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAgIH0KKyAgICAgICAgY291
bnQrKzsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7CisgICAgfQorICAgIHJl
dHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgdW5zaWduZWQgY291bnQg
PSAwOwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dU
Ri93dGYvRmFzdE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDcgQEAgdXNp
bmcgV1RGOjpmYXN0QWxpZ25lZEZyZWU7CiAjZGVmaW5lIFdURl9QUklWQVRFX0lOTElORSBpbmxp
bmUKICNlbmRpZgogCi0jZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIFwKLXB1YmxpYzog
XAorI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKICAgICB2b2lkKiBvcGVy
YXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IFwKICAgICB2b2lkKiBvcGVy
YXRvciBuZXdbXShzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIFwKQEAgLTI2
Myw3ICsyNjIsMTUgQEAgcHVibGljOiBcCiAgICAgICAgIEFTU0VSVChsb2NhdGlvbik7IFwKICAg
ICAgICAgcmV0dXJuIGxvY2F0aW9uOyBcCiAgICAgfSBcCisKKyNkZWZpbmUgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQgXAorcHVibGljOiBcCisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfSU1Q
TCBcCiBwcml2YXRlOiBcCiB0eXBlZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xv
bkFmdGVyVGhpc01hY3JvCiAKKyNkZWZpbmUgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVE
IFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKK3R5cGVkZWYgaW50IF9fdGhp
c0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KKwogI2VuZGlmIC8qIFdURl9G
YXN0TWFsbG9jX2ggKi8KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9Mb2NrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjIsNiArMTIyLDEy
IEBAIExvY2tlcjxMb2NrVHlwZT4gaG9sZExvY2soTG9ja1R5cGUmIGxvY2sKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGU+CitMb2NrZXI8TG9ja1R5cGU+IGhvbGRMb2NrSWYoTG9ja1R5
cGUmIGxvY2ssIGJvb2wgcHJlZGljYXRlKQoreworICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+
KHByZWRpY2F0ZSA/ICZsb2NrIDogbnVsbHB0cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExv
Y2tUeXBlPgogTG9ja2VyPExvY2tUeXBlPiB0cnlIb2xkTG9jayhMb2NrVHlwZSYgbG9jaykKIHsK
ICAgICByZXR1cm4gTG9ja2VyPExvY2tUeXBlPjo6dHJ5TG9jayhsb2NrKTsKQEAgLTEzNCw1ICsx
NDAsNiBAQCB1c2luZyBXVEY6OkxvY2tlcjsKIHVzaW5nIFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5
VGFnOwogdXNpbmcgV1RGOjpOb0xvY2tpbmdOZWNlc3Nhcnk7CiB1c2luZyBXVEY6OmhvbGRMb2Nr
OwordXNpbmcgV1RGOjpob2xkTG9ja0lmOwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksOSArNTksMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBzdGF0ZSBpbiBt
ZW1iZXIgZmllbGRzLiBUaGlzIGNhbiBiZSBtb3JlIG5hdHVyYWwgaWYgeW91IHdhbnQgZmluZS1n
cmFpbmVkIGNvbnRyb2wgb3ZlciB3aGF0CiAvLyBzdGF0ZSBpcyBzaGFyZWQgYmV0d2VlbiBpbnN0
YW5jZXMgb2YgdGhlIHRhc2suCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNz
IFNoYXJlZFRhc2s7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBB
cmd1bWVudFR5cGVzPgotY2xhc3MgU2hhcmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVz
Li4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFzazxSZXN1bHRUeXBl
IChBcmd1bWVudFR5cGVzLi4uKT4+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFBhc3NlZFJlc3VsdFR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTaGFyZWRUYXNrPFBhc3NlZFJl
c3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewogcHVi
bGljOgorICAgIHR5cGVkZWYgUGFzc2VkUmVzdWx0VHlwZSBSZXN1bHRUeXBlOworICAgIAogICAg
IFNoYXJlZFRhc2soKSB7IH0KICAgICB2aXJ0dWFsIH5TaGFyZWRUYXNrKCkgeyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KKwpJbmRleDogU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91
dC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEsMiArMCwwIEBACi0j
cHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WaXNpdGluZ1RpbWVvdXQuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVu
dERhdGEuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEw
IEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8aGVhcC9GYXN0TWFsbG9j
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4K
LSNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJr
ZWRBbGxvY2F0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJrZWRCbG9ja0lubGluZXMu
aD4KKyNpbmNsdWRlIDxoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg+CiAjaW5jbHVkZSA8
aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CkBAIC03Miw0MyArNzEsNjUgQEAgdm9pZCBKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxk
KFZNKgogICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gbmV3IEpTVk1DbGllbnREYXRh
KCp2bSk7CiAgICAgdm0tPmNsaWVudERhdGEgPSBjbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0
aGlzIHBvaW50ZXIuCiAgICAgCi0gICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1
ZTxNYXJraW5nQ29uc3RyYWludD4oCi0gICAgICAgICJXY29jIiwgIldlYkNvcmUgT3V0cHV0IENv
bnN0cmFpbnRzIiwKLSAgICAgICAgW3ZtLCBjbGllbnREYXRhLCBsYXN0RXhlY3V0aW9uVmVyc2lv
biA9IHZtLT5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCldCi0gICAgICAgIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIG11dGFibGUgewotICAg
ICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLT5oZWFwOworICAgIGNsYXNzIE5vcm1hbFdvcmxkQ29u
c3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CisgICAgcHVibGljOgorICAgICAg
ICBOb3JtYWxXb3JsZENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0
YSkKKyAgICAgICAgICAgIDogTWFya2luZ0NvbnN0cmFpbnQoIldjb2MiLCAiV2ViQ29yZSBPdXRw
dXQgQ29uc3RyYWludHMiLCBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKQorICAg
ICAgICAgICAgLCBtX3ZtKHZtKQorICAgICAgICAgICAgLCBtX2NsaWVudERhdGEoY2xpZW50RGF0
YSkKKyAgICAgICAgICAgICwgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbih2bS5oZWFwLm11dGF0b3JF
eGVjdXRpb25WZXJzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90
VmlzaXRvciYpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhlYXAmIGhlYXAgPSBt
X3ZtLmhlYXA7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoZWFwLm11dGF0b3JFeGVj
dXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24pCi0gICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSA9
PSBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBDb25zdHJh
aW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGxh
c3RFeGVjdXRpb25WZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOworICAg
ICAgICAgICAgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZl
cnNpb24oKTsKIAogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNv
dW50IGhlcmUgb3Vyc2VsdmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKICAg
ICAgICAgICAgIC8vIG9wYXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0
aW9uIHlldC4gVGhlIHdheSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKICAgICAgICAgICAgIC8vIGNv
bnN0cmFpbnQgc29sdmVyIGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCisgICAgICAg
ICAgICBtX251bU9wYXF1ZVJvb3RzQmVmb3JlID0gaGVhcC5udW1PcGFxdWVSb290cygpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgbnVtT3BhcXVlUm9vdHNCZWZvcmUgPSBoZWFw
Lm51bU9wYXF1ZVJvb3RzKCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgcGFy
YWxsZWwhCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1SZXZpc2l0ZWQgPSAwOwotICAgICAgICAg
ICAgY2xpZW50RGF0YS0+Zm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fdGFza3MuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIG1fY2xpZW50
RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAogICAgICAgICAgICAgICAgIFsmXSAo
U3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVh
Y2hNYXJrZWRDZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVh
cENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlND
ZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoY2VsbCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bVJldmlzaXRlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENlbGwqIGhl
YXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxs
KiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fdGFza3MuYXBwZW5kKHN1YnNwYWNl
LmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChmdW5jKSk7CiAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBz
bG90VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBudW1P
cGFxdWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdU
Rk1vdmUoY29uc3RyYWludCkpOworICAgICAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZG9QYXJh
bGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX3Rhc2tzKQorICAgICAgICAgICAgICAgIHRh
c2stPnJ1bih2aXNpdG9yKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBmaW5p
c2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgbV90YXNrcy5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZh
dGU6CisgICAgICAgIFZNJiBtX3ZtOworICAgICAgICBKU1ZNQ2xpZW50RGF0YSYgbV9jbGllbnRE
YXRhOworICAgICAgICB1aW50NjRfdCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uOworICAgICAgICBz
aXplX3QgbV9udW1PcGFxdWVSb290c0JlZm9yZSB7IDAgfTsKKyAgICAgICAgVmVjdG9yPFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+PiBtX3Rhc2tzOworICAgIH07CisgICAg
CisgICAgdm0tPmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjptYWtlX3VuaXF1ZTxOb3Jt
YWxXb3JsZENvbnN0cmFpbnQ+KCp2bSwgKmNsaWVudERhdGEpKTsKICAgICAgICAgCiAgICAgY2xp
ZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKCp2bSwgdHJ1
ZSk7CiAgICAgdm0tPm1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24g
MjI1MTc4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkJlZm9yZUxvYWRF
dmVudC5oIgogI2luY2x1ZGUgIkNoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCIKKyNpbmNsdWRlICJD
b21tb25WTS5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaCIKICNp
bmNsdWRlICJDb250YWluZXJOb2RlQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51
Q29udHJvbGxlci5oIgpAQCAtMjE2Miw3ICsyMTYzLDE0IEBAIEV2ZW50VGFyZ2V0RGF0YSogTm9k
ZTo6ZXZlbnRUYXJnZXREYXRhKCkKIAogRXZlbnRUYXJnZXREYXRhKiBOb2RlOjpldmVudFRhcmdl
dERhdGFDb25jdXJyZW50bHkoKQogewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc19ldmVu
dFRhcmdldERhdGFNYXBMb2NrKTsKKyAgICAvLyBOb3QgaG9sZGluZyB0aGUgbG9jayB3aGVuIHRo
ZSB3b3JsZCBpcyBzdG9wcGVkIGFjY2VsZXJhdGVzIHBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmlu
Zywgd2hpY2gKKyAgICAvLyBjYWxscyB0aGlzIGZ1bmN0aW9uIGZyb20gbWFueSB0aHJlYWRzLiBQ
YXJhbGxlbCBjb25zdHJhaW50IHNvbHZpbmcgY2FuIGhhcHBlbiB3aXRoIHRoZSB3b3JsZAorICAg
IC8vIHJ1bm5pbmcgb3Igc3RvcHBlZCwgYnV0IGlmIHdlIGRvIGl0IHdpdGggYSBydW5uaW5nIHdv
cmxkLCB0aGVuIHdlJ3JlIHVzdWFsbHkgbWl4aW5nIGNvbnN0cmFpbnQKKyAgICAvLyBzb2x2aW5n
IHdpdGggb3RoZXIgd29yay4gVGhlcmVmb3JlLCB0aGUgbW9zdCBsaWtlbHkgdGltZSBmb3IgY29u
dGVudGlvbiBvbiB0aGlzIGxvY2sgaXMgd2hlbiB0aGUKKyAgICAvLyB3b3JsZCBpcyBzdG9wcGVk
LiBXZSBkb24ndCBoYXZlIHRvIGhvbGQgdGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBl
ZCwgYmVjYXVzZSBhIHN0b3BwZWQgd29ybGQKKyAgICAvLyBtZWFucyB0aGF0IHdlIHdpbGwgbmV2
ZXIgbXV0YXRlIHRoZSBldmVudCB0YXJnZXQgZGF0YSBtYXAuCisgICAgSlNDOjpWTSogdm0gPSBj
b21tb25WTU9yTnVsbCgpOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihzX2V2ZW50VGFy
Z2V0RGF0YU1hcExvY2ssIHZtICYmIHZtLT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOwogICAgIHJl
dHVybiBoYXNFdmVudFRhcmdldERhdGEoKSA/IGV2ZW50VGFyZ2V0RGF0YU1hcCgpLmdldCh0aGlz
KSA6IG51bGxwdHI7CiB9CiAKQEAgLTIxNzEsNiArMjE3OSw5IEBAIEV2ZW50VGFyZ2V0RGF0YSYg
Tm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXQKICAgICBpZiAoaGFzRXZlbnRUYXJnZXREYXRhKCkpCiAg
ICAgICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFwKCkuZ2V0KHRoaXMpOwogCisgICAgSlND
OjpWTSogdm0gPSBjb21tb25WTU9yTnVsbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bSB8fCB2
bS0+aGVhcC53b3JsZElzUnVubmluZygpKTsKKwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
c19ldmVudFRhcmdldERhdGFNYXBMb2NrKTsKICAgICBzZXRIYXNFdmVudFRhcmdldERhdGEodHJ1
ZSk7CiAgICAgcmV0dXJuICpldmVudFRhcmdldERhdGFNYXAoKS5hZGQodGhpcywgc3RkOjptYWtl
X3VuaXF1ZTxFdmVudFRhcmdldERhdGE+KCkpLml0ZXJhdG9yLT52YWx1ZTsKQEAgLTIxNzgsNiAr
MjE4OSw4IEBAIEV2ZW50VGFyZ2V0RGF0YSYgTm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXQKIAogdm9p
ZCBOb2RlOjpjbGVhckV2ZW50VGFyZ2V0RGF0YSgpCiB7CisgICAgSlNDOjpWTSogdm0gPSBjb21t
b25WTU9yTnVsbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bSB8fCB2bS0+aGVhcC53b3JsZElz
UnVubmluZygpKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRh
TWFwTG9jayk7CiAgICAgZXZlbnRUYXJnZXREYXRhTWFwKCkucmVtb3ZlKHRoaXMpOwogfQpJbmRl
eDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHJldmlzaW9uIDIyNTE3OCkKKysrIFRvb2xzL1Nj
cmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBA
IExPTkdTUElERVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAKIFY4X1BBVEggPSBQRVJG
T1JNQU5DRVRFU1RTX1BBVEggKyAiU3VuU3BpZGVyIiArICJ0ZXN0cyIgKyAidjgtdjYiCiBUQUlM
QkVOQ0hfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJUYWlsQmVuY2g5MDAwIgogTUlD
Uk9CRU5DSE1BUktTX1BBVEggPSBPUEVOU09VUkNFX1BBVEggKyAiSlNUZXN0cyIgKyAibWljcm9i
ZW5jaG1hcmtzIgotT0NUQU5FX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAr
ICJPY3RhbmUiICsgIndyYXBwZXJzIgorT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCA9IFBFUkZPUk1B
TkNFVEVTVFNfUEFUSCArICJPY3RhbmUiCitPQ1RBTkVfV1JBUFBFUl9QQVRIID0gT1BFTlNPVVJD
RV9PQ1RBTkVfUEFUSCArICJ3cmFwcGVycyIKIEpTQkVOQ0hfUEFUSCA9IFBFUkZPUk1BTkNFVEVT
VFNfUEFUSCArICJKU0JlbmNoIgogU0lYU1BFRURfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFU
SCArICJTaXhTcGVlZCIgKyAidGVzdHMiCiBTSVhTUEVFRF9XUkFQUEVSX1BBVEggPSBQRVJGT1JN
QU5DRVRFU1RTX1BBVEggKyAiU2l4U3BlZWQiICsgIndyYXBwZXJzIgpAQCAtODQxLDYgKzg0Miwy
MCBAQCBjbGFzcyBTaW5nbGVGaWxlVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCiAgIGVuZAogZW5k
CiAKKyMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2YgYSBzaW5nbGUgZmlsZSBhbmQgbXVzdCBi
ZSBsb2FkZWQgaW4gaXRzIG93biBnbG9iYWwgb2JqZWN0IGVhY2gKKyMgdGltZSAoaS5lLiBydW4o
KSksIGJ1dCByZXR1cm5zIGl0cyByZXN1bHQgaW4gYSBjdXN0b20gd2F5LgorY2xhc3MgU2luZ2xl
RmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycworICBhdHRyX3JlYWRlciA6YmVuY2hQ
YXRoCisgIAorICBkZWYgaW5pdGlhbGl6ZShiZW5jaFBhdGgpCisgICAgQGJlbmNoUGF0aCA9IGJl
bmNoUGF0aAorICBlbmQKKyAgCisgIGRlZiBraW5kCisgICAgOnNpbmdsZUZpbGVDdXN0b21UaW1l
ZEJlbmNobWFyaworICBlbmQKK2VuZAorCiAjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIG9u
ZSBvciBtb3JlIGRhdGEgZmlsZXMgdGhhdCBzaG91bGQgYmUgbG9hZGVkIGdsb2JhbGx5LCBmb2xs
b3dlZAogIyBieSBhIGNvbW1hbmQgdG8gcnVuIHRoZSBiZW5jaG1hcmsuCiBjbGFzcyBNdWx0aUZp
bGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKQEAgLTk2NSw2ICs5ODAsMjUgQEAgZGVmIGVtaXRC
ZW5jaFJ1bkNvZGVGaWxlKG5hbWUsIHBsYW4sIGJlbgogICAgICAgICBkb3VibGVQdXRzKCRzdGRl
cnIsZmlsZSwiICAgIGlmIChfX2JlbmNoZXJfaW5kZXggPj0gI3t3YXJtdXB9KSBwcmludChcIiN7
bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiBcIiArIChfX2JlbmNoZXJfaW5k
ZXggLSAje3dhcm11cH0pICsgXCI6IFRpbWU6IFwiKygoX19hZnRlci1fX2JlZm9yZSkvX19ydW5z
KSk7IikKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0iKQogICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwiI3tiZW5jaFBhcmFtcy50ZWFyRG93bkNvbW1hbmQuanN9IikK
KyAgICAgIGVsc2lmIGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJl
bmNobWFyaworICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5j
aGVyX3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCIgICB2YXIgX19iZW5jaGVyX3Jlc3VsdCA9IHt2YWx1ZTogbnVsbH07IikKKyAgICAgICAg
JHJlcnVuLnRpbWVzIHsKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcnVu
KF9fYmVuY2hlcl93aGF0LCBfX2JlbmNoZXJfcmVzdWx0KTsiKQorICAgICAgICB9CisgICAgICAg
IGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBpZiAoX19iZW5jaGVyX3Jlc3VsdC52YWx1ZSA9
PSBudWxsKSIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgICB0aHJvdyBu
ZXcgRXJyb3IoXCJOdWxsIHJlc3VsdFwiKTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIs
ZmlsZSwiICAgcmV0dXJuIF9fYmVuY2hlcl9yZXN1bHQudmFsdWU7IikKKyAgICAgICAgZG91Ymxl
UHV0cygkc3RkZXJyLGZpbGUsIn0iKQorICAgICAgICAkd2FybXVwLnRpbWVzIHsKKyAgICAgICAg
ICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJl
bmNoUGF0aC5pbnNwZWN0fSkiKQorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJn
YygpOyIpIHVubGVzcyBwbGFuLnZtLnNob3VsZE1lYXN1cmVHQworICAgICAgICB9CisgICAgICAg
ICRpbm5lci50aW1lcyB7CisgICAgICAgICAgfCBpbm5lckluZGV4IHwKKyAgICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwicHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19OiAje3BsYW4u
aXRlcmF0aW9ufTogI3tpbm5lckluZGV4fTogVGltZTogXCIrX19iZW5jaGVyX3J1bigje2JlbmNo
UGFyYW1zLmJlbmNoUGF0aC5pbnNwZWN0fSkpOyIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3Rk
ZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAg
IH0KICAgICAgIGVsc2UKICAgICAgICAgcmFpc2UgdW5sZXNzIGJlbmNoUGFyYW1zLmtpbmQgPT0g
OnNpbmdsZUZpbGVUaW1lZEJlbmNobWFyawogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmls
ZSwiZnVuY3Rpb24gX19iZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCkBAIC0xNTk0LDYg
KzE2MjgsMTkgQEAgY2xhc3MgT2N0YW5lQmVuY2htYXJrCiAgIGVuZAogZW5kCiAKK2NsYXNzIEN1
c3RvbVRpbWVkQmVuY2htYXJrCisgIGluY2x1ZGUgQmVuY2htYXJrCisgIAorICBkZWYgaW5pdGlh
bGl6ZShuYW1lLCBmdWxsUGF0aCkKKyAgICBAbmFtZSA9IG5hbWUKKyAgICBAZnVsbFBhdGggPSBm
dWxsUGF0aAorICBlbmQKKyAgCisgIGRlZiBlbWl0UnVuQ29kZShwbGFuKQorICAgIGVtaXRCZW5j
aFJ1bkNvZGUoZnVsbG5hbWUsIHBsYW4sIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFya1Bh
cmFtZXRlcnMubmV3KGVuc3VyZUZpbGUoIkN1c3RvbVRpbWVkLSN7QG5hbWV9IiwgQGZ1bGxQYXRo
KSkpCisgIGVuZAorZW5kCisKIGNsYXNzIEtyYWtlbkJlbmNobWFyawogICBpbmNsdWRlIEJlbmNo
bWFyawogICAKQEAgLTMwMTAsNiArMzA1Nyw3IEBAIGJlZ2luCiAgICAgfCBhcmdzIHwKICAgICBP
Q1RBTkUuYWRkIE9jdGFuZUJlbmNobWFyay5uZXcoKmFyZ3MpCiAgIH0KKyAgT0NUQU5FLmFkZCBD
dXN0b21UaW1lZEJlbmNobWFyay5uZXcoInNwbGF5LWxhdGVuY3kiLCAoT1BFTlNPVVJDRV9PQ1RB
TkVfUEFUSCArICJzcGxheS5qcyIpLnRvX3MpCiAKICAgS1JBS0VOID0gQmVuY2htYXJrU3VpdGUu
bmV3KCJLcmFrZW4iLCA6YXJpdGhtZXRpY01lYW4sIC0xKQogICBbImFpLWFzdGFyIiwgImF1ZGlv
LWJlYXQtZGV0ZWN0aW9uIiwgImF1ZGlvLWRmdCIsICJhdWRpby1mZnQiLApJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBAIHNl
dChUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQmxv
b21GaWx0ZXIuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NTdHJpbmcu
Y3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGlj
T3BlcmF0aW9ucy5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uY3Vy
cmVudFB0ckhhc2hTZXQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0Nv
bmRpdGlvbi5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ3Jvc3NUaHJl
YWRUYXNrLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5j
cHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkw
RjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9y
bVV0aWxpdGllc0NvY29hLm1tICovOyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyog
UGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tICovOyB9OwogCQkwRjJDMjBCODFEQ0Q1NDUwMDA1NDJEOUUgLyogVGltZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDMjBC
NzFEQ0Q1NDQ4MDA1NDJEOUUgLyogVGltZS5jcHAgKi87IH07CisJCTBGMzBDQjVDMUZDRTE3OTYw
MDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUzMjMgLyogQ29u
Y3VycmVudFB0ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjNCOTRBNzFBNzcyNjc0MDBERTMyNzIg
LyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2Vi
Vmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSAqLzsgfTsKIAkJMEY0RkZBOUUxRUQzQUE4NTAwRjcx
MTFGIC8qIFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8qIFNu
YXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tICovOyB9OwogCQkxMTVFQjM0MzFFRTBCQTAzMDAz
QzJDMEEgLyogVmlld3BvcnRTaXplRm9yVmlld3BvcnRVbml0cy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExNUVCMzQyMUVFMEI3MjAwMDNDMkMwQSAv
KiBWaWV3cG9ydFNpemVGb3JWaWV3cG9ydFVuaXRzLm1tICovOyB9OwpAQCAtMTA2Nyw2ICsxMDY4
LDcgQEAKIAkJMEYxMzlFNzUxQTQyM0E1MzAwRjU5MEY1IC8qIFdlYWtPYmpDUHRyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vha09iakNQdHIubW07IHBhdGgg
PSBjb2NvYS9XZWFrT2JqQ1B0ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
N0JCRDQxNUFGNkM0RDAwN0FCNzUzIC8qIFdlYkNvcmVTdGF0aXN0aWNzV2l0aE5vV2ViUHJvY2Vz
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlU3RhdGlz
dGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJDMjBCNzFEQ0Q1NDQ4MDA1NDJEOUUgLyogVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcy
IC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBz
aG90VmlhUmVuZGVySW5Db250ZXh0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNEZGQUEwMUVEM0QwREUwMEY3MTExRiAvKiBJbWFnZUlPLmZyYW1ld29y
ayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBuYW1lID0gSW1hZ2VJTy5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0ltYWdlSU8uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsg
fTsKQEAgLTI1ODEsNiArMjU4Myw3IEBACiAJCQkJMjZGMUI0NDIxNUNBNDM0RjAwRDFFNEJGIC8q
IEF0b21pY1N0cmluZy5jcHAgKi8sCiAJCQkJRTQwMDE5MzAxQUNFOUI1QzAwMUIwQTJBIC8qIEJs
b29tRmlsdGVyLmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tl
ZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUz
MjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAogCQkJCTBGRUFFMzY3MUI3RDE5Q0Iw
MENFMTdGMiAvKiBDb25kaXRpb24uY3BwICovLAogCQkJCTUxNzE0RUI5MUQwODc0MTYwMDQ3MjND
NCAvKiBDcm9zc1RocmVhZFRhc2suY3BwICovLAogCQkJCTI2QTJDNzJFMTVFMkU3M0MwMDVCMUEx
NCAvKiBDU3RyaW5nLmNwcCAqLywKQEAgLTMxNjUsNiArMzE2OCw3IEBACiAJCQkJN0M4M0RFRjYx
RDBBNTkwQzAwRkVCQ0YzIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0M4M0RFRkUxRDBBNTkwQzAwRkVCQ0YzIC8qIE5ha2VkUHRyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1N0Q1NEYzMUYzMzhDMzYwMEE5N0FBNyAvKiBOZXZlckRlc3Ryb3llZC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjMwQ0I1QzFGQ0UxNzk2MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDExRDBBNTkwQzAwRkVCQ0YzIC8q
IE9wdGlvbmFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNzdCQUEzMUQ5QUZGRkMwMDVGQzU2
OCAvKiBPcHRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDIxRDBBNTkwQzAw
RkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJy
ZW50UHRySGFzaFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJI
YXNoU2V0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKKworbmFtZXNwYWNlIHsKKworLy8gYGNvbW1hbmRzYCBpcyBhIHN0cmluZyB0aGF0IHRl
bGxzIHRoaXMgdGhpbmcgd2hhdCB0byBkby4gSXQgaGFzIHRvIGhhdmUgYW4gZXZlbiBudW1iZXIg
b2YgY2hhcmFjdGVycy4KKy8vIFRoZSBjaGFyYWN0ZXIgcGFpcnMgYXJlIGNvbW1hbmRzLiBDb21t
YW5kczoKKy8vCisvLyAreCAgICAgQWRkcyAneCcgdG8gdGhlIHNldCAoY2FzdHMgJ3gnIHRvIGEg
dm9pZCopIGFuZCBhc3NlcnRzIHRoYXQgaXQncyBuZXcuCisvLyAheCAgICAgQWRkcyAneCcgdG8g
dGhlIHNldCBhbmQgYXNzZXJ0cyB0aGF0IGl0IHdhcyB0aGVyZSBhbHJlYWR5LgorLy8gPXggICAg
IEFzc2VydHMgdGhhdCAneCcgaXMgaW4gdGhlIHNldAorLy8gLXggICAgIEFzc2VydHMgdGhhdCAn
eCcgaXMgbm90IGluIHRoZSBzZXQKK3ZvaWQgZG9UZXN0KGNvbnN0IGNoYXIqIGNvbW1hbmRzKQor
eworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IHNldDsKKyAgICBmb3IgKGNvbnN0IGNoYXIqIGNv
bW1hbmQgPSBjb21tYW5kczsgY29tbWFuZFswXSAmJiBjb21tYW5kWzFdOyBjb21tYW5kICs9IDIp
IHsKKyAgICAgICAgdm9pZCogcHRyID0gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KGNvbW1hbmRbMV0pKTsKKyAgICAgICAgc3dpdGNoIChjb21tYW5kWzBdKSB7Cisg
ICAgICAgIGNhc2UgJysnOgorICAgICAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmFkZChwdHIpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICchJzoKKyAgICAgICAgICAgIEVYUEVD
VF9GQUxTRShzZXQuYWRkKHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Jz0nOgorICAgICAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKHB0cikpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgRVhQRUNUX0ZBTFNF
KHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
KworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEVtcHR5KQoreworICAgIGRvVGVzdCgi
Iik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50KQor
eworICAgIGRvVGVzdCgiK3g9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhh
c2hTZXQsIEFkZE9uZUVsZW1lbnRNdWx0aXBsZVRpbWVzKQoreworICAgIGRvVGVzdCgiK3gheCF4
IXgheCF4IXgheCF4IXgheD14LXktMCIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFz
aFNldCwgQWRkT25lRWxlbWVudE1hbnlUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgh
eCF4IXgheCF4IXg9eC15LTAheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCIpOworfQor
CitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHMpCit7Cisg
ICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2Ercytk
K2YrZytoK2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0cr
SCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1p
PW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9
QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1
cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c01hbnlUaW1lcykKK3sKKyAgICBkb1Rl
c3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2gr
aitrK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytM
K1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9
cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1G
PUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQh
eSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJ
IU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAh
cSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFF
IVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUh
NiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFi
IW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0h
MSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFs
IXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVgh
QyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFm
IWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUgh
SiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFv
IXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEh
UyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFy
IXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkh
VSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5
ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEh
VyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0
ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMh
diFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFO
IU0iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1l
bnRzQW5kUXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIr
Mys0KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2graitrPTE9Mj0z
PTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgt
Yy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1C
LU4tTStsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0sr
TCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1h
PXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9
Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQ
dHJIYXNoU2V0LCBBZGRTb21lRWxlbWVudHNNdWx0aXBsZVRpbWVzVGhlbkFkZFRoZVJlc3RBbmRR
dWVyeVNvbWVCZWZvcmVBZGRpbmdUaGVSZXN0KQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2
KzcrOCs5KzArcSt3K2Urcit0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQh
NSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEz
ITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEh
MiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0K3krdStpK28rcCthK3MrZCtmK2craCtqK2s9MT0y
PTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9ay1sLXot
eC1jLXYtYi1uLW0tUS1XLUUtUi1ULVktVS1JLU8tUC1BLVMtRC1GLUctSC1KLUstTC1aLVgtQy1W
LUItTi1NK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0or
SytMK1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1w
PWE9cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9
RD1GPUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328103</attachid>
            <date>2017-12-01 09:30:01 -0800</date>
            <delta_ts>2017-12-01 10:46:29 -0800</delta_ts>
            <desc>reduced reliance on nested classes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>215720</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMSw4
ICs1MDEsMTAgQEAgaGVhcC9NYXJrZWRCbG9jay5jcHAKIGhlYXAvTWFya2VkU3BhY2UuY3BwCiBo
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAK
K2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIu
Y3BwCiBoZWFwL011dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCiBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9TdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgotI2luY2x1ZGUgIlZpc2l0aW5n
VGltZW91dC5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKQEAgLTcyLDExICs3MSwxMSBAQCB2b2lkIEpTQ29udGV4dEdyb3Vw
QWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgLy8gZWxzZSBnZXRzIG1hcmtlZC4KICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5ID0gQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXll
ZEJ5TWFya2luZzsKICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtpbmdDb25zdHJhaW50PigKKyAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PigKICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBj
b25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0
cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENv
bnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nh
c3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRh
KSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAg
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1h
cmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAg
ICAgbWFya2VyLk1hcmsgPSBtYXJrOwpAQCAtODQsNyArODMsOCBAQCB2b2lkIEpTQ29udGV4dEdy
b3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbnN0
cmFpbnRDYWxsYmFjaygmbWFya2VyLCB1c2VyRGF0YSk7CiAgICAgICAgIH0sCi0gICAgICAgIHZv
bGF0aWxpdHkpOworICAgICAgICB2b2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZtLmhlYXAuYWRkTWFya2luZ0NvbnN0cmFp
bnQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4Myw5ICsyODMsOCBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6
CiAgICAgICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB2b2lkKiBu
ZXh0Um9vdCA9IHN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKG5leHRS
b290KSA9PSBUcnVlVHJpU3RhdGUpCisgICAgICAgICAgICBpZiAoIXZpc2l0b3IuYWRkT3BhcXVl
Um9vdChuZXh0Um9vdCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4dFJvb3QpOwogCiAgICAgICAgICAgICBhdXRvIGFwcGVu
ZE93bmVkT2JqZWN0cyA9IFsmXSB7CiAgICAgICAgICAgICAgICAgTlNNYXBUYWJsZSAqb3duZWRP
YmplY3RzID0gW2V4dGVybmFsT2JqZWN0R3JhcGggb2JqZWN0Rm9yS2V5OnN0YXRpY19jYXN0PGlk
PihuZXh0Um9vdCldOwpAQCAtMzI3LDggKzMyNiw2IEBAIHZvaWQgc2NhbkV4dGVybmFsUmVtZW1i
ZXJlZFNldChKU0M6OlZNJiAKICAgICAgICAgfQogICAgICAgICBbZXh0ZXJuYWxSZW1lbWJlcmVk
U2V0IHJlbW92ZUFsbE9iamVjdHNdOwogICAgIH0KLQotICAgIHZpc2l0b3IubWVyZ2VJZk5lY2Vz
c2FyeSgpOwogfQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAv
KiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1h
dFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZl
UGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07Ci0JCTBGMUZCMzkzMUUxNzdB
NzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGlu
Z1RpbWVvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUxQUY3REYw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkwRjFGQjM5NzFFMUFGN0UzMDBB
OUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xp
c3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBNdXRhdG9y
U2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwpA
QCAtMzExLDYgKzMxMCw5IEBACiAJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNh
bXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAz
QTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5s
aW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFB
NiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8q
IFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovOyB9Owor
CQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MzFGQzdB
OTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFD
IC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxs
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUx
Q0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0
RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0
aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC00NDUsNiArNDQ3LDggQEAKIAkJMEY5RDM2OTUxQUU5Q0MzMzAw
MEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5RDM2OTMxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQ
aGFzZS5oICovOyB9OwogCQkwRjlENEMwRDFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9u
VGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmggKi87IH07CiAJ
CTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlENEMw
RjFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICovOyB9
OworCQkwRjlEQUEwOTFGRDFDM0NGMDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTA3
MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovOyB9OworCQkw
RjlEQUEwQTFGRDFDM0QzMDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEQUEwODFGRDFDM0M4
MDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggKi87IH07CiAJCTBGOUUzMjY0MUIw
NUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAw
ODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi87IH07CiAJCTBGOUZC
NEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBDQjY3
RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovOyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBE
NTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ5NCw3ICsxNDk4LDYg
QEAKIAkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOUU4NTJF
MUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURCQzU0RDUxREY4RUEyQjAw
NUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFz
c2VtYmx5VG9KU0NhbGxlZS5oICovOyB9OwogCQlBREQ4RkE0NjFFQjMwNzk3MDBERjU0MkYgLyog
V2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9u
UGFyc2VyLmggKi87IH07Ci0JCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRERC
MUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3
OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5NDFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUFERTgwMjlBMUUwOEYxREUwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBREU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25z
dHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUFERTgwMjlDMUUwOEYxREUwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURF
ODAyOTcxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5NzYs
NyArMTk3OSw2IEBACiAJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEMxRTE3M0E2MjAwQTlC
RTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5o
OyBwYXRoID0gZGZnL0RGR1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGgg
PSBkZmcvREZHV29ya2xpc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNjQsNiArMjI2NiwxMCBAQAogCQkwRjRBMzhGODFDOEUxM0RG
MDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN1cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTRE
QjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsgcGF0aCA9IGIz
L0IzT3JpZ2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MjFG
QzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0MxQzRDMUI1NDAw
NEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5jcHA7IHBhdGggPSBiMy9haXIvQWly
Rml4T2J2aW91c1NwaWxscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERF
MUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBCM09yaWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3Jp
Z2luRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDk3LDYgKzI1MDMs
OSBAQAogCQkwRjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4Y2VwdGlvblRhcmdldC5oOyBw
YXRoID0gZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjlENEMwRTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlLmNwcDsgcGF0aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDRDMEYxQzNFMkM3
NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oOyBwYXRo
ID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdD
b25zdHJhaW50U29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFB
MDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUUz
MjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJJbnNl
cnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFF
RDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGFja0xheW91dFBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNTQsNyArNDI2Myw2IEBACiAJCUFERDA5QUYzMUY2MjQ4MkUw
MDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHku
aDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDQxRUIzMDc3MTAwREY1NDJGIC8q
IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjkzMUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk0MUUwOEYxQzkwMDU4
REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTUxRTA4
RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rv
ci5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUwMCw2ICs1NTA4LDcgQEAKIAkJCQkwRkQwRTVFNjFF
NDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1
QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJF
QjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNEQ4QzczMUZD
N0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLywKIAkJCQkwRjdERjEy
RjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKIAkJCQkyQTdB
NThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJCQkJMEYxMzZENEIxNzRB
RDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU1ODgsMTcgKzU1OTcsMjEgQEAKIAkJ
CQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJ
CQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwICov
LAogCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5o
ICovLAorCQkJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNv
bHZlci5jcHAgKi8sCisJCQkJMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyLmggKi8sCiAJCQkJMTQyRDZGMEUxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgKi8sCiAJCQkJMTQyRDZGMEYxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFjay5o
ICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNw
cCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICov
LAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKLQkJ
CQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovLAorCQkJCTBG
OURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCAqLywKIAkJ
CQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyogUHJldmVudENvbGxlY3Rpb25TY29wZS5oICov
LAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIwOCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJ
CQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAq
LywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJ
CQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3Iu
Y3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICov
LAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAq
LywKQEAgLTU2MjAsNyArNTYzMyw3IEBACiAJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0
OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhD
RTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovLAotCQkJCTBG
MUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLywKKwkJCQkwRjRE
OEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3
ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIw
MEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgxNjksNiArODE4Miw3IEBACiAJCQkJNjUxNEYy
MTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNt
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVk
UmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAv
KiBDYWdlZEJhcnJpZXJQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VEMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBDYWxsRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzM2LDYgKzg3NTAsNyBA
QAogCQkJCTBGMkI2NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURB
QTA5MUZEMUMzQ0YwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8q
IEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFEQjY5RTY2MDBF
QzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODMsNiArODg5
OCw3IEBACiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJl
ZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIg
LyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4
NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNEQ4Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDAyLDkgKzkwMTgsOSBAQAogCQkJCUUz
QzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFC
NjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8qIE9i
amVjdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5
MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBRERCMUY2MzE4RDc3
REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3
OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
MkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0
NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
QEAgLTkyMTAsNiArOTIyNiw3IEBACiAJCQkJMEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRy
YWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwNjE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcw
ODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFy
cmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNG
IC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0OSw3ICs5MjY2
LDYgQEAKIAkJCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBW
YXJPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAv
KiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMUZCMzkzMUUxNzdBNzIw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUEx
MURGNzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNB
NTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgYm9vbCBBY2Nlc3NDYXNl
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSht
X3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1f
c3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChtX3N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJl
c3VsdCA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODAsNyArOTgwLDcgQEAg
dm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIAogICAgIG1fdmlz
aXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0gdHJ1ZTsKIAotICAgIGlmIChIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpIHsKQEAgLTEx
MzIsNyArMTEzMiw3IEBAIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0wK
IAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikKIHsKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhp
cykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVl
VG9PbGRBZ2UoKSkpCkBAIC0xMTQ3LDEwICsxMTQ3LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91
bGRKZXR0aXNvbkR1ZVRvT2xkQWcKICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBib29sIHNo
b3VsZE1hcmtUcmFuc2l0aW9uKERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRp
b24pCiB7Ci0gICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtl
ZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRy
YW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fY29k
ZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIUhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICBp
ZiAoIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAg
dm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgICAg
ICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwog
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAg
ICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsK
LSAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0
dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJlKSkK
ICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFy
a2VkU29GYXIgPSBmYWxzZTsKQEAgLTEyNTQsMTQgKzEyNTQsMTQgQEAgdm9pZCBDb2RlQmxvY2s6
OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCog
cmVmZXJlbmNlID0gZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAg
QVNTRVJUKCFqc0R5bmFtaWNDYXN0PENvZGVCbG9jayo+KCpyZWZlcmVuY2UtPnZtKCksIHJlZmVy
ZW5jZSkpOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHJlZmVyZW5j
ZSkpIHsKKyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAg
ICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQogICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZn
Q29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tp
XS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDEzICsxMDQsMTMgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0
LCAiOiBDb21waWxpbmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CiAg
ICAgICAgIAogICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNhZmVw
b2ludGluZyBzaW5jZSB3ZSBvd24gcmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+dm0t
PmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAg
ICBpZiAobV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKCJIZWFwIGlzIHN0b3BlZCBidXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1f
cGxhbi0+Y29tcGlsZUluVGhyZWFkKCZtX2RhdGEpOwogICAgICAgICBpZiAobV9wbGFuLT5zdGFn
ZSAhPSBQbGFuOjpDYW5jZWxsZWQpIHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgICAg
IGlmIChtX3BsYW4tPnZtLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMilcbiIpOwogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB9
CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX3dvcmtsaXN0Lm1fcmVhZHlQbGFucy5hcHBlbmQobV9wbGFuKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVs
aWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAgICAgICAgIG1fd29y
a2xpc3QubV9wbGFuQ29tcGlsZWQubm90aWZ5QWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2Fm
ZXBvaW50OjpSZQogCiAgICAgaWYgKHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhl
YXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAK
ICAgICBpZiAoc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNt
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitlbnVtIGNsYXNzIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA6IHVpbnQ4X3Qg
eworICAgIFNlcXVlbnRpYWwsCisgICAgUGFyYWxsZWwKK307CisgICAgCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCit7
CisgICAgc3dpdGNoIChwYXJhbGxlbGlzbSkgeworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFy
YWxsZWxpc206OlNlcXVlbnRpYWw6CisgICAgICAgIG91dC5wcmludCgiU2VxdWVudGlhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWw6CisgICAgICAgIG91dC5wcmludCgiUGFyYWxsZWwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhl
YXBUeXBlKQogICAgICwgbV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90
VmlzaXRvcj4oKnRoaXMsICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtl
X3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1h
a2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6
bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFpbnRT
ZXQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAgICwg
bV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2Rl
QmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJ
VFN0dWJSb3V0aW5lU2V0PigpKQpAQCAtOTExLDcgKzkxMSw3IEBAIHZvaWQgSGVhcDo6YWRkVG9S
ZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQrKzsKICAgICBp
ZiAobV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQpIHsKICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNl
KCk7Ci0gICAgICAgIGlmICghaXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAg
aWYgKCFpc01hcmtlZChjZWxsKSkgewogICAgICAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xs
ZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVk
IHBhc3QKICAgICAgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9y
ZSB0byBhbiB1bm1hcmtlZCBQb3NzaWJseUJsYWNrIG9iamVjdC4gSWYgdGhlCiAgICAgICAgICAg
ICAvLyBvYmplY3QgZ2V0cyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3
aWxsIGdvIGRvd24gdGhlIG5vcm1hbCBtYXJraW5nCkBAIC05MjQsMTUgKzkyNCwxNSBAQCB2b2lk
IEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgICAgICAgICAgICAgLy8g
Tm93IHdlIHByb3RlY3QgYWdhaW5zdCB0aGlzIHJhY2U6CiAgICAgICAgICAgICAgICAgLy8KICAg
ICAgICAgICAgICAgICAvLyAgICAgMSkgT2JqZWN0IHN0YXJ0cyBvdXQgYmxhY2sgKyB1bm1hcmtl
ZC4KLSAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkQ29uY3VycmVudGx5
IGhlcmUuCisgICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZCBoZXJlLgog
ICAgICAgICAgICAgICAgIC8vICAgICAyKSBPYmplY3QgaXMgbWFya2VkIGFuZCBncmV5ZWQuCiAg
ICAgICAgICAgICAgICAgLy8gICAgIDMpIE9iamVjdCBpcyBzY2FubmVkIGFuZCBibGFja2VkLgog
ICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2Vs
bFN0YXRlU3Ryb25nIGhlcmUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAv
LyBJbiB0aGlzIGNhc2Ugd2Ugd291bGQgaGF2ZSBtYWRlIHRoZSBvYmplY3Qgd2hpdGUgYWdhaW4s
IGV2ZW4gdGhvdWdoIGl0IHNob3VsZAogICAgICAgICAgICAgICAgIC8vIGJlIGJsYWNrLiBUaGlz
IGNoZWNrIGxldHMgdXMgY29ycmVjdCBvdXIgbWlzdGFrZS4gVGhpcyByZWxpZXMgb24gdGhlIGZh
Y3QgdGhhdAotICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkQ29uY3VycmVudGx5IGNvbnZlcmdl
cyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkQ29u
Y3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgICAgICAgICAgLy8gaXNNYXJrZWQgY29udmVyZ2Vz
IG1vbm90b25pY2FsbHkgdG8gdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY2Vs
bCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBkaWZmaWN1bHQgdG8gd29yayBvdXQg
d2hldGhlciB0aGUgb2JqZWN0IHNob3VsZCBiZSBncmV5IG9yIGJsYWNrIGF0CiAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoaXMgcG9pbnQuIFdlIHNheSBibGFjayBjb25zZXJ2YXRpdmVseS4KICAg
ICAgICAgICAgICAgICAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlC
bGFjayk7CkBAIC05NDgsNyArOTQ4LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0g
ICAgICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgICAg
IEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgLy8gSXQgY291bGQgYmUgdGhhdCB0
aGUgb2JqZWN0IHdhcyAqanVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3Rv
ciBtYXkgc2V0IHRoZQogICAgIC8vIHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFuZCB0aGVuIHRv
IFBvc3NpYmx5T2xkT3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8KICAgICAv
LyByYWNlIHdpdGggdGhlIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFj
Y3VyYXRlIGJlY2F1c2UgdGhlIG9iamVjdCBfd2lsbF8KQEAgLTEyNjUsNiArMTI2NSw4IEBAIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAKICAgICBTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKICAgICAKKyAgICBt
X29wYXF1ZVJvb3RzLmRlbGV0ZU9sZFRhYmxlcygpOworICAgIAogICAgIGlmIChPcHRpb25zOjps
b2dHQygpKSB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgY2hhciosIHNpemVfdD4gdmlzaXRNYXA7
CiAgICAgICAgIGZvckVhY2hTbG90VmlzaXRvcigKQEAgLTEyODcsMTAgKzEyODksNiBAQCBORVZF
Ul9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgICAgICAgICAKICAgICAg
ICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
c2xvdFZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFs
bGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxl
bFZpc2l0b3ItPm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIAogICAgICAgICAvLyBG
SVhNRTogVGFrZSBtX211dGF0b3JEaWRSdW4gaW50byBhY2NvdW50IHdoZW4gc2NoZWR1bGluZyBj
b25zdHJhaW50cy4gTW9zdCBsaWtlbHksCiAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gZXhl
Y3V0ZSByb290IGNvbnN0cmFpbnRzIGFnYWluIHVubGVzcyB0aGUgbXV0YXRvciBkaWQgcnVuLiBB
dCBhCiAgICAgICAgIC8vIG1pbmltdW0sIHdlIGNvdWxkIHVzZSB0aGlzIGZvciB3b3JrIGVzdGlt
YXRlcyAtIGJ1dCBpdCdzIHByb2JhYmx5IG1vcmUgdGhhbiBqdXN0IGFuCkBAIC0xMzA1LDcgKzEz
MDMsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgICAg
IC8vIFdvbmRlcmluZyB3aGF0IHRoaXMgZG9lcz8gTG9vayBhdCBIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMoKS4gVGhlIERPTSBhbmQgb3RoZXJzIGNhbiBhbHNvCiAgICAgICAgIC8vIGFkZCB0aGVp
ciBvd24gdXNpbmcgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoKS4KICAgICAgICAgYm9vbCBj
b252ZXJnZWQgPQotICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2Vu
Y2Uoc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICAgICAg
bV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IpOwogICAgICAg
ICBpZiAoY29udmVyZ2VkICYmIHNsb3RWaXNpdG9yLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gY2hhbmdl
UGhhc2UoY29ubiwgQ29sbGVjdG9yUGhhc2U6OkVuZCk7CkBAIC0xNTI2LDcgKzE1MjQsNyBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpmaW5pc2hDaGFuZ2luZ1BoCiAKIHZvaWQgSGVhcDo6c3Rv
cFRoZVBlcmlwaGVyeShHQ0NvbmR1Y3RvciBjb25uKQogewotICAgIGlmIChtX2NvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKSB7CisgICAgaWYgKG1fd29ybGRJc1N0b3BwZWQp
IHsKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IHdvcmxkIGFscmVhZHkgc3RvcHBlZC5cbiIpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE1MzcsNyAr
MTUzNSw3IEBAIHZvaWQgSGVhcDo6c3RvcFRoZVBlcmlwaGVyeShHQ0NvbmR1Y3RvciAKICAgICBt
X211dGF0b3JEaWRSdW4gPSBmYWxzZTsKIAogICAgIHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsK
LSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gdHJ1ZTsKKyAg
ICBtX3dvcmxkSXNTdG9wcGVkID0gdHJ1ZTsKIAogICAgIGZvckVhY2hTbG90VmlzaXRvcigKICAg
ICAgICAgWyZdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKQEAgLTE1NzQsMTEgKzE1NzIs
MTEgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6cmVzdW1lVGhlUGVyaXBoZQogICAgIAogICAg
IG1fYmFycmllcnNFeGVjdXRlZCA9IDA7CiAgICAgCi0gICAgaWYgKCFtX2NvbGxlY3RvckJlbGll
dmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKSB7CisgICAgaWYgKCFtX3dvcmxkSXNTdG9wcGVkKSB7
CiAgICAgICAgIGRhdGFMb2coIkZhdGFsOiBjb2xsZWN0b3IgZG9lcyBub3QgYmVsaWV2ZSB0aGF0
IHRoZSB3b3JsZCBpcyBzdG9wcGVkLlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQotICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQgPSBmYWxzZTsKKyAgICBtX3dvcmxkSXNTdG9wcGVkID0gZmFsc2U7CiAgICAgCiAgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgdmFzdGx5IGltcHJvdmVkOiB3ZSB3YW50IHRvIGdyYWIg
dGhlIGxvY2tzIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5CiAgICAgLy8gYmVjb21lIGF2YWls
YWJsZS4gV2UgYmFzaWNhbGx5IHdhbnQgYSBsb2NrQW55KCkgbWV0aG9kIHRoYXQgd2lsbCBsb2Nr
IHdoYXRldmVyIGxvY2sgaXMgYXZhaWxhYmxlCkBAIC0yNTc4LDcgKzI1NzYsNyBAQCB2b2lkIEhl
YXA6OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBUaW1pbmdTY29w
ZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0
aXZlIHNjYW4iKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckNvbnNlcnZh
dGl2ZVNjYW4oKTsKICAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJv
b3RzKCp0aGlzKTsKQEAgLTI1ODgsMTEgKzI1ODYsMTIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVS
b290cyk7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYwOSwxOSArMjYw
OCwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICBzbG90
VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7CiAgICAgICAgICAg
ICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOwog
ICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisg
ICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAg
ICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAg
ICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBt
X3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwpAQCAtMjYzNywzNCArMjYzOCwzOCBA
QCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKICAg
ICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9u
KTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkpzciIsICJKSVQgU3R1YiBSb3V0aW5lcyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZp
c2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVk
QnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVj
dXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAog
ICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAg
ICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7CiAgICAg
ICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwor
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAg
ICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4
dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZp
c2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVk
QnlNYXJraW5nKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2lu
ZywKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEdyIs
ICJERkcgV29ya2xpc3RzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVt
YmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29y
a2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAg
ICAgICAgIApAQCAtMjY3OSwxMiArMjY4NCwxMyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHNsb3RW
aXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXll
ZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtp
bmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogI2VuZGlmCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tz
IiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0
aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
IHsKICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0
aG91dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJs
b2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBj
b25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KQEAgLTI2OTMsMTEgKzI2OTksMTUgQEAgdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgICAgICAgICAgc2xv
dFZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXll
ZCk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQsCisgICAgICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiTXJtcyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIsCi0g
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBncmFiIGxvY2tzIHRvIGZpZGRsZSB3
aXRoIHRoZSBtdXRhdG9yIG1hcmsgc3RhY2sgYW5kIHRoZSByYWNlIHN0YWNrLgorICAgICAgICAg
ICAgLy8gVGhlIGNoYW5jZXMgb2YgY29udGVudGlvbiBvbiB0aG9zZSBsb2NrcyBhcmUgc2xpbSwg
YnV0IHdlIHNob3VsZCBkbyBpdCBhbnl3YXkuCisgICAgICAgICAgICAKICAgICAgICAgICAgIC8v
IEluZGljYXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKICAgICAg
ICAgICAgIHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VN
YXJrU3RhY2stPnNpemUoKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3Vu
dChzaXplKTsKQEAgLTI3MTEsNyArMjcyMSw4IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKCkKICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYpIC0+IGRvdWJsZSB7CiAgICAgICAg
ICAgICByZXR1cm4gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3RhY2st
PnNpemUoKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXll
ZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhl
Y3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKIH0KIAog
dm9pZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0Nv
bnN0cmFpbnQ+IGNvbnN0cmFpbnQpCkBAIC0yNzk0LDE2ICsyODA1LDYgQEAgdm9pZCBIZWFwOjph
bGxvd0NvbGxlY3Rpb24oKQogICAgIG1fY29sbGVjdENvbnRpbnVvdXNseUxvY2sudW5sb2NrKCk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIEhlYXA6OmZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9w
YXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0b3IpOwotICAgIGZvciAoYXV0byYgc2xv
dFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICBmdW5jKCpzbG90Vmlz
aXRvcik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKGJvb2wgdmFs
dWUpCiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCAr
Mjg0OCwyNCBAQCB2b2lkIEhlYXA6OnJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjCiAgICAg
bV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJlbW92ZUZpcnN0KGNhbGxiYWNrKTsKIH0KIAordm9p
ZCBIZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IHRhc2spCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdN
dXRleCk7CisgICAgbV9ib251c1Zpc2l0b3JUYXNrID0gdGFzazsKKyAgICBtX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwordm9pZCBIZWFwOjpydW5UYXNrSW5QYXJh
bGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAg
IHVuc2lnbmVkIGluaXRpYWxSZWZDb3VudCA9IHRhc2stPnJlZkNvdW50KCk7CisgICAgc2V0Qm9u
dXNWaXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5ydW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVsbHB0cik7CisgICAgeworICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKKyAgICAgICAgd2hpbGUgKHRh
c2stPnJlZkNvdW50KCkgPiBpbml0aWFsUmVmQ291bnQpCisgICAgICAgICAgICBtX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZS53YWl0KG1fbWFya2luZ011dGV4KTsKKyAgICB9Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiV2Vha0hhbmRsZU93bmVyLmgiCiAjaW5j
bHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNU
aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgpAQCAtMTE0LDcgKzExNSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc190aW1lQ2hlY2tSZXNvbHV0aW9uID0gMTY7CiAKICAgICBzdGF0aWMg
Ym9vbCBpc01hcmtlZChjb25zdCB2b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNNYXJrZWRDb25j
dXJyZW50bHkoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQo
SGVhcFZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxT
aXplKGNvbnN0IHZvaWQqKTsKQEAgLTE1NCw3ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAgTXV0YXRv
clN0YXRlIG11dGF0b3JTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YXRlOyB9CiAg
ICAgc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IGNvbGxlY3Rpb25TY29wZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29sbGVjdGlvblNjb3BlOyB9CiAgICAgYm9vbCBoYXNIZWFwQWNjZXNzKCkg
Y29uc3Q7Ci0gICAgYm9vbCBjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgp
IGNvbnN0OworICAgIGJvb2wgd29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxk
SXNSdW5uaW5nKCkgY29uc3QgeyByZXR1cm4gIXdvcmxkSXNTdG9wcGVkKCk7IH0KIAogICAgIC8v
IFdlJ3JlIGFsd2F5cyBidXN5IG9uIHRoZSBjb2xsZWN0aW9uIHRocmVhZHMuIE9uIHRoZSBtYWlu
IHRocmVhZCwgdGhpcyByZXR1cm5zIHRydWUgaWYgd2UncmUKICAgICAvLyBoZWxwaW5nIGhlYXAu
CkBAIC0zNTgsNiArMzU5LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5h
bGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJl
bW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsK
KyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAg
ICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4oZnVuYykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC01MjcsNiArNTM5LDggQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBz
ZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
KTsKKyAgICAKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVf
dCBtX3JhbVNpemU7CiAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3
OSw5ICs1OTMsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxh
YmxlUGFyYWxsZWxTbG90VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNo
U2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0Owog
ICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVC
bG9ja1NldD4gbV9jb2RlQmxvY2tzOwpAQCAtNjMzLDggKzY0NCw3IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9v
bCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29w
YXF1ZVJvb3RzTXV0ZXg7Ci0gICAgSGFzaFNldDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsK
KyAgICBDb25jdXJyZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1Miw3
IEBAIHByaXZhdGU6CiAgICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+
OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNs
aWVudCBtX2hlbHBlckNsaWVudDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+PiBtX2JvbnVzVmlzaXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0Up
CiAgICAgc2l6ZV90IG1fYmxvY2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKQEAgLTY1Nyw3ICs2Njgs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBuZWVkRmluYWxpemVCaXQg
PSAxdSA8PCA0dTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQg
PSAxdSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0
aW9uIHZhcmlhYmxlLgogICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwotICAgIGJv
b2wgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX3dvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1f
YmVmb3JlR0M7CiAgICAgTW9ub3RvbmljVGltZSBtX2FmdGVyR0M7CiAgICAgTW9ub3RvbmljVGlt
ZSBtX3N0b3BUaW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MywzMCArNjMsMjAgQEAgaW5saW5lIGJvb2wg
SGVhcDo6aGFzSGVhcEFjY2VzcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fd29ybGRTdGF0ZS5sb2Fk
KCkgJiBoYXNBY2Nlc3NCaXQ7CiB9CiAKLWlubGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGll
dmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgY29uc3QKK2lubGluZSBib29sIEhlYXA6Ondvcmxk
SXNTdG9wcGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZDsKKyAgICByZXR1cm4gbV93b3JsZElzU3RvcHBlZDsKIH0KIAorLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4g
Z2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNN
YXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgp
ICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2Vf
Y2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlv
bigpKQogICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsK
ICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVy
biBibG9jay5pc01hcmtlZCgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgp
Lm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2Vs
bCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxs
LT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0
aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRC
bG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAg
YmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwor
ICAgIHJldHVybiBibG9jay5pc01hcmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCku
bWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0
ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBy
YXdDZWxsKQpAQCAtMTc5LDE5ICsxNjksMTkgQEAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNv
b24oUmV0YWluUHRyPAogCiBpbmxpbmUgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRo
KCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVz
VGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBt
X3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAogaW5saW5lIHZv
aWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdD
VGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7Cisg
ICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9k
ZWZlcnJhbERlcHRoLS07CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFs
RGVwdGhBbmRHQ0lmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBt
X2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1h
eUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgt
LTsKICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9kaWREZWZlckdDV29yaykpIHsKQEAgLTI2OSw0
ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5KCkKICAgICAgICAg
c3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9p
ZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgIGZ1bmMo
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9y
KTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykK
KyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxk
ZXIuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2
b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3QoCiB2b2lkIEhlYXBTbmFwc2hv
dEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQogewogICAgIEFTU0VSVChtX3Byb2Zp
bGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOwotICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNl
bGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGluZ05vZGVGb3JDZWxsKGNlbGwpKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRp
b24uaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFy
Z2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgog
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c01hcmtlZChIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqLCBEZXBlbmRlbmN5KSB7IHJldHVybiBpc01hcmtl
ZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBW
ZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJr
ZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyByZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5
QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29sIGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVmFsaWRDZWxsOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9M
b2NrRHVyaW5nTWFya2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQg
KzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBVc2UgdGhpcyBsb2NrIHNjb3BlIGxpa2Ugc286
CiAvLyBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKGhlYXAsIGxvY2spOwogdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci1Mb2NrZXI8TG9ja1R5cGU+IGxvY2tEdXJpbmdNYXJraW5n
KEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNzZWRMb2NrKQorYXV0byBsb2NrRHVyaW5nTWFya2lu
ZyhIZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFzc2VkTG9jaykKIHsKLSAgICBMb2NrVHlwZSogbG9j
azsKLSAgICBpZiAoaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSkKLSAgICAgICAgbG9jayA9
ICZwYXNzZWRMb2NrOwotICAgIGVsc2UKLSAgICAgICAgbG9jayA9IG51bGxwdHI7Ci0gICAgcmV0
dXJuIExvY2tlcjxMb2NrVHlwZT4obG9jayk7CisgICAgcmV0dXJuIGhvbGRMb2NrSWYocGFzc2Vk
TG9jaywgaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDMzIEBAIHZv
aWQgTWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQoKQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4g
TWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKQoreworICAgIGNs
YXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPiB7Cisg
ICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKQorICAg
ICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcnVuKCkgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
ICAgICAgICAgbV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZpbmRCaXQo
bV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9jYXRvci5t
X2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9ibG9ja3NbbV9pbmRleCsrXTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1fYWxsb2Nh
dG9yOworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKKyAgICAgICAgTG9jayBtX2xvY2s7
CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMpKTsKK30K
Kwogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBtX2NlbGxTaXplLCAiLyIsIG1f
YXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVk
ZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05OSw2ICsxMDAsOCBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxv
Y2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJlZlB0cjxT
aGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tT
b3VyY2UoKTsKKyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
ICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjUxNzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTgsNyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2
b2lkKik7CiAgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29u
c3Qgdm9pZCopOwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQq
LCBEZXBlbmRlbmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCosIERl
cGVuZGVuY3kpOwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtz
U3RhbGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lXaXRoPGJv
b2w+IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
bik7CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbik7CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBt
X21hcmtpbmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+
IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNp
b247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNp
b24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9j
azo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBt
X21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJz
aW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1
cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9
CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUo
KQpAQCAtNTI0LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2Vk
UmF3KGNvbgogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3Rh
bGUobWFya2luZ1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NT
dGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVl
KQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChV
TkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5j
eSk7CisgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVy
c2lvbikpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9p
ZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDEx
IEBAIHB1YmxpYzoKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhh
dmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAg
Ym9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQogICAgIAorICAg
IFdlYWtTZXQqIGFjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRz
LmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1f
YWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0Jl
Z2luKCkgeyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1Nl
dCogbmV3QWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmVu
ZCgpOyB9CisgICAgCiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFG
aWxlKCkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNp
emVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsyNywxNSBAQAogI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VmlzaXRDb3VudGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1NYXJraW5nQ29uc3RyYWludDo6
TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcg
bmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkpCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0
eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIDogbV9hYmJyZXZpYXRl
ZE5hbWUoYWJicmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAg
LCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3Zv
bGF0aWxpdHkodm9sYXRpbGl0eSkKLXsKLX0KLQotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdD
b25zdHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0g
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+
IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBx
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkpCi0gICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCi0gICAgLCBt
X25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3Zl
KHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQogICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxp
dHkpCisgICAgLCBtX3BhcmFsbGVsaXNtKHBhcmFsbGVsaXNtKQogewogfQogCkBAIC02MywxNCAr
NDgsNTEgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0
VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1l
IHRpbWVvdXQpCitDb25zdHJhaW50UGFyYWxsZWxpc20gTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAg
ICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2
aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAg
IG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0
VmlzaXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRp
ZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0
b3IpOworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIHJlc3VsdCA9IGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworICAgIG1fbGFz
dFZpc2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIG1fbGFzdEV4ZWN1
dGVQYXJhbGxlbGlzbSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitkb3VibGUg
TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBx
dWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6
ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVy
IHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7
CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
IG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwor
ICAgIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3Vu
dCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50Ojpkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJh
bGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJikKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxMCBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIgogI2luY2x1ZGUgIkNv
bnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCiAjaW5j
bHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAt
NDMsMTggKzQxLDkgQEAgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAg
ICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3Im
KT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBNYXJraW5nQ29uc3RyYWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LCBDb25zdHJhaW50Vm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1h
cmtpbmdDb25zdHJhaW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWFya2lu
Z0NvbnN0cmFpbnQoKTsKICAgICAKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KICAgICAKQEAgLTY0LDMzICs1MywzOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZXNldFN0YXRzKCk7CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBsYXN0
RXhlY3V0ZVBhcmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXhlY3V0ZVBhcmFsbGVs
aXNtOyB9CiAgICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIGV4ZWN1dGUoU2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3Jr
RXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBpZiAoIW1fcXVp
Y2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBy
ZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOwotICAgIH0KLSAgICAK
LSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9y
KTsKLSAgICB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3Jr
RXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIAorICAgIGRvdWJsZSB3b3JrRXN0
aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIAorICAgIHZvaWQgZG9QYXJhbGxlbFdv
cmsoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRv
ciYpOwogICAgIAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7
IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KICAgICAKKyAgICAvLyBJZiB0aGlzIGlzIFNlcXVlbnRp
YWwsIGl0IG1lYW5zIHRoYXQgdGhlIGNvbnN0cmFpbnQgaGFzIHRvIGJlIHJ1biBzZXF1ZW50aWFs
bHksIHdpdGggbm8gY29uY3VycmVudAorICAgIC8vIGNvbnN0cmFpbnRzLgorICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207
IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1
dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkb1BhcmFsbGVsV29y
a0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyYWxsZWxXb3Jr
SW1wbChTbG90VmlzaXRvciYpOworICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ7IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KICAgICAKICAgICB1
bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKICAgICBDU3RyaW5nIG1fYWJicmV2aWF0ZWRO
YW1lOwogICAgIENTdHJpbmcgbV9uYW1lOwotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRv
ciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYgdGltZW91dCk+IG1fZXhlY3V0ZUZ1bmN0aW9uOwot
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbjsKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtIG1fcGFyYWxsZWxpc207CisgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSB7IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwgfTsgLy8gSXQncyBhIGhldXJpc3RpYywgd2UgY2FuIGJlIHdyb25nLiBUaGlzIGd1ZXNz
IG9ubHkgYWZmZWN0cyB0aGUgZmlyc3QgcnVuLgogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50
IHsgMCB9OworICAgIExvY2sgbV9sb2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
ZXQuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYwICsyNiwxNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0Lmgi
CiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYXJr
aW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgRXhlY3V0
aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRv
ciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAg
LCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgc2hvdWxkVGltZU91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRT
b21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAgIAotICAgIC8v
IFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0LgotICAgIGJvb2wgZHJhaW4oQml0VmVjdG9y
JiB1bmV4ZWN1dGVkKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1
dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAgICAgICAgICAgIHVuZXhlY3V0
ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQotCi0gICAgdm9pZCBleGVjdXRlKHNpemVf
dCBpbmRleCkKLSAgICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zp
c2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7Ci0gICAgICAgIG1fZXhlY3V0
ZWQuc2V0KGluZGV4KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE1hcmtpbmdDb25zdHJh
aW50U2V0JiBtX3NldDsKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIE1vbm90b25p
Y1RpbWUgbV90aW1lb3V0OwotICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOwotICAgIGJvb2wgbV9k
aWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci19OwotCi1NYXJraW5nQ29uc3RyYWludFNldDo6
TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25z
dHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsKIH0KIApAQCAtMTA3
LDE4ICs2NCwxOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAg
ICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQo
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29u
c3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogewotICAgIGFkZChzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUo
bmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFr
ZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1l
KSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIHBhcmFsbGVs
aXNtKSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKICAgICA6OkZ1
bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAot
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCisgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkgdm9sYXRpbGl0eSwKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20p
CiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUo
YWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rpb24p
LCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7CisgICAg
YWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJi
cmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pLCBX
VEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlz
bSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBAIC0xMzEsOSArODks
OSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgbV9zZXQuYXBwZW5kKFdU
Rk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVj
dXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91
dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUlt
cGwodmlzaXRvciwgdGltZW91dCk7CisgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2Vu
Y2VJbXBsKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRh
TG9nKCIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0OCw5ICsxMDYsOSBAQCBib29sIE1h
cmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewotICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRvciwg
dGltZW91dCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIgc29sdmVyKCp0aGlzKTsKICAg
ICAKICAgICB1bnNpZ25lZCBpdGVyYXRpb24gPSBtX2l0ZXJhdGlvbisrOwogICAgIApAQCAtMTU5
LDE2ICsxMTcsMTQgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgog
CiAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdlIGhhdmUgbm90IGV4
ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhlbgogICAgIC8vIHdlIHNob3VsZCBl
eGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4
ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc29sdmVyLmRyYWluKG1f
dW5leGVjdXRlZFJvb3RzKTsKICAgICAKICAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3Jl
IGFueSB2aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNv
bnN0cmFpbnRzIG90aGVyCiAgICAgLy8gdGhhbiByb290cy4KICAgICBpZiAoaXRlcmF0aW9uID09
IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRl
eHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3RocykpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBzb2x2ZXIuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocyk7CiAgICAgCiAgICAgLy8g
V2Ugd2FudCB0byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRo
ZSBvbmVzIHRoYXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3At
dGhlLXdvcmxkIEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVu
ZGVuY3kgdG8gZ28gdG90YWxseQpAQCAtMjE1LDMzICsxNzEsMTYgQEAgYm9vbCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxp
dHkoKSA+IGItPnZvbGF0aWxpdHkoKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJr
aW5nQ29uc3RyYWludCogY29uc3RyYWludCA6IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3Qg
aSA9IGNvbnN0cmFpbnQtPmluZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9u
Q29udGV4dC5kaWRFeGVjdXRlKGkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4
ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2Un
cmUgaW4gY29udmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1h
cmtpbmcgaGFwcGVuIGFueXRpbWUKLSAgICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAv
LyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwg
dGltZW91dD8gTm90IGNsZWFyIGlmIHRoYXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2Uu
IE1heWJlIGV2ZW4gYmV0dGVyIGlzIHRoaXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3Ig
aXMgZW1wdHksIGtlZXAgcnVubmluZy4KLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBo
YXMgYXQgbGVhc3QgTiB0aGluZ3MsIHJldHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRp
bCB0aW1lb3V0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY2ODMyCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRo
aW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHNvbHZlci5jb252
ZXJnZShtX29yZGVyZWQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIFJldHVybiB0
cnVlIGlmIHdlJ3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlmIHdlIGRpZCBub3QgdmlzaXQg
YW55dGhpbmcuCisgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAog
dm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChhdXRv
JiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRv
ciwgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAg
ICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygp
KQogICAgICAgICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDIyNTE3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDkgKzMxLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBN
YXJraW5nQ29uc3RyYWludFNvbHZlcjsKKwogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgewog
cHVibGljOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KCk7CisgICAgTWFya2luZ0NvbnN0cmFp
bnRTZXQoSGVhcCYpOwogICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgpOwogICAgIAogICAgIHZv
aWQgZGlkU3RhcnRNYXJraW5nKCk7CkBAIC00MSwxNSArNDMsMTcgQEAgcHVibGljOgogICAgIHZv
aWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmlu
ZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248
dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAogICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShT
bG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgdm9pZCBhZGQoc3RkOjp1
bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CiAgICAgCkBAIC02MCwyMSArNjQsMTkgQEAg
cHVibGljOgogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBj
b25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAg
Ly8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQg
ZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKLSAgICAgICAgU2xvdFZp
c2l0b3ImLAotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwog
ICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVu
YW5pZ2Fucy4KICAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZh
dGU6Ci0gICAgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgRXhlY3V0
aW9uQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CiAg
ICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZp
c2l0b3ImKTsKICAgICAKLSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGlt
ZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRW
aXNpdFNvbWV0aGluZyk7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIEJpdFZlY3RvciYg
dW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcp
OwogICAgIAorICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9v
dHM7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IAor
CitNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIHNldCkKKyAgICA6IG1faGVhcChzZXQubV9oZWFwKQorICAgICwgbV9t
YWluVmlzaXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAgICAsIG1fc2V0KHNl
dCkKK3sKKyAgICBtX2hlYXAuZm9yRWFjaFNsb3RWaXNpdG9yKAorICAgICAgICBbJl0gKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBtX3Zpc2l0Q291bnRlcnMuYXBwZW5kKFZp
c2l0Q291bnRlcih2aXNpdG9yKSk7CisgICAgICAgIH0pOworfQorCitNYXJraW5nQ29uc3RyYWlu
dFNvbHZlcjo6fk1hcmtpbmdDb25zdHJhaW50U29sdmVyKCkKK3sKK30KKworYm9vbCBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjo6ZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAoreworICAgIGZvciAo
Y29uc3QgVmlzaXRDb3VudGVyJiB2aXNpdENvdW50ZXIgOiBtX3Zpc2l0Q291bnRlcnMpIHsKKyAg
ICAgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpleGVjdXRlKFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVk
TGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIG1faGVh
cC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIHsgcnVuRXhlY3V0aW9uVGhyZWFkKHZpc2l0b3IsIHByZWZlcmVuY2UsIHBpY2tOZXh0
KTsgfSk7CisgICAgICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6IG1fZGlkRXhl
Y3V0ZUluUGFyYWxsZWwpCisgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dLT5maW5pc2hQ
YXJhbGxlbFdvcmsobV9tYWluVmlzaXRvcik7CisgICAgbV9kaWRFeGVjdXRlSW5QYXJhbGxlbC5j
bGVhcigpOworCisgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV90b0V4ZWN1dGVTZXF1
ZW50aWFsbHkpCisgICAgICAgIGV4ZWN1dGUoKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dKTsKKyAg
ICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5jbGVhcigpOworICAgICAgICAKKyAgICBSRUxFQVNF
X0FTU0VSVChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOworfQorCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyOjpkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCit7Cisg
ICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgIGF1dG8gZW5kID0gdW5leGVj
dXRlZC5lbmQoKTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVybjsKKyAgICBh
dXRvIHBpY2tOZXh0ID0gc2NvcGVkTGFtYmRhKAorICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsK
KyAgICAgICAgfSk7CisgICAgZXhlY3V0ZShOZXh0Q29uc3RyYWludEZpcnN0LCBwaWNrTmV4dCk7
CisgICAgdW5leGVjdXRlZC5jbGVhckFsbCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyOjpjb252ZXJnZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIp
Cit7CisgICAgaWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgaWYgKG9yZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBzaXplX3QgaW5kZXggPSAwOworCisgICAgLy8gV2Ugd2FudCB0byBleGVjdXRlIHRoZSBm
aXJzdCBjb25zdHJhaW50IHNlcXVlbnRpYWxseSBpZiB3ZSB0aGluayBpdCB3aWxsIHF1aWNrbHkg
Z2l2ZSB1cyBhCisgICAgLy8gcmVzdWx0LiBJZiB3ZSByYW4gaXQgaW4gcGFyYWxsZWwgdG8gb3Ro
ZXIgY29uc3RyYWludHMsIHRoZW4gd2UgbWlnaHQgZW5kIHVwIGhhdmluZyB0byB3YWl0IGZvcgor
ICAgIC8vIHRob3NlIG90aGVyIGNvbnN0cmFpbnRzIHRvIGZpbmlzaCwgd2hpY2ggd291bGQgYmUg
YSB3YXN0ZSBvZiB0aW1lIHNpbmNlIGR1cmluZyBjb252ZXJnZW5jZSBpdCdzCisgICAgLy8gZW1w
aXJpY2FsbHkgbW9zdCBvcHRpbWFsIHRvIHJldHVybiB0byBkcmFpbmluZyBhcyBzb29uIGFzIGEg
Y29uc3RyYWludCBnZW5lcmF0ZXMgd29yay4gTW9zdAorICAgIC8vIGNvbnN0cmFpbnRzIGRvbid0
IGdlbmVyYXRlIGFueSB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUsIGFuZCB3aGVuIHRoZXkgZG8gZ2Vu
ZXJhdGUgd29yaywgdGhleSB0ZW5kCisgICAgLy8gdG8gZ2VuZXJhdGUgZW5vdWdoIG9mIGl0IHRv
IGZlZWQgYSBkZWNlbnQgZHJhaW5pbmcgY3ljbGUuIFRoZXJlZm9yZSwgcGF1c2UgdGltZXMgYXJl
IGxvd2VzdCBpZgorICAgIC8vIHdlIGdldCB0aGUgaGVjayBvdXQgb2YgaGVyZSBhcyBzb29uIGFz
IGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29yay4gSSB0aGluayB0aGF0IHBhcnQgb2Ygd2hhdAor
ICAgIC8vIG1ha2VzIHRoaXMgb3B0aW1hbCBpcyB0aGF0IHdlIGFsc28gbmV2ZXIgYWJvcnQgcnVu
bmluZyBhIGNvbnN0cmFpbnQgZWFybHksIHNvIHdoZW4gd2UgZG8gcnVuCisgICAgLy8gb25lLCBp
dCBoYXMgYW4gb3Bwb3J0dW5pdHkgdG8gZ2VuZXJhdGUgYXMgbXVjaCB3b3JrIGFzIGl0IHBvc3Np
Ymx5IGNhbi4KKyAgICAvLworICAgIC8vIFNpbWlsYXIgcmVhc29uaW5nIGFwcGxpZXMgdG8gY29u
c3RyYWludHMgdGhhdCB0ZW5kIHRvIHJldHVybiBDb3NudHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsCisgICAgLy8gZnJvbSBleGVjdXRlLiBUaG9zZSBjb25zdHJhaW50cyB0eXBpY2FsbHkgaGF2
ZSBhIHZlcnkgZmFzdC1ydW5uaW5nIGV4ZWN1dGUgZnVuY3Rpb24sIHdoaWNoIHRoZW4KKyAgICAv
LyBvZmZsb2FkcyBhbG1vc3QgYWxsIG9mIHRoZSB3b3JrIHRvIGEgcGFyYWxsZWwgd29ya2VyLiBJ
biB0aGF0IGNhc2UsIGl0IG1ha2VzIHNlbnNlIHRvIHJ1biB0aGUKKyAgICAvLyBleGVjdXRlIGZ1
bmN0aW9uIHNlcXVlbnRpYWxseS4KKyAgICBpZiAob3JkZXJbaW5kZXhdLT53b3JrRXN0aW1hdGUo
bV9tYWluVmlzaXRvcikKKyAgICAgICAgfHwgb3JkZXJbaW5kZXhdLT5sYXN0RXhlY3V0ZVBhcmFs
bGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICBl
eGVjdXRlKCpvcmRlcltpbmRleCsrXSk7CisgICAgICAgIAorICAgICAgICBpZiAobV90b0V4ZWN1
dGVJblBhcmFsbGVsLmlzRW1wdHkoKQorICAgICAgICAgICAgJiYgKG9yZGVyLmlzRW1wdHkoKSB8
fCBkaWRWaXNpdFNvbWV0aGluZygpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ICAgIAorICAgIGF1dG8gcGlja05leHQgPSBzY29wZWRMYW1iZGEoCisgICAgICAgIFsmXSAoKSAt
PiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAgICBpZiAoZGlkVmlzaXRTb21l
dGhpbmcoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4ID49IG9yZGVyLnNpemUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgcmV0dXJuIG9yZGVyW2luZGV4KytdLT5pbmRleCgpOworICAgICAgICB9KTsKKyAgICAKKyAg
ICBleGVjdXRlKFBhcmFsbGVsV29ya0ZpcnN0LCBwaWNrTmV4dCk7Cit9CisKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQp
Cit7CisgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KGNvbnN0cmFpbnQuaW5kZXgoKSkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBj
b25zdHJhaW50LmV4ZWN1dGUobV9tYWluVmlzaXRvcik7CisgICAgZGlkRXhlY3V0ZShwYXJhbGxl
bGlzbSwgY29uc3RyYWludC5pbmRleCgpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNv
bHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQ
cmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PigpPiBwaWNrTmV4dCkKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJvb2wgZG9QYXJhbGxl
bFdvcmtNb2RlOworICAgICAgICB1bnNpZ25lZCBpbmRleFRvUnVuOworICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRy
eVBhcmFsbGVsV29yayA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBpbmRleFRvUnVuID0gbV90b0V4ZWN1dGVJblBhcmFsbGVsLmZpcnN0KCk7
CisgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byB0cnlOZXh0Q29uc3RyYWlu
dCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcGlja1Jlc3VsdCA9
IHBpY2tOZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBpY2tSZXN1bHQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9leGVj
dXRlZC5nZXQoKnBpY2tSZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFsq
cGlja1Jlc3VsdF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RyYWludC5wYXJh
bGxlbGlzbSgpID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmFwcGVuZCgqcGlj
a1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0g
KnBpY2tSZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJz
dCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyYWxsZWxXb3JrKCkgfHwgdHJ5TmV4
dENvbnN0cmFpbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlOZXh0Q29uc3RyYWlu
dCgpIHx8IHRyeVBhcmFsbGVsV29yaygpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmICghbV9udW1BY3RpdmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IEFueSB3YWl0aW5nIGNvdWxkIGJlIHJlcGxhY2VkIHdpdGgganVzdCBydW5uaW5nIHRo
ZSBTbG90VmlzaXRvci4KKyAgICAgICAgICAgICAgICAvLyBJIHdvbmRlciBpZiB0aGF0IHdvdWxk
IGJlIHByb2ZpdGFibGUuCisgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX2xvY2sp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBt
X251bUFjdGl2ZVRocmVhZHMrKzsKKyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFs
bGVsaXNtOjpTZXF1ZW50aWFsOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTWFya2lu
Z0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl07CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKQorICAgICAg
ICAgICAgY29uc3RyYWludC5kb1BhcmFsbGVsV29yayh2aXNpdG9yKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRvcik7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChkb1BhcmFsbGVsV29ya01vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1
dGVJblBhcmFsbGVsU2V0LmdldChpbmRleFRvUnVuKSkgeworICAgICAgICAgICAgICAgICAgICBt
X2RpZEV4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJh
bGxlbC50YWtlRmlyc3QoCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIHZh
bHVlKSB7IHJldHVybiB2YWx1ZSA9PSBpbmRleFRvUnVuOyB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmNsZWFyKGluZGV4VG9SdW4pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9leGVjdXRl
ZC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFsbGVsaXNtID09IENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgbV90
b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fbnVtQWN0aXZlVGhyZWFkcy0tOworICAgICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5
QWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OmRpZEV4ZWN1dGUoQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgaWYgKHBhcmFsbGVs
aXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgbV90b0V4
ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleCk7CisgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJh
bGxlbFNldC5zZXQoaW5kZXgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25z
dHJhaW50U29sdmVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5o
PgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50OworY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludFNvbHZlcik7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6CisgICAgTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXIoTWFya2luZ0NvbnN0cmFpbnRTZXQmKTsKKyAgICB+TWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIoKTsKKyAgICAKKyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3Q7
CisgICAgCisgICAgZW51bSBTY2hlZHVsZXJQcmVmZXJlbmNlIHsKKyAgICAgICAgUGFyYWxsZWxX
b3JrRmlyc3QsCisgICAgICAgIE5leHRDb25zdHJhaW50Rmlyc3QKKyAgICB9OworCisgICAgdm9p
ZCBleGVjdXRlKFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgCisgICAgdm9pZCBkcmFpbihCaXRWZWN0b3Im
IHVuZXhlY3V0ZWQpOworICAgIAorICAgIHZvaWQgY29udmVyZ2UoY29uc3QgVmVjdG9yPE1hcmtp
bmdDb25zdHJhaW50Kj4mIG9yZGVyKTsKKyAgICAKKyAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0Nv
bnN0cmFpbnQmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQo
U2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOworICAgIAorICAgIHZvaWQgZGlkRXhlY3V0ZShD
b25zdHJhaW50UGFyYWxsZWxpc20sIHVuc2lnbmVkIGluZGV4KTsKKworICAgIEhlYXAmIG1faGVh
cDsKKyAgICBTbG90VmlzaXRvciYgbV9tYWluVmlzaXRvcjsKKyAgICBNYXJraW5nQ29uc3RyYWlu
dFNldCYgbV9zZXQ7CisgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CisgICAgRGVxdWU8dW5zaWdu
ZWQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgQml0VmVjdG9yIG1fdG9FeGVjdXRl
SW5QYXJhbGxlbFNldDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBtX2RpZEV4ZWN1dGVJblBh
cmFsbGVsOworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5
OworICAgIExvY2sgbV9sb2NrOworICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1bnNp
Z25lZCBtX251bUFjdGl2ZVRocmVhZHMgeyAwIH07CisgICAgVmVjdG9yPFZpc2l0Q291bnRlciwg
MTY+IG1fdmlzaXRDb3VudGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShyZXZpc2lvbiAyMjUx
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBP
cGFxdWVSb290U2V0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVSb290U2V0KTsK
LXB1YmxpYzoKLSAgICBPcGFxdWVSb290U2V0KCkKLSAgICAgICAgOiBtX2xhc3RRdWVyaWVkUm9v
dChudWxscHRyKQotICAgICAgICAsIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QoZmFsc2UpCi0g
ICAgewotICAgIH0KLQotICAgIGJvb2wgY29udGFpbnModm9pZCogcm9vdCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChyb290ICE9IG1fbGFzdFF1ZXJpZWRSb290KSB7Ci0gICAgICAgICAgICBt
X2xhc3RRdWVyaWVkUm9vdCA9IHJvb3Q7Ci0gICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJp
ZWRSb290ID0gbV9yb290cy5jb250YWlucyhyb290KTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdDsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHko
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuaXNFbXB0eSgpOwotICAgIH0K
LQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9yb290cy5jbGVhcigpOwotICAg
ICAgICBtX2xhc3RRdWVyaWVkUm9vdCA9IG51bGxwdHI7Ci0gICAgICAgIG1fY29udGFpbnNMYXN0
UXVlcmllZFJvb3QgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGFkZCh2b2lkKiByb290KQot
ICAgIHsKLSAgICAgICAgaWYgKHJvb3QgPT0gbV9sYXN0UXVlcmllZFJvb3QpCi0gICAgICAgICAg
ICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fcm9v
dHMuYWRkKHJvb3QpLmlzTmV3RW50cnk7Ci0gICAgfQotCi0gICAgaW50IHNpemUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuc2l6ZSgpOwotICAgIH0KLQotICAgIEhhc2hT
ZXQ8dm9pZCo+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9yb290cy5iZWdpbigpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuZW5k
KCk7Ci0gICAgfQotCi0KLXByaXZhdGU6Ci0gICAgSGFzaFNldDx2b2lkKj4gbV9yb290czsKLSAg
ICBtdXRhYmxlIHZvaWQqIG1fbGFzdFF1ZXJpZWRSb290OwotICAgIG11dGFibGUgYm9vbCBtX2Nv
bnRhaW5zTGFzdFF1ZXJpZWRSb290OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXJhbGxlbFNv
dXJjZUFkYXB0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5lclR5
cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitjbGFzcyBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIgOiBw
dWJsaWMgU2hhcmVkVGFzazxJbm5lclR5cGUoKT4geworcHVibGljOgorICAgIFBhcmFsbGVsU291
cmNlQWRhcHRlcihSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG91dGVyU291cmNlLCBj
b25zdCBVbndyYXBGdW5jJiB1bndyYXBGdW5jKQorICAgICAgICA6IG1fb3V0ZXJTb3VyY2Uob3V0
ZXJTb3VyY2UpCisgICAgICAgICwgbV91bndyYXBGdW5jKHVud3JhcEZ1bmMpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBJbm5lclR5cGUgcnVuKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAg
aWYgKG1faW5uZXJTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoSW5uZXJUeXBlIHJlc3Vs
dCA9IG1faW5uZXJTb3VyY2UtPnJ1bigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgICAgIG1faW5uZXJTb3VyY2UgPSBudWxscHRyOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2lubmVyU291cmNlID0gbV91bndyYXBG
dW5jKG1fb3V0ZXJTb3VyY2UtPnJ1bigpKTsKKyAgICAgICAgfSB3aGlsZSAobV9pbm5lclNvdXJj
ZSk7CisgICAgICAgIHJldHVybiBJbm5lclR5cGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBtX291dGVyU291cmNlOworICAgIFJlZlB0
cjxTaGFyZWRUYXNrPElubmVyVHlwZSgpPj4gbV9pbm5lclNvdXJjZTsKKyAgICBVbndyYXBGdW5j
IG1fdW53cmFwRnVuYzsKKyAgICBMb2NrIG1fbG9jazsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IE91dGVyVHlwZSwgdHlwZW5hbWUgSW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorUmVm
PFBhcmFsbGVsU291cmNlQWRhcHRlcjxPdXRlclR5cGUsIElubmVyVHlwZSwgVW53cmFwRnVuYz4+
IGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcihSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUo
KT4+IG91dGVyU291cmNlLCBjb25zdCBVbndyYXBGdW5jJiB1bndyYXBGdW5jKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFBhcmFsbGVsU291cmNlQWRhcHRlcjxPdXRlclR5cGUsIElubmVy
VHlwZSwgVW53cmFwRnVuYz4ob3V0ZXJTb3VyY2UsIHVud3JhcEZ1bmMpKTsKK30KKyAgICAKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQo
CisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkK
KyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92
ZShuYW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlv
bihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCit7Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJh
aW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVj
dXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tX
b3JrRXN0aW1hdGVGdW5jdGlvbiwKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5
LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCisgICAgOiBNYXJraW5nQ29uc3Ry
YWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHks
IHBhcmFsbGVsaXNtKQorICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVu
Y3Rpb24pKQorICAgICwgbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tX
b3JrRXN0aW1hdGVGdW5jdGlvbikpCit7Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKQoreworfQorCitkb3VibGUgU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOworfQorCitDb25z
dHJhaW50UGFyYWxsZWxpc20gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOwor
ICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFy
a2luZ0NvbnN0cmFpbnQgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpOworICAgIAorICAgIGRvdWJsZSBxdWlja1dv
cmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGU7CisgICAgCitwcml2YXRl
OgorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIG92
ZXJyaWRlOworCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1
bmN0aW9uOworICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDkgKzk4LDcgQEAgU2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiAKIHZv
aWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiB7Ci0gICAgaWYgKGhlYXAoKS0+Y29s
bGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQotICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBi
eSBub3cuCi0gICAgZWxzZQorICAgIGlmIChoZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09IENv
bGxlY3Rpb25TY29wZTo6RWRlbikKICAgICAgICAgcmVzZXQoKTsKIAogICAgIGlmIChIZWFwUHJv
ZmlsZXIqIGhlYXBQcm9maWxlciA9IHZtKCkuaGVhcFByb2ZpbGVyKCkpCkBAIC0xMTEsNyArMTA5
LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90Vmlz
aXRvcjo6cmVzZXQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUo
KSk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAg
bV9oZWFwU25hcHNob3RCdWlsZGVyID0gbnVsbHB0cjsKQEAgLTI3Nyw3ICsyNzQsNyBAQCB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250YWluZXJUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01h
cmtTdGFjayhDb250YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAK
ICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwpAQCAtMzQ2LDcgKzM0Myw3IEBAIHByaXZhdGU6
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBK
U0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNl
bGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIAogICAgIFNldEN1
cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCkBAIC00
MzUsNyArNDMyLDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCiAK
IHZvaWQgU2xvdFZpc2l0b3I6OnVwZGF0ZU11dGF0b3JJc1N0b3BwZWQoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQogewotICAgIG1fbXV0YXRvcklzU3RvcHBlZCA9IChtX2hlYXAuY29sbGVjdG9yQmVs
aWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0
YXRvcik7CisgICAgbV9tdXRhdG9ySXNTdG9wcGVkID0gKG1faGVhcC53b3JsZElzU3RvcHBlZCgp
ICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKIH0KIAogdm9pZCBTbG90VmlzaXRv
cjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZCgpCkBAIC00NTIsNyArNDQ5LDcgQEAgYm9vbCBTbG90
VmlzaXRvcjo6aGFzQWNrbm93bGVkZ2VkVGhhdFRoZQogCiBib29sIFNsb3RWaXNpdG9yOjptdXRh
dG9ySXNTdG9wcGVkSXNVcFRvRGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbXV0YXRvcklz
U3RvcHBlZCA9PSAobV9oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVk
KCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOworICAgIHJldHVybiBtX211dGF0
b3JJc1N0b3BwZWQgPT0gKG1faGVhcC53b3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZv
clN0b3BwZWRNdXRhdG9yKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6b3B0aW1pemVGb3JTdG9w
cGVkTXV0YXRvcigpCkBAIC00OTAsOCArNDg3LDYgQEAgTkVWRVJfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmRyYWluKE1vbgogICAgICAgICBtX3JpZ2h0VG9SdW4uc2FmZXBvaW50KCk7CiAgICAg
ICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9Ci0gICAgCi0gICAgbWVyZ2VJZk5lY2Vz
c2FyeSgpOwogfQogCiBzaXplX3QgU2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWlu
aW5nKHNpemVfdCBieXRlc1JlcXVlc3RlZCkKQEAgLTU1MCw3ICs1NDUsNiBAQCBzaXplX3QgU2xv
dFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyCiAgICAgfQogCiAgICAgZG9uYXRlQWxsKCk7
Ci0gICAgbWVyZ2VJZk5lY2Vzc2FyeSgpOwogCiAgICAgcmV0dXJuIGJ5dGVzVmlzaXRlZCgpOwog
fQpAQCAtNTYxLDE3ICs1NTUsMTYgQEAgYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5h
dGlvbigpCiAgICAgcmV0dXJuIGRpZFJlYWNoVGVybWluYXRpb24obG9ja2VyKTsKIH0KIAotYm9v
bCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYp
Citib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIpCiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKQotICAgICAgICAmJiAhbV9oZWFw
Lm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgJiYgbV9oZWFwLm1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKLSAgICAgICAgJiYgbV9oZWFwLm1fc2hh
cmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgIHJldHVybiAhbV9oZWFwLm1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKKyAgICAgICAgJiYgIWhhc1dvcmsobG9ja2VyKTsK
IH0KIAogYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7
Ci0gICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHko
KQorICAgIHJldHVybiAhaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRDb2xs
ZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0
YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwogfQogCkBAIC01ODMsMTIgKzU3NiwxNCBAQCBORVZF
Ul9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICBib29sIGlzQWN0aXZl
ID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPj4gYm9udXNUYXNrOworICAgICAgICAKICAgICAgICAgewotICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKICAg
ICAgICAgICAgIGlmIChpc0FjdGl2ZSkKICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZX
YWl0aW5nUGFyYWxsZWxNYXJrZXJzKys7Ci0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KHNoYXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbikgewogICAgICAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQpA
QCAtNjI5LDI4ICs2MjQsNTcgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFp
blJlcwogCiAgICAgICAgICAgICAgICAgYXV0byBpc1JlYWR5ID0gWyZdICgpIC0+IGJvb2wgewog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yayhsb2NrZXIpCisgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrCiAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAgICAg
ICAgICAgIH07CiAKICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUud2FpdFVudGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91dCwgaXNSZWFkeSk7
CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFoYXNXb3JrKGxvY2tlcikK
KyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzaykKKyAgICAg
ICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzazsKKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJr
ZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVz
dWx0OjpEb25lOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3JFYWNoTWFya1N0YWNr
KAotICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRp
b25TdGF0dXMgewotICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20o
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2sp
LAotICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxs
ZWxNYXJrZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6
Q29udGludWU7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghYm9udXNUYXNrICYmIGlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGZvckVhY2hN
YXJrU3RhY2soCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNr
KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc3Rl
YWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRp
bmdHbG9iYWxTdGFjayhzdGFjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFw
Lm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGlu
Z1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkcmFpbih0
aW1lb3V0KTsKKyAgICAgICAgaWYgKGJvbnVzVGFzaykgeworICAgICAgICAgICAgYm9udXNUYXNr
LT5ydW4oKnRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogSWRlYWxs
eSwgd2Ugd291bGQgbm90IGhhdmUgdG8gZG8gdGhpcy4gSG93ZXZlciwgdGhlIHBhcmFsbGVsIG1h
cmtpbmcgYWxnb3JpdGhtIHdpbGwKKyAgICAgICAgICAgIC8vIGdldCBjb25mdXNlZCBpZiB3ZSBp
bml0aWF0ZSBpdCB3aXRoIHRoZSBoZWxwZXIgdmlzaXRvcnMgaGF2aW5nIGFueXRoaW5nIGluIHRo
ZWlyIHN0YWNrcy4KKyAgICAgICAgICAgIC8vIEFsc28sIHRoaXMgcHJvdGVjdHMgYnVncyB0aGF0
IGludm9sdmUgcmFjZXMgYmV0d2VlbiB2aXNpdENoaWxkcmVuIGFuZCBvbmUgb2YgdGhlCisgICAg
ICAgICAgICAvLyBjb25zdHJhaW50cy4KKyAgICAgICAgICAgIC8vZG9uYXRlQWxsKCk7CisKKyAg
ICAgICAgICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGlsbCBiZSBydW5uaW5nLCBhbmQg
bWF5IHJ1biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRoZSB0YXNrCisgICAgICAgICAg
ICAvLyBvdXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFyb3VuZCB0cnlpbmcgdG8gcnVu
IHRoZSB0YXNrLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobV9o
ZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisgICAgICAgICAgICAgICAgICAg
IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJv
bnVzVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRp
dGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgICAgICBk
cmFpbih0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaXNBY3RpdmUgPSB0
cnVlOwogICAgIH0KIH0KQEAgLTY3MCwxNSArNjk0LDE5IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWRE
cmFpblJlc3VsdCBTbG90VmlzaXQKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMo
KSA9PSAxCiAgICAgICAgIHx8IChtX2hlYXAubV93b3JsZFN0YXRlLmxvYWQoKSAmIEhlYXA6Om11
dGF0b3JXYWl0aW5nQml0KQogICAgICAgICB8fCAhbV9oZWFwLmhhc0hlYXBBY2Nlc3MoKQotICAg
ICAgICB8fCBtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkg
eworICAgICAgICB8fCBtX2hlYXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAvLyBUaGlz
IGlzIGFuIG9wdGltaXphdGlvbiBvdmVyIGRyYWluSW5QYXJhbGxlbCgpIHdoZW4gd2UgaGF2ZSBh
IGNvbmN1cnJlbnQgbXV0YXRvciBidXQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGlzIG5vdCBw
cm9maXRhYmxlLgogICAgICAgICByZXR1cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVvdXQpOwogICAg
IH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7Ci0gICAg
ZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9uYXRlQWxsKGhvbGRMb2NrKG1faGVhcC5t
X21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3YWl0Rm9yVGVybWluYXRpb24odGltZW91dCk7
Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6d2FpdEZv
clRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgZm9yICg7OykgewogICAgICAg
ICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFp
blJlc3VsdDo6VGltZWRPdXQ7CkBAIC03MTEsNjEgKzczOSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmRvbmF0ZUFsbChjb25zdCBBYnN0cmEKICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qo
dm9pZCogcm9vdCkKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKLSAgICAgICAgLy8gUHV0
IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX2hlYXAubV9vcGFx
dWVSb290cy5hZGQocm9vdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gUHV0IGlu
dG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25j
ZSBpbgotICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9u
J3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwot
ICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotfQotCi1ib29sIFNsb3RWaXNpdG9yOjpjb250
YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7
Ci0gICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwotfQotCi1U
cmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCogcm9v
dCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRl
OwotICAgIAotICAgIGlmIChtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAgICAgICBy
ZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVh
cC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgIGlmIChtX2hlYXAubV9vcGFxdWVSb290cy5jb250
YWlucyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vzc2FyeSgpCi17
Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
bWVyZ2VPcGFxdWVSb290cygpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJv
b3RzSWZQcm9maXRhYmxlKCkKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3Bh
cXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotICAgIAogdm9pZCBT
bG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAgICBpZiAoIW1faXNJblBhcmFsbGVsTW9kZSkgewpA
QCAtNzg1LDE2ICs3NTgsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25v
dG9uCiAgICAgZHJhaW4odGltZW91dCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3Bh
cXVlUm9vdHMoKQotewotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1f
b3BhcXVlUm9vdHMpCi0gICAgICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7
Ci0gICAgfQotICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLX0KLQogdm9pZCBTbG90VmlzaXRv
cjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFr
UmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJh
dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk9wYXF1ZVJv
b3RTZXQuaCIKICNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk1LDEwICs5NCw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwog
ICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOworICAgIGJvb2wgYWRkT3BhcXVl
Um9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgogICAgIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25z
dDsKLSAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7
CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogCiAgICAgYm9vbCBp
c0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9y
U3RhY2suaXNFbXB0eSgpOyB9CiAKQEAgLTEyMSw2ICsxMTksOCBAQCBwdWJsaWM6CiAKICAgICBT
aGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5J
blBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRGb3JUZXJtaW5h
dGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsK
IAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRyYWluaW5nIHRo
YXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4gVGhpcwogICAg
IC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0
LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpAQCAtMTI4LDgg
KzEyOCw2IEBAIHB1YmxpYzoKICAgICAvLyByYXJlIGNhc2VzIGhhcHBlbiB0ZW1wb3JhcmlseSBl
dmVuIGlmIHdlJ3JlIG5vdCByZWFjaGluZyB0ZXJtaW5hdGlvbikuCiAgICAgc2l6ZV90IHBlcmZv
cm1JbmNyZW1lbnRPZkRyYWluaW5nKHNpemVfdCBieXRlcyk7CiAgICAgCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBtZXJnZUlmTmVjZXNzYXJ5KCk7Ci0KICAgICAvLyBUaGlzIGluZm9ybXMg
dGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBh
bGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJl
IGZyZWVkIGF0IGVuZCBvZiBHQy4KICAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCog
YmFzZSk7CkBAIC0xOTQsMTAgKzE5Miw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3Rl
TGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVl
Um9vdHMoKTsKLQotICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAg
ICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9u
YXRlS25vd25QYXJhbGxlbCgpOwpAQCAtMjE1LDcgKzIwOSw2IEBAIHByaXZhdGU6CiAKICAgICBN
YXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0
YXRvclN0YWNrOwotICAgIE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93
bmluZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9y
LgogICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBh
cyBhIGRlYnVnZ2luZyBtb2RlLgogICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiwyMyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhCiAgICAgICAgIGFwcGVuZEhpZGRlbihi
YXJyaWVyc1tpXSk7CiB9CiAKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290
KHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFoZWFwKCktPm1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJv
b2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworfQorCiBpbmxp
bmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXpl
KQogewogICAgIGlmIChtX2lzRmlyc3RWaXNpdCkgewpAQCAtMTU5LDEyICsxNzYsMTIgQEAgaW5s
aW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKIAogaW5saW5lIFZNJiBTbG90Vmlz
aXRvcjo6dm0oKQogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJuICptX2hl
YXAudm0oKTsKIH0KIAogaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAog
ewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiUGFyYWxsZWxTb3Vy
Y2VBZGFwdGVyLmgiCiAjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1
ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCkBAIC0xNjAsNiArMTYxLDQzIEBAIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAor
UmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVs
QWxsb2NhdG9yU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8
TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3Ip
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2VkQWxsb2NhdG9y
KiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1f
YWxsb2NhdG9yOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBtX2Fs
bG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICAgICAgTG9jayBtX2xvY2s7Cisg
ICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sobV9maXJzdEFsbG9jYXRv
cikpOworfQorCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gU3Vi
c3BhY2U6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpCit7CisgICAgcmV0dXJu
IGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRCbG9j
azo6SGFuZGxlKj4oCisgICAgICAgIHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCksCisgICAgICAg
IFtdIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVmUHRyPFNoYXJlZFRhc2s8TWFy
a2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKQorICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRv
ci0+cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAgICAgIH0pOworfQorCiBNYXJr
ZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQogewog
ICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC04MSwxNyArODEsMjQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CiAgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQ
dHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+PiBwYXJhbGxlbEFsbG9jYXRvclNvdXJj
ZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNo
TWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiAgICAgdm9pZCBmb3JFYWNoTm90RW1wdHlNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAg
ICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6
OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpOworICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0
aW9uKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAg
IHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOworICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
Pj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw1MyBAQCB2b2lkIFN1YnNwYWNl
Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFj
aE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgY2xhc3MgVGFz
ayA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAg
ICAgICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCisgICAgICAgICAgICAsIG1fYmxvY2tTb3Vy
Y2Uoc3Vic3BhY2UucGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCkpCisgICAgICAg
ICAgICAsIG1fZnVuYyhmdW5jKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7Cisg
ICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1Nv
dXJjZS0+cnVuKCkpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxs
KAorICAgICAgICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2lu
ZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9m
dW5jKHZpc2l0b3IsIGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgIGlmICghbV9u
ZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3N1YnNwYWNlLmZvckVh
Y2hMYXJnZUFsbG9jYXRpb24oCisgICAgICAgICAgICAgICAgWyZdIChMYXJnZUFsbG9jYXRpb24q
IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb24tPmlzTWFy
a2VkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgYWxsb2NhdGlv
bi0+Y2VsbCgpLCBtX3N1YnNwYWNlLm1fYXR0cmlidXRlcy5jZWxsS2luZCk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vi
c3BhY2UmIG1fc3Vic3BhY2U7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKCk+PiBtX2Jsb2NrU291cmNlOworICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAg
ICAgTG9jayBtX2xvY2s7CisgICAgICAgIGJvb2wgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlv
bnMgeyB0cnVlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2so
KnRoaXMsIGZ1bmMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3Bh
Y2U6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvckVhY2hNYXJr
ZWRCbG9jaygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBWaXNpdENvdW50ZXIgeworcHVibGljOgorICAgIFZpc2l0Q291bnRlcigpIHsgfQorICAg
IAorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgOiBtX3Zp
c2l0b3IoJnZpc2l0b3IpCisgICAgICAgICwgbV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZp
c2l0Q291bnQoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVfdCB2aXNpdENvdW50KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zpc2l0b3ItPnZpc2l0Q291bnQoKSAtIG1f
aW5pdGlhbFZpc2l0Q291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTbG90VmlzaXRv
ciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50
IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoK
LSAgICBWaXNpdGluZ1RpbWVvdXQoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdU
aW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNp
dFNvbWV0aGluZykKLSAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENv
dW50KCkpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBzaXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9y
ZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwg
dmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZp
c2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0g
ICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1f
dGltZW91dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3
ICsxMTEsNyBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+
anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1h
cmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5p
c01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0
PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lv
biAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjpp
c0NoZWFwRHVyaW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAg
IAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8
ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShz
dG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8
IEhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1Bv
bHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChz
dG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkK
LSAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAg
ICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMsNiAr
MjMsNyBAQAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRjUyNkIxRjQy
MUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGNTI2OTFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5n
TWFsbG9jLmNwcCAqLzsgfTsKIAkJMEYzMEJBOTAxRTc4NzA4RTAwMkNBODQ3IC8qIEdsb2JhbFZl
cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzMEJBOEExRTc4NzA4RTAwMkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwICovOyB9OworCQkw
RjMwQ0I1QTFGQ0RGMTM0MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMENCNTgxRkNERjEz
MzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLzsgfTsKIAkJMEY0M0Q4RjEx
REI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzRDhFRjFEQjVBRERDMDAxMDhGQjYgLyog
QXV0b21hdGljVGhyZWFkLmNwcCAqLzsgfTsKIAkJMEY1QkYxNzYxRjIzRDQ5QTAwMjlEOTFEIC8q
IEdpZ2FjYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUJGMTc0MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgKi87IH07CiAJCTBG
NjBGMzJGMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwRjMyRDFERkNCRDFCMDA0
MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwICovOyB9OwpAQCAtMTgxLDYgKzE4Miw4IEBA
CiAJCTBGMzBCQThEMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaE1hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjMwQkE4RTFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMEJBOEYxRTc4NzA4RTAwMkNBODQ3IC8q
IExvZ2dpbmdIYXNoVHJhaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExv
Z2dpbmdIYXNoVHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjU4
MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjU5MUZDREYxMzMwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25j
dXJyZW50UHRySGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMxREQ3
MDFGMTMwOEJDMDA3MkVCNEEgLyogTG9ja0FsZ29yaXRobUlubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTG9ja0FsZ29yaXRobUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzNDhDN0QxRjQ3QUE5RDAwM0NGRUYyIC8qIFN0cmluZ1ZlY3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJpbmdWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNTAxNjMx
QkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIz
LDYgKzIyNiw4IEBACiAJCTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJl
YW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVByaW50U3RyZWFtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzMzVEMTY1REJBNzMwMDVBRDM4NyAv
KiBQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
cmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzMzVFMTY1
REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlE
QUEwNDFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0YWNrU2hvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tTaG90UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMTgxODBGQTIxODAwOUI2QjREIC8qIEJhZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZCMTRFMUExODEwRTFEQTAwOUI2QjREIC8qIEJhZ1RvSGFzaE1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCYWdUb0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtVHJhY2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzg3LDYgKzc5Miw4IEBACiAJCQkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1
IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCiAJCQkJQThBNDcyNzAxNTFBODI1QTAwNDEyM0ZG
IC8qIENvbXBpbGVyLmggKi8sCiAJCQkJNDZCQTlFQUIxRjRDRDYxRTAwOUEyQkJDIC8qIENvbXBs
ZXRpb25IYW5kbGVyLmggKi8sCisJCQkJMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1
cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKKwkJCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyog
Q29uY3VycmVudFB0ckhhc2hTZXQuaCAqLywKIAkJCQkwRkRCNjk4RDFCN0M2NDNBMDAwQzEwNzgg
LyogQ29uZGl0aW9uLmggKi8sCiAJCQkJRTM4QzQxMjYxRUI0RTA2ODAwNDI5NTdEIC8qIENQVVRp
bWUuY3BwICovLAogCQkJCUUzOEM0MTI3MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmggKi8s
CkBAIC05OTMsNiArMTAwMCw4IEBACiAJCQkJQThBNDczMEQxNTFBODI1QjAwNDEyM0ZGIC8qIFNw
ZWN0cnVtLmggKi8sCiAJCQkJQThBNDczMEUxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRz
LmNwcCAqLywKIAkJCQlBOEE0NzMwRjE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuaCAq
LywKKwkJCQkwRjlEQUEwNDFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90LmggKi8sCisJCQkJ
MEY5REFBMDUxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8sCiAJCQkJ
RkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwICovLAogCQkJCUZFREFD
RDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggKi8sCiAJCQkJMzEzRURFQzk3NzhF
NDlDOUJFQTkxQ0ZDIC8qIFN0YWNrVHJhY2UuY3BwICovLApAQCAtMTQxMyw2ICsxNDIyLDcgQEAK
IAkJCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MUYxNzUyQjFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudENvZGVycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyQzFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lz
dGVudERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUExRkNERjEzNDAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3
NTJEMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RW5jb2Rlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxMSArMzQ2LDE2IEBAIEFM
V0FZU19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVwZW5kZW5jeSgKICAgICByZXR1cm4gMDsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihU
KSA9PSA4Pjo6dHlwZSogPSBudWxscHRyPgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdBWVNf
SU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewogICAgIHVuc2lnbmVkIGRl
cGVuZGVuY3k7Ci0gICAgdWludDY0X3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFs
dWUpOworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDMyX3QgY29weTsKKyAgICAgICAgVCB2YWx1
ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5ID0gMDsKKyAgICB1LnZhbHVlID0gdmFsdWU7CiAjaWYg
Q1BVKEFSTTY0KQogICAgIC8vIENyZWF0ZSBhIG1hZ2ljYWwgemVybyB2YWx1ZSB0aHJvdWdoIGlu
bGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRpb24KICAgICAvLyBpc24ndCB2aXNpYmxlIHRv
IHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVzYWJsZSBhcyBhbiBvZmZzZXQgaW4K
QEAgLTM2Myw4MCArMzY4LDIwIEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KFQgdmEKICAgICAvLyBvciBhbiBhY3F1aXJlIGxvYWQuCiAgICAgYXNtKCJlb3IgJXdbZGVwZW5k
ZW5jeV0sICV3W2luXSwgJXdbaW5dIgogICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVu
ZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUu
Y29weSkpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2lu
XSwgJVtpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAg
ICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxz
ZQogICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4K
ICAgICBsb2FkTG9hZEZlbmNlKCk7CiAgICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BB
UkFNKGNvcHkpOworICAgIFVOVVNFRF9QQVJBTSh1LmNvcHkpOwogI2VuZGlmCiAgICAgcmV0dXJu
IGRlcGVuZGVuY3k7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgYWxtb3N0IGlkZW50aWNh
bCB0byB0aGUgb3RoZXIgZGVwZW5kZW5jeSgpIG92ZXJsb2FkLgotLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwNQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA0Pjo6dHlwZSogPSBudWxscHRyPgot
QUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICB1bnNp
Z25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQzMl90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0s
ICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kp
Ci0gICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2VsaWYgQ1BVKEFSTSkKLSAgICBhc20oImVv
ciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9
ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxzZQotICAgIGxv
YWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29w
eSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVwZW5kZW5jeTsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSAyPjo6dHlwZSogPSBu
dWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihU
KSA9PSAxPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50
MzJfdD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBEZXBlbmRl
bmN5V2l0aCB7Ci1wdWJsaWM6Ci0gICAgRGVwZW5kZW5jeVdpdGgoKQotICAgICAgICA6IGRlcGVu
ZGVuY3kobnVsbERlcGVuZGVuY3koKSkKLSAgICAgICAgLCB2YWx1ZSgpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQm
IHZhbHVlKQotICAgICAgICA6IGRlcGVuZGVuY3koZGVwZW5kZW5jeSkKLSAgICAgICAgLCB2YWx1
ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsK
LSAgICBUIHZhbHVlOwotfTsKLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgRGVw
ZW5kZW5jeVdpdGg8VD4gZGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25z
dCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGVwZW5kZW5jeVdpdGg8VD4oZGVwZW5kZW5jeSwg
dmFsdWUpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQqIGNvbnN1bWUoVCog
cG9pbnRlciwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewpAQCAtNDY5LDEwICs0MTQsOCBAQCBB
TFdBWVNfSU5MSU5FIFQmIGVuc3VyZVBvaW50ZXIoQXRvbWljPFQqCiAKIHVzaW5nIFdURjo6QXRv
bWljOwogdXNpbmcgV1RGOjpEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpEZXBlbmRlbmN5V2l0aDsK
IHVzaW5nIFdURjo6Y29uc3VtZTsKIHVzaW5nIFdURjo6ZGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6
ZGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmVuc3VyZVBvaW50ZXI7CiB1c2luZyBXVEY6Om51
bGxEZXBlbmRlbmN5OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMjI1MTc4KQorKysg
U291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgs
MTMgQEAgcHVibGljOiAKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCisg
ICAgICAgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7CisgICAgICAgICAgICBp
dGVyYXRvciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgICAgICsrKCp0aGlzKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKwogICAgICAgICBib29sIGlzQXRFbmQoKSBj
b25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA+PSBtX2JpdFZlY3Rv
ci0+c2l6ZSgpOwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyNTE3OCkKKysr
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsx
OCw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIENsb2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25U
aHJlYWQuaAogICAgIENvbXBpbGVyLmgKKyAgICBDb25jdXJyZW50UHRySGFzaFNldC5oCiAgICAg
Q29uZGl0aW9uLmgKICAgICBDcm9zc1RocmVhZENvcGllci5oCiAgICAgQ3Jvc3NUaHJlYWRUYXNr
LmgKQEAgLTEzMCw2ICsxMzEsOCBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTZWdtZW50ZWRWZWN0
b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCisgICAgU3RhY2tTaG90
LmgKKyAgICBTdGFja1Nob3RQcm9maWxlci5oCiAgICAgU3RhY2tTdGF0cy5oCiAgICAgU3RhY2tU
cmFjZS5oCiAgICAgU3RkTGliRXh0cmFzLmgKQEAgLTIxNiw2ICsyMTksNyBAQCBzZXQoV1RGX1NP
VVJDRVMKICAgICBDUFVUaW1lLmNwcAogICAgIENsb2NrVHlwZS5jcHAKICAgICBDb21waWxhdGlv
blRocmVhZC5jcHAKKyAgICBDb25jdXJyZW50UHRySGFzaFNldC5jcHAKICAgICBDcm9zc1RocmVh
ZENvcGllci5jcHAKICAgICBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcAogICAgIENyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcApJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQ
dHJIYXNoU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50
UHRySGFzaFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNvbmN1cnJlbnRQdHJIYXNoU2V0LmgiCisKKyNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworQ29uY3VycmVudFB0ckhhc2hTZXQ6OkNvbmN1
cnJlbnRQdHJIYXNoU2V0KCkKK3sKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0NvbmN1cnJlbnRQ
dHJIYXNoU2V0Ojp+Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworfQorCit2b2lkIENvbmN1cnJl
bnRQdHJIYXNoU2V0OjpkZWxldGVPbGRUYWJsZXMoKQoreworICAgIC8vIFRoaXMgaXMganVzdCBp
biBjYXNlLiBJdCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRvIGNhbGwg
YWRkKCkuIEJ1dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBpZiB3
ZSBkaWQgbWFrZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOyAKKyAgICAKKyAgICBtX2FsbFRhYmxlcy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAg
WyZdIChzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+JiB0YWJsZSkgLT4gYm9vbCB7CisgICAgICAgICAg
ICByZXR1cm4gdGFibGUuZ2V0KCkgIT0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB9
KTsKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6Y2xlYXIoKQoreworICAgIC8vIFRo
aXMgaXMganVzdCBpbiBjYXNlLiBJdCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJl
YWRzIHRvIGNhbGwgYWRkKCkuIEJ1dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQg
Y3Jhc2hlcyBpZiB3ZSBkaWQgbWFrZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOyAKKyAgICAKKyAgICBtX2FsbFRhYmxlcy5jbGVhcigpOworICAgIGlu
aXRpYWxpemUoKTsKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6aW5pdGlhbGl6ZSgp
Cit7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGluaXRpYWxTaXplID0gMzI7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFRhYmxlPiB0YWJsZSA9IFRhYmxlOjpjcmVhdGUoaW5pdGlhbFNpemUpOworICAg
IG1fdGFibGUuc3RvcmVSZWxheGVkKHRhYmxlLmdldCgpKTsKKyAgICBtX2FsbFRhYmxlcy5hcHBl
bmQoV1RGTW92ZSh0YWJsZSkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRT
bG93KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5z
aWduZWQgaW5kZXgsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAodGFibGUtPmxvYWQuZXhjaGFuZ2VB
ZGQoMSkgPj0gdGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuIHJlc2l6ZUFuZEFkZChw
dHIpOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdm9pZCogb2xkRW50cnkgPSB0YWJs
ZS0+YXJyYXlbaW5kZXhdLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhudWxscHRyLCBwdHIpOworICAg
ICAgICBpZiAoIW9sZEVudHJ5KSB7CisgICAgICAgICAgICBpZiAobV90YWJsZS5sb2FkKCkgIT0g
dGFibGUpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhZGRlZCBhbiBlbnRyeSB0byBhbiBvbGQg
dGFibGUhIFdlIG5lZWQgdG8gcmVleGVjdXRlIHRoZSBhZGQgb24gdGhlIG5ldyB0YWJsZS4KKyAg
ICAgICAgICAgICAgICByZXR1cm4gYWRkKHB0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2xkRW50cnkgPT0gcHRyKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYg
bWFzazsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAg
fQorfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVJZk5lY2Vzc2FyeSgpCit7
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIFRhYmxlKiB0YWJsZSA9
IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICBpZiAodGFibGUtPmxvYWQubG9hZFJlbGF4ZWQo
KSA8IHRhYmxlLT5tYXhMb2FkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGFibGU+IG5ld1RhYmxlID0gVGFibGU6OmNyZWF0ZSh0YWJsZS0+c2l6ZSAqIDIp
OworICAgIHVuc2lnbmVkIG1hc2sgPSBuZXdUYWJsZS0+bWFzazsKKyAgICB1bnNpZ25lZCBsb2Fk
ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUtPnNpemU7ICsraSkgewor
ICAgICAgICB2b2lkKiBwdHIgPSB0YWJsZS0+YXJyYXlbaV0ubG9hZFJlbGF4ZWQoKTsKKyAgICAg
ICAgaWYgKCFwdHIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIEF0b21p
Yzx2b2lkKj4mIGVudHJ5UmVmID0gbmV3VGFibGUtPmFycmF5W2luZGV4XTsKKyAgICAgICAgICAg
IHZvaWQqIGVudHJ5ID0gZW50cnlSZWYubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICgh
ZW50cnkpIHsKKyAgICAgICAgICAgICAgICBlbnRyeVJlZi5zdG9yZVJlbGF4ZWQocHRyKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGVudHJ5ICE9IHB0cik7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYg
bWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsb2FkKys7CisgICAgfQorICAgIAorICAgIG5l
d1RhYmxlLT5sb2FkLnN0b3JlUmVsYXhlZChsb2FkKTsKKyAgICAKKyAgICBtX3RhYmxlLnN0b3Jl
KG5ld1RhYmxlLmdldCgpKTsKKyAgICBtX2FsbFRhYmxlcy5hcHBlbmQoV1RGTW92ZShuZXdUYWJs
ZSkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVBbmRBZGQodm9pZCog
cHRyKQoreworICAgIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGFkZChwdHIpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlPiBDb25jdXJy
ZW50UHRySGFzaFNldDo6VGFibGU6OmNyZWF0ZSh1bnNpZ25lZCBzaXplKQoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IHJlc3VsdChuZXcgKGZhc3RN
YWxsb2MoT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBhcnJheSkgKyBzaXplb2YoQXRvbWljPHZvaWQq
PikgKiBzaXplKSkgVGFibGUoKSk7CisgICAgcmVzdWx0LT5zaXplID0gc2l6ZTsKKyAgICByZXN1
bHQtPm1hc2sgPSBzaXplIC0gMTsKKyAgICByZXN1bHQtPmxvYWQuc3RvcmVSZWxheGVkKDApOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJlc3VsdC0+
YXJyYXlbaV0uc3RvcmVSZWxheGVkKG51bGxwdHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRy
SGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNo
U2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsK
KworLy8gVGhpcyBpcyBhIGNvbmN1cnJlbnQgaGFzaC1iYXNlZCBzZXQgZm9yIHBvaW50ZXJzLiBJ
dCdzIG9wdGltaXplZCBmb3I6CisvLworLy8gLSBIaWdoIHJhdGUgb2YgY29udGFpbnMoKSBjYWxs
cy4KKy8vIC0gSGlnaCByYXRlIG9mIGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5n
IG5ldy4gYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgKG5vcCBhZGRzKQorLy8g
ICBkb24ndCBtdXRhdGUgdGhlIHRhYmxlIGF0IGFsbC4KKy8vIC0gTm90IHRvbyBtYW55IHRocmVh
ZHMuIEkgZG91YnQgdGhpcyBzY2FsZXMgYmV5b25kIH40LiBUaG91Z2gsIGl0IG1heSBhY3R1YWxs
eSBzY2FsZSBiZXR0ZXIgdGhhbiB0aGF0CisvLyAgIGlmIHRoZSByYXRlIG9mIG5vcCBhZGRzIGlz
IGFic3VyZGx5IGhpZ2guCisvLworLy8gSWYgd2Ugd2FudGVkIHRoaXMgdG8gc2NhbGUgYmV0dGVy
LCB0aGUgbWFpbiBjaGFuZ2Ugd2UnZCBoYXZlIHRvIG1ha2UgaXMgaG93IHRoaXMgdGFibGUgZGV0
ZXJtaW5lcyB3aGVuCisvLyB0byByZXNpemUuIFJpZ2h0IG5vdyBpdCdzIGEgc2hhcmVkIGNvdW50
ZXIuIFdlIGxvY2s7eGFkZCB0aGlzIGNvdW50ZXIuIE9uZSBlYXN5IHdheSB0byBtYWtlIHRoYXQK
Ky8vIHNjYWxhYmxlIGlzIHRvIHJlcXVpcmUgZWFjaCB0aHJlYWQgdGhhdCB3b3JrcyB3aXRoIHRo
ZSBDb25jdXJyZW50UHRySGFzaFNldCB0byByZWdpc3RlciBpdHNlbGYgZmlyc3QuCisvLyBUaGVu
IGVhY2ggdGhyZWFkIHdvdWxkIGhhdmUgc29tZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhhcyBhIGNv
dW50ZXIuIFdlIGNvdWxkIGluc3RpdHV0ZSB0aGUgcG9saWN5IHRoYXQKKy8vIGVhY2ggdGhyZWFk
IHNpbXBseSBpbmNyZW1lbnRzIGl0cyBvd24gbG9hZCBjb3VudGVyLCBpbiBpdHMgb3duIGRhdGEg
c3RydWN0dXJlLiBUaGVuLCBpZiBhbnkgc2VhcmNoIHRvCisvLyByZXNvbHZlIGEgY29sbGlzaW9u
IGRvZXMgbW9yZSB0aGFuIE4gaXRlcmF0aW9ucywgd2UgY2FuIGNvbXB1dGUgYSBjb21iaW5lZCBs
b2FkIGJ5IHN1bW1pbmcgdGhlIGxvYWQKKy8vIGNvdW50ZXJzIG9mIGFsbCBvZiB0aGUgdGhyZWFk
IGRhdGEgc3RydWN0dXJlcy4KKy8vCisvLyBDb25jdXJyZW50UHRySGFzaFNldCdzIG1haW4gdXNl
ciwgdGhlIEdDLCBzZWVzIGEgOTglIG5vcCBhZGQgcmF0ZSBpbiBTcGVlZG9tZXRlci4gVGhhdCdz
IHdoeSB0aGlzCisvLyBmb2N1c2VzIHNvIG11Y2ggb24gY2FzZXMgd2hlcmUgdGhlIHRhYmxlIGRv
ZXMgbm90IGNoYW5nZS4KK2NsYXNzIENvbmN1cnJlbnRQdHJIYXNoU2V0IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDb25jdXJyZW50UHRySGFzaFNldCk7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ29uY3VycmVudFB0
ckhhc2hTZXQoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkNvbmN1cnJlbnRQdHJIYXNoU2V0
KCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvbnRhaW5zKFQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udGFpbnNJbXBsKGNhc3QodmFsdWUpKTsK
KyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGFkZChUIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZEltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0K
KyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90
YWJsZS5sb2FkUmVsYXhlZCgpLT5sb2FkLmxvYWRSZWxheGVkKCk7CisgICAgfQorICAgIAorICAg
IC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBjYWxs
IGFkZCgpLiBUaGlzIGZyZWVzIHVwIG1lbW9yeSB3aXRob3V0IGNoYW5naW5nCisgICAgLy8gdGhl
IGNvbnRlbnRzIG9mIHRoZSB0YWJsZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxl
dGVPbGRUYWJsZXMoKTsKKyAgICAKKyAgICAvLyBPbmx5IGNhbGwgd2hlbiB5b3Uga25vdyB0aGF0
IG5vIG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQoKS4gVGhpcyBmcmVlcyB1cCBhbGwgbWVtb3J5
IGV4Y2VwdCBmb3IKKyAgICAvLyB0aGUgc21hbGxlc3QgcG9zc2libGUgaGFzaHRhYmxlLgorICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyKCk7CisgICAgCitwcml2YXRlOgorICAgIHN0
cnVjdCBUYWJsZSB7CisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IGNyZWF0ZSh1bnNp
Z25lZCBzaXplKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG1heExvYWQoKSBjb25zdCB7
IHJldHVybiBzaXplIC8gMjsgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc2l6ZTsgLy8g
VGhpcyBpcyBpbW11dGFibGUuCisgICAgICAgIHVuc2lnbmVkIG1hc2s7IC8vIFRoaXMgaXMgaW1t
dXRhYmxlLgorICAgICAgICBBdG9taWM8dW5zaWduZWQ+IGxvYWQ7CisgICAgICAgIEF0b21pYzx2
b2lkKj4gYXJyYXlbMV07CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaCh2
b2lkKiBwdHIpCisgICAgeworICAgICAgICByZXR1cm4gUHRySGFzaDx2b2lkKj46Omhhc2gocHRy
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkKiBjYXN0KFQgdmFsdWUpCisgICAgeworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihUKSA8PSBzaXplb2Yodm9pZCopLCAidHlwZSB0b28gYmlnIik7
CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHZvaWQqIHB0cjsKKyAgICAgICAgICAgIFQg
dmFsdWU7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5wdHIgPSBudWxscHRyOworICAgICAgICB1
LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiB1LnB0cjsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBjb250YWluc0ltcGwodm9pZCogcHRyKSBjb25zdAorICAgIHsKKyAgICAgICAgVGFibGUq
IHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB1bnNpZ25lZCBtYXNrID0g
dGFibGUtPm1hc2s7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBt
YXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2Fk
UmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoZW50cnkgPT0gcHRyKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBuZXcgZW50cnkgd2FzIGFk
ZGVkLgorICAgIGJvb2wgYWRkSW1wbCh2b2lkKiBwdHIpCisgICAgeworICAgICAgICBUYWJsZSog
dGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0
YWJsZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1h
c2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7
OykgeworICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRS
ZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVy
biBhZGRTbG93KHRhYmxlLCBtYXNrLCBzdGFydEluZGV4LCBpbmRleCwgcHRyKTsKKyAgICAgICAg
ICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBhZGRTbG93KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQg
bWFzaywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgaW5kZXgsIHZvaWQqIHB0cik7CisK
KyAgICB2b2lkIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCByZXNpemVBbmRBZGQodm9p
ZCogcHRyKTsKKyAgICAKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRhYmxlPiwgND4gbV9h
bGxUYWJsZXM7CisgICAgQXRvbWljPFRhYmxlKj4gbV90YWJsZTsgLy8gVGhpcyBpcyBuZXZlciBu
dWxsLgorICAgIExvY2sgbV9sb2NrOyAvLyBXZSBqdXN0IHVzZSB0aGlzIHRvIGNvbnRyb2wgcmVz
aXplIHJhY2VzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q29uY3Vy
cmVudFB0ckhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9X
VEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTEgQEAgcHVibGlj
OgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBhcHBl
bmRBbmRCdWJibGUoVSYmLCBjb25zdCBGdW5jJik7CiAgICAgCisgICAgLy8gUmVtb3ZlIGFuZCBy
ZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRy
dWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFj
ayBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IFQgdGFrZUZpcnN0KGNvbnN0IEZ1bmMmKTsKKwogICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRo
ZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVy
bnMgYSBudWxsIHZlcnNpb24gb2YKICAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMg
cmV0dXJucyBmYWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTcxLDYgKzU3
NiwyNSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwCiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdChjb25z
dCBGdW5jJiBmdW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBz
aXplID0gdGhpcy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAg
VCBjYW5kaWRhdGUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkg
eworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgcHJlcGVuZCh0
YWtlTGFzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAgIH0KKyAg
ICAgICAgY291bnQrKzsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7CisgICAg
fQorICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBpbmxpbmUgVCBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgdW5zaWdu
ZWQgY291bnQgPSAwOwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjI1MTc4KQorKysg
U291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0
LDcgQEAgdXNpbmcgV1RGOjpmYXN0QWxpZ25lZEZyZWU7CiAjZGVmaW5lIFdURl9QUklWQVRFX0lO
TElORSBpbmxpbmUKICNlbmRpZgogCi0jZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIFwK
LXB1YmxpYzogXAorI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKICAgICB2
b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IFwKICAgICB2
b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAg
IFwKQEAgLTI2Myw3ICsyNjIsMTUgQEAgcHVibGljOiBcCiAgICAgICAgIEFTU0VSVChsb2NhdGlv
bik7IFwKICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOyBcCiAgICAgfSBcCisKKyNkZWZpbmUgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQgXAorcHVibGljOiBcCisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURURfSU1QTCBcCiBwcml2YXRlOiBcCiB0eXBlZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNl
QVNlbWljb2xvbkFmdGVyVGhpc01hY3JvCiAKKyNkZWZpbmUgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEIFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKK3R5cGVkZWYg
aW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KKwogI2VuZGlm
IC8qIFdURl9GYXN0TWFsbG9jX2ggKi8KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAyMjUxNzgpCisr
KyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDE2
IEBACiAjaW5jbHVkZSAiTG9jay5oIgogCiAjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG1Jbmxp
bmVzLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg+CiAKIG5hbWVzcGFjZSBX
VEYgewogCitzdGF0aWMgY29uc3RleHByIGJvb2wgcHJvZmlsZUxvY2tDb250ZW50aW9uID0gZmFs
c2U7CisKIHZvaWQgTG9ja0Jhc2U6OmxvY2tTbG93KCkKIHsKKyAgICBpZiAocHJvZmlsZUxvY2tD
b250ZW50aW9uKQorICAgICAgICBTVEFDS19TSE9UX1BST0ZJTEUoNCwgMiwgNSk7CiAgICAgRGVm
YXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xvY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCShy
ZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjIsNiArMTIyLDEyIEBAIExvY2tlcjxMb2NrVHlwZT4gaG9sZExvY2so
TG9ja1R5cGUmIGxvY2sKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CitMb2NrZXI8
TG9ja1R5cGU+IGhvbGRMb2NrSWYoTG9ja1R5cGUmIGxvY2ssIGJvb2wgcHJlZGljYXRlKQorewor
ICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+KHByZWRpY2F0ZSA/ICZsb2NrIDogbnVsbHB0cik7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogTG9ja2VyPExvY2tUeXBlPiB0cnlI
b2xkTG9jayhMb2NrVHlwZSYgbG9jaykKIHsKICAgICByZXR1cm4gTG9ja2VyPExvY2tUeXBlPjo6
dHJ5TG9jayhsb2NrKTsKQEAgLTEzNCw1ICsxNDAsNiBAQCB1c2luZyBXVEY6OkxvY2tlcjsKIHVz
aW5nIFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnOwogdXNpbmcgV1RGOjpOb0xvY2tpbmdOZWNl
c3Nhcnk7CiB1c2luZyBXVEY6OmhvbGRMb2NrOwordXNpbmcgV1RGOjpob2xkTG9ja0lmOwogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDYgKzE3NCwx
MyBAQCBwcml2YXRlOgogCiAvLyBUaGlzIGlzIGZvciB3aGVuIHlvdSBhbHJlYWR5IHJlZmVyIHRv
IGEgZnVuY3RvciBieSByZWZlcmVuY2UsIGFuZCB5b3Uga25vdyBpdHMgbGlmZXRpbWUgaXMKIC8v
IGdvb2QuIFRoaXMganVzdCBjcmVhdGVzIGEgU2NvcGVkTGFtYmRhIHRoYXQgcG9pbnRzIHRvIHlv
dXIgZnVuY3Rvci4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBpcyBhbHdheXMgd3Jvbmc6CisvLwor
Ly8gYXV0byByZWYgPSBzY29wZWRMYW1iZGFSZWYoWy4uLl0gKC4uLikgey4uLn0pOworLy8KKy8v
IEJlY2F1c2UgdGhlIHNjb3BlZExhbWJkYVJlZiB3aWxsIHJlZmVyIHRvIHRoZSBsYW1iZGEgYnkg
cmVmZXJlbmNlLCBhbmQgdGhlIGxhbWJkYSB3aWxsIGRpZSBhZnRlciB0aGUKKy8vIHNlbWljb2xv
bi4gVXNlIHNjb3BlZExhbWJkYSgpIGluIHRoYXQgY2FzZS4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KIFNjb3BlZExhbWJkYVJlZkZ1bmN0b3I8RnVu
Y3Rpb25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGFSZWYoY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9X
VEYvd3RmL1NoYXJlZFRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTEgQEAgbmFt
ZXNwYWNlIFdURiB7CiAvLyBzdGF0ZSBpbiBtZW1iZXIgZmllbGRzLiBUaGlzIGNhbiBiZSBtb3Jl
IG5hdHVyYWwgaWYgeW91IHdhbnQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB3aGF0CiAvLyBz
dGF0ZSBpcyBzaGFyZWQgYmV0d2VlbiBpbnN0YW5jZXMgb2YgdGhlIHRhc2suCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotY2xhc3MgU2hhcmVkVGFz
azxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8U2hhcmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+IHsKK3RlbXBs
YXRlPHR5cGVuYW1lIFBhc3NlZFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+
CitjbGFzcyBTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUg
KEFyZ3VtZW50VHlwZXMuLi4pPj4gewogcHVibGljOgorICAgIHR5cGVkZWYgUGFzc2VkUmVzdWx0
VHlwZSBSZXN1bHRUeXBlOworICAgIAogICAgIFNoYXJlZFRhc2soKSB7IH0KICAgICB2aXJ0dWFs
IH5TaGFyZWRUYXNrKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK2NsYXNzIFN0YWNrU2hvdCB7CitwdWJsaWM6CisgICAgU3RhY2tTaG90KCkgeyB9CisgICAg
CisgICAgQUxXQVlTX0lOTElORSBTdGFja1Nob3Qoc2l6ZV90IHNpemUpCisgICAgICAgIDogbV9z
aXplKHNpemUpCisgICAgeworICAgICAgICBpZiAoc2l6ZSkgeworICAgICAgICAgICAgbV9hcnJh
eSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4oc2l6ZSk7CisgICAgICAgICAgICBpbnQgaW50
U2l6ZSA9IHNpemU7CisgICAgICAgICAgICBXVEZHZXRCYWNrdHJhY2UobV9hcnJheS5nZXQoKSwg
JmludFNpemUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbnRTaXplKSA8PSBzaXplKTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IGludFNpemU7CisgICAg
ICAgICAgICBpZiAoIW1fc2l6ZSkKKyAgICAgICAgICAgICAgICBtX2FycmF5ID0gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTdGFja1Nob3QoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYXJyYXkoZGVsZXRlZFZhbHVlQXJyYXkoKSkKKyAg
ICAgICAgLCBtX3NpemUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdCYgb3Bl
cmF0b3I9KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8dm9pZCpbXT4gbmV3QXJyYXkgPSBzdGQ6Om1ha2VfdW5pcXVlPHZvaWQqW10+KG90aGVy
Lm1fc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvdGhlci5tX3NpemU7IGktLTspCisg
ICAgICAgICAgICBuZXdBcnJheVtpXSA9IG90aGVyLm1fYXJyYXlbaV07CisgICAgICAgIG1fc2l6
ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9hcnJheSA9IFdURk1vdmUobmV3QXJyYXkpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdChjb25zdCBT
dGFja1Nob3QmIG90aGVyKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCoqIGFycmF5KCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS5nZXQoKTsgfQor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgCisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9hcnJheTsgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdGFja1Nob3QmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fc2l6ZSAhPSBvdGhlci5tX3NpemUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9zaXplOyBpLS07KSB7
CisgICAgICAgICAgICBpZiAobV9hcnJheVtpXSAhPSBvdGhlci5tX2FycmF5W2ldKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9zaXplOworICAgICAgICAKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IG1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIHJlc3VsdCBePSBQdHJIYXNo
PHZvaWQqPjo6aGFzaChtX2FycmF5W2ldKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NpemUgJiYgbV9hcnJheS5nZXQoKSA9PSBkZWxl
dGVkVmFsdWVBcnJheSgpOworICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIFNwZWN0cnVtPD4gaGFw
cHkuCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgU3RhY2tTaG90JikgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQqKiBkZWxldGVkVmFsdWVB
cnJheSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKio+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oMSkpOyB9CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPHZvaWQqW10+IG1fYXJyYXk7Cisg
ICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKK307CisKK3N0cnVjdCBTdGFja1Nob3RIYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTdGFja1Nob3QmIHNob3QpIHsgcmV0dXJuIHNo
b3QuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RhY2tTaG90JiBhLCBj
b25zdCBTdGFja1Nob3QmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxTdGFja1Nob3Q+IHsKKyAgICB0eXBlZGVmIFN0YWNrU2hvdEhhc2ggSGFzaDsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxTdGFja1Nob3Q+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFN0YWNr
U2hvdD4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYv
U3RhY2tTaG90UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGFja1No
b3RQcm9maWxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFBy
b2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Q
cm9jZXNzSUQuaD4KKyNpbmNsdWRlIDx3dGYvU3BlY3RydW0uaD4KKyNpbmNsdWRlIDx3dGYvU3Rh
Y2tUcmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1Nob3QuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBTdGFja1Nob3RQcm9maWxlciB7CitwdWJsaWM6CisgICAgU3RhY2tTaG90UHJvZmls
ZXIodW5zaWduZWQgbnVtRnJhbWVzLCB1bnNpZ25lZCBmcmFtZXNUb1NraXAsIHVuc2lnbmVkIHN0
YWNrc1RvUmVwb3J0KQorICAgICAgICA6IG1fbnVtRnJhbWVzKG51bUZyYW1lcykKKyAgICAgICAg
LCBtX2ZyYW1lc1RvU2tpcChmcmFtZXNUb1NraXApCisgICAgICAgICwgbV9zdGFja3NUb1JlcG9y
dChzdGFja3NUb1JlcG9ydCkKKyAgICB7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJTdGFja1No
b3RQcm9maWxlciIsIFt0aGlzXSAoKSB7IHJ1bigpOyB9KTsKKyAgICB9CisKKyAgICAvLyBORVZF
Ul9JTkxJTkUgc28gdGhhdCBmcmFtZXNUb1NraXAgaXMgcHJlZGljdGFibGUuCisgICAgTkVWRVJf
SU5MSU5FIHZvaWQgcHJvZmlsZSgpCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CisgICAgICAgIG1fcHJvZmlsZS5hZGQoU3RhY2tTaG90KG1fbnVtRnJhbWVz
ICsgbV9mcmFtZXNUb1NraXApKTsKKyAgICAgICAgbV90b3RhbENvdW50Kys7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBOT19SRVRVUk4gdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgZm9y
ICg7OykgeworICAgICAgICAgICAgc2xlZXAoMV9zKTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGF1dG8gbGlzdCA9IG1fcHJvZmlsZS5i
dWlsZExpc3QoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuSG90dGVzdCBzdGFja3MgaW4gIiwg
Z2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiOlxuIik7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gbGlzdC5zaXplKCksIGNvdW50ID0gMDsgaS0tICYmIGNvdW50IDwgbV9zdGFja3NUb1JlcG9y
dDsgY291bnQrKykgeworICAgICAgICAgICAgICAgIGF1dG8mIGVudHJ5ID0gbGlzdFtpXTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJcblRvcCAjIiwgY291bnQgKyAxLCAiIHN0YWNrOiAiLCBl
bnRyeS5jb3VudCAqIDEwMCAvIG1fdG90YWxDb3VudCwgIiVcbiIpOworICAgICAgICAgICAgICAg
IFN0YWNrVHJhY2UgdHJhY2UoZW50cnkua2V5LmFycmF5KCkgKyBtX2ZyYW1lc1RvU2tpcCwgZW50
cnkua2V5LnNpemUoKSAtIG1fZnJhbWVzVG9Ta2lwKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KHRyYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgV29yZExvY2sgbV9sb2NrOworICAgIFNwZWN0cnVtPFN0
YWNrU2hvdCwgZG91YmxlPiBtX3Byb2ZpbGU7CisgICAgZG91YmxlIG1fdG90YWxDb3VudCB7IDAg
fTsKKyAgICB1bnNpZ25lZCBtX251bUZyYW1lczsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lc1RvU2tp
cDsKKyAgICB1bnNpZ25lZCBtX3N0YWNrc1RvUmVwb3J0OworfTsKKworI2RlZmluZSBTVEFDS19T
SE9UX1BST0ZJTEUobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVwb3J0KSBkbyB7
IFwKKyAgICBzdGF0aWMgU3RhY2tTaG90UHJvZmlsZXIqIHN0YWNrU2hvdFByb2ZpbGVyOyBcCisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWc7IFwKKyAg
ICBzdGQ6OmNhbGxfb25jZShzdGFja1Nob3RQcm9maWxlck9uY2VGbGFnLCBbXSB7IHN0YWNrU2hv
dFByb2ZpbGVyID0gbmV3IFN0YWNrU2hvdFByb2ZpbGVyKG51bUZyYW1lcywgZnJhbWVzVG9Ta2lw
LCBzdGFja3NUb1JlcG9ydCk7IH0pOyBcCisgICAgc3RhY2tTaG90UHJvZmlsZXItPnByb2ZpbGUo
KTsgXAorfSB3aGlsZSAoZmFsc2UpCisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1
bGVTY3JpcHRMb2FkZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAog
YmluZGluZ3MvanMvQ2FsbFRyYWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmlu
ZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBl
cldvcmxkLmNwcAogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9T
aW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAor
I3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaD4KKwpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9W
aXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25l
eGlzdGVudCkKQEAgLTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9WaXNpdGluZ1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzUxLDYgKzM1MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBM
ZW5ndGhQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4NzE2NkUxQzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAw
NDQzQzNGIC8qIEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAv
KiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFE
QkEwMDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0
M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFB
MEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlD
NUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5
MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFw
aGljc0xheWVyVXBkYXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQjYyNTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGll
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1
MkQxOERFMUIxNTAwQTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBD
REE1IC8qIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTg4OSw5ICsxODkwLDcgQEAKIAkJNzcyODY5NEUxNEY4ODgyNTAwRjQ4
NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NzI4Njk0QjE0Rjg4ODI1MDBGNDg0REMgLyog
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCAqLzsgfTsKIAkJNzcyODY5NEYxNEY4ODgy
NTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzcyODY5NEMxNEY4ODgyNTAwRjQ4NERD
IC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oICovOyB9OwogCQk3NzI4Njk4NDE0RkQ5
QURBMDBGNDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3Mjg2OTgyMTRGRDlBREEwMEY0
ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oICovOyB9OwotCQk3Nzc5QkQ5
NTFGMzEyRDAxMDBDMjE0MTcgLyogVmlzdWFsVmlld3BvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzc3OUJEOTQxRjMxMTdCNzAwQzIxNDE3IC8q
IFZpc3VhbFZpZXdwb3J0LmNwcCAqLzsgfTsKIAkJNzc3OUJEOTYxRjMyMjQ2QTAwQzIxNDE3IC8q
IEpTVmlzdWFsVmlld3BvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc3NzlCRDkyMUYyRkRCRjcwMEMyMTQxNyAvKiBKU1Zpc3VhbFZpZXdwb3J0Lmgg
Ki87IH07Ci0JCTc3NzlCRDk3MUYzMjI0NkQwMEMyMTQxNyAvKiBKU1Zpc3VhbFZpZXdwb3J0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3NzlCRDkx
MUYyRkRCQ0UwMEMyMTQxNyAvKiBKU1Zpc3VhbFZpZXdwb3J0LmNwcCAqLzsgfTsKIAkJNzdBMTdB
NzExMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3QTE3QTZFMTJGMjgxODIwMDRF
MDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgKi87IH07CiAJCTc3QTE3QTcyMTJGMjgx
ODIwMDRFMDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdBMTdBNkYxMkYyODE4MjAwNEUwMkY2IC8qIE9F
U1ZlcnRleEFycmF5T2JqZWN0LmggKi87IH07CiAJCTc3QTE3QTc3MTJGMjg2NDIwMDRFMDJGNiAv
KiBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3QTE3QTc0MTJGMjg2NDIwMDRFMDJGNiAvKiBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTLmNwcCAqLzsgfTsKQEAgLTU0NDcsNiArNTQ0Niw4IEBACiAJCTBG
OEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcnNlY3Rpb25PYnNlcnZl
ckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTRBMzk1MUVGMUIx
MDUwMEZCQUZGQiAvKiBKU0RPTVF1YWRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNET01RdWFkQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRv
cklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpc3BsYXlS
ZWZyZXNoTW9uaXRvcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFB
MEMxRkQxQzY2MzAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01HQ091dHB1dENvbnN0cmFpbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwRTFGRDFDNjY0MDA3OUM1QjIgLyog
RE9NR0NPdXRwdXRDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERPTUdDT3V0cHV0Q29uc3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkEwODUyQjFFNkZCNTVBMDA5NzVGREQgLyogQ1NTUHJvcGVydGllcy5qc29uICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5qc29uOyBwYXRoID0g
Q1NTUHJvcGVydGllcy5qc29uOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyNEQ3
NzE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NMYXllclVwZGF0ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyNEQ3ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3Jh
cGhpY3NMYXllclVwZGF0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3Jh
cGhpY3NMYXllclVwZGF0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOTY2
LDYgKzIyOTY3LDggQEAKIAkJCQk5NTIwNzYwMjFGMjY3NUY5MDA3RDJBQUIgLyogQ2FsbFRyYWNl
clR5cGVzLmggKi8sCiAJCQkJMEY2MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNw
cCAqLywKIAkJCQkwRjYwRjMyQTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uaCAqLywKKwkJ
CQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcCAq
LywKKwkJCQkwRjlEQUEwRTFGRDFDNjY0MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50
LmggKi8sCiAJCQkJN0M1MTZBRDIxRjM1MjUyMDAwMzRCNkJGIC8qIERPTVByb21pc2VQcm94eS5o
ICovLAogCQkJCUJDNTNEQTQ3MTE0MzEzNEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3Bw
ICovLAogCQkJCUJDNTNEQTJEMTE0MzEyMUUwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuaCAq
LywKQEAgLTI3NTE5LDYgKzI3NTIyLDcgQEAKIAkJCQk1MThGNTAwNDE5NENBQzNBMDA4MUJBQUUg
LyogSlNHYW1lcGFkQnV0dG9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTgwREE2NDBFOUM0NzAz
MDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU4MERBNjYw
RTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvcG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
OURBQTBGMUZEMUM2NkEwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREE3QzFGMTg4MzIyRkMwMEM5NTRCNSAvKiBKU0dlc3R1cmVFdmVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODQ4MkI3NTIxMTk4Q0I2QjAwQkZCMDA1IC8qIEpTSGFzaENo
YW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0RDE0RjBDMjc1QzY4MDA2QkM2MTcg
LyogSlNIaXN0b3J5LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRP
TUdDT3V0cHV0Q29uc3RyYWludC5oIgorCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5o
IgorI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1N1YnNwYWNl
SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCitET01HQ091dHB1dENvbnN0cmFpbnQ6OkRPTUdD
T3V0cHV0Q29uc3RyYWludChWTSYgdm0sIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhKQorICAg
IDogTWFya2luZ0NvbnN0cmFpbnQoIkRvbW91dCIsICJET00gT3V0cHV0IENvbnN0cmFpbnQiLCBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKQorICAgICwgbV92bSh2bSkKKyAgICAs
IG1fY2xpZW50RGF0YShjbGllbnREYXRhKQorICAgICwgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbih2
bS5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkpCit7Cit9CisKK0RPTUdDT3V0cHV0Q29u
c3RyYW9pbnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQoKQoreworfQorCitDb25zdHJhaW50UGFy
YWxsZWxpc20gRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYp
Cit7CisgICAgSGVhcCYgaGVhcCA9IG1fdm0uaGVhcDsKKyAgICAgICAgICAgIAorICAgIGlmICho
ZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVyc2lvbikK
KyAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAg
ICAgICAgIAorICAgIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRp
b25WZXJzaW9uKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3Rhc2tzLmlzRW1wdHkoKSk7Cisg
ICAgbV9jbGllbnREYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCisgICAgICAgIFsm
XSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsK
KyAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFw
Q2VsbCk7CisgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV90YXNrcy5hcHBlbmQoc3Vic3BhY2Uu
Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGZ1bmMpKTsKKyAgICAgICAgfSk7CisgICAgICAg
ICAgICAKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDsKK30KKyAg
ICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoYXV0byYgdGFzayA6IG1fdGFza3MpCisg
ICAgICAgIHRhc2stPnJ1bih2aXNpdG9yKTsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0
Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpIG92ZXJyaWRl
Cit7CisgICAgbV90YXNrcy5jbGVhcigpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRD
b25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaD4KKyNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBKU1ZNQ2xpZW50RGF0YTsKKworY2xhc3MgRE9NR0NPdXRwdXRDb25zdHJh
aW50IDogcHVibGljIEpTQzo6TWFya2luZ0NvbnN0cmFpbnQgeworcHVibGljOgorICAgIERPTUdD
T3V0cHV0Q29uc3RyYWludChKU0M6OlZNJiwgSlNWTUNsaWVudERhdGEmKTsKKyAgICB+RE9NR0NP
dXRwdXRDb25zdHJhaW50KCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNDOjpDb25zdHJhaW50
UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAg
IHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIEpTQzo6Vk0mIG1fdm07CisgICAgSlNWTUNsaWVudERhdGEmIG1f
Y2xpZW50RGF0YTsKKyAgICB1aW50NjRfdCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uOworICAgIFZl
Y3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pj4gbV90YXNrczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25z
dHJhaW50LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8aGVhcC9GYXN0
TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPGhlYXAvSGVhcElubGlu
ZXMuaD4KLSNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CiAjaW5jbHVkZSA8aGVh
cC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJrZWRCbG9ja0lu
bGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CiAjaW5jbHVkZSA8
aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CkBAIC03Miw0MyArNzIsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQo
Vk0qCiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEo
KnZtKTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRo
aXMgcG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29u
c3RyYWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9u
ID0gdm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNp
b24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBs
YXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKLQot
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNvdW50IGhlcmUgb3Vy
c2VsdmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKLSAgICAgICAgICAgIC8v
IG9wYXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0aW9uIHlldC4gVGhl
IHdheSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAgICAgIC8vIGNvbnN0cmFpbnQgc29s
dmVyIGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCi0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9vdHMo
KTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAgICAgICAg
ICAgIHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnREYXRhLT5m
b3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAgICAgICAgICAgIFsmXSAoU3Vic3Bh
Y2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVhY2hNYXJr
ZWRDZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVhcENlbGws
IEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBj
ZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
Y2VsbCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVJldmlz
aXRlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
bG90VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBudW1P
cGFxdWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdU
Rk1vdmUoY29uc3RyYWludCkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KHN0
ZDo6bWFrZV91bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7
CiAgICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29y
bGQ6OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0g
YWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNp
bmNsdWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNj
b3BlLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNl
c3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNp
bmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIsNyArMjE2MywxNCBAQCBF
dmVudFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAKIEV2ZW50VGFyZ2V0RGF0
YSogTm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCkKIHsKLSAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CisgICAgLy8gTm90IGhvbGRp
bmcgdGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBlZCBhY2NlbGVyYXRlcyBwYXJhbGxl
bCBjb25zdHJhaW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8gY2FsbHMgdGhpcyBmdW5jdGlvbiBm
cm9tIG1hbnkgdGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nIGNhbiBoYXBwZW4g
d2l0aCB0aGUgd29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0b3BwZWQsIGJ1dCBpZiB3ZSBkbyBp
dCB3aXRoIGEgcnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5IG1peGluZyBjb25zdHJh
aW50CisgICAgLy8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJlZm9yZSwgdGhlIG1vc3Qg
bGlrZWx5IHRpbWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBsb2NrIGlzIHdoZW4gdGhlCisgICAg
Ly8gd29ybGQgaXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHdoZW4g
dGhlIHdvcmxkIGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdvcmxkCisgICAgLy8gbWVh
bnMgdGhhdCB3ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFyZ2V0IGRhdGEgbWFwLgor
ICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrSWYoc19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2bSAmJiB2bS0+aGVhcC53b3JsZElz
UnVubmluZygpKTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRhKCkgPyBldmVudFRhcmdl
dERhdGFNYXAoKS5nZXQodGhpcykgOiBudWxscHRyOwogfQogCkBAIC0yMTcxLDYgKzIxNzksOSBA
QCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAgICAgaWYgKGhhc0V2
ZW50VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmdl
dCh0aGlzKTsKIAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CisKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAgc2V0SGFz
RXZlbnRUYXJnZXREYXRhKHRydWUpOwogICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFwKCku
YWRkKHRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJnZXREYXRhPigpKS5pdGVyYXRvci0+
dmFsdWU7CkBAIC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3Vy
ZUV2ZW50VGFyZ2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogeworICAg
IEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0g
fHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2ZW50VGFyZ2V0RGF0YU1hcCgpLnJl
bW92ZSh0aGlzKTsKIH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCShyZXZpc2lvbiAy
MjUxNzgpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsOCBAQCBMT05HU1BJREVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BB
VEggCiBWOF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlN1blNwaWRlciIgKyAidGVz
dHMiICsgInY4LXY2IgogVEFJTEJFTkNIX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAi
VGFpbEJlbmNoOTAwMCIKIE1JQ1JPQkVOQ0hNQVJLU19QQVRIID0gT1BFTlNPVVJDRV9QQVRIICsg
IkpTVGVzdHMiICsgIm1pY3JvYmVuY2htYXJrcyIKLU9DVEFORV9XUkFQUEVSX1BBVEggPSBQRVJG
T1JNQU5DRVRFU1RTX1BBVEggKyAiT2N0YW5lIiArICJ3cmFwcGVycyIKK09QRU5TT1VSQ0VfT0NU
QU5FX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiT2N0YW5lIgorT0NUQU5FX1dSQVBQ
RVJfUEFUSCA9IE9QRU5TT1VSQ0VfT0NUQU5FX1BBVEggKyAid3JhcHBlcnMiCiBKU0JFTkNIX1BB
VEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiSlNCZW5jaCIKIFNJWFNQRUVEX1BBVEggPSBQ
RVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU2l4U3BlZWQiICsgInRlc3RzIgogU0lYU1BFRURfV1JB
UFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ3cmFwcGVy
cyIKQEAgLTg0MSw2ICs4NDIsMjAgQEAgY2xhc3MgU2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrUGFy
YW1ldGVycwogICBlbmQKIGVuZAogCisjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIGEgc2lu
Z2xlIGZpbGUgYW5kIG11c3QgYmUgbG9hZGVkIGluIGl0cyBvd24gZ2xvYmFsIG9iamVjdCBlYWNo
CisjIHRpbWUgKGkuZS4gcnVuKCkpLCBidXQgcmV0dXJucyBpdHMgcmVzdWx0IGluIGEgY3VzdG9t
IHdheS4KK2NsYXNzIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKKyAg
YXR0cl9yZWFkZXIgOmJlbmNoUGF0aAorICAKKyAgZGVmIGluaXRpYWxpemUoYmVuY2hQYXRoKQor
ICAgIEBiZW5jaFBhdGggPSBiZW5jaFBhdGgKKyAgZW5kCisgIAorICBkZWYga2luZAorICAgIDpz
aW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgZW5kCitlbmQKKwogIyBCZW5jaG1hcmsg
dGhhdCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBkYXRhIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGxv
YWRlZCBnbG9iYWxseSwgZm9sbG93ZWQKICMgYnkgYSBjb21tYW5kIHRvIHJ1biB0aGUgYmVuY2ht
YXJrLgogY2xhc3MgTXVsdGlGaWxlVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCkBAIC05NjUsNiAr
OTgwLDI1IEBAIGRlZiBlbWl0QmVuY2hSdW5Db2RlRmlsZShuYW1lLCBwbGFuLCBiZW4KICAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICBpZiAoX19iZW5jaGVyX2luZGV4ID49ICN7
d2FybXVwfSkgcHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19OiAje3BsYW4uaXRlcmF0aW9ufTog
XCIgKyAoX19iZW5jaGVyX2luZGV4IC0gI3t3YXJtdXB9KSArIFwiOiBUaW1lOiBcIisoKF9fYWZ0
ZXItX19iZWZvcmUpL19fcnVucykpOyIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxl
LCJ9IikKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiN7YmVuY2hQYXJhbXMudGVh
ckRvd25Db21tYW5kLmpzfSIpCisgICAgICBlbHNpZiBiZW5jaFBhcmFtcy5raW5kID09IDpzaW5n
bGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZp
bGUsImZ1bmN0aW9uIF9fYmVuY2hlcl9ydW4oX19iZW5jaGVyX3doYXQpIHsiKQorICAgICAgICBk
b3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgdmFyIF9fYmVuY2hlcl9yZXN1bHQgPSB7dmFsdWU6
IG51bGx9OyIpCisgICAgICAgICRyZXJ1bi50aW1lcyB7CisgICAgICAgICAgZG91YmxlUHV0cygk
c3RkZXJyLGZpbGUsIiAgIHJ1bihfX2JlbmNoZXJfd2hhdCwgX19iZW5jaGVyX3Jlc3VsdCk7IikK
KyAgICAgICAgfQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgaWYgKF9fYmVu
Y2hlcl9yZXN1bHQudmFsdWUgPT0gbnVsbCkiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIs
ZmlsZSwiICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTnVsbCByZXN1bHRcIik7IikKKyAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHJldHVybiBfX2JlbmNoZXJfcmVzdWx0LnZhbHVl
OyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJ9IikKKyAgICAgICAgJHdhcm11
cC50aW1lcyB7CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIl9fYmVuY2hlcl9y
dW4oI3tiZW5jaFBhcmFtcy5iZW5jaFBhdGguaW5zcGVjdH0pIikKKyAgICAgICAgICBkb3VibGVQ
dXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MK
KyAgICAgICAgfQorICAgICAgICAkaW5uZXIudGltZXMgeworICAgICAgICAgIHwgaW5uZXJJbmRl
eCB8CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsInByaW50KFwiI3tuYW1lfTog
I3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06ICN7aW5uZXJJbmRleH06IFRpbWU6IFwiK19f
YmVuY2hlcl9ydW4oI3tiZW5jaFBhcmFtcy5iZW5jaFBhdGguaW5zcGVjdH0pKTsiKQorICAgICAg
ICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJnYygpOyIpIHVubGVzcyBwbGFuLnZtLnNob3Vs
ZE1lYXN1cmVHQworICAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICAgIHJhaXNlIHVubGVzcyBi
ZW5jaFBhcmFtcy5raW5kID09IDpzaW5nbGVGaWxlVGltZWRCZW5jaG1hcmsKICAgICAgICAgZG91
YmxlUHV0cygkc3RkZXJyLGZpbGUsImZ1bmN0aW9uIF9fYmVuY2hlcl9ydW4oX19iZW5jaGVyX3do
YXQpIHsiKQpAQCAtMTU5NCw2ICsxNjI4LDE5IEBAIGNsYXNzIE9jdGFuZUJlbmNobWFyawogICBl
bmQKIGVuZAogCitjbGFzcyBDdXN0b21UaW1lZEJlbmNobWFyaworICBpbmNsdWRlIEJlbmNobWFy
aworICAKKyAgZGVmIGluaXRpYWxpemUobmFtZSwgZnVsbFBhdGgpCisgICAgQG5hbWUgPSBuYW1l
CisgICAgQGZ1bGxQYXRoID0gZnVsbFBhdGgKKyAgZW5kCisgIAorICBkZWYgZW1pdFJ1bkNvZGUo
cGxhbikKKyAgICBlbWl0QmVuY2hSdW5Db2RlKGZ1bGxuYW1lLCBwbGFuLCBTaW5nbGVGaWxlQ3Vz
dG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzLm5ldyhlbnN1cmVGaWxlKCJDdXN0b21UaW1lZC0j
e0BuYW1lfSIsIEBmdWxsUGF0aCkpKQorICBlbmQKK2VuZAorCiBjbGFzcyBLcmFrZW5CZW5jaG1h
cmsKICAgaW5jbHVkZSBCZW5jaG1hcmsKICAgCkBAIC0zMDEwLDYgKzMwNTcsNyBAQCBiZWdpbgog
ICAgIHwgYXJncyB8CiAgICAgT0NUQU5FLmFkZCBPY3RhbmVCZW5jaG1hcmsubmV3KCphcmdzKQog
ICB9CisgIE9DVEFORS5hZGQgQ3VzdG9tVGltZWRCZW5jaG1hcmsubmV3KCJzcGxheS1sYXRlbmN5
IiwgKE9QRU5TT1VSQ0VfT0NUQU5FX1BBVEggKyAic3BsYXkuanMiKS50b19zKQogCiAgIEtSQUtF
TiA9IEJlbmNobWFya1N1aXRlLm5ldygiS3Jha2VuIiwgOmFyaXRobWV0aWNNZWFuLCAtMSkKICAg
WyJhaS1hc3RhciIsICJhdWRpby1iZWF0LWRldGVjdGlvbiIsICJhdWRpby1kZnQiLCAiYXVkaW8t
ZmZ0IiwKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1MTc4
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTgsNiArOTgsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9
L1Rlc3RzL1dURi9DU3RyaW5nLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dU
Ri9DaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV1RGL0Nyb3NzVGhyZWFkVGFzay5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvRGF0ZU1hdGguY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjI1MTc4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAkJMEYx
MzlFNzgxQTQyM0E2QjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3MjFBNDIzQTJC
MDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSAqLzsgfTsKIAkJMEYxMzlFNzkx
QTQyNDU3MDAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3MjFBNDIzQTJCMDBGNTkw
RjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSAqLzsgfTsKIAkJMEYyQzIwQjgxRENENTQ1
MDAwNTQyRDlFIC8qIFRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovOyB9Owor
CQkwRjMwQ0I1QzFGQ0UxNzk2MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMENCNUIxRkNF
MTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLzsgfTsKIAkJMEYzQjk0
QTcxQTc3MjY3NDAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I5NEE1MUE3NzI2
NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi87IH07CiAJCTBG
NEZGQTlFMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEZGQTlEMUVE
M0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLzsgfTsKIAkJ
MTE1RUIzNDMxRUUwQkEwMzAwM0MyQzBBIC8qIFZpZXdwb3J0U2l6ZUZvclZpZXdwb3J0VW5pdHMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTVFQjM0
MjFFRTBCNzIwMDAzQzJDMEEgLyogVmlld3BvcnRTaXplRm9yVmlld3BvcnRVbml0cy5tbSAqLzsg
fTsKQEAgLTEwNjcsNiArMTA2OCw3IEBACiAJCTBGMTM5RTc1MUE0MjNBNTMwMEY1OTBGNSAvKiBX
ZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdl
YWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2EvV2Vha09iakNQdHIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVBRjZDNEQwMDdBQjc1MyAvKiBXZWJDb3JlU3RhdGlz
dGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50
UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25j
dXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I5
NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdFdmFsdWF0ZUph
dmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEZGQTlEMUVEM0FB
ODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGRkFBMDFFRDNEMERFMDBGNzExMUYg
LyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEltYWdlSU8uZnJhbWV3b3Jr
OyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yazsgc291
cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0yNTgxLDYgKzI1ODMsNyBAQAogCQkJCTI2RjFCNDQy
MTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNTdHJpbmcuY3BwICovLAogCQkJCUU0MDAxOTMwMUFD
RTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0ND
ODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJMEYz
MENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJ
CQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0aW9uLmNwcCAqLywKIAkJCQk1MTcx
NEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRUYXNrLmNwcCAqLywKIAkJCQkyNkEy
QzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAgKi8sCkBAIC0zMTY1LDYgKzMxNjgs
NyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJE
ZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIz
IC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAx
MUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc3
QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNo
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25j
dXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
PHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCitu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25hbWVzcGFjZSB7CisKKy8vIGBjb21tYW5kc2Ag
aXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlzIHRoaW5nIHdoYXQgdG8gZG8uIEl0IGhhcyB0byBo
YXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisvLyBUaGUgY2hhcmFjdGVyIHBhaXJz
IGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6CisvLworLy8gK3ggICAgIEFkZHMgJ3gnIHRvIHRoZSBz
ZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBhbmQgYXNzZXJ0cyB0aGF0IGl0J3MgbmV3LgorLy8g
IXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgYW5kIGFzc2VydHMgdGhhdCBpdCB3YXMgdGhlcmUg
YWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIGluIHRoZSBzZXQKKy8vIC14
ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5vdCBpbiB0aGUgc2V0Cit2b2lkIGRvVGVzdChjb25z
dCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBzZXQ7CisgICAg
Zm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0gY29tbWFuZHM7IGNvbW1hbmRbMF0gJiYgY29tbWFu
ZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb21tYW5kWzFdKSk7CisgICAgICAgIHN3aXRj
aCAoY29tbWFuZFswXSkgeworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIEVYUEVDVF9U
UlVFKHNldC5hZGQocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnISc6
CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250
YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAg
ICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBFbXB0
eSkKK3sKKyAgICBkb1Rlc3QoIiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNl
dCwgQWRkT25lRWxlbWVudCkKK3sKKyAgICBkb1Rlc3QoIit4PXgteS0wIik7Cit9CisKK1RFU1Qo
V1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50TXVsdGlwbGVUaW1lcykKK3sK
KyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4IXgheCF4IXg9eC15LTAiKTsKK30KKworVEVTVChX
VEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnRNYW55VGltZXMpCit7CisgICAg
ZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgteS0wIXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExv
dHNPZkVsZW1lbnRzKQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Ur
cit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZ
K1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9
OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1R
PVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOwor
fQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNNYW55
VGltZXMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1
K2krbytwK2ErcytkK2YrZytoK2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08r
UCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13
PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9
VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uITEhMiEzITQhNSE2
ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIh
biFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSEx
ITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwh
eiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFD
IVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYh
ZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFK
IUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8h
cCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFT
IUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIh
dCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFV
IUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkh
MCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFX
IUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQh
NSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2
IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4h
TSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFr
IWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVoh
WCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFk
IWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUch
SCFKIUshTCFaIVghQyFWIUIhTiFNIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNo
U2V0LCBBZGRMb3RzT2ZFbGVtZW50c0FuZFF1ZXJ5U29tZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7
CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2Er
cytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1z
PWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYt
Ry1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStP
K1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9
dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1S
PVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitU
RVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkU29tZUVsZW1lbnRzTXVsdGlwbGVUaW1l
c1RoZW5BZGRUaGVSZXN0QW5kUXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBk
b1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITgh
OSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3
ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCt5K3UraStvK3Ar
YStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1h
PXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQt
Ri1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTStsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJ
K08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9
cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1F
PVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328121</attachid>
            <date>2017-12-01 10:46:29 -0800</date>
            <delta_ts>2017-12-01 11:39:32 -0800</delta_ts>
            <desc>it compiles again</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>215825</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBA
CisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlz
IHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2
YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgp
ID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5u
aW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQg
b24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFt
ZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUg
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24K
Ky8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
bmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUg
b2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBi
ZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0
ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJh
dGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVw
OworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4g
PSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Cisg
IHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVs
bDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25z
IDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFu
ZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJl
bmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJr
IHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8g
dGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0
aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5i
ZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5j
eSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8g
bnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVu
Y2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0
aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5h
bWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVy
ZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRo
aXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhp
Z2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVu
Y2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9
IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3Mg
PSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKwor
CisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2ht
YXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNy
b3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5n
ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5l
dyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZl
cnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxl
cnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBi
ZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8g
d2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJl
c2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAg
IHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8g
Um9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVk
ID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Cisg
ICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZm
ZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkg
ICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2Vl
ZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZj
NSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4g
MHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4g
KHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisK
Ky8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5
aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5u
aW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9u
ZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2ht
YXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRp
b24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIg
bGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Cisg
IHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRp
bnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewor
ICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5O
b3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250
aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29u
dGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRp
bWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAg
ICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9y
bWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAg
cnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsK
K30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFy
a3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVu
Y2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQg
PSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0u
YmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21w
dXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0g
TWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9n
IC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxv
ZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1
cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisv
LyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUs
IGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9m
IHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0
IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7
CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMg
d2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJh
eSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRp
bGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3
aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1v
cmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0g
MC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2ls
bCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFy
dHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dl
V2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hp
bGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQor
ICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAw
OworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAg
c3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVy
c1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJl
cnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAg
IHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyBy
ZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1i
ZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBn
ZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Cisg
IHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJl
bWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQor
ICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGgu
RSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGgg
YXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAg
cmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRv
UHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1
aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1
bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVu
bmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhh
dAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIg
aWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0
aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRo
aXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAg
QmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90
aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNj
b3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1l
LCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewor
ICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5
KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBz
Y29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMu
cnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVu
Y3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIg
dGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhp
cy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5z
IGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRo
ZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitC
ZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVu
Y2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFw
c2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhl
ciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQK
KyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0Rl
dGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlz
dGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDAp
OyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0
ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEu
cnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisK
KyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhh
c2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRh
dGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwp
IHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAg
fTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0
b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBp
ZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAg
IHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBs
YXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41Owor
ICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShs
YXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChu
ZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVy
biBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1
aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0
aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0
IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFy
a1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFy
a1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9
IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBp
bmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0
aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJl
ZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJl
dHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAo
KSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg
ICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVz
dWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2ht
YXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJr
KHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAv
LyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICBy
ZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJr
KCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5p
bmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdo
dCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlw
dCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdl
bmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0
IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQor
Ly8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWlu
ZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBz
cGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBs
b3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIg
U3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWwor
ICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3Bs
YXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmln
dXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlm
aWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNw
bGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0
aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkg
eworICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBs
ZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDog
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVy
YXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0
aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50
ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMu
CisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisK
K2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKwor
ZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBz
cGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBz
cGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7
CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAg
ZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5k
KGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3Bs
YXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5
LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkg
eworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGln
aCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVp
dC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dV
bnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlm
ICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNl
Lm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgewor
ICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5Cisg
IC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAv
LyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMo
KTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAg
IHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0g
Pj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qg
c29ydGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8v
IFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAw
OyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNl
cnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExl
c3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUo
a2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0
cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmlu
YXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVj
ZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0
IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVw
IGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3Ry
dWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50
ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVs
bDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1w
dHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0
aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUg
ZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJ
ZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0
cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0
cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4K
KyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7
CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVl
Lk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhl
IGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYg
KHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9
IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8u
a2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhp
cy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsK
KyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3Rf
LmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0g
bm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQg
a2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRo
aXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBu
b3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9
IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlw
ZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAg
dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlf
KGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcign
S2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3Rf
OworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3Rf
LnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Cisg
ICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMu
c3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0
aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5y
aWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJl
dHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRy
ZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAq
CisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJl
dHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICov
CitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsK
KyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsK
KworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4
aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0
aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJu
IG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87
CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlU
cmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAg
aXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJv
dG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlz
LmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBr
ZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8g
bm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5z
cGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUg
b3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRo
aXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBp
ZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3Rf
LmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgor
ICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9m
IHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVu
Y3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgewor
ICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9k
ZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZv
cm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUg
d2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9k
ZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlm
aWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5n
IEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJh
bSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5v
ZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50
dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8v
IHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1t
eSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2lu
ZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVz
IGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0Owor
ICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsK
KyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChr
ZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAg
ICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7Cisg
ICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3Vy
cmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQp
IHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBy
aWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50
OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1
cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAg
Ly8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAg
ICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4K
KyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAg
ICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0Owor
ICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmln
aHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAq
LworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0g
a2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisK
KworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnBy
b3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRy
YXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9k
ZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1
bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZl
cnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3Vy
cmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0
LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBz
dGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVz
ID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2
YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVy
IC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVh
ckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2go
e3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0t
bGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUu
QXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOwor
ICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjcz
OTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAg
CisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQor
ICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJl
bmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkp
OworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VB
Ym92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMSw4
ICs1MDEsMTAgQEAgaGVhcC9NYXJrZWRCbG9jay5jcHAKIGhlYXAvTWFya2VkU3BhY2UuY3BwCiBo
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAK
K2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIu
Y3BwCiBoZWFwL011dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCiBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9TdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgotI2luY2x1ZGUgIlZpc2l0aW5n
VGltZW91dC5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKQEAgLTcyLDExICs3MSwxMSBAQCB2b2lkIEpTQ29udGV4dEdyb3Vw
QWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgLy8gZWxzZSBnZXRzIG1hcmtlZC4KICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5ID0gQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXll
ZEJ5TWFya2luZzsKICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtpbmdDb25zdHJhaW50PigKKyAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PigKICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBj
b25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0
cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENv
bnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nh
c3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRh
KSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAg
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1h
cmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAg
ICAgbWFya2VyLk1hcmsgPSBtYXJrOwpAQCAtODQsNyArODMsOCBAQCB2b2lkIEpTQ29udGV4dEdy
b3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbnN0
cmFpbnRDYWxsYmFjaygmbWFya2VyLCB1c2VyRGF0YSk7CiAgICAgICAgIH0sCi0gICAgICAgIHZv
bGF0aWxpdHkpOworICAgICAgICB2b2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZtLmhlYXAuYWRkTWFya2luZ0NvbnN0cmFp
bnQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4Myw5ICsyODMsOCBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6
CiAgICAgICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB2b2lkKiBu
ZXh0Um9vdCA9IHN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKG5leHRS
b290KSA9PSBUcnVlVHJpU3RhdGUpCisgICAgICAgICAgICBpZiAoIXZpc2l0b3IuYWRkT3BhcXVl
Um9vdChuZXh0Um9vdCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4dFJvb3QpOwogCiAgICAgICAgICAgICBhdXRvIGFwcGVu
ZE93bmVkT2JqZWN0cyA9IFsmXSB7CiAgICAgICAgICAgICAgICAgTlNNYXBUYWJsZSAqb3duZWRP
YmplY3RzID0gW2V4dGVybmFsT2JqZWN0R3JhcGggb2JqZWN0Rm9yS2V5OnN0YXRpY19jYXN0PGlk
PihuZXh0Um9vdCldOwpAQCAtMzI3LDggKzMyNiw2IEBAIHZvaWQgc2NhbkV4dGVybmFsUmVtZW1i
ZXJlZFNldChKU0M6OlZNJiAKICAgICAgICAgfQogICAgICAgICBbZXh0ZXJuYWxSZW1lbWJlcmVk
U2V0IHJlbW92ZUFsbE9iamVjdHNdOwogICAgIH0KLQotICAgIHZpc2l0b3IubWVyZ2VJZk5lY2Vz
c2FyeSgpOwogfQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAv
KiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1h
dFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZl
UGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJFNTAgLyogU3luY2hyb25vdXNT
dG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07Ci0JCTBGMUZCMzkzMUUxNzdB
NzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGlu
Z1RpbWVvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUxQUY3REYw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkwRjFGQjM5NzFFMUFGN0UzMDBB
OUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xp
c3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBNdXRhdG9y
U2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwpA
QCAtMzExLDYgKzMxMCw5IEBACiAJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNh
bXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAz
QTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5s
aW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFB
NiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8q
IFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovOyB9Owor
CQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MzFGQzdB
OTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFD
IC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxs
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUx
Q0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0
RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0
aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC00NDUsNiArNDQ3LDggQEAKIAkJMEY5RDM2OTUxQUU5Q0MzMzAw
MEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5RDM2OTMxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQ
aGFzZS5oICovOyB9OwogCQkwRjlENEMwRDFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9u
VGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmggKi87IH07CiAJ
CTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlENEMw
RjFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICovOyB9
OworCQkwRjlEQUEwOTFGRDFDM0NGMDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTA3
MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovOyB9OworCQkw
RjlEQUEwQTFGRDFDM0QzMDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEQUEwODFGRDFDM0M4
MDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggKi87IH07CiAJCTBGOUUzMjY0MUIw
NUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAw
ODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi87IH07CiAJCTBGOUZC
NEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBDQjY3
RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovOyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBE
NTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ5NCw3ICsxNDk4LDYg
QEAKIAkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOUU4NTJF
MUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURCQzU0RDUxREY4RUEyQjAw
NUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFz
c2VtYmx5VG9KU0NhbGxlZS5oICovOyB9OwogCQlBREQ4RkE0NjFFQjMwNzk3MDBERjU0MkYgLyog
V2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9u
UGFyc2VyLmggKi87IH07Ci0JCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRERC
MUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3
OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5NDFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUFERTgwMjlBMUUwOEYxREUwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBREU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25z
dHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUFERTgwMjlDMUUwOEYxREUwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURF
ODAyOTcxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5NzYs
NyArMTk3OSw2IEBACiAJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEMxRTE3M0E2MjAwQTlC
RTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5o
OyBwYXRoID0gZGZnL0RGR1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGgg
PSBkZmcvREZHV29ya2xpc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNjQsNiArMjI2NiwxMCBAQAogCQkwRjRBMzhGODFDOEUxM0RG
MDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN1cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTRE
QjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsgcGF0aCA9IGIz
L0IzT3JpZ2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MjFG
QzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0MxQzRDMUI1NDAw
NEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5jcHA7IHBhdGggPSBiMy9haXIvQWly
Rml4T2J2aW91c1NwaWxscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERF
MUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBCM09yaWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3Jp
Z2luRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDk3LDYgKzI1MDMs
OSBAQAogCQkwRjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4Y2VwdGlvblRhcmdldC5oOyBw
YXRoID0gZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjlENEMwRTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlLmNwcDsgcGF0aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDRDMEYxQzNFMkM3
NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oOyBwYXRo
ID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdD
b25zdHJhaW50U29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFB
MDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUUz
MjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJJbnNl
cnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFF
RDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGFja0xheW91dFBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNTQsNyArNDI2Myw2IEBACiAJCUFERDA5QUYzMUY2MjQ4MkUw
MDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHku
aDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDQxRUIzMDc3MTAwREY1NDJGIC8q
IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjkzMUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk0MUUwOEYxQzkwMDU4
REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTUxRTA4
RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rv
ci5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUwMCw2ICs1NTA4LDcgQEAKIAkJCQkwRkQwRTVFNjFF
NDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1
QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJF
QjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNEQ4QzczMUZD
N0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLywKIAkJCQkwRjdERjEy
RjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKIAkJCQkyQTdB
NThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJCQkJMEYxMzZENEIxNzRB
RDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU1ODgsMTcgKzU1OTcsMjEgQEAKIAkJ
CQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJ
CQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwICov
LAogCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5o
ICovLAorCQkJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNv
bHZlci5jcHAgKi8sCisJCQkJMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyLmggKi8sCiAJCQkJMTQyRDZGMEUxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgKi8sCiAJCQkJMTQyRDZGMEYxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFjay5o
ICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNw
cCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICov
LAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKLQkJ
CQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovLAorCQkJCTBG
OURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCAqLywKIAkJ
CQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyogUHJldmVudENvbGxlY3Rpb25TY29wZS5oICov
LAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIwOCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJ
CQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAq
LywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJ
CQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3Iu
Y3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICov
LAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAq
LywKQEAgLTU2MjAsNyArNTYzMyw3IEBACiAJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0
OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhD
RTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovLAotCQkJCTBG
MUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLywKKwkJCQkwRjRE
OEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3
ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIw
MEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgxNjksNiArODE4Miw3IEBACiAJCQkJNjUxNEYy
MTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNt
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVk
UmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAv
KiBDYWdlZEJhcnJpZXJQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VEMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBDYWxsRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzM2LDYgKzg3NTAsNyBA
QAogCQkJCTBGMkI2NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURB
QTA5MUZEMUMzQ0YwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8q
IEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFEQjY5RTY2MDBF
QzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg4ODMsNiArODg5
OCw3IEBACiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJl
ZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIg
LyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4
NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNEQ4Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDAyLDkgKzkwMTgsOSBAQAogCQkJCUUz
QzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8q
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFC
NjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8qIE9i
amVjdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5
MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBRERCMUY2MzE4RDc3
REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3
OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
MkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0
NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
QEAgLTkyMTAsNiArOTIyNiw3IEBACiAJCQkJMEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRy
YWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwNjE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcw
ODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFy
cmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNG
IC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0OSw3ICs5MjY2
LDYgQEAKIAkJCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBW
YXJPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAv
KiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMUZCMzkzMUUxNzdBNzIw
MEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUEx
MURGNzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNB
NTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgYm9vbCBBY2Nlc3NDYXNl
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSht
X3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1f
c3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZChtX3N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJl
c3VsdCA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODAsNyArOTgwLDcgQEAg
dm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIAogICAgIG1fdmlz
aXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0gdHJ1ZTsKIAotICAgIGlmIChIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpIHsKQEAgLTEx
MzIsNyArMTEzMiw3IEBAIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0wK
IAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikKIHsKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhp
cykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVl
VG9PbGRBZ2UoKSkpCkBAIC0xMTQ3LDEwICsxMTQ3LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91
bGRKZXR0aXNvbkR1ZVRvT2xkQWcKICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBib29sIHNo
b3VsZE1hcmtUcmFuc2l0aW9uKERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRp
b24pCiB7Ci0gICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtl
ZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRy
YW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fY29k
ZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIUhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICBp
ZiAoIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAg
dm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgICAg
ICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwog
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAg
ICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsK
LSAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0
dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJlKSkK
ICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFy
a2VkU29GYXIgPSBmYWxzZTsKQEAgLTEyNTQsMTQgKzEyNTQsMTQgQEAgdm9pZCBDb2RlQmxvY2s6
OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCog
cmVmZXJlbmNlID0gZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAg
QVNTRVJUKCFqc0R5bmFtaWNDYXN0PENvZGVCbG9jayo+KCpyZWZlcmVuY2UtPnZtKCksIHJlZmVy
ZW5jZSkpOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHJlZmVyZW5j
ZSkpIHsKKyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAg
ICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQogICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZn
Q29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tp
XS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDEzICsxMDQsMTMgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0
LCAiOiBDb21waWxpbmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CiAg
ICAgICAgIAogICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNhZmVw
b2ludGluZyBzaW5jZSB3ZSBvd24gcmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+dm0t
PmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAg
ICBpZiAobV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKCJIZWFwIGlzIHN0b3BlZCBidXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1f
cGxhbi0+Y29tcGlsZUluVGhyZWFkKCZtX2RhdGEpOwogICAgICAgICBpZiAobV9wbGFuLT5zdGFn
ZSAhPSBQbGFuOjpDYW5jZWxsZWQpIHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgICAg
IGlmIChtX3BsYW4tPnZtLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMilcbiIpOwogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB9
CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX3dvcmtsaXN0Lm1fcmVhZHlQbGFucy5hcHBlbmQobV9wbGFuKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVs
aWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAgICAgICAgIG1fd29y
a2xpc3QubV9wbGFuQ29tcGlsZWQubm90aWZ5QWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2Fm
ZXBvaW50OjpSZQogCiAgICAgaWYgKHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhl
YXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAK
ICAgICBpZiAoc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNt
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitlbnVtIGNsYXNzIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA6IHVpbnQ4X3Qg
eworICAgIFNlcXVlbnRpYWwsCisgICAgUGFyYWxsZWwKK307CisgICAgCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCit7
CisgICAgc3dpdGNoIChwYXJhbGxlbGlzbSkgeworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFy
YWxsZWxpc206OlNlcXVlbnRpYWw6CisgICAgICAgIG91dC5wcmludCgiU2VxdWVudGlhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWw6CisgICAgICAgIG91dC5wcmludCgiUGFyYWxsZWwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhl
YXBUeXBlKQogICAgICwgbV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90
VmlzaXRvcj4oKnRoaXMsICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtl
X3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1h
a2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6
bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFpbnRT
ZXQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAgICwg
bV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2Rl
QmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJ
VFN0dWJSb3V0aW5lU2V0PigpKQpAQCAtOTExLDcgKzkxMSw3IEBAIHZvaWQgSGVhcDo6YWRkVG9S
ZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQrKzsKICAgICBp
ZiAobV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQpIHsKICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNl
KCk7Ci0gICAgICAgIGlmICghaXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAg
aWYgKCFpc01hcmtlZChjZWxsKSkgewogICAgICAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xs
ZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVk
IHBhc3QKICAgICAgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9y
ZSB0byBhbiB1bm1hcmtlZCBQb3NzaWJseUJsYWNrIG9iamVjdC4gSWYgdGhlCiAgICAgICAgICAg
ICAvLyBvYmplY3QgZ2V0cyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3
aWxsIGdvIGRvd24gdGhlIG5vcm1hbCBtYXJraW5nCkBAIC05MjQsMTUgKzkyNCwxNSBAQCB2b2lk
IEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgICAgICAgICAgICAgLy8g
Tm93IHdlIHByb3RlY3QgYWdhaW5zdCB0aGlzIHJhY2U6CiAgICAgICAgICAgICAgICAgLy8KICAg
ICAgICAgICAgICAgICAvLyAgICAgMSkgT2JqZWN0IHN0YXJ0cyBvdXQgYmxhY2sgKyB1bm1hcmtl
ZC4KLSAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkQ29uY3VycmVudGx5
IGhlcmUuCisgICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZCBoZXJlLgog
ICAgICAgICAgICAgICAgIC8vICAgICAyKSBPYmplY3QgaXMgbWFya2VkIGFuZCBncmV5ZWQuCiAg
ICAgICAgICAgICAgICAgLy8gICAgIDMpIE9iamVjdCBpcyBzY2FubmVkIGFuZCBibGFja2VkLgog
ICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2Vs
bFN0YXRlU3Ryb25nIGhlcmUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAv
LyBJbiB0aGlzIGNhc2Ugd2Ugd291bGQgaGF2ZSBtYWRlIHRoZSBvYmplY3Qgd2hpdGUgYWdhaW4s
IGV2ZW4gdGhvdWdoIGl0IHNob3VsZAogICAgICAgICAgICAgICAgIC8vIGJlIGJsYWNrLiBUaGlz
IGNoZWNrIGxldHMgdXMgY29ycmVjdCBvdXIgbWlzdGFrZS4gVGhpcyByZWxpZXMgb24gdGhlIGZh
Y3QgdGhhdAotICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkQ29uY3VycmVudGx5IGNvbnZlcmdl
cyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkQ29u
Y3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgICAgICAgICAgLy8gaXNNYXJrZWQgY29udmVyZ2Vz
IG1vbm90b25pY2FsbHkgdG8gdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY2Vs
bCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBkaWZmaWN1bHQgdG8gd29yayBvdXQg
d2hldGhlciB0aGUgb2JqZWN0IHNob3VsZCBiZSBncmV5IG9yIGJsYWNrIGF0CiAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoaXMgcG9pbnQuIFdlIHNheSBibGFjayBjb25zZXJ2YXRpdmVseS4KICAg
ICAgICAgICAgICAgICAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlC
bGFjayk7CkBAIC05NDgsNyArOTQ4LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0g
ICAgICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgICAg
IEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgLy8gSXQgY291bGQgYmUgdGhhdCB0
aGUgb2JqZWN0IHdhcyAqanVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3Rv
ciBtYXkgc2V0IHRoZQogICAgIC8vIHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFuZCB0aGVuIHRv
IFBvc3NpYmx5T2xkT3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8KICAgICAv
LyByYWNlIHdpdGggdGhlIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFj
Y3VyYXRlIGJlY2F1c2UgdGhlIG9iamVjdCBfd2lsbF8KQEAgLTEyNjUsNiArMTI2NSw4IEBAIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAKICAgICBTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKICAgICAKKyAgICBt
X29wYXF1ZVJvb3RzLmRlbGV0ZU9sZFRhYmxlcygpOworICAgIAogICAgIGlmIChPcHRpb25zOjps
b2dHQygpKSB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgY2hhciosIHNpemVfdD4gdmlzaXRNYXA7
CiAgICAgICAgIGZvckVhY2hTbG90VmlzaXRvcigKQEAgLTEyODcsMTAgKzEyODksNiBAQCBORVZF
Ul9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgICAgICAgICAKICAgICAg
ICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
c2xvdFZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFs
bGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxl
bFZpc2l0b3ItPm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIAogICAgICAgICAvLyBG
SVhNRTogVGFrZSBtX211dGF0b3JEaWRSdW4gaW50byBhY2NvdW50IHdoZW4gc2NoZWR1bGluZyBj
b25zdHJhaW50cy4gTW9zdCBsaWtlbHksCiAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gZXhl
Y3V0ZSByb290IGNvbnN0cmFpbnRzIGFnYWluIHVubGVzcyB0aGUgbXV0YXRvciBkaWQgcnVuLiBB
dCBhCiAgICAgICAgIC8vIG1pbmltdW0sIHdlIGNvdWxkIHVzZSB0aGlzIGZvciB3b3JrIGVzdGlt
YXRlcyAtIGJ1dCBpdCdzIHByb2JhYmx5IG1vcmUgdGhhbiBqdXN0IGFuCkBAIC0xMzA1LDcgKzEz
MDMsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgICAg
IC8vIFdvbmRlcmluZyB3aGF0IHRoaXMgZG9lcz8gTG9vayBhdCBIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMoKS4gVGhlIERPTSBhbmQgb3RoZXJzIGNhbiBhbHNvCiAgICAgICAgIC8vIGFkZCB0aGVp
ciBvd24gdXNpbmcgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoKS4KICAgICAgICAgYm9vbCBj
b252ZXJnZWQgPQotICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2Vu
Y2Uoc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICAgICAg
bV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IpOwogICAgICAg
ICBpZiAoY29udmVyZ2VkICYmIHNsb3RWaXNpdG9yLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gY2hhbmdl
UGhhc2UoY29ubiwgQ29sbGVjdG9yUGhhc2U6OkVuZCk7CkBAIC0xNTI2LDcgKzE1MjQsNyBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpmaW5pc2hDaGFuZ2luZ1BoCiAKIHZvaWQgSGVhcDo6c3Rv
cFRoZVBlcmlwaGVyeShHQ0NvbmR1Y3RvciBjb25uKQogewotICAgIGlmIChtX2NvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKSB7CisgICAgaWYgKG1fd29ybGRJc1N0b3BwZWQp
IHsKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IHdvcmxkIGFscmVhZHkgc3RvcHBlZC5cbiIpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE1MzcsNyAr
MTUzNSw3IEBAIHZvaWQgSGVhcDo6c3RvcFRoZVBlcmlwaGVyeShHQ0NvbmR1Y3RvciAKICAgICBt
X211dGF0b3JEaWRSdW4gPSBmYWxzZTsKIAogICAgIHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsK
LSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gdHJ1ZTsKKyAg
ICBtX3dvcmxkSXNTdG9wcGVkID0gdHJ1ZTsKIAogICAgIGZvckVhY2hTbG90VmlzaXRvcigKICAg
ICAgICAgWyZdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKQEAgLTE1NzQsMTEgKzE1NzIs
MTEgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6cmVzdW1lVGhlUGVyaXBoZQogICAgIAogICAg
IG1fYmFycmllcnNFeGVjdXRlZCA9IDA7CiAgICAgCi0gICAgaWYgKCFtX2NvbGxlY3RvckJlbGll
dmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKSB7CisgICAgaWYgKCFtX3dvcmxkSXNTdG9wcGVkKSB7
CiAgICAgICAgIGRhdGFMb2coIkZhdGFsOiBjb2xsZWN0b3IgZG9lcyBub3QgYmVsaWV2ZSB0aGF0
IHRoZSB3b3JsZCBpcyBzdG9wcGVkLlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQotICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQgPSBmYWxzZTsKKyAgICBtX3dvcmxkSXNTdG9wcGVkID0gZmFsc2U7CiAgICAgCiAgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgdmFzdGx5IGltcHJvdmVkOiB3ZSB3YW50IHRvIGdyYWIg
dGhlIGxvY2tzIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5CiAgICAgLy8gYmVjb21lIGF2YWls
YWJsZS4gV2UgYmFzaWNhbGx5IHdhbnQgYSBsb2NrQW55KCkgbWV0aG9kIHRoYXQgd2lsbCBsb2Nr
IHdoYXRldmVyIGxvY2sgaXMgYXZhaWxhYmxlCkBAIC0yNTc4LDcgKzI1NzYsNyBAQCB2b2lkIEhl
YXA6OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBUaW1pbmdTY29w
ZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3RyYWludDogY29uc2VydmF0
aXZlIHNjYW4iKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UucHJlcGFyZUZvckNvbnNlcnZh
dGl2ZVNjYW4oKTsKICAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJv
b3RzKCp0aGlzKTsKQEAgLTI1ODgsMTEgKzI1ODYsMTIgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVS
b290cyk7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYwOSwxOSArMjYw
OCwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICBzbG90
VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5leGNlcHRpb24oKSk7CiAgICAgICAgICAg
ICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpOwog
ICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisg
ICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAg
ICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAg
ICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBt
X3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwpAQCAtMjYzNywzNCArMjYzOCwzOCBA
QCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKHNsb3RWaXNpdG9yKTsKICAg
ICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9u
KTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkpzciIsICJKSVQgU3R1YiBSb3V0aW5lcyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZp
c2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVk
QnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVj
dXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAog
ICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiV3MiLCAiV2VhayBTZXRzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAg
ICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhzbG90VmlzaXRvcik7CiAgICAg
ICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwor
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAg
ICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4
dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZp
c2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVk
QnlNYXJraW5nKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2lu
ZywKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEdyIs
ICJERkcgV29ya2xpc3RzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVt
YmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29y
a2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAg
ICAgICAgIApAQCAtMjY3OSwxMiArMjY4NCwxMyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIHNsb3RW
aXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXll
ZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtp
bmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogI2VuZGlmCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxvY2tz
IiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0
aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
IHsKICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0
aG91dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJs
b2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMgYSBj
b25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KQEAgLTI2OTMsMTEgKzI2OTksMTUgQEAgdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgICAgICAgICAgc2xv
dFZpc2l0b3IudmlzaXRBc0NvbnN0cmFpbnQoY29kZUJsb2NrKTsKICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXll
ZCk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQsCisgICAgICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiTXJtcyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIsCi0g
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBncmFiIGxvY2tzIHRvIGZpZGRsZSB3
aXRoIHRoZSBtdXRhdG9yIG1hcmsgc3RhY2sgYW5kIHRoZSByYWNlIHN0YWNrLgorICAgICAgICAg
ICAgLy8gVGhlIGNoYW5jZXMgb2YgY29udGVudGlvbiBvbiB0aG9zZSBsb2NrcyBhcmUgc2xpbSwg
YnV0IHdlIHNob3VsZCBkbyBpdCBhbnl3YXkuCisgICAgICAgICAgICAKICAgICAgICAgICAgIC8v
IEluZGljYXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKICAgICAg
ICAgICAgIHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VN
YXJrU3RhY2stPnNpemUoKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3Vu
dChzaXplKTsKQEAgLTI3MTEsNyArMjcyMSw4IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKCkKICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYpIC0+IGRvdWJsZSB7CiAgICAgICAg
ICAgICByZXR1cm4gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3RhY2st
PnNpemUoKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXll
ZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhl
Y3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKIH0KIAog
dm9pZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0Nv
bnN0cmFpbnQ+IGNvbnN0cmFpbnQpCkBAIC0yNzk0LDE2ICsyODA1LDYgQEAgdm9pZCBIZWFwOjph
bGxvd0NvbGxlY3Rpb24oKQogICAgIG1fY29sbGVjdENvbnRpbnVvdXNseUxvY2sudW5sb2NrKCk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIEhlYXA6OmZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9w
YXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0b3IpOwotICAgIGZvciAoYXV0byYgc2xv
dFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICBmdW5jKCpzbG90Vmlz
aXRvcik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKGJvb2wgdmFs
dWUpCiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCAr
Mjg0OCwyNCBAQCB2b2lkIEhlYXA6OnJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjCiAgICAg
bV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJlbW92ZUZpcnN0KGNhbGxiYWNrKTsKIH0KIAordm9p
ZCBIZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IHRhc2spCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdN
dXRleCk7CisgICAgbV9ib251c1Zpc2l0b3JUYXNrID0gdGFzazsKKyAgICBtX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwordm9pZCBIZWFwOjpydW5UYXNrSW5QYXJh
bGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAg
IHVuc2lnbmVkIGluaXRpYWxSZWZDb3VudCA9IHRhc2stPnJlZkNvdW50KCk7CisgICAgc2V0Qm9u
dXNWaXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5ydW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVsbHB0cik7CisgICAgeworICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKKyAgICAgICAgd2hpbGUgKHRh
c2stPnJlZkNvdW50KCkgPiBpbml0aWFsUmVmQ291bnQpCisgICAgICAgICAgICBtX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZS53YWl0KG1fbWFya2luZ011dGV4KTsKKyAgICB9Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiV2Vha0hhbmRsZU93bmVyLmgiCiAjaW5j
bHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNU
aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgpAQCAtMTE0LDcgKzExNSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc190aW1lQ2hlY2tSZXNvbHV0aW9uID0gMTY7CiAKICAgICBzdGF0aWMg
Ym9vbCBpc01hcmtlZChjb25zdCB2b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNNYXJrZWRDb25j
dXJyZW50bHkoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQo
SGVhcFZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxT
aXplKGNvbnN0IHZvaWQqKTsKQEAgLTE1NCw3ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAgTXV0YXRv
clN0YXRlIG11dGF0b3JTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YXRlOyB9CiAg
ICAgc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IGNvbGxlY3Rpb25TY29wZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29sbGVjdGlvblNjb3BlOyB9CiAgICAgYm9vbCBoYXNIZWFwQWNjZXNzKCkg
Y29uc3Q7Ci0gICAgYm9vbCBjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgp
IGNvbnN0OworICAgIGJvb2wgd29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxk
SXNSdW5uaW5nKCkgY29uc3QgeyByZXR1cm4gIXdvcmxkSXNTdG9wcGVkKCk7IH0KIAogICAgIC8v
IFdlJ3JlIGFsd2F5cyBidXN5IG9uIHRoZSBjb2xsZWN0aW9uIHRocmVhZHMuIE9uIHRoZSBtYWlu
IHRocmVhZCwgdGhpcyByZXR1cm5zIHRydWUgaWYgd2UncmUKICAgICAvLyBoZWxwaW5nIGhlYXAu
CkBAIC0zNTgsNiArMzU5LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5h
bGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJl
bW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsK
KyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAg
ICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4oZnVuYykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC01MjcsNiArNTM5LDggQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBz
ZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
KTsKKyAgICAKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVf
dCBtX3JhbVNpemU7CiAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3
OSw5ICs1OTMsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxh
YmxlUGFyYWxsZWxTbG90VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNo
U2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0Owog
ICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVC
bG9ja1NldD4gbV9jb2RlQmxvY2tzOwpAQCAtNjMzLDggKzY0NCw3IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9v
bCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29w
YXF1ZVJvb3RzTXV0ZXg7Ci0gICAgSGFzaFNldDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsK
KyAgICBDb25jdXJyZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1Miw3
IEBAIHByaXZhdGU6CiAgICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+
OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNs
aWVudCBtX2hlbHBlckNsaWVudDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+PiBtX2JvbnVzVmlzaXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0Up
CiAgICAgc2l6ZV90IG1fYmxvY2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKQEAgLTY1Nyw3ICs2Njgs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBuZWVkRmluYWxpemVCaXQg
PSAxdSA8PCA0dTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQg
PSAxdSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0
aW9uIHZhcmlhYmxlLgogICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwotICAgIGJv
b2wgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX3dvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1f
YmVmb3JlR0M7CiAgICAgTW9ub3RvbmljVGltZSBtX2FmdGVyR0M7CiAgICAgTW9ub3RvbmljVGlt
ZSBtX3N0b3BUaW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MywzMCArNjMsMjAgQEAgaW5saW5lIGJvb2wg
SGVhcDo6aGFzSGVhcEFjY2VzcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fd29ybGRTdGF0ZS5sb2Fk
KCkgJiBoYXNBY2Nlc3NCaXQ7CiB9CiAKLWlubGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGll
dmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgY29uc3QKK2lubGluZSBib29sIEhlYXA6Ondvcmxk
SXNTdG9wcGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZDsKKyAgICByZXR1cm4gbV93b3JsZElzU3RvcHBlZDsKIH0KIAorLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4g
Z2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNN
YXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgp
ICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2Vf
Y2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlv
bigpKQogICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsK
ICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVy
biBibG9jay5pc01hcmtlZCgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgp
Lm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2Vs
bCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxs
LT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0
aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRC
bG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAg
YmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwor
ICAgIHJldHVybiBibG9jay5pc01hcmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCku
bWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0
ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBy
YXdDZWxsKQpAQCAtMTc5LDE5ICsxNjksMTkgQEAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNv
b24oUmV0YWluUHRyPAogCiBpbmxpbmUgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRo
KCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVz
VGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBt
X3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAogaW5saW5lIHZv
aWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdD
VGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7Cisg
ICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9k
ZWZlcnJhbERlcHRoLS07CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFs
RGVwdGhBbmRHQ0lmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBt
X2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1h
eUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgt
LTsKICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9kaWREZWZlckdDV29yaykpIHsKQEAgLTI2OSw0
ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5KCkKICAgICAgICAg
c3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9p
ZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgIGZ1bmMo
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9y
KTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykK
KyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxk
ZXIuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2
b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3QoCiB2b2lkIEhlYXBTbmFwc2hv
dEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQogewogICAgIEFTU0VSVChtX3Byb2Zp
bGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOwotICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNl
bGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGluZ05vZGVGb3JDZWxsKGNlbGwpKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRp
b24uaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFy
Z2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgog
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c01hcmtlZChIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqLCBEZXBlbmRlbmN5KSB7IHJldHVybiBpc01hcmtl
ZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBW
ZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJr
ZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyByZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5
QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29sIGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVmFsaWRDZWxsOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9M
b2NrRHVyaW5nTWFya2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQg
KzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBVc2UgdGhpcyBsb2NrIHNjb3BlIGxpa2Ugc286
CiAvLyBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKGhlYXAsIGxvY2spOwogdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci1Mb2NrZXI8TG9ja1R5cGU+IGxvY2tEdXJpbmdNYXJraW5n
KEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNzZWRMb2NrKQorYXV0byBsb2NrRHVyaW5nTWFya2lu
ZyhIZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFzc2VkTG9jaykKIHsKLSAgICBMb2NrVHlwZSogbG9j
azsKLSAgICBpZiAoaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSkKLSAgICAgICAgbG9jayA9
ICZwYXNzZWRMb2NrOwotICAgIGVsc2UKLSAgICAgICAgbG9jayA9IG51bGxwdHI7Ci0gICAgcmV0
dXJuIExvY2tlcjxMb2NrVHlwZT4obG9jayk7CisgICAgcmV0dXJuIGhvbGRMb2NrSWYocGFzc2Vk
TG9jaywgaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDMzIEBAIHZv
aWQgTWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQoKQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4g
TWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKQoreworICAgIGNs
YXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPiB7Cisg
ICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKQorICAg
ICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcnVuKCkgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
ICAgICAgICAgbV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZpbmRCaXQo
bV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9jYXRvci5t
X2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9ibG9ja3NbbV9pbmRleCsrXTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1fYWxsb2Nh
dG9yOworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKKyAgICAgICAgTG9jayBtX2xvY2s7
CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMpKTsKK30K
Kwogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBtX2NlbGxTaXplLCAiLyIsIG1f
YXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVk
ZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05OSw2ICsxMDAsOCBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxv
Y2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJlZlB0cjxT
aGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tT
b3VyY2UoKTsKKyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
ICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjUxNzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTgsNyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2
b2lkKik7CiAgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29u
c3Qgdm9pZCopOwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQq
LCBEZXBlbmRlbmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCosIERl
cGVuZGVuY3kpOwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtz
U3RhbGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lXaXRoPGJv
b2w+IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
bik7CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbik7CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBt
X21hcmtpbmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+
IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNp
b247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNp
b24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9j
azo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBt
X21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJz
aW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1
cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9
CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUo
KQpAQCAtNTI0LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2Vk
UmF3KGNvbgogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3Rh
bGUobWFya2luZ1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NT
dGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVl
KQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChV
TkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5j
eSk7CisgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVy
c2lvbikpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9p
ZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDEx
IEBAIHB1YmxpYzoKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhh
dmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAg
Ym9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQogICAgIAorICAg
IFdlYWtTZXQqIGFjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRz
LmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1f
YWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0Jl
Z2luKCkgeyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1Nl
dCogbmV3QWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmVu
ZCgpOyB9CisgICAgCiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFG
aWxlKCkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNp
emVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsyNywxNSBAQAogI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VmlzaXRDb3VudGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1NYXJraW5nQ29uc3RyYWludDo6
TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcg
bmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkpCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0
eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIDogbV9hYmJyZXZpYXRl
ZE5hbWUoYWJicmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAg
LCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3Zv
bGF0aWxpdHkodm9sYXRpbGl0eSkKLXsKLX0KLQotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdD
b25zdHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0g
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+
IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBx
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkpCi0gICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCi0gICAgLCBt
X25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3Zl
KHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQogICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxp
dHkpCisgICAgLCBtX3BhcmFsbGVsaXNtKHBhcmFsbGVsaXNtKQogewogfQogCkBAIC02MywxNCAr
NDgsNTEgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0
VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1l
IHRpbWVvdXQpCitDb25zdHJhaW50UGFyYWxsZWxpc20gTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAg
ICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2
aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAg
IG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0
VmlzaXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRp
ZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0
b3IpOworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIHJlc3VsdCA9IGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworICAgIG1fbGFz
dFZpc2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIG1fbGFzdEV4ZWN1
dGVQYXJhbGxlbGlzbSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitkb3VibGUg
TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBx
dWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6
ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVy
IHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7
CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
IG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwor
ICAgIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3Vu
dCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50Ojpkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJh
bGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJikKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxMSBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIgogI2luY2x1ZGUgIkNv
bnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCiAjaW5j
bHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCkBAIC00MywxOCArNDIsOSBAQCBjbGFzcyBNYXJraW5nQ29uc3Ry
YWludCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRF
IE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0
cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmlu
ZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lk
KFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0
aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2
aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5LCBDb25zdHJhaW50
UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB+TWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIH5NYXJraW5nQ29uc3RyYWludCgpOwogICAgIAogICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIApAQCAtNjQsMzMgKzU0LDM5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0U3RhdHMoKTsKICAgICAKICAgICBzaXplX3QgbGFz
dFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50OyB9CisgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtIGxhc3RFeGVjdXRlUGFyYWxsZWxpc20oKSBjb25zdCB7IHJldHVy
biBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc207IH0KICAgICAKLSAgICB2b2lkIGV4ZWN1dGUoU2xv
dFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0
KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZShTbG90VmlzaXRvciYpOwogICAg
IAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24o
dmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1
aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7Cisg
ICAgCisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAg
CisgICAgdm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOworICAgIHZvaWQgZmluaXNo
UGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQogICAgIAorICAg
IC8vIElmIHRoaXMgaXMgU2VxdWVudGlhbCwgaXQgbWVhbnMgdGhhdCB0aGUgY29uc3RyYWludCBo
YXMgdG8gYmUgcnVuIHNlcXVlbnRpYWxseSwgd2l0aCBubyBjb25jdXJyZW50CisgICAgLy8gY29u
c3RyYWludHMuCisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBDb25z
dHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNl
dCBtX2luZGV4LgogICAgIAogICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OwogICAg
IENTdHJpbmcgbV9hYmJyZXZpYXRlZE5hbWU7CiAgICAgQ1N0cmluZyBtX25hbWU7Ci0gICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0aW1lb3V0
KT4gbV9leGVjdXRlRnVuY3Rpb247Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3Im
KT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IG1fdm9sYXRpbGl0eTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9wYXJhbGxlbGlzbTsK
KyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtIHsgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCB9OyAvLyBJdCdzIGEgaGV1cmlzdGljLCB3ZSBj
YW4gYmUgd3JvbmcuIFRoaXMgZ3Vlc3Mgb25seSBhZmZlY3RzIHRoZSBmaXJzdCBydW4uCiAgICAg
c2l6ZV90IG1fbGFzdFZpc2l0Q291bnQgeyAwIH07CisgICAgTG9jayBtX2xvY2s7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNjAgKzI2LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
TWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKIAorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNp
bmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bi5oPgogI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0
IHsKLXB1YmxpYzoKLSAgICBFeGVjdXRpb25Db250ZXh0KE1hcmtpbmdDb25zdHJhaW50U2V0JiBz
ZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAg
IDogbV9zZXQoc2V0KQotICAgICAgICAsIG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAsIG1f
dGltZW91dCh0aW1lb3V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRWaXNpdFNv
bWV0aGluZygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGlu
ZzsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZygpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0
KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCB0aW1lcyBvdXQuCi0g
ICAgYm9vbCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCi0gICAgewotICAgICAgICBmb3Ig
KHNpemVfdCBpbmRleCA6IHVuZXhlY3V0ZWQpIHsKLSAgICAgICAgICAgIGV4ZWN1dGUoaW5kZXgp
OwotICAgICAgICAgICAgdW5leGVjdXRlZC5jbGVhcihpbmRleCk7Ci0gICAgICAgICAgICBpZiAo
c2hvdWxkVGltZU91dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRFeGVjdXRl
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRlZC5nZXQoaW5kZXgpOyB9Ci0K
LSAgICB2b2lkIGV4ZWN1dGUoc2l6ZV90IGluZGV4KQotICAgIHsKLSAgICAgICAgbV9zZXQubV9z
ZXRbaW5kZXhdLT5leGVjdXRlKG1fdmlzaXRvciwgbV9kaWRWaXNpdFNvbWV0aGluZywgbV90aW1l
b3V0KTsKLSAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOwotICAgIH0KLSAgICAKLXByaXZh
dGU6Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0OwotICAgIFNsb3RWaXNpdG9yJiBt
X3Zpc2l0b3I7Ci0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7Ci0gICAgQml0VmVjdG9yIG1f
ZXhlY3V0ZWQ7Ci0gICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKLX07Ci0K
LU1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCgpCitNYXJraW5nQ29u
c3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYgaGVhcCkKKyAgICA6IG1faGVh
cChoZWFwKQogewogfQogCkBAIC0xMDcsMTggKzY0LDE5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBu
YW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit2b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiB7
Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJi
cmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxp
dHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4o
V1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9u
KSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6YWRkKAogICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0g
ICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+
IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhl
Y3V0ZUZ1bmN0aW9uLAogICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0
eSkKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LAorICAgIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJr
aW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
biksIHZvbGF0aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVNYXJraW5n
Q29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKGV4ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiks
IHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmFkZCgKQEAgLTEzMSw5ICs4OSw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFk
ZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRv
ciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhl
Y3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgcmVzdWx0
ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBib29sIHJl
c3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTQ4LDkgKzEwNiw5IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZyb250QWQK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1
dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGlt
ZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25D
b250ZXh0KCp0aGlzLCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNv
bHZlciBzb2x2ZXIoKnRoaXMpOwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlvbiA9IG1faXRl
cmF0aW9uKys7CiAgICAgCkBAIC0xNTksMTYgKzExNywxNCBAQCBib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQ29udmVyCiAKICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFp
bnRzIHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0
aGVuCiAgICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlmICghZXhlY3V0
aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBzb2x2ZXIuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpOwogICAgIAogICAgIC8vIEZp
cnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3IgZHJhaW5pbmcsIHNvIGl0J3MgdW5s
aWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMgb3RoZXIKICAgICAvLyB0aGFuIHJvb3Rz
LgogICAgIGlmIChpdGVyYXRpb24gPT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNvbHZlci5kcmFpbihtX3VuZXhlY3V0ZWRPdXRn
cm93dGhzKTsKICAgICAKICAgICAvLyBXZSB3YW50IHRvIGtlZXAgcHJlZmVycmluZyB0aGUgb3V0
Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50ZWQK
ICAgICAvLyBldmVuIGluIGEgc3RvcC10aGUtd29ybGQgR0MgLSB1bnRpbCB0aGV5IHN0b3AgcHJv
ZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBnbyB0b3RhbGx5CkBAIC0yMTUsMzMgKzE3
MSwxNiBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgICAg
ICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgpOwogICAgICAgICB9
KTsKICAgICAKLSAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRl
cmVkKSB7Ci0gICAgICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOwotICAgICAg
ICAKLSAgICAgICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1v
c3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQotICAgICAgICAvLyB3
ZSBmaW5kIHdvcmsuCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRl
IGFsbCBjb25zdHJhaW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCi0gICAg
ICAgIC8vIGJldHRlciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKLSAgICAg
ICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBydW5uaW5nLgotICAgICAgICAv
LyAtIElmIHRoZSB2aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgotICAg
ICAgICAvLyAtIEVsc2UgcnVuIHVudGlsIHRpbWVvdXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzIKLSAgICAgICAgaWYgKGV4ZWN1dGlv
bkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgc29sdmVyLmNvbnZlcmdlKG1fb3JkZXJlZCk7CiAgICAgCi0gICAgcmV0dXJu
IHRydWU7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UndmUgY29udmVyZ2VkLiBUaGF0IGhhcHBl
bnMgaWYgd2UgZGlkIG5vdCB2aXNpdCBhbnl0aGluZy4KKyAgICByZXR1cm4gIXNvbHZlci5kaWRW
aXNpdFNvbWV0aGluZygpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRl
QWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcg
PSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29u
c3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGlt
ZTo6aW5maW5pdHkoKSk7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CiAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQu
aAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTEgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworCiBjbGFzcyBN
YXJraW5nQ29uc3RyYWludFNldCB7CiBwdWJsaWM6Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTZXQo
KTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldChIZWFwJik7CiAgICAgfk1hcmtpbmdDb25zdHJh
aW50U2V0KCk7CiAgICAgCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKQEAgLTQxLDE1ICs0
MywxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0
ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICB2b2lkIGFk
ZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFt
ZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCiAgICAg
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eSk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAg
ICAKICAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAg
ICAKQEAgLTYwLDIxICs2NCwxOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBub25lIG9mIHRoZW0gcHJvZHVj
ZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBhc3N1bWVzIHRoYXQgeW91J3ZlIGFscmFlZHkgdmlz
aXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgotICAgIGJvb2wgZXhlY3V0ZUNvbnZl
cmdlbmNlKAotICAgICAgICBTbG90VmlzaXRvciYsCi0gICAgICAgIE1vbm90b25pY1RpbWUgdGlt
ZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZl
cmdlbmNlKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0
cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgogICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90
VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKLSAgICBjbGFzcyBFeGVjdXRpb25Db250ZXh0Owot
ICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRpb25Db250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBNYXJr
aW5nQ29uc3RyYWludFNvbHZlcjsKICAgICAKLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUlt
cGwoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIGJvb2wgZXhlY3V0
ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYpOwogICAgIAotICAgIGJvb2wgZHJhaW4oU2xv
dFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3Rv
ciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICBib29sIGRyYWluKFNs
b3RWaXNpdG9yJiwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBi
b29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CiAgICAgCisgICAgSGVhcCYgbV9oZWFwOwogICAgIEJp
dFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0
Z3Jvd3RoczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pj4g
bV9zZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgCisKK01hcmtpbmdDb25zdHJhaW50U29sdmVyOjpNYXJraW5n
Q29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYgc2V0KQorICAgIDogbV9oZWFw
KHNldC5tX2hlYXApCisgICAgLCBtX21haW5WaXNpdG9yKG1faGVhcC5jb2xsZWN0b3JTbG90Vmlz
aXRvcigpKQorICAgICwgbV9zZXQoc2V0KQoreworICAgIG1faGVhcC5mb3JFYWNoU2xvdFZpc2l0
b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIG1f
dmlzaXRDb3VudGVycy5hcHBlbmQoVmlzaXRDb3VudGVyKHZpc2l0b3IpKTsKKyAgICAgICAgfSk7
Cit9CisKK01hcmtpbmdDb25zdHJhaW50U29sdmVyOjp+TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIo
KQoreworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRWaXNpdFNvbWV0aGlu
ZygpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBWaXNpdENvdW50ZXImIHZpc2l0Q291bnRlciA6
IG1fdmlzaXRDb3VudGVycykgeworICAgICAgICBpZiAodmlzaXRDb3VudGVyLnZpc2l0Q291bnQo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVy
ZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4g
cGlja05leHQpCit7CisgICAgbV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAgICAgICAg
WyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeyBydW5FeGVjdXRpb25UaHJlYWQodmlzaXRvciwg
cHJlZmVyZW5jZSwgcGlja05leHQpOyB9KTsKKyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
bmRleFRvUnVuIDogbV9kaWRFeGVjdXRlSW5QYXJhbGxlbCkKKyAgICAgICAgbV9zZXQubV9zZXRb
aW5kZXhUb1J1bl0tPmZpbmlzaFBhcmFsbGVsV29yayhtX21haW5WaXNpdG9yKTsKKyAgICBtX2Rp
ZEV4ZWN1dGVJblBhcmFsbGVsLmNsZWFyKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9S
dW4gOiBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseSkKKyAgICAgICAgZXhlY3V0ZSgqbV9zZXQubV9z
ZXRbaW5kZXhUb1J1bl0pOworICAgIG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmNsZWFyKCk7Cisg
ICAgICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuYml0Q291
bnQoKSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRyYWluKEJpdFZlY3Rv
ciYgdW5leGVjdXRlZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSB1bmV4ZWN1dGVkLmJlZ2luKCk7Cisg
ICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVkLmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8gcGlja05leHQgPSBzY29wZWRMYW1iZGE8c3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4oKT4oCisgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiB7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAgICAgICB9
KTsKKyAgICBleGVjdXRlKE5leHRDb25zdHJhaW50Rmlyc3QsIHBpY2tOZXh0KTsKKyAgICB1bmV4
ZWN1dGVkLmNsZWFyQWxsKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmNv
bnZlcmdlKGNvbnN0IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBvcmRlcikKK3sKKyAgICBp
ZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBp
ZiAob3JkZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIHNpemVf
dCBpbmRleCA9IDA7CisKKyAgICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbnN0
cmFpbnQgc2VxdWVudGlhbGx5IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVpY2tseSBnaXZlIHVzIGEK
KyAgICAvLyByZXN1bHQuIElmIHdlIHJhbiBpdCBpbiBwYXJhbGxlbCB0byBvdGhlciBjb25zdHJh
aW50cywgdGhlbiB3ZSBtaWdodCBlbmQgdXAgaGF2aW5nIHRvIHdhaXQgZm9yCisgICAgLy8gdGhv
c2Ugb3RoZXIgY29uc3RyYWludHMgdG8gZmluaXNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9m
IHRpbWUgc2luY2UgZHVyaW5nIGNvbnZlcmdlbmNlIGl0J3MKKyAgICAvLyBlbXBpcmljYWxseSBt
b3N0IG9wdGltYWwgdG8gcmV0dXJuIHRvIGRyYWluaW5nIGFzIHNvb24gYXMgYSBjb25zdHJhaW50
IGdlbmVyYXRlcyB3b3JrLiBNb3N0CisgICAgLy8gY29uc3RyYWludHMgZG9uJ3QgZ2VuZXJhdGUg
YW55IHdvcmsgbW9zdCBvZiB0aGUgdGltZSwgYW5kIHdoZW4gdGhleSBkbyBnZW5lcmF0ZSB3b3Jr
LCB0aGV5IHRlbmQKKyAgICAvLyB0byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRl
Y2VudCBkcmFpbmluZyBjeWNsZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlm
CisgICAgLy8gd2UgZ2V0IHRoZSBoZWNrIG91dCBvZiBoZXJlIGFzIHNvb24gYXMgYSBjb25zdHJh
aW50IGdlbmVyYXRlcyB3b3JrLiBJIHRoaW5rIHRoYXQgcGFydCBvZiB3aGF0CisgICAgLy8gbWFr
ZXMgdGhpcyBvcHRpbWFsIGlzIHRoYXQgd2UgYWxzbyBuZXZlciBhYm9ydCBydW5uaW5nIGEgY29u
c3RyYWludCBlYXJseSwgc28gd2hlbiB3ZSBkbyBydW4KKyAgICAvLyBvbmUsIGl0IGhhcyBhbiBv
cHBvcnR1bml0eSB0byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2libHkgY2FuLgor
ICAgIC8vCisgICAgLy8gU2ltaWxhciByZWFzb25pbmcgYXBwbGllcyB0byBjb25zdHJhaW50cyB0
aGF0IHRlbmQgdG8gcmV0dXJuIENvc250cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwKKyAgICAv
LyBmcm9tIGV4ZWN1dGUuIFRob3NlIGNvbnN0cmFpbnRzIHR5cGljYWxseSBoYXZlIGEgdmVyeSBm
YXN0LXJ1bm5pbmcgZXhlY3V0ZSBmdW5jdGlvbiwgd2hpY2ggdGhlbgorICAgIC8vIG9mZmxvYWRz
IGFsbW9zdCBhbGwgb2YgdGhlIHdvcmsgdG8gYSBwYXJhbGxlbCB3b3JrZXIuIEluIHRoYXQgY2Fz
ZSwgaXQgbWFrZXMgc2Vuc2UgdG8gcnVuIHRoZQorICAgIC8vIGV4ZWN1dGUgZnVuY3Rpb24gc2Vx
dWVudGlhbGx5LgorICAgIGlmIChvcmRlcltpbmRleF0tPndvcmtFc3RpbWF0ZShtX21haW5WaXNp
dG9yKQorICAgICAgICB8fCBvcmRlcltpbmRleF0tPmxhc3RFeGVjdXRlUGFyYWxsZWxpc20oKSA9
PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIGV4ZWN1dGUoKm9y
ZGVyW2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxs
ZWwuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAob3JkZXIuaXNFbXB0eSgpIHx8IGRpZFZpc2l0
U29tZXRoaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAg
YXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPigK
KyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAg
IGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXIu
c2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3JkZXJbaW5kZXgrK10tPmluZGV4KCk7CisgICAg
ICAgIH0pOworICAgIAorICAgIGV4ZWN1dGUoUGFyYWxsZWxXb3JrRmlyc3QsIHBpY2tOZXh0KTsK
K30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYXJraW5nQ29uc3Ry
YWludCYgY29uc3RyYWludCkKK3sKKyAgICBpZiAobV9leGVjdXRlZC5nZXQoY29uc3RyYWludC5p
bmRleCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZShtX21haW5WaXNpdG9yKTsKKyAgICBk
aWRFeGVjdXRlKHBhcmFsbGVsaXNtLCBjb25zdHJhaW50LmluZGV4KCkpOworfQorCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIGZvciAoOzspIHsKKyAgICAg
ICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgIHVuc2lnbmVkIGluZGV4VG9SdW47
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICg7OykgeworICAgICAg
ICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUlu
UGFyYWxsZWwuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2Rl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRv
IHRyeU5leHRDb25zdHJhaW50ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiBwaWNrUmVzdWx0ID0gcGlja05leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghcGlja1Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldCgqcGlja1Jlc3VsdCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50
ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjb25zdHJhaW50LnBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1
ZW50aWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50
aWFsbHkuYXBwZW5kKCpwaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRv
UGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVmZXJlbmNlID09
IFBhcmFsbGVsV29ya0ZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJhbGxl
bFdvcmsoKSB8fCB0cnlOZXh0Q29uc3RyYWludCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRyeU5leHRDb25zdHJhaW50KCkgfHwgdHJ5UGFyYWxsZWxXb3JrKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFtX251bUFjdGl2ZVRocmVhZHMpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogQW55IHdhaXRpbmcgY291bGQgYmUgcmVwbGFjZWQgd2l0
aCBqdXN0IHJ1bm5pbmcgdGhlIFNsb3RWaXNpdG9yLgorICAgICAgICAgICAgICAgIC8vIEkgd29u
ZGVyIGlmIHRoYXQgd291bGQgYmUgcHJvZml0YWJsZS4KKyAgICAgICAgICAgICAgICBtX2NvbmRp
dGlvbi53YWl0KG1fbG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcysrOworICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20g
PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFtp
bmRleFRvUnVuXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChkb1BhcmFsbGVs
V29ya01vZGUpCisgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxsZWxXb3JrKHZpc2l0b3Ip
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhl
Y3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkgeworICAgICAgICAgICAg
ICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuZ2V0KGluZGV4VG9SdW4pKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4p
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
bV90b0V4ZWN1dGVJblBhcmFsbGVsLnRha2VGaXJzdCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAodW5zaWduZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGluZGV4VG9SdW47IH0pOwor
ICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuY2xlYXIoaW5kZXhU
b1J1bik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICBpZiAo
cGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAg
ICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4pOwor
ICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4VG9S
dW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzLS07CisgICAgICAgICAgICBt
X2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNYXJr
aW5nQ29uc3RyYWludFNvbHZlcjo6ZGlkRXhlY3V0ZShDb25zdHJhaW50UGFyYWxsZWxpc20gcGFy
YWxsZWxpc20sIHVuc2lnbmVkIGluZGV4KQoreworICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsK
KyAgICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkg
eworICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4KTsKKyAgICAgICAg
bV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleCk7CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlZpc2l0Q291bnRlci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKKworY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25z
dHJhaW50U29sdmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1Ymxp
YzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYpOwor
ICAgIH5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpOworICAgIAorICAgIGJvb2wgZGlkVmlzaXRT
b21ldGhpbmcoKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2Ugewor
ICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJzdAor
ICAgIH07CisKKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFt
YmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICAKKyAgICB2b2lk
IGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCk7CisgICAgCisgICAgdm9pZCBjb252ZXJnZShj
b25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpOworICAgIAorICAgIHZvaWQg
ZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHJ1
bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3Bl
ZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgCisgICAg
dm9pZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgpOwor
CisgICAgSGVhcCYgbV9oZWFwOworICAgIFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOworICAg
IE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKKyAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsK
KyAgICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBCaXRW
ZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+
IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV90b0V4
ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29u
ZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlVGhyZWFkcyB7IDAgfTsKKyAgICBWZWN0
b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0
LmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1
ZVJvb3RTZXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIE9wYXF1ZVJvb3RTZXQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE9wYXF1ZVJvb3RTZXQpOwotcHVibGljOgotICAgIE9wYXF1ZVJvb3RTZXQoKQotICAgICAgICA6
IG1fbGFzdFF1ZXJpZWRSb290KG51bGxwdHIpCi0gICAgICAgICwgbV9jb250YWluc0xhc3RRdWVy
aWVkUm9vdChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjb250YWlucyh2b2lkKiBy
b290KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHJvb3QgIT0gbV9sYXN0UXVlcmllZFJvb3Qp
IHsKLSAgICAgICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gcm9vdDsKLSAgICAgICAgICAgIG1f
Y29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBtX3Jvb3RzLmNvbnRhaW5zKHJvb3QpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290OwotICAgIH0KLQot
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5p
c0VtcHR5KCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX3Jv
b3RzLmNsZWFyKCk7Ci0gICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gbnVsbHB0cjsKLSAgICAg
ICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wg
YWRkKHZvaWQqIHJvb3QpCi0gICAgewotICAgICAgICBpZiAocm9vdCA9PSBtX2xhc3RRdWVyaWVk
Um9vdCkKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSB0cnVlOwotICAg
ICAgICByZXR1cm4gbV9yb290cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsKLSAgICB9Ci0KLSAgICBp
bnQgc2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5zaXplKCk7Ci0g
ICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgSGFz
aFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9yb290cy5lbmQoKTsKLSAgICB9Ci0KLQotcHJpdmF0ZToKLSAgICBIYXNoU2V0PHZv
aWQqPiBtX3Jvb3RzOwotICAgIG11dGFibGUgdm9pZCogbV9sYXN0UXVlcmllZFJvb3Q7Ci0gICAg
bXV0YWJsZSBib29sIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNl
QWRhcHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFs
bGVsU291cmNlQWRhcHRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRU
YXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUs
IHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4KK2NsYXNzIFBhcmFsbGVs
U291cmNlQWRhcHRlciA6IHB1YmxpYyBTaGFyZWRUYXNrPElubmVyVHlwZSgpPiB7CitwdWJsaWM6
CisgICAgUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgp
Pj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMpCisgICAgICAgIDog
bV9vdXRlclNvdXJjZShvdXRlclNvdXJjZSkKKyAgICAgICAgLCBtX3Vud3JhcEZ1bmModW53cmFw
RnVuYykKKyAgICB7CisgICAgfQorICAgIAorICAgIElubmVyVHlwZSBydW4oKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBk
byB7CisgICAgICAgICAgICBpZiAobV9pbm5lclNvdXJjZSkgeworICAgICAgICAgICAgICAgIGlm
IChJbm5lclR5cGUgcmVzdWx0ID0gbV9pbm5lclNvdXJjZS0+cnVuKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9IG51
bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5uZXJT
b3VyY2UgPSBtX3Vud3JhcEZ1bmMobV9vdXRlclNvdXJjZS0+cnVuKCkpOworICAgICAgICB9IHdo
aWxlIChtX2lubmVyU291cmNlKTsKKyAgICAgICAgcmV0dXJuIElubmVyVHlwZSgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG1fb3V0ZXJT
b3VyY2U7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+PiBtX2lubmVyU291cmNl
OworICAgIFVud3JhcEZ1bmMgbV91bndyYXBGdW5jOworICAgIExvY2sgbV9sb2NrOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5lclR5cGUsIHR5cGVuYW1l
IFVud3JhcEZ1bmM+CitSZWY8UGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJU
eXBlLCBVbndyYXBGdW5jPj4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFy
ZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3Jh
cEZ1bmMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFyYWxsZWxTb3VyY2VBZGFwdGVy
PE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPihvdXRlclNvdXJjZSwgdW53cmFwRnVu
YykpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVN
YXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBu
YW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24s
CisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtKQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZp
YXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAs
IG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJp
bmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90
VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKKyAg
ICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShu
YW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihX
VEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rp
b24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpCit7Cit9CisKK2RvdWJs
ZSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlz
aXRvcik7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9leGVjdXRlRnVu
Y3Rpb24odmlzaXRvcik7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVu
dGlhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2
aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNp
dG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgCisg
ICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlk
ZTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBs
KFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0
b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsOSArOTgsNyBAQCBTbG90VmlzaXRvcjo6flNs
b3RWaXNpdG9yKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIHsKLSAg
ICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hv
dWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KLSAgICBlbHNlCisgICAgaWYgKGhlYXAoKS0+Y29sbGVj
dGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKQogICAgICAgICByZXNldCgpOwog
CiAgICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gdm0oKS5oZWFwUHJvZmlsZXIo
KSkKQEAgLTExMSw3ICsxMDksNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmco
KQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1f
b3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7CiAgICAgbV92aXNp
dENvdW50ID0gMDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBudWxscHRyOwpAQCAtMjc3
LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2UKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgSlNDZWxs
KiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7
CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlz
WmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CkBAIC0zNDYsNyAr
MzQzLDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNp
dENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7
CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBj
ZWxsKTsKICAgICAKQEAgLTQzNSw3ICs0MzIsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVL
bm93blBhcmFsbGVsKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBl
ZChjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0gICAgbV9tdXRhdG9ySXNTdG9wcGVkID0gKG1f
aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRp
bWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICBtX211dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFw
LndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKCkKQEAgLTQ1Miw3ICs0
NDksNyBAQCBib29sIFNsb3RWaXNpdG9yOjpoYXNBY2tub3dsZWRnZWRUaGF0VGhlCiAKIGJvb2wg
U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7Cisg
ICAgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkg
JiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9y
OjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4ICs0ODcsNiBAQCBORVZFUl9J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAgICAgIG1fcmlnaHRUb1J1bi5z
YWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KLSAgICAK
LSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9y
bUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVzdGVkKQpAQCAtNTUwLDcgKzU0
NSw2IEBAIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHIKICAgICB9CiAK
ICAgICBkb25hdGVBbGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiAKICAgICByZXR1cm4g
Ynl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1NSwxNiBAQCBib29sIFNsb3RWaXNpdG9y
OjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlkUmVhY2hUZXJtaW5hdGlvbihs
b2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0
IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24o
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgpCi0g
ICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAg
ICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQotICAgICAg
ICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgcmV0
dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycworICAgICAgICAmJiAh
aGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5KCkKKyAgICAgICAgfHwgIW1f
aGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFt
X2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKQEAgLTU4Mywx
MiArNTc2LDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAog
ICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAg
IAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJr
aW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9t
YXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAg
IG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBt
X2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAg
ICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Vs
YXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYyNCw1NyBAQCBORVZFUl9JTkxJTkUgU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBb
Jl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tl
cikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sK
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21h
cmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0
aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
IWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zp
c2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251
c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hl
YXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYg
c3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0
ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdH
bG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChNYXJr
U3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFw
Lm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAoYm9udXNUYXNrKSB7CisgICAg
ICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSB3b3VsZCBub3QgaGF2ZSB0byBkbyB0aGlzLiBIb3dldmVy
LCB0aGUgcGFyYWxsZWwgbWFya2luZyBhbGdvcml0aG0gd2lsbAorICAgICAgICAgICAgLy8gZ2V0
IGNvbmZ1c2VkIGlmIHdlIGluaXRpYXRlIGl0IHdpdGggdGhlIGhlbHBlciB2aXNpdG9ycyBoYXZp
bmcgYW55dGhpbmcgaW4gdGhlaXIgc3RhY2tzLgorICAgICAgICAgICAgLy8gQWxzbywgdGhpcyBw
cm90ZWN0cyBidWdzIHRoYXQgaW52b2x2ZSByYWNlcyBiZXR3ZWVuIHZpc2l0Q2hpbGRyZW4gYW5k
IG9uZSBvZiB0aGUKKyAgICAgICAgICAgIC8vIGNvbnN0cmFpbnRzLgorICAgICAgICAgICAgLy9k
b25hdGVBbGwoKTsKKworICAgICAgICAgICAgLy8gVGhlIG1haW4gdGhyZWFkIGNvdWxkIHN0aWxs
IGJlIHJ1bm5pbmcsIGFuZCBtYXkgcnVuIGZvciBhIHdoaWxlLiBVbmxlc3Mgd2UgY2xlYXIgdGhl
IHRhc2sKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcywgd2Ugd2lsbCBrZWVwIGxvb3BpbmcgYXJv
dW5kIHRyeWluZyB0byBydW4gdGhlIHRhc2suCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAg
ICAgICAgICAgIGlmIChtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID09IGJvbnVzVGFzaykKKyAg
ICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX2hl
YXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBpc0FjdGl2ZSA9IHRydWU7CiAgICAgfQogfQpAQCAtNjcwLDE1ICs2OTQsMTkgQEAgU2xv
dFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgIGlmIChPcHRpb25zOjpu
dW1iZXJPZkdDTWFya2VycygpID09IDEKICAgICAgICAgfHwgKG1faGVhcC5tX3dvcmxkU3RhdGUu
bG9hZCgpICYgSGVhcDo6bXV0YXRvcldhaXRpbmdCaXQpCiAgICAgICAgIHx8ICFtX2hlYXAuaGFz
SGVhcEFjY2VzcygpCi0gICAgICAgIHx8IG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVX
b3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIHx8IG1faGVhcC53b3JsZElzU3RvcHBlZCgpKSB7
CiAgICAgICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIG92ZXIgZHJhaW5JblBhcmFsbGVs
KCkgd2hlbiB3ZSBoYXZlIGEgY29uY3VycmVudCBtdXRhdG9yIGJ1dAogICAgICAgICAvLyBvdGhl
cndpc2UgaXQgaXMgbm90IHByb2ZpdGFibGUuCiAgICAgICAgIHJldHVybiBkcmFpbkluUGFyYWxs
ZWwodGltZW91dCk7CiAgICAgfQogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFy
a2luZ011dGV4KTsKLSAgICBkb25hdGVBbGwobG9ja2VyKTsKLSAgICAKKyAgICBkb25hdGVBbGwo
aG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KSk7CisgICAgcmV0dXJuIHdhaXRGb3JUZXJt
aW5hdGlvbih0aW1lb3V0KTsKK30KKworU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNs
b3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0KQorewor
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKICAgICBm
b3IgKDs7KSB7CiAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAgICAg
cmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKQEAgLTcxMSw2MSArNzM5LDYgQEAg
dm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQWxsKGNvbnN0IEFic3RyYQogICAgIG1faGVhcC5tX21h
cmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRv
cjo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQotewotICAgIGlmICghcm9vdCkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkg
ewotICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAg
ICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAvLyBQdXQgaW50byB0aGUgbG9jYWwgc2V0LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hh
cmVkIG9uZSBldmVyeSBvbmNlIGluCi0gICAgLy8gYSB3aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0
aGUgbG9jYWwgc2V0cyBkb24ndCBncm93IHRvbyBsYXJnZS4KLSAgICBtZXJnZU9wYXF1ZVJvb3Rz
SWZQcm9maXRhYmxlKCk7Ci0gICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci19Ci0KLWJvb2wg
U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25zdAotewotICAg
IGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVCghbV9p
c0luUGFyYWxsZWxNb2RlKTsKLSAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFp
bnMocm9vdCk7Ci19Ci0KLVRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RU
cmlTdGF0ZSh2b2lkKiByb290KSBjb25zdAotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0
dXJuIEZhbHNlVHJpU3RhdGU7Ci0gICAgCi0gICAgaWYgKG1fb3BhcXVlUm9vdHMuY29udGFpbnMo
cm9vdCkpCi0gICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgaWYgKG1faGVhcC5t
X29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRl
OwotICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJn
ZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0
b3I6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQotewotICAgIGlmIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1l
cmdlVGhyZXNob2xkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7
Ci19Ci0gICAgCiB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQogewogICAgIGlmICghbV9pc0lu
UGFyYWxsZWxNb2RlKSB7CkBAIC03ODUsMTYgKzc1OCw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRv
bmF0ZUFuZERyYWluKE1vbm90b24KICAgICBkcmFpbih0aW1lb3V0KTsKIH0KIAotdm9pZCBTbG90
VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCi17Ci0gICAgewotICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4KTsKLSAgICAgICAgZm9y
IChhdXRvKiByb290IDogbV9vcGFxdWVSb290cykKLSAgICAgICAgICAgIG1faGVhcC5tX29wYXF1
ZVJvb3RzLmFkZChyb290KTsKLSAgICB9Ci0gICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotfQot
CiB2b2lkIFNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCiB7CiAgICAgbV9oZWFwLm1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNp
b24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgi
CiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0j
aW5jbHVkZSAiT3BhcXVlUm9vdFNldC5oIgogI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgpAQCAtOTUsMTAgKzk0LDkgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJy
aWVyZWQoSlNWYWx1ZSk7CiAgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwq
KTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7Cisg
ICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290
IHdhcyBuZXcuCiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1
ZVJvb3Qodm9pZCopIGNvbnN0OwotICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0
YXRlKHZvaWQqKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29u
c3Q7CiAKICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1w
dHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KIApAQCAtMTIxLDYgKzExOSw4IEBA
IHB1YmxpYzoKIAogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9u
aWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICBTaGFyZWRE
cmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0
ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgCisgICAgU2hhcmVkRHJhaW5SZXN1
bHQgd2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1Rp
bWU6OmluZmluaXR5KCkpOwogCiAgICAgLy8gQXR0ZW1wdHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1l
bnQgb2YgZHJhaW5pbmcgdGhhdCBpbnZvbHZlcyBvbmx5IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBv
ZiBkYXRhLiBUaGlzCiAgICAgLy8gaXMgbGlrZWx5IHRvIGFjY2lkZW50YWxseSB3YWxrIG1vcmUg
b3IgbGVzcyB0aGFuIHRoYXQuIEl0IHdpbGwgdXN1YWxseSBtYXJrIG1vcmUgdGhhbiBieXRlcy4g
SXQgbWF5CkBAIC0xMjgsOCArMTI4LDYgQEAgcHVibGljOgogICAgIC8vIHJhcmUgY2FzZXMgaGFw
cGVuIHRlbXBvcmFyaWx5IGV2ZW4gaWYgd2UncmUgbm90IHJlYWNoaW5nIHRlcm1pbmF0aW9uKS4K
ICAgICBzaXplX3QgcGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzKTsKICAg
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlSWZOZWNlc3NhcnkoKTsKLQogICAg
IC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0
IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KICAgICAvLyB0aGlzIHRoZW4g
dGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgogICAgIHZvaWQgbWFya0F1eGls
aWFyeShjb25zdCB2b2lkKiBiYXNlKTsKQEAgLTE5NCwxMCArMTkyLDYgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAgIAotICAg
IHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwotCi0gICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZQ
cm9maXRhYmxlKCk7Ci0KICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CiAg
ICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CkBAIC0yMTUsNyArMjA5LDYgQEAg
cHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CiAgICAgTWFy
a1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAgT3BhcXVlUm9vdFNldCBtX29wYXF1ZVJv
b3RzOyAvLyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBub3QgdmlzaWJsZSB0byB0aGUg
Z2FyYmFnZSBjb2xsZWN0b3IuCiAgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFs
c2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCiAgICAgCiAgICAgc2l6ZV90IG1f
Ynl0ZXNWaXNpdGVkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiAr
MTM2LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAgICAg
ICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZpc2l0
b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQocHRyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJldHVybiB0cnVl
OworfQorCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQq
IHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5z
KHB0cik7Cit9CisKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKG1faXNGaXJzdFZpc2l0KSB7CkBAIC0xNTks
MTIgKzE3NiwxMiBAQCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAogCiBp
bmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsK
KyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNp
dG9yOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4g
Km1faGVhcC52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEFs
bG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNs
dWRlICJQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlv
blNjb3BlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKQEAgLTE2MCw2ICsxNjEs
NDMgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vic3BhY2U6OmZpbmRFbXB0eQogICAgIHJldHVy
biBudWxscHRyOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+PiBT
dWJzcGFjZTo6cGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UoKQoreworICAgIGNsYXNzIFRhc2sgOiBw
dWJsaWMgU2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFRhc2soTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgICAgICAgICA6IG1fYWxs
b2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBNYXJrZWRBbGxvY2F0b3IqIHJ1bigpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIE1hcmtlZEFsbG9j
YXRvciogcmVzdWx0ID0gbV9hbGxvY2F0b3I7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAg
ICAgICAgICAgICAgIG1fYWxsb2NhdG9yID0gcmVzdWx0LT5uZXh0QWxsb2NhdG9ySW5TdWJzcGFj
ZSgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICBwcml2YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgICAg
ICBMb2NrIG1fbG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFz
ayhtX2ZpcnN0QWxsb2NhdG9yKSk7Cit9CisKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKCk+PiBTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNl
KCkKK3sKKyAgICByZXR1cm4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVyPE1hcmtlZEFsbG9j
YXRvciosIE1hcmtlZEJsb2NrOjpIYW5kbGUqPigKKyAgICAgICAgcGFyYWxsZWxBbGxvY2F0b3JT
b3VyY2UoKSwKKyAgICAgICAgW10gKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSAtPiBSZWZQ
dHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4geworICAgICAgICAgICAgaWYg
KCFhbGxvY2F0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICByZXR1cm4gYWxsb2NhdG9yLT5wYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKTsKKyAgICAg
ICAgfSk7Cit9CisKIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3co
c2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFz
c1RvSW5kZXgoc2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE3ICs4MSwyNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3IoY29uc3QgRnVuYyYp
OwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IHBhcmFs
bGVsQWxsb2NhdG9yU291cmNlKCk7CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
ICAgICB2b2lkIGZvckVhY2hNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hOb3RFbXB0eU1hcmtlZEJsb2Nr
KGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8U2hhcmVk
VGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2Nr
U291cmNlKCk7CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZv
ckVhY2hMYXJnZUFsbG9jYXRpb24oY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVu
YyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZl
Q2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDUz
IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KK1JlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykK
K3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
PiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3Qg
RnVuYyYgZnVuYykKKyAgICAgICAgICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKKyAgICAgICAg
ICAgICwgbV9ibG9ja1NvdXJjZShzdWJzcGFjZS5wYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tT
b3VyY2UoKSkKKyAgICAgICAgICAgICwgbV9mdW5jKGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBo
YW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+
Zm9yRWFjaE1hcmtlZENlbGwoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNl
bGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgY2VsbCwga2luZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
ICAgICAgICAgaWYgKCFtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucykKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIG1fbmVlZFRvVmlzaXRMYXJnZUFsbG9j
YXRpb25zID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fc3Vic3BhY2UuZm9yRWFjaExhcmdlQWxsb2NhdGlvbigKKyAgICAgICAgICAgICAgICBbJl0g
KExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
YWxsb2NhdGlvbi0+aXNNYXJrZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuYyh2
aXNpdG9yLCBhbGxvY2F0aW9uLT5jZWxsKCksIG1fc3Vic3BhY2UubV9hdHRyaWJ1dGVzLmNlbGxL
aW5kKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2
YXRlOgorICAgICAgICBTdWJzcGFjZSYgbV9zdWJzcGFjZTsKKyAgICAgICAgUmVmUHRyPFNoYXJl
ZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IG1fYmxvY2tTb3VyY2U7CisgICAgICAgIEZ1
bmMgbV9mdW5jOworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICAgICAgYm9vbCBtX25lZWRUb1Zp
c2l0TGFyZ2VBbGxvY2F0aW9ucyB7IHRydWUgfTsKKyAgICB9OworICAgIAorICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGFzaygqdGhpcywgZnVuYykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7
CiAgICAgZm9yRWFjaE1hcmtlZEJsb2NrKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVmlzaXRDb3VudGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZpc2l0Q291bnRlciB7CitwdWJsaWM6CisgICAgVmlzaXRD
b3VudGVyKCkgeyB9CisgICAgCisgICAgVmlzaXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKKyAgICAgICAgLCBtX2luaXRpYWxWaXNp
dENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc2l6
ZV90IHZpc2l0Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmlzaXRvci0+
dmlzaXRDb3VudCgpIC0gbV9pbml0aWFsVmlzaXRDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBudWxscHRyIH07CisgICAgc2l6ZV90IG1f
aW5pdGlhbFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHJldmlz
aW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91
dC5oCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBWaXNpdGluZ1Rp
bWVvdXQgewotcHVibGljOgotICAgIFZpc2l0aW5nVGltZW91dCgpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBWaXNpdGluZ1RpbWVvdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAgICAgICAgOiBtX2RpZFZpc2l0
U29tZXRoaW5nKGRpZFZpc2l0U29tZXRoaW5nKQotICAgICAgICAsIG1fdmlzaXRDb3VudEJlZm9y
ZSh2aXNpdG9yLnZpc2l0Q291bnQoKSkKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCB2aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0g
bV92aXNpdENvdW50QmVmb3JlOwotICAgIH0KLQotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmco
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9kaWRW
aXNpdFNvbWV0aGluZyB8fCB2aXNpdENvdW50KHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBi
b29sIHNob3VsZFRpbWVPdXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcikgJiYgaGFzRWxhcHNlZChtX3Rp
bWVvdXQpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX2RpZFZpc2l0U29tZXRo
aW5nIHsgZmFsc2UgfTsKLSAgICBzaXplX3QgbV92aXNpdENvdW50QmVmb3JlIHsgMCB9OwotICAg
IE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjI1
MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZp
c2l0KENvbnRhaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEpTVmFsdWUganNW
YWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChjb250YWluZXIuaXNNYXJr
ZWRDb25jdXJyZW50bHkobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQorICAgICAg
ICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgp
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKCF3ZWFrSGFu
ZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3Jh
cFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQo
KSwgdmlzaXRvcikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDEsMTQgKzExMDEsMTQgQEAg
Ym9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQygpCiAgICAgLy8gaGFzIGFueSBsYXJnZSBw
cm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQotICAgICAgICAmJiAo
aGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CisgICAgcmV0dXJuICgh
bV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWQobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQor
ICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8
IEhlYXA6OmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CiB9CiAKIGJvb2wgU3Ry
dWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoIWlz
Q2hlYXBEdXJpbmdHQygpKQotICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkodGhpcyk7CisgICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZCh0aGlzKTsKICAgICAKICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUx
NzgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAq
LwogCQkwRjBGNTI2QjFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEY1MjY5MUY0MjFGRjgw
MDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwICovOyB9OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAy
Q0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lv
bi5jcHAgKi87IH07CisJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICov
OyB9OwogCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDNEOEVGMURC
NUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICovOyB9OwogCQkwRjVCRjE3NjFG
MjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNzQxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdl
LmNwcCAqLzsgfTsKIAkJMEY2MEYzMkYxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3Ry
ZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi87IH07CkBA
IC0xODEsNiArMTgyLDggQEAKIAkJMEYzMEJBOEQxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdI
YXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoTWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBCQThFMUU3ODcwOEUwMDJDQTg0
NyAvKiBMb2dnaW5nSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
b2dnaW5nSGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwQkE4RjFF
Nzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hUcmFpdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENCNTkxRkNERjEz
MzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzFERDcwMUYxMzA4QkMwMDcyRUI0QSAvKiBMb2NrQWxnb3JpdGhtSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjM0OEM3RDFGNDdBQTlEMDAzQ0ZFRjIgLyogU3RyaW5nVmVjdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmFuZG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMjMsNiArMjI2LDggQEAKIAkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3
IC8qIEZpbGVQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWxlUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUQx
NjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDMzNUUxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tTaG90Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGOURBQTA1MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3RQcm9m
aWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1Nob3RQcm9maWxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZC
NEQgLyogQmFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyogQmFn
VG9IYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2lu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFjaW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODcsNiArNzkyLDggQEAKIAkJCQkwRjhGMkI5
MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3
MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVBQjFGNENENjFF
MDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1ODFGQ0RGMTMz
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBGMzBDQjU5MUZD
REYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJCTBGREI2OThE
MUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEyNjFFQjRFMDY4
MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5NTdE
IC8qIENQVVRpbWUuaCAqLywKQEAgLTk5Myw2ICsxMDAwLDggQEAKIAkJCQlBOEE0NzMwRDE1MUE4
MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0MTIz
RkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGFja0JvdW5kcy5oICovLAorCQkJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFj
a1Nob3QuaCAqLywKKwkJCQkwRjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJv
ZmlsZXIuaCAqLywKIAkJCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5j
cHAgKi8sCiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAqLywK
IAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8sCkBAIC0x
NDEzLDYgKzE0MjIsNyBAQAogCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5n
TG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJCMUYzRDQ4NjAwMEM3NDk1MCAvKiBQ
ZXJzaXN0ZW50Q29kZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJDMUYzRDQ4NjAw
MEM3NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMw
Q0I1QTFGQ0RGMTM0MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGMTc1MkQxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRFbmNvZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzYyMTY1REJBNzMwMDVBRDM4NyAvKiBQcmlu
dFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEg
LyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21p
Y3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2
LDExICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5KAog
ICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9IG51bGxwdHI+Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCiB7
CiAgICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50NjRfdCBjb3B5ID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5pb24geworICAgICAgICB1aW50MzJfdCBjb3B5
OworICAgICAgICBUIHZhbHVlOworICAgIH0gdTsKKyAgICB1LmNvcHkgPSAwOworICAgIHUudmFs
dWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAgICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJv
IHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgogICAgIC8v
IGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4gdXNhYmxl
IGFzIGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICszNjgsMjAgQEAgQUxXQVlTX0lOTElORSBEZXBl
bmRlbmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4KICAgICBh
c20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCiAgICAgICAgIDogW2RlcGVu
ZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAg
ICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxpZiBDUFUoQVJNKQogICAgIGFzbSgiZW9yICVb
ZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihk
ZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJy
Iih1LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVwZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRo
aXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVuY2UoKTsKICAgICBkZXBlbmRlbmN5ID0g
MDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgVU5VU0VEX1BBUkFNKHUuY29weSk7CiAj
ZW5kaWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAotLy8gRklYTUU6IFRoaXMgY29kZSBp
cyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0v
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0
eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZh
bHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29weSA9IGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lmIENQVShBUk02NCkKLSAgICBhc20oImVv
ciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ld
ICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUo
QVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAg
OiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkp
KTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwotICAgIGRlcGVuZGVuY3kgPSAwOwotICAg
IFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5OwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQp
ID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5k
ZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5F
IERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5
KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5V2l0aCgp
Ci0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAsIHZhbHVl
KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVw
ZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5
KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5k
ZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19OwotICAgIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5
IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBEZXBlbmRlbmN5V2l0
aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxp
bmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CkBAIC00
NjksMTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUgVCYgZW5zdXJlUG9pbnRlcihBdG9taWM8VCoK
IAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6OkRlcGVuZGVuY3k7Ci11c2luZyBXVEY6
OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpjb25zdW1lOwogdXNpbmcgV1RGOjpkZXBlbmRl
bmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKIHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRl
cjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jp
dFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgKyso
KnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCiAgICAgICAg
IGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTE4LDYgKzE4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQ2xvY2tUeXBlLmgK
ICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaAorICAgIENvbmN1cnJlbnRQ
dHJIYXNoU2V0LmgKICAgICBDb25kaXRpb24uaAogICAgIENyb3NzVGhyZWFkQ29waWVyLmgKICAg
ICBDcm9zc1RocmVhZFRhc2suaApAQCAtMTMwLDYgKzEzMSw4IEBAIHNldChXVEZfSEVBREVSUwog
ICAgIFNlZ21lbnRlZFZlY3Rvci5oCiAgICAgU21hbGxQdHJTZXQuaAogICAgIFN0YWNrQm91bmRz
LmgKKyAgICBTdGFja1Nob3QuaAorICAgIFN0YWNrU2hvdFByb2ZpbGVyLmgKICAgICBTdGFja1N0
YXRzLmgKICAgICBTdGFja1RyYWNlLmgKICAgICBTdGRMaWJFeHRyYXMuaApAQCAtMjE2LDYgKzIx
OSw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIENQVVRpbWUuY3BwCiAgICAgQ2xvY2tUeXBlLmNw
cAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMu
Y3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudFB0ckhhc2hTZXQuaCIKKwor
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitDb25jdXJyZW50
UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworICAgIGluaXRpYWxpemUoKTsK
K30KKworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCgpCit7Cit9
CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcygpCit7CisgICAg
Ly8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVy
IHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21l
IGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFibGVzLnJlbW92ZUFsbE1h
dGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4mIHRhYmxlKSAtPiBi
b29sIHsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS5nZXQoKSAhPSBtX3RhYmxlLmxvYWRSZWxh
eGVkKCk7CisgICAgICAgIH0pOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVh
cigpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQg
T0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQK
KyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFibGVz
LmNsZWFyKCk7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNo
U2V0Ojppbml0aWFsaXplKCkKK3sKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgaW5pdGlhbFNpemUg
PSAzMjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IHRhYmxlID0gVGFibGU6OmNyZWF0ZShp
bml0aWFsU2l6ZSk7CisgICAgbV90YWJsZS5zdG9yZVJlbGF4ZWQodGFibGUuZ2V0KCkpOworICAg
IG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKHRhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVu
dFB0ckhhc2hTZXQ6OmFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25l
ZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKQoreworICAgIGlmICh0YWJs
ZS0+bG9hZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJsZS0+bWF4TG9hZCgpKQorICAgICAgICByZXR1
cm4gcmVzaXplQW5kQWRkKHB0cik7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICB2b2lk
KiBvbGRFbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0uY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG51
bGxwdHIsIHB0cik7CisgICAgICAgIGlmICghb2xkRW50cnkpIHsKKyAgICAgICAgICAgIGlmICht
X3RhYmxlLmxvYWQoKSAhPSB0YWJsZSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGFkZGVkIGFu
IGVudHJ5IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVlZCB0byByZWV4ZWN1dGUgdGhlIGFkZCBvbiB0
aGUgbmV3IHRhYmxlLgorICAgICAgICAgICAgICAgIHJldHVybiBhZGQocHRyKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChv
bGRFbnRyeSA9PSBwdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGluZGV4
ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBz
dGFydEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6
ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgIGlmICh0YWJsZS0+
bG9hZC5sb2FkUmVsYXhlZCgpIDwgdGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gbmV3VGFibGUgPSBUYWJsZTo6Y3JlYXRl
KHRhYmxlLT5zaXplICogMik7CisgICAgdW5zaWduZWQgbWFzayA9IG5ld1RhYmxlLT5tYXNrOwor
ICAgIHVuc2lnbmVkIGxvYWQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJs
ZS0+c2l6ZTsgKytpKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IHRhYmxlLT5hcnJheVtpXS5sb2Fk
UmVsYXhlZCgpOworICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7Oykgewor
ICAgICAgICAgICAgQXRvbWljPHZvaWQqPiYgZW50cnlSZWYgPSBuZXdUYWJsZS0+YXJyYXlbaW5k
ZXhdOworICAgICAgICAgICAgdm9pZCogZW50cnkgPSBlbnRyeVJlZi5sb2FkUmVsYXhlZCgpOwor
ICAgICAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgICAgIGVudHJ5UmVmLnN0b3Jl
UmVsYXhlZChwdHIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkgIT0gcHRyKTsKKyAgICAgICAgICAgIGluZGV4
ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXgg
IT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvYWQrKzsKKyAg
ICB9CisgICAgCisgICAgbmV3VGFibGUtPmxvYWQuc3RvcmVSZWxheGVkKGxvYWQpOworICAgIAor
ICAgIG1fdGFibGUuc3RvcmUobmV3VGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVu
ZChXVEZNb3ZlKG5ld1RhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJl
c2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAgICBy
ZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNl
dDo6VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6Y3JlYXRlKHVuc2lnbmVkIHNp
emUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4g
cmVzdWx0KG5ldyAoZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIGFycmF5KSArIHNp
emVvZihBdG9taWM8dm9pZCo+KSAqIHNpemUpKSBUYWJsZSgpKTsKKyAgICByZXN1bHQtPnNpemUg
PSBzaXplOworICAgIHJlc3VsdC0+bWFzayA9IHNpemUgLSAxOworICAgIHJlc3VsdC0+bG9hZC5z
dG9yZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
KyAgICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9yZVJlbGF4ZWQobnVsbHB0cik7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Q29uY3VycmVudFB0ckhhc2hTZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9D
b25jdXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEgY29uY3VycmVudCBoYXNoLWJhc2VkIHNl
dCBmb3IgcG9pbnRlcnMuIEl0J3Mgb3B0aW1pemVkIGZvcjoKKy8vCisvLyAtIEhpZ2ggcmF0ZSBv
ZiBjb250YWlucygpIGNhbGxzLgorLy8gLSBIaWdoIHJhdGUgb2YgYWRkKCkgY2FsbHMgdGhhdCBk
b24ndCBhZGQgYW55dGhpbmcgbmV3LiBhZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGlu
ZyAobm9wIGFkZHMpCisvLyAgIGRvbid0IG11dGF0ZSB0aGUgdGFibGUgYXQgYWxsLgorLy8gLSBO
b3QgdG9vIG1hbnkgdGhyZWFkcy4gSSBkb3VidCB0aGlzIHNjYWxlcyBiZXlvbmQgfjQuIFRob3Vn
aCwgaXQgbWF5IGFjdHVhbGx5IHNjYWxlIGJldHRlciB0aGFuIHRoYXQKKy8vICAgaWYgdGhlIHJh
dGUgb2Ygbm9wIGFkZHMgaXMgYWJzdXJkbHkgaGlnaC4KKy8vCisvLyBJZiB3ZSB3YW50ZWQgdGhp
cyB0byBzY2FsZSBiZXR0ZXIsIHRoZSBtYWluIGNoYW5nZSB3ZSdkIGhhdmUgdG8gbWFrZSBpcyBo
b3cgdGhpcyB0YWJsZSBkZXRlcm1pbmVzIHdoZW4KKy8vIHRvIHJlc2l6ZS4gUmlnaHQgbm93IGl0
J3MgYSBzaGFyZWQgY291bnRlci4gV2UgbG9jazt4YWRkIHRoaXMgY291bnRlci4gT25lIGVhc3kg
d2F5IHRvIG1ha2UgdGhhdAorLy8gc2NhbGFibGUgaXMgdG8gcmVxdWlyZSBlYWNoIHRocmVhZCB0
aGF0IHdvcmtzIHdpdGggdGhlIENvbmN1cnJlbnRQdHJIYXNoU2V0IHRvIHJlZ2lzdGVyIGl0c2Vs
ZiBmaXJzdC4KKy8vIFRoZW4gZWFjaCB0aHJlYWQgd291bGQgaGF2ZSBzb21lIGRhdGEgc3RydWN0
dXJlIHRoYXQgaGFzIGEgY291bnRlci4gV2UgY291bGQgaW5zdGl0dXRlIHRoZSBwb2xpY3kgdGhh
dAorLy8gZWFjaCB0aHJlYWQgc2ltcGx5IGluY3JlbWVudHMgaXRzIG93biBsb2FkIGNvdW50ZXIs
IGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmUuIFRoZW4sIGlmIGFueSBzZWFyY2ggdG8KKy8vIHJl
c29sdmUgYSBjb2xsaXNpb24gZG9lcyBtb3JlIHRoYW4gTiBpdGVyYXRpb25zLCB3ZSBjYW4gY29t
cHV0ZSBhIGNvbWJpbmVkIGxvYWQgYnkgc3VtbWluZyB0aGUgbG9hZAorLy8gY291bnRlcnMgb2Yg
YWxsIG9mIHRoZSB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzLgorLy8KKy8vIENvbmN1cnJlbnRQdHJI
YXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNlZXMgYSA5OCUgbm9wIGFkZCByYXRlIGluIFNw
ZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIGZvY3VzZXMgc28gbXVjaCBvbiBjYXNlcyB3
aGVyZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdlLgorY2xhc3MgQ29uY3VycmVudFB0ckhhc2hT
ZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1cnJlbnRQdHJIYXNoU2V0KTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBDb25jdXJyZW50UHRySGFzaFNldCgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+Q29u
Y3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IGJvb2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb250YWluc0lt
cGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkSW1wbChjYXN0
KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3RhYmxlLmxvYWRSZWxheGVkKCktPmxvYWQubG9hZFJlbGF4ZWQoKTsK
KyAgICB9CisgICAgCisgICAgLy8gT25seSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBvdGhl
ciB0aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJlZXMgdXAgbWVtb3J5IHdpdGhvdXQgY2hh
bmdpbmcKKyAgICAvLyB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlLgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygpOworICAgIAorICAgIC8vIE9ubHkgY2FsbCB3
aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZy
ZWVzIHVwIGFsbCBtZW1vcnkgZXhjZXB0IGZvcgorICAgIC8vIHRoZSBzbWFsbGVzdCBwb3NzaWJs
ZSBoYXNodGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXIoKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgc3RydWN0IFRhYmxlIHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZB
U1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxU
YWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
bWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLyAyOyB9CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4KKyAgICAgICAgdW5zaWduZWQgbWFz
azsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAgIEF0b21pYzx1bnNpZ25lZD4gbG9hZDsK
KyAgICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsxXTsKKyAgICB9OworICAgIAorICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBQdHJIYXNo
PHZvaWQqPjo6aGFzaChwdHIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUoKTsK
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQqIGNhc3QoVCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IHNpemVvZih2b2lkKiks
ICJ0eXBlIHRvbyBiaWciKTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgdm9pZCogcHRy
OworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAgfSB1OworICAgICAgICB1LnB0ciA9IG51
bGxwdHI7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHUucHRyOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zSW1wbCh2b2lkKiBwdHIpIGNvbnN0CisgICAg
eworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAg
IHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRl
eCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRl
eDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJsZS0+
YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChlbnRyeSA9PSBwdHIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpbmRleCA9IChpbmRl
eCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0
SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBh
IG5ldyBlbnRyeSB3YXMgYWRkZWQuCisgICAgYm9vbCBhZGRJbXBsKHZvaWQqIHB0cikKKyAgICB7
CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAg
dW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4
ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4
OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5h
cnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3codGFibGUsIG1hc2ssIHN0YXJ0SW5kZXgsIGluZGV4
LCBwdHIpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09IHB0cikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGFkZFNsb3coVGFibGUq
IHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRl
eCwgdm9pZCogcHRyKTsKKworICAgIHZvaWQgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAgICBib29s
IHJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpOworICAgIAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8VGFibGU+LCA0PiBtX2FsbFRhYmxlczsKKyAgICBBdG9taWM8VGFibGUqPiBtX3RhYmxlOyAv
LyBUaGlzIGlzIG5ldmVyIG51bGwuCisgICAgTG9jayBtX2xvY2s7IC8vIFdlIGp1c3QgdXNlIHRo
aXMgdG8gY29udHJvbCByZXNpemUgcmFjZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
dXNpbmcgV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Rl
cXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1
MTc4KQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYg
KzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVu
Yz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKICAgICAKKyAg
ICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNh
bGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgorICAgIC8vIFQg
aWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3QoY29uc3QgRnVuYyYpOworCiAgICAgLy8gUmVt
b3ZlIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJl
dHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgogICAgIC8vIFQgaWYgaXQgdGhl
IGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQgY291bnQgPSAw
OworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUgKGNvdW50IDwg
c2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VGaXJzdCgpOworICAgICAgICBpZiAo
ZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAg
ICAgICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0
ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOworICAgICAgICBhcHBlbmQoV1RGTW92ZShj
YW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlu
bGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVu
YykKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0
TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZp
c2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNCw4ICsyMzQsNyBAQCB1c2luZyBXVEY6OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZp
bmUgV1RGX1BSSVZBVEVfSU5MSU5FIGlubGluZQogI2VuZGlmCiAKLSNkZWZpbmUgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQgXAotcHVibGljOiBcCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEX0lNUEwgXAogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHApIHsgcmV0
dXJuIHA7IH0gXAogICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCogcCkgeyBy
ZXR1cm4gcDsgfSBcCiAgICAgXApAQCAtMjYzLDcgKzI2MiwxNSBAQCBwdWJsaWM6IFwKICAgICAg
ICAgQVNTRVJUKGxvY2F0aW9uKTsgXAogICAgICAgICByZXR1cm4gbG9jYXRpb247IFwKICAgICB9
IFwKKworI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBcCitwdWJsaWM6IFwKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKIHByaXZhdGU6IFwKIHR5cGVkZWYgaW50IF9f
dGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KIAorI2RlZmluZSBXVEZf
TUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQgXAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
X0lNUEwgXAordHlwZWRlZiBpbnQgX190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRo
aXNNYWNybworCiAjZW5kaWYgLyogV1RGX0Zhc3RNYWxsb2NfaCAqLwpJbmRleDogU291cmNlL1dU
Ri93dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJl
dmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxMSArMjcsMTYgQEAKICNpbmNsdWRlICJMb2NrLmgiCiAKICNpbmNsdWRlIDx3dGYv
TG9ja0FsZ29yaXRobUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTaG90UHJvZmlsZXIu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBwcm9maWxlTG9j
a0NvbnRlbnRpb24gPSBmYWxzZTsKKwogdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogeworICAg
IGlmIChwcm9maWxlTG9ja0NvbnRlbnRpb24pCisgICAgICAgIFNUQUNLX1NIT1RfUFJPRklMRSg0
LCAyLCA1KTsKICAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0K
IApJbmRleDogU291cmNlL1dURi93dGYvTG9ja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvTG9ja2VyLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMiw2ICsxMjIsMTIgQEAgTG9ja2VyPExv
Y2tUeXBlPiBob2xkTG9jayhMb2NrVHlwZSYgbG9jawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBM
b2NrVHlwZT4KK0xvY2tlcjxMb2NrVHlwZT4gaG9sZExvY2tJZihMb2NrVHlwZSYgbG9jaywgYm9v
bCBwcmVkaWNhdGUpCit7CisgICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4ocHJlZGljYXRlID8g
JmxvY2sgOiBudWxscHRyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2Nr
ZXI8TG9ja1R5cGU+IHRyeUhvbGRMb2NrKExvY2tUeXBlJiBsb2NrKQogewogICAgIHJldHVybiBM
b2NrZXI8TG9ja1R5cGU+Ojp0cnlMb2NrKGxvY2spOwpAQCAtMTM0LDUgKzE0MCw2IEBAIHVzaW5n
IFdURjo6TG9ja2VyOwogdXNpbmcgV1RGOjpOb0xvY2tpbmdOZWNlc3NhcnlUYWc7CiB1c2luZyBX
VEY6Ok5vTG9ja2luZ05lY2Vzc2FyeTsKIHVzaW5nIFdURjo6aG9sZExvY2s7Cit1c2luZyBXVEY6
OmhvbGRMb2NrSWY7CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9u
IDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzQsNiArMTc0LDEzIEBAIHByaXZhdGU6CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4geW91
IGFscmVhZHkgcmVmZXIgdG8gYSBmdW5jdG9yIGJ5IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0
cyBsaWZldGltZSBpcwogLy8gZ29vZC4gVGhpcyBqdXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEg
dGhhdCBwb2ludHMgdG8geW91ciBmdW5jdG9yLgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGFs
d2F5cyB3cm9uZzoKKy8vCisvLyBhdXRvIHJlZiA9IHNjb3BlZExhbWJkYVJlZihbLi4uXSAoLi4u
KSB7Li4ufSk7CisvLworLy8gQmVjYXVzZSB0aGUgc2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIg
dG8gdGhlIGxhbWJkYSBieSByZWZlcmVuY2UsIGFuZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVy
IHRoZQorLy8gc2VtaWNvbG9uLiBVc2Ugc2NvcGVkTGFtYmRhKCkgaW4gdGhhdCBjYXNlLgogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVkTGFt
YmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYVJlZihjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQogewpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1
MTc4KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMu
IFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJv
bCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUg
dGFzay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsK
LXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+
Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlw
ZXMuLi4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJn
dW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8
UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlw
ZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygp
IHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2soKSB7IH0KIApJbmRleDogU291cmNlL1dURi93
dGYvU3RhY2tTaG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3RhY2tTaG90IHsKK3B1YmxpYzoKKyAgICBTdGFj
a1Nob3QoKSB7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6
ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplKSB7Cisg
ICAgICAgICAgICBtX2FycmF5ID0gc3RkOjptYWtlX3VuaXF1ZTx2b2lkKltdPihzaXplKTsKKyAg
ICAgICAgICAgIGludCBpbnRTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIFdURkdldEJhY2t0cmFj
ZShtX2FycmF5LmdldCgpLCAmaW50U2l6ZSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0aWNfY2FzdDxzaXplX3Q+KGludFNpemUpIDw9IHNpemUpOworICAgICAgICAgICAgbV9zaXpl
ID0gaW50U2l6ZTsKKyAgICAgICAgICAgIGlmICghbV9zaXplKQorICAgICAgICAgICAgICAgIG1f
YXJyYXkgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdChX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9hcnJheShkZWxldGVk
VmFsdWVBcnJheSgpKQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgU3RhY2tTaG90JiBvcGVyYXRvcj0oY29uc3QgU3RhY2tTaG90JiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lkKltdPiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlx
dWU8dm9pZCpbXT4ob3RoZXIubV9zaXplKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG90aGVy
Lm1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIG5ld0FycmF5W2ldID0gb3RoZXIubV9hcnJheVtp
XTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgICAgICBtX2FycmF5ID0gV1RG
TW92ZShuZXdBcnJheSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAg
U3RhY2tTaG90KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpCisgICAgeworICAgICAgICAqdGhpcyA9
IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2b2lkKiogYXJyYXkoKSBjb25zdCB7IHJldHVybiBt
X2FycmF5LmdldCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X2FycmF5OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0YWNrU2hvdCYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zaXplICE9IG90aGVyLm1fc2l6ZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBtX3NpemU7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1f
YXJyYXlbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3NpemU7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9zaXplOyBpLS07KQorICAgICAgICAgICAg
cmVzdWx0IF49IFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fYXJyYXlbaV0pOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc2l6ZSAmJiBtX2Fy
cmF5LmdldCgpID09IGRlbGV0ZWRWYWx1ZUFycmF5KCk7CisgICAgfQorICAgIAorICAgIC8vIE1h
a2UgU3BlY3RydW08PiBoYXBweS4KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBTdGFja1Nob3Qm
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9p
ZCoqIGRlbGV0ZWRWYWx1ZUFycmF5KCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4oc3Rh
dGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9p
ZCpbXT4gbV9hcnJheTsKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworfTsKKworc3RydWN0IFN0
YWNrU2hvdEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYg
c2hvdCkgeyByZXR1cm4gc2hvdC5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBTdGFja1Nob3QmIGEsIGNvbnN0IFN0YWNrU2hvdCYgYikgeyByZXR1cm4gYSA9PSBiOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxz
ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0YWNrU2hvdD4geworICAgIHR5cGVkZWYgU3RhY2tT
aG90SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFp
dHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8U3RhY2tTaG90PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dU
Ri93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+
CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgor
I2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNrU2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAg
ICBTdGFja1Nob3RQcm9maWxlcih1bnNpZ25lZCBudW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1lc1Rv
U2tpcCwgdW5zaWduZWQgc3RhY2tzVG9SZXBvcnQpCisgICAgICAgIDogbV9udW1GcmFtZXMobnVt
RnJhbWVzKQorICAgICAgICAsIG1fZnJhbWVzVG9Ta2lwKGZyYW1lc1RvU2tpcCkKKyAgICAgICAg
LCBtX3N0YWNrc1RvUmVwb3J0KHN0YWNrc1RvUmVwb3J0KQorICAgIHsKKyAgICAgICAgVGhyZWFk
OjpjcmVhdGUoIlN0YWNrU2hvdFByb2ZpbGVyIiwgW3RoaXNdICgpIHsgcnVuKCk7IH0pOworICAg
IH0KKworICAgIC8vIE5FVkVSX0lOTElORSBzbyB0aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0
YWJsZS4KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBwcm9maWxlKCkKKyAgICB7CisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9wcm9maWxlLmFkZChTdGFj
a1Nob3QobV9udW1GcmFtZXMgKyBtX2ZyYW1lc1RvU2tpcCkpOworICAgICAgICBtX3RvdGFsQ291
bnQrKzsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigpCisg
ICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBzbGVlcCgxX3MpOworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgYXV0byBs
aXN0ID0gbV9wcm9maWxlLmJ1aWxkTGlzdCgpOworICAgICAgICAgICAgZGF0YUxvZygiXG5Ib3R0
ZXN0IHN0YWNrcyBpbiAiLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCksICI6XG4iKTsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUoKSwgY291bnQgPSAwOyBpLS0gJiYgY291bnQg
PCBtX3N0YWNrc1RvUmVwb3J0OyBjb3VudCsrKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZW50
cnkgPSBsaXN0W2ldOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuVG9wICMiLCBjb3VudCAr
IDEsICIgc3RhY2s6ICIsIGVudHJ5LmNvdW50ICogMTAwIC8gbV90b3RhbENvdW50LCAiJVxuIik7
CisgICAgICAgICAgICAgICAgU3RhY2tUcmFjZSB0cmFjZShlbnRyeS5rZXkuYXJyYXkoKSArIG1f
ZnJhbWVzVG9Ta2lwLCBlbnRyeS5rZXkuc2l6ZSgpIC0gbV9mcmFtZXNUb1NraXApOworICAgICAg
ICAgICAgICAgIGRhdGFMb2codHJhY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0
YUxvZygiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBXb3JkTG9jayBtX2xvY2s7
CisgICAgU3BlY3RydW08U3RhY2tTaG90LCBkb3VibGU+IG1fcHJvZmlsZTsKKyAgICBkb3VibGUg
bV90b3RhbENvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRnJhbWVzOworICAgIHVuc2ln
bmVkIG1fZnJhbWVzVG9Ta2lwOworICAgIHVuc2lnbmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9Owor
CisjZGVmaW5lIFNUQUNLX1NIT1RfUFJPRklMRShudW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3Rh
Y2tzVG9SZXBvcnQpIGRvIHsgXAorICAgIHN0YXRpYyBTdGFja1Nob3RQcm9maWxlciogc3RhY2tT
aG90UHJvZmlsZXI7IFwKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJvZmls
ZXJPbmNlRmxhZzsgXAorICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YWNrU2hvdFByb2ZpbGVyT25jZUZs
YWcsIFtdIHsgc3RhY2tTaG90UHJvZmlsZXIgPSBuZXcgU3RhY2tTaG90UHJvZmlsZXIobnVtRnJh
bWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVwb3J0KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQ
cm9maWxlci0+cHJvZmlsZSgpOyBcCit9IHdoaWxlIChmYWxzZSkKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDYgKzMyMSw3IEBAIGJpbmRp
bmdzL2pzL0NhY2hlZE1vZHVsZVNjcmlwdExvYWRlci5jcHAKIGJpbmRpbmdzL2pzL0NhY2hlZFNj
cmlwdEZldGNoZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWxsVHJhY2VyLmNwcAogYmluZGluZ3MvanMv
Q29tbW9uVk0uY3BwCitiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCiBiaW5k
aW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCiBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3Bw
CiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApJbmRleDogU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzIEBACisjcHJhZ21hIG9uY2UKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9T
aW1wbGVNYXJraW5nQ29uc3RyYWludC5oPgorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9u
IDIyNTE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRp
bmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyICswLDAgQEAKLSNwcmFnbWEgb25jZQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Zpc2l0aW5nVGltZW91dC5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjI1MTc4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNiArMzUxLDcgQEAKIAkJMEY4NzE2NzAxQzg2
OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTY2RTFDODY5RDgzMDA0RkYwREUgLyogTGVuZ3RoUG9p
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjhCNDU3MjFEQzNGQkEzMDA0NDNDM0YgLyogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4QjQ1NzEx
REMzRkJBMzAwNDQzQzNGIC8qIEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsK
IAkJMEY4QjQ1NzYxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5o
ICovOyB9OworCQkwRjlEQUEwRjFGRDFDNjZBMDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJh
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlE
QUEwRTFGRDFDNjY0MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmggKi87IH07CiAJ
CTBGQTI0RDdBMTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBMjRENzgxNjJERjkx
OTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNjI1MkYxOERFMUIxNTAwQTA3QzA1IC8q
IEdlb21ldHJ5VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI2MjUyRDE4REUxQjE1MDBBMDdDMDUgLyogR2VvbWV0cnlVdGlsaXRpZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI4
ODkwQTE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjg4OTA4MTY3RDJGQTEw
MDEwQ0RBNSAvKiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODg5LDkgKzE4OTAsNyBAQAogCQk3NzI4
Njk0RTE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3Mjg2OTRCMTRG
ODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwICovOyB9Owog
CQk3NzI4Njk0RjE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NzI4Njk0
QzE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggKi87IH07
CiAJCTc3Mjg2OTg0MTRGRDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3BpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzcy
ODY5ODIxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgg
Ki87IH07Ci0JCTc3NzlCRDk1MUYzMTJEMDEwMEMyMTQxNyAvKiBWaXN1YWxWaWV3cG9ydC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Nzc5QkQ5NDFG
MzExN0I3MDBDMjE0MTcgLyogVmlzdWFsVmlld3BvcnQuY3BwICovOyB9OwogCQk3Nzc5QkQ5NjFG
MzIyNDZBMDBDMjE0MTcgLyogSlNWaXN1YWxWaWV3cG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzc3OUJEOTIxRjJGREJGNzAwQzIxNDE3IC8qIEpT
VmlzdWFsVmlld3BvcnQuaCAqLzsgfTsKLQkJNzc3OUJEOTcxRjMyMjQ2RDAwQzIxNDE3IC8qIEpT
VmlzdWFsVmlld3BvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzc3OUJEOTExRjJGREJDRTAwQzIxNDE3IC8qIEpTVmlzdWFsVmlld3BvcnQuY3Bw
ICovOyB9OwogCQk3N0ExN0E3MTEyRjI4MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4QXJyYXlPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdB
MTdBNkUxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmNwcCAqLzsgfTsK
IAkJNzdBMTdBNzIxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0ExN0E2RjEyRjI4
MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4QXJyYXlPYmplY3QuaCAqLzsgfTsKIAkJNzdBMTdBNzcx
MkYyODY0MjAwNEUwMkY2IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdBMTdBNzQxMkYyODY0MjAw
NEUwMkY2IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwICovOyB9OwpAQCAtNTQ0Nyw2
ICs1NDQ2LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpTRE9NUXVhZEN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWRDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyogRGlz
cGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJh
aW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUdDT3V0cHV0
Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTBFMUZE
MUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEwMDk3NUZERCAvKiBDU1NQcm9wZXJ0aWVz
Lmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpzb247IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0xheWVy
VXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc4MTYyREY5
MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjI5NjYsNiArMjI5NjcsOCBAQAogCQkJCTk1MjA3NjAyMUYyNjc1RjkwMDdE
MkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJCQkwRjYwRjMyOTFERkJCMTA0MDA0MTZE
NkMgLyogQ29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBD
b21tb25WTS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2NjMwMDc5QzVCMiAvKiBET01HQ091dHB1
dENvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01H
Q091dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUxNkFEMjFGMzUyNTIwMDAzNEI2QkYgLyog
RE9NUHJvbWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0RDAwMEQ4MTdFIC8qIERP
TVdyYXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIxRTAwMEQ4MTdFIC8qIERP
TVdyYXBwZXJXb3JsZC5oICovLApAQCAtMjc1MTksNiArMjc1MjIsNyBAQAogCQkJCTUxOEY1MDA0
MTk0Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0b24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29u
c3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQTdDMUYxODgzMjJGQzAwQzk1NEI1IC8q
IEpTR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgyQjc1MjExOThDQjZCMDBC
RkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTREMTRG
MEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0
cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgorI2luY2x1
ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvTWFya2Vk
QmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNs
dWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQo
Vk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKKyAgICA6IE1hcmtpbmdDb25zdHJh
aW50KCJEb21vdXQiLCAiRE9NIE91dHB1dCBDb25zdHJhaW50IiwgQ29uc3RyYWludFZvbGF0aWxp
dHk6OlNlbGRvbUdyZXllZCkKKyAgICAsIG1fdm0odm0pCisgICAgLCBtX2NsaWVudERhdGEoY2xp
ZW50RGF0YSkKKyAgICAsIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24odm0uaGVhcC5tdXRhdG9yRXhl
Y3V0aW9uVmVyc2lvbigpKQoreworfQorCitET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091
dHB1dENvbnN0cmFpbnQoKQoreworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gRE9NR0NPdXRw
dXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgSGVhcCYgaGVh
cCA9IG1fdm0uaGVhcDsKKyAgICAgICAgICAgIAorICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRp
b25WZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgIAorICAgIG1fbGFz
dEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3Rhc2tzLmlzRW1wdHkoKSk7CisgICAgbV9jbGllbnREYXRhLmZv
ckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCisgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNw
YWNlKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAgICBK
U0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAgICAg
ICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlzaXRPdXRwdXRDb25zdHJh
aW50cyhjZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgbV90YXNrcy5hcHBlbmQoc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJ
blBhcmFsbGVsKGZ1bmMpKTsKKyAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICByZXR1cm4g
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDsKK30KKyAgICAgICAgCit2b2lkIERPTUdD
T3V0cHV0Q29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIGZvciAoYXV0byYgdGFzayA6IG1fdGFza3MpCisgICAgICAgIHRhc2stPnJ1bih2
aXNpdG9yKTsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZmluaXNo
UGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgbV90YXNrcy5jbGVhcigpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxoZWFwL01hcmtpbmdD
b25zdHJhaW50Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNWTUNsaWVudERhdGE7
CisKK2NsYXNzIERPTUdDT3V0cHV0Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25z
dHJhaW50IHsKK3B1YmxpYzoKKyAgICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpT
Vk1DbGllbnREYXRhJik7CisgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOworICAgIAorcHJv
dGVjdGVkOgorICAgIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKEpTQzo6
U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChKU0M6
OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBs
KEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBt
X3ZtOworICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7CisgICAgdWludDY0X3QgbV9s
YXN0RXhlY3V0aW9uVmVyc2lvbjsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4+IG1fdGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxMiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
IAorI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgPGhlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJraW5n
Q29uc3RyYWludC5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgot
I2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJz
cGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC03Miw0
MyArNzAsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQoVk0qCiAgICAg
SlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEoKnZtKTsKICAg
ICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRoaXMgcG9pbnRl
ci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdD
b25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29uc3RyYWludHMi
LAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9uID0gdm0tPmhl
YXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBI
ZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoZWFw
Lm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0RXhlY3V0
aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKLQotICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNvdW50IGhlcmUgb3Vyc2VsdmVzLiBX
ZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKLSAgICAgICAgICAgIC8vIG9wYXF1ZSBy
b290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0aW9uIHlldC4gVGhlIHdheSB3ZSBz
aWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAgICAgIC8vIGNvbnN0cmFpbnQgc29sdmVyIGlzIGJ5
IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNp
emVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9vdHMoKTsKLQotICAg
ICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAgICAgICAgICAgIHVuc2ln
bmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnREYXRhLT5mb3JFYWNoT3V0
cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAgICAgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNw
YWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAot
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxs
OjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3Rh
dGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgc2xv
dFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVJldmlzaXRlZCsrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIoIiwg
bnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90VmlzaXRv
ci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3RWaXNp
dG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBudW1PcGFxdWVSb290
c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxk
b21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoY29u
c3RyYWludCkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6bWFrZV91
bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7CiAgICAgICAg
IAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0
ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYo
bmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJC
ZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCisj
aW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJD
b250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIsNyArMjE2MywxNCBAQCBFdmVudFRhcmdl
dERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAKIEV2ZW50VGFyZ2V0RGF0YSogTm9kZTo6
ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCkKIHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CisgICAgLy8gTm90IGhvbGRpbmcgdGhlIGxv
Y2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBlZCBhY2NlbGVyYXRlcyBwYXJhbGxlbCBjb25zdHJh
aW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8gY2FsbHMgdGhpcyBmdW5jdGlvbiBmcm9tIG1hbnkg
dGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nIGNhbiBoYXBwZW4gd2l0aCB0aGUg
d29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0b3BwZWQsIGJ1dCBpZiB3ZSBkbyBpdCB3aXRoIGEg
cnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5IG1peGluZyBjb25zdHJhaW50CisgICAg
Ly8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJlZm9yZSwgdGhlIG1vc3QgbGlrZWx5IHRp
bWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBsb2NrIGlzIHdoZW4gdGhlCisgICAgLy8gd29ybGQg
aXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHdoZW4gdGhlIHdvcmxk
IGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdvcmxkCisgICAgLy8gbWVhbnMgdGhhdCB3
ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFyZ2V0IGRhdGEgbWFwLgorICAgIEpTQzo6
Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYo
c19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2bSAmJiB2bS0+aGVhcC53b3JsZElzUnVubmluZygp
KTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRhKCkgPyBldmVudFRhcmdldERhdGFNYXAo
KS5nZXQodGhpcykgOiBudWxscHRyOwogfQogCkBAIC0yMTcxLDYgKzIxNzksOSBAQCBFdmVudFRh
cmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAgICAgaWYgKGhhc0V2ZW50VGFyZ2V0
RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmdldCh0aGlzKTsK
IAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CisKICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAgc2V0SGFzRXZlbnRUYXJn
ZXREYXRhKHRydWUpOwogICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFwKCkuYWRkKHRoaXMs
IHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJnZXREYXRhPigpKS5pdGVyYXRvci0+dmFsdWU7CkBA
IC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFy
Z2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogeworICAgIEpTQzo6Vk0q
IHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhl
YXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50
VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2ZW50VGFyZ2V0RGF0YU1hcCgpLnJlbW92ZSh0aGlz
KTsKIH0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCShyZXZpc2lvbiAyMjUxNzgpCisr
KyBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsOCBAQCBMT05HU1BJREVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggCiBWOF9Q
QVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlN1blNwaWRlciIgKyAidGVzdHMiICsgInY4
LXY2IgogVEFJTEJFTkNIX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiVGFpbEJlbmNo
OTAwMCIKIE1JQ1JPQkVOQ0hNQVJLU19QQVRIID0gT1BFTlNPVVJDRV9QQVRIICsgIkpTVGVzdHMi
ICsgIm1pY3JvYmVuY2htYXJrcyIKLU9DVEFORV9XUkFQUEVSX1BBVEggPSBQRVJGT1JNQU5DRVRF
U1RTX1BBVEggKyAiT2N0YW5lIiArICJ3cmFwcGVycyIKK09QRU5TT1VSQ0VfT0NUQU5FX1BBVEgg
PSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiT2N0YW5lIgorT0NUQU5FX1dSQVBQRVJfUEFUSCA9
IE9QRU5TT1VSQ0VfT0NUQU5FX1BBVEggKyAid3JhcHBlcnMiCiBKU0JFTkNIX1BBVEggPSBQRVJG
T1JNQU5DRVRFU1RTX1BBVEggKyAiSlNCZW5jaCIKIFNJWFNQRUVEX1BBVEggPSBQRVJGT1JNQU5D
RVRFU1RTX1BBVEggKyAiU2l4U3BlZWQiICsgInRlc3RzIgogU0lYU1BFRURfV1JBUFBFUl9QQVRI
ID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ3cmFwcGVycyIKQEAgLTg0
MSw2ICs4NDIsMjAgQEAgY2xhc3MgU2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwog
ICBlbmQKIGVuZAogCisjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIGEgc2luZ2xlIGZpbGUg
YW5kIG11c3QgYmUgbG9hZGVkIGluIGl0cyBvd24gZ2xvYmFsIG9iamVjdCBlYWNoCisjIHRpbWUg
KGkuZS4gcnVuKCkpLCBidXQgcmV0dXJucyBpdHMgcmVzdWx0IGluIGEgY3VzdG9tIHdheS4KK2Ns
YXNzIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKKyAgYXR0cl9yZWFk
ZXIgOmJlbmNoUGF0aAorICAKKyAgZGVmIGluaXRpYWxpemUoYmVuY2hQYXRoKQorICAgIEBiZW5j
aFBhdGggPSBiZW5jaFBhdGgKKyAgZW5kCisgIAorICBkZWYga2luZAorICAgIDpzaW5nbGVGaWxl
Q3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgZW5kCitlbmQKKwogIyBCZW5jaG1hcmsgdGhhdCBjb25z
aXN0cyBvZiBvbmUgb3IgbW9yZSBkYXRhIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGxvYWRlZCBnbG9i
YWxseSwgZm9sbG93ZWQKICMgYnkgYSBjb21tYW5kIHRvIHJ1biB0aGUgYmVuY2htYXJrLgogY2xh
c3MgTXVsdGlGaWxlVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCkBAIC05NjUsNiArOTgwLDI1IEBA
IGRlZiBlbWl0QmVuY2hSdW5Db2RlRmlsZShuYW1lLCBwbGFuLCBiZW4KICAgICAgICAgZG91Ymxl
UHV0cygkc3RkZXJyLGZpbGUsIiAgICBpZiAoX19iZW5jaGVyX2luZGV4ID49ICN7d2FybXVwfSkg
cHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19OiAje3BsYW4uaXRlcmF0aW9ufTogXCIgKyAoX19i
ZW5jaGVyX2luZGV4IC0gI3t3YXJtdXB9KSArIFwiOiBUaW1lOiBcIisoKF9fYWZ0ZXItX19iZWZv
cmUpL19fcnVucykpOyIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJ9IikKICAg
ICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiN7YmVuY2hQYXJhbXMudGVhckRvd25Db21t
YW5kLmpzfSIpCisgICAgICBlbHNpZiBiZW5jaFBhcmFtcy5raW5kID09IDpzaW5nbGVGaWxlQ3Vz
dG9tVGltZWRCZW5jaG1hcmsKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImZ1bmN0
aW9uIF9fYmVuY2hlcl9ydW4oX19iZW5jaGVyX3doYXQpIHsiKQorICAgICAgICBkb3VibGVQdXRz
KCRzdGRlcnIsZmlsZSwiICAgdmFyIF9fYmVuY2hlcl9yZXN1bHQgPSB7dmFsdWU6IG51bGx9OyIp
CisgICAgICAgICRyZXJ1bi50aW1lcyB7CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZp
bGUsIiAgIHJ1bihfX2JlbmNoZXJfd2hhdCwgX19iZW5jaGVyX3Jlc3VsdCk7IikKKyAgICAgICAg
fQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgaWYgKF9fYmVuY2hlcl9yZXN1
bHQudmFsdWUgPT0gbnVsbCkiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAg
ICAgdGhyb3cgbmV3IEVycm9yKFwiTnVsbCByZXN1bHRcIik7IikKKyAgICAgICAgZG91YmxlUHV0
cygkc3RkZXJyLGZpbGUsIiAgIHJldHVybiBfX2JlbmNoZXJfcmVzdWx0LnZhbHVlOyIpCisgICAg
ICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJ9IikKKyAgICAgICAgJHdhcm11cC50aW1lcyB7
CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIl9fYmVuY2hlcl9ydW4oI3tiZW5j
aFBhcmFtcy5iZW5jaFBhdGguaW5zcGVjdH0pIikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRl
cnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAg
fQorICAgICAgICAkaW5uZXIudGltZXMgeworICAgICAgICAgIHwgaW5uZXJJbmRleCB8CisgICAg
ICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsInByaW50KFwiI3tuYW1lfTogI3twbGFuLnZt
fTogI3twbGFuLml0ZXJhdGlvbn06ICN7aW5uZXJJbmRleH06IFRpbWU6IFwiK19fYmVuY2hlcl9y
dW4oI3tiZW5jaFBhcmFtcy5iZW5jaFBhdGguaW5zcGVjdH0pKTsiKQorICAgICAgICAgIGRvdWJs
ZVB1dHMoJHN0ZGVycixmaWxlLCJnYygpOyIpIHVubGVzcyBwbGFuLnZtLnNob3VsZE1lYXN1cmVH
QworICAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICAgIHJhaXNlIHVubGVzcyBiZW5jaFBhcmFt
cy5raW5kID09IDpzaW5nbGVGaWxlVGltZWRCZW5jaG1hcmsKICAgICAgICAgZG91YmxlUHV0cygk
c3RkZXJyLGZpbGUsImZ1bmN0aW9uIF9fYmVuY2hlcl9ydW4oX19iZW5jaGVyX3doYXQpIHsiKQpA
QCAtMTU5NCw2ICsxNjI4LDE5IEBAIGNsYXNzIE9jdGFuZUJlbmNobWFyawogICBlbmQKIGVuZAog
CitjbGFzcyBDdXN0b21UaW1lZEJlbmNobWFyaworICBpbmNsdWRlIEJlbmNobWFyaworICAKKyAg
ZGVmIGluaXRpYWxpemUobmFtZSwgZnVsbFBhdGgpCisgICAgQG5hbWUgPSBuYW1lCisgICAgQGZ1
bGxQYXRoID0gZnVsbFBhdGgKKyAgZW5kCisgIAorICBkZWYgZW1pdFJ1bkNvZGUocGxhbikKKyAg
ICBlbWl0QmVuY2hSdW5Db2RlKGZ1bGxuYW1lLCBwbGFuLCBTaW5nbGVGaWxlQ3VzdG9tVGltZWRC
ZW5jaG1hcmtQYXJhbWV0ZXJzLm5ldyhlbnN1cmVGaWxlKCJDdXN0b21UaW1lZC0je0BuYW1lfSIs
IEBmdWxsUGF0aCkpKQorICBlbmQKK2VuZAorCiBjbGFzcyBLcmFrZW5CZW5jaG1hcmsKICAgaW5j
bHVkZSBCZW5jaG1hcmsKICAgCkBAIC0zMDEwLDYgKzMwNTcsNyBAQCBiZWdpbgogICAgIHwgYXJn
cyB8CiAgICAgT0NUQU5FLmFkZCBPY3RhbmVCZW5jaG1hcmsubmV3KCphcmdzKQogICB9CisgIE9D
VEFORS5hZGQgQ3VzdG9tVGltZWRCZW5jaG1hcmsubmV3KCJzcGxheS1sYXRlbmN5IiwgKE9QRU5T
T1VSQ0VfT0NUQU5FX1BBVEggKyAic3BsYXkuanMiKS50b19zKQogCiAgIEtSQUtFTiA9IEJlbmNo
bWFya1N1aXRlLm5ldygiS3Jha2VuIiwgOmFyaXRobWV0aWNNZWFuLCAtMSkKICAgWyJhaS1hc3Rh
ciIsICJhdWRpby1iZWF0LWRldGVjdGlvbiIsICJhdWRpby1kZnQiLCAiYXVkaW8tZmZ0IiwKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1MTc4KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiAr
OTgsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL0Jsb29tRmlsdGVyLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dU
Ri9DU3RyaW5nLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9DaGVja2Vk
QXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMv
V1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dURi9Db25kaXRpb24uY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RG
L0Nyb3NzVGhyZWFkVGFzay5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
RGF0ZU1hdGguY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI1MTc4
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAkJMEYxMzlFNzgxQTQy
M0E2QjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3MjFBNDIzQTJCMDBGNTkwRjUg
LyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSAqLzsgfTsKIAkJMEYxMzlFNzkxQTQyNDU3MDAw
RjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3MjFBNDIzQTJCMDBGNTkwRjUgLyogUGxh
dGZvcm1VdGlsaXRpZXNDb2NvYS5tbSAqLzsgfTsKIAkJMEYyQzIwQjgxRENENTQ1MDAwNTQyRDlF
IC8qIFRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovOyB9OworCQkwRjMwQ0I1
QzFGQ0UxNzk2MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMENCNUIxRkNFMTc5MjAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLzsgfTsKIAkJMEYzQjk0QTcxQTc3MjY3
NDAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I5NEE1MUE3NzI2NkMwMERFMzI3
MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi87IH07CiAJCTBGNEZGQTlFMUVE
M0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEZGQTlEMUVEM0FBODUwMEY3
MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLzsgfTsKIAkJMTE1RUIzNDMx
RUUwQkEwMzAwM0MyQzBBIC8qIFZpZXdwb3J0U2l6ZUZvclZpZXdwb3J0VW5pdHMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTVFQjM0MjFFRTBCNzIw
MDAzQzJDMEEgLyogVmlld3BvcnRTaXplRm9yVmlld3BvcnRVbml0cy5tbSAqLzsgfTsKQEAgLTEw
NjcsNiArMTA2OCw3IEBACiAJCTBGMTM5RTc1MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRy
Lm1tOyBwYXRoID0gY29jb2EvV2Vha09iakNQdHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMTdCQkQ0MTVBRjZDNEQwMDdBQjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhO
b1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
Q29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNl
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2
NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTEx
RiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGRkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJ
Ty5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0g
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9
IFNES1JPT1Q7IH07CkBAIC0yNTgxLDYgKzI1ODMsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYw
MEQxRTRCRiAvKiBBdG9taWNTdHJpbmcuY3BwICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFC
MEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0
IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNF
MTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2
NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3
NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRUYXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJF
NzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAgKi8sCkBAIC0zMTY1LDYgKzMxNjgsNyBAQAogCQkJ
CTdDODNERUY2MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1
cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMw
MEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFG
RkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAy
MUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRy
SGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25j
dXJyZW50UHRySGFzaFNldC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK25hbWVzcGFjZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJp
bmcgdGhhdCB0ZWxscyB0aGlzIHRoaW5nIHdoYXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2
ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisvLyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21t
YW5kcy4gQ29tbWFuZHM6CisvLworLy8gK3ggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3Rz
ICd4JyB0byBhIHZvaWQqKSBhbmQgYXNzZXJ0cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFk
ZHMgJ3gnIHRvIHRoZSBzZXQgYW5kIGFzc2VydHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4K
Ky8vID14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3Nl
cnRzIHRoYXQgJ3gnIGlzIG5vdCBpbiB0aGUgc2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBj
b21tYW5kcykKK3sKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25z
dCBjaGFyKiBjb21tYW5kID0gY29tbWFuZHM7IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29t
bWFuZCArPSAyKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pihjb21tYW5kWzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFu
ZFswXSkgeworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5h
ZGQocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAg
ICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVY
UEVDVF9GQUxTRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAg
ICBkb1Rlc3QoIiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25l
RWxlbWVudCkKK3sKKyAgICBkb1Rlc3QoIit4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1
cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rl
c3QoIit4IXgheCF4IXgheCF4IXgheCF4IXg9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3Vy
cmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIr
eCF4IXgheCF4IXgheCF4IXgheCF4PXgteS0wIXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1l
bnRzKQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStp
K28rcCthK3MrZCtmK2craCtqK2srbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1Ar
QStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1l
PXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9
WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNU
KFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7
CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2Er
cytkK2YrZytoK2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtG
K0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9
dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1P
PVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAh
cSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFF
IVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUh
NiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFi
IW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0h
MSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFs
IXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVgh
QyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFm
IWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUgh
SiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFv
IXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEh
UyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFy
IXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkh
VSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5
ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEh
VyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0
ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMh
diFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFO
IU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWoh
ayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFa
IVghQyFWIUIhTiFNIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRM
b3RzT2ZFbGVtZW50c0FuZFF1ZXJ5U29tZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9U
ZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZyto
K2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9
aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1M
LVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0Qr
RitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15
PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9
Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9D
b25jdXJyZW50UHRySGFzaFNldCwgQWRkU29tZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRU
aGVSZXN0QW5kUXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisx
KzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIh
dCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFl
IXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEh
dyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitn
K2graitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9
aD1qPWstbC16LXgtYy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1L
LUwtWi1YLUMtVi1CLU4tTStsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1Mr
RCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10
PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9
ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328129</attachid>
            <date>2017-12-01 11:39:32 -0800</date>
            <delta_ts>2017-12-01 13:36:36 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>234634</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjUxNzgpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTExLTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgcGVyZm9ybWFuY2UgdGVzdCBmb3IgaW5saW5lcyBhbmQg
aW5saW5lLWJsb2NrcyB3aXRob3V0IHRleHQKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5l
L3NwbGF5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5Lmpz
CShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBACisvLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8K
Ky8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlzIHVzZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0
aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2YXIgcGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8
fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgpID0+IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisv
LyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5uaW5nIHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAor
Ly8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQgb24gdGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisK
KworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFtZSAoc3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0
IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBv
cHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24KKy8vIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRo
YXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBhbmQgYWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNo
bWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5v
dCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBiZW5jaG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5j
aG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0ZXJtaW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRv
d24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJhdGlvbnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsK
KyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVwOworICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRv
RGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4gPSBydW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/
IHNldHVwIDogZnVuY3Rpb24oKSB7IH07CisgIHRoaXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRl
YXJEb3duIDogZnVuY3Rpb24oKSB7IH07CisgIHRoaXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lS
ZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVsbDsgCisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1p
bkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25zIDogMzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJl
c3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFuZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisv
LyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJlbmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRl
ciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJrIHN1aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4g
SWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8gdGhlbiB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3Jl
IGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0aW9uIEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmss
IHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5iZW5jaG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMu
dGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5jeSA9IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21h
dGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8gbnVtYmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmlj
CisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVuY2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9m
ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9m
IGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5hbWUgYW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBp
bgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVyZW5jZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2Nv
cmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRoaXMgd2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2
ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhpZ2hlcgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVy
IHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVuY2htYXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBi
ZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9IG5hbWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVm
ZXJlbmNlOworICB0aGlzLmJlbmNobWFya3MgPSBiZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0
ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKworCisvLyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJl
ZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2htYXJrU3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNj
b3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNyb3NzIHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9u
IGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5nZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3Jl
cywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5ldyBiZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0
aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZlcnNpb24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRo
ZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0g
ZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxlcnQgY2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBz
OworfTsKKworCisvLyBUbyBtYWtlIHRoZSBiZW5jaG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwg
d2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8gd2l0aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRl
cm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJlc2V0Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgu
cmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAgIHZhciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0
dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8gUm9iZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2Vy
IGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVkID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2Vl
ZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIz
YykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsg
MHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0g
KChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2VlZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAg
ICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZjNSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZm
ZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4gMHhiNTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAm
IDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4gKHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAw
MDsKKyAgICB9OworICB9KSgpOworfQorCisKKy8vIFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2ht
YXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5aWVsZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlk
dWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5uaW5nIGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNv
bnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9uZSwgdGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVk
IHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2htYXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24o
cnVubmVyKSB7CisgIHZhciBjb250aW51YXRpb24gPSBudWxsOworICB2YXIgc3VpdGVzID0gQmVu
Y2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIgbGVuZ3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzID0gW107CisgIHZhciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1
blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRpbnVhdGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgaWYgKGNvbnRpbnVhdGlvbikgeworICAgICAgICBjb250aW51YXRpb24gPSBjb250aW51
YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRl
eCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5Ob3RpZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0
KHN1aXRlLm5hbWUpOworICAgICAgICBjb250aW51YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5l
cik7CisgICAgICB9CisgICAgICBpZiAoY29udGludWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0g
J3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRpbWVvdXQpIHsKKyAgICAgICAgd2luZG93LnNldFRp
bWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisg
ICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAgICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7Cisg
ICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1
aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0
U2NvcmUoMTAwICogc2NvcmUpOworICAgICAgcnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7
CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsKK30KKworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51
bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFya3MuIFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJv
Z3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVuY2htYXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0g
ZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSAwOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJr
U3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBpID0gMDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykg
eworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0uYmVuY2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0
dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21wdXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBz
ZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihu
dW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMu
bGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAg
cmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9nIC8gbnVtYmVycy5sZW5ndGgpOworfQorCisKKy8v
IENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUg
bWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlv
bihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVt
ZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFz
dXJlbWVudHMubGVuZ3RoKTsKK30KKworCisvLyBDb21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUg
d29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUsIGlmIHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2ls
bCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9mIHRoZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4K
K0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJz
LCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0IGNoYW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisg
IG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7CisgIAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBv
cmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsK
KyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMgd2Ugd2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCBy
ZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJheSBzaXplIHNocmlua3MgdG9vIG11Y2guCisgIC8v
IEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRpbGUgPSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJz
Lmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRy
eSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1vcmUsCisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJz
Lmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0gMC45OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxl
bmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2lsbCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8K
KyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3Qg
dGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dlV2FudCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5n
dGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hpbGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxM
ZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQorICAgIG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJz
LnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAwOworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJl
cnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAgc3VtICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAor
ICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVyc1dlV2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBh
IHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJlcnMubGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNb
bnVtYmVycy5sZW5ndGggLSAxXSkgeworICAgIHRocm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhl
IHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyByZXN1bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0
IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1iZXJzOworICB9CisgIAorICByZXR1cm4gcmVzdWx0
OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRl
bmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0g
ZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7CisgIHZhciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5j
eVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZhciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5n
dGg7IGkrKykgeworICAgIGlmIChtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAg
ICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1lbnRzW2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0
ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQorICB9CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7
CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7
CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNj
b3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGggYXQgbGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8v
IGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZvcm1hdFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsK
KyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0g
ZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRvUHJlY2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5v
dGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdyZSBkb25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2ht
YXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1aXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVw
b3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5j
dGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1bHRzLnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMu
cnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVubmVyLk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFy
ay5uYW1lKTsKK30KKworCisvLyBOb3RpZmllcyB0aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3
aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhhdAorLy8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBj
YW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIgaWYgbmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJv
dG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0aW9uKCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRoaXMucmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRo
aXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2Nv
cmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRl
ZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3JlKDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1lLCBmb3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlz
LnJlZmVyZW5jZS5sZW5ndGggPT0gMikgeworICAgIHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KHRoaXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5M
YXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBzY29yZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsx
XSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVM
YXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAg
dmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5jaG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBz
Y29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUg
KyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVuY3kpOworICAgICAgfQorICAgIH0KKyAgfQorfQor
CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3Vs
dGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0g
ZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAg
dGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhpcy5uYW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMu
bmFtZSk7CisgIH0KK30KKworCisvLyBSdW5zIGEgc2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVh
c3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRoZQorLy8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRv
IHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2lu
Z2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVuY2htYXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1l
YXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFwc2VkID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcg
RGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhlciBmb3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1i
ZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQKKyAgLy8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5k
aW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0RldGVybWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9
IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlzdGljID8gCisgICAgICBpPGJlbmNobWFyay5taW5J
dGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDApOyBpKyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4o
KTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0ZSgpIC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChk
YXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEucnVucyArPSBpOworICAgICAgZGF0YS5lbGFwc2Vk
ICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisKKyAgLy8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRv
IHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhhc2UuCisgIGlmICghYmVuY2htYXJrLmRvV2FybXVw
ICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRhdGEgPSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsK
KyAgfQorCisgIGlmIChkYXRhID09IG51bGwpIHsKKyAgICBNZWFzdXJlKG51bGwpOworICAgIHJl
dHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRh
dGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0b28gZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVl
IGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBpZiAoZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0
ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAgIHZhciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEw
MDApIC8gZGF0YS5ydW5zOworICAgIHZhciBsYXRlbmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0
ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNobWFyay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07Cisg
ICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41OworICAgIHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3Vp
dGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShsYXRlbmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAx
MDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChuZXcgQmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywg
dXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVybiBudWxsOworICB9Cit9CisKKworLy8gVGhpcyBm
dW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1aXRlLCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisv
LyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0aGUgc3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51
YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBi
ZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0IGJlbmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwg
bnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVu
Y3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFya1N1aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVz
dWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9IHJ1bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMu
YmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBpbmRleCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7
CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0aGUgc2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJr
LCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJlZQorICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxv
dyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJldHdlZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4K
KworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAoKSB7CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7
CisgICAgICB0cnkgeworICAgICAgICBzdWl0ZS5iZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOwor
ICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICB9CisgICAgICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsK
KyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVzdWx0KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0K
KworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2htYXJrKCkgeworICAgIHRyeSB7CisgICAgICBkYXRh
ID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJrKHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRh
KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAg
IHJldHVybiBudWxsOworICAgIH0KKyAgICAvLyBJZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUg
d2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICByZXR1cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0
VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJrKCk7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0
VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10u
VGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihl
KTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gUnVuTmV4dFNldHVwOwor
ICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5pbmcgdGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4
dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdodCAyMDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBt
ZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2ht
YXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlwdCBsb2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAor
Ly8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdlbmVyYXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVz
IGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0IGFwcGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2
ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQorLy8gSmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxs
b2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWluZyB0aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQg
bm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBzcGxheSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisv
LyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBsb3Qgb2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJl
ZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIgU3BsYXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1Nw
bGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWworICBuZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUs
IGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3BsYXlTZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlM
YXRlbmN5KQorXSk7CisKKworLy8gQ29uZmlndXJhdGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9
IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVl
UGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNwbGF5VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1w
bGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0aW9uIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgs
IHRhZykgeworICBpZiAoZGVwdGggPT0gMCkgeworICAgIHJldHVybiB7CisgICAgICBhcnJheSAg
OiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJp
bmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBsZWFmIG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsK
KyAgICByZXR1cm4geworICAgICAgbGVmdDogIEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAx
LCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcp
CisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0aW9uIEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUg
YmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50ZWVzIHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8g
ZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMuCisgIHJldHVybiBNYXRoLnJhbmRvbSgpOworfQor
Cit2YXIgc3BsYXlTYW1wbGVzID0gW107CisKK2Z1bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAg
cmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKworZnVuY3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1l
KSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBzcGxheVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlT
YW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBzcGxheVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisK
K2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7CisgIC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEg
dW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAgZG8geworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7
CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5kKGtleSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2Fk
ID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3BsYXlUcmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5
KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5LCBwYXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30K
KworCitmdW5jdGlvbiBTcGxheVNldHVwKCkgeworICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0g
aGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGlnaCByZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBu
b3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVpdC4KKyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsK
KyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dVbnN1cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRy
ZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNwbGF5U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFu
Y2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7Cisg
ICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlmICgoaSsxKSAlIDIwID09IDE5KSB7CisgICAgICBT
cGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKKyAgICB9CisgIH0KK30KKworCitm
dW5jdGlvbiBTcGxheVRlYXJEb3duKCkgeworICAvLyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0
b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5CisgIC8vIHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8g
bWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAvLyB0ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBr
ZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMoKTsKKyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBz
cGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMg
dGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0
aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBo
YXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAgLy8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUg
aGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0g
MTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0gPj0ga2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93
IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qgc29ydGVkIik7CisgICAgfQorICB9Cit9CisKKwor
ZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8vIFJlcGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNw
bGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAwOyBpIDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7
IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNlcnROZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0
ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExlc3NUaGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0
ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUoa2V5KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1v
dmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5v
dygpKTsKK30KKworCisvKioKKyAqIENvbnN0cnVjdHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0
cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmluYXJ5CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBh
ZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVjZW50bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFy
ZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAq
IHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVwIGFuZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9y
dGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVl
KCkgeworfTsKKworCisvKioKKyAqIFBvaW50ZXIgdG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJl
ZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxh
eVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVsbDsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xl
YW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1wdHkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
aXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8q
KgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5
IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUgZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9k
ZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJZgorICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBp
dCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0cmVlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1
ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNl
cnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAg
IHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVlLk5vZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJu
OworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBrZXkgdG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRo
ZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhlIGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4K
KyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9vdF8ua2V5ID09IGtleSkgeworICAg
IHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVl
KTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8ua2V5KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5y
b290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3Rf
LnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsKKyAgICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsK
KyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3RfLmxlZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0g
bnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0gbm9kZTsKK307CisKKworLyoqCisgKiBSZW1vdmVz
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUK
KyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRoaXMga2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJl
dHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBub3QgZm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJv
d24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZy
b20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9k
ZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAg
aWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcg
KyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlfKGtleSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAh
PSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0K
KyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3RfOworICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgewor
ICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3RfLnJpZ2h0OworICB9IGVsc2UgeworICAgIHZhciBy
aWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVm
dDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVt
cHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMuc3BsYXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRo
ZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0aGUgcmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAg
IC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5yaWdodCA9IHJpZ2h0OworICB9CisgIHJldHVybiBy
ZW1vdmVkOworfTsKKworCisvKioKKyAqIFJldHVybnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVj
aWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRyZWUgZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUg
d2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0
byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJldHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2
aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICovCitTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBm
dW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7
CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgcmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtl
eSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsKKworCisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJl
ZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4aW11bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJl
ZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0aW9uKG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRo
aXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBv
cHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87CisgIHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7Cisg
ICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9Owor
CisKKy8qKgorICogQHJldHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhp
bXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5
IHZhbHVlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0g
ZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHJldHVybiBudWxs
OworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBrZXkgdG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBn
aXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8gbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhl
IHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1
bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUgb3IgdGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8g
dGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRoaXMucm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0
dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBpZiAodGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0
dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3RfLmxlZnQpOworICB9IGVsc2UgeworICAgIHJldHVy
biBudWxsOworICB9Cit9OworCisKKy8qKgorICogQHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5
IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9mIHRyZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVl
LnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsK
KyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0
aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9kZS5rZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVz
dWx0OworfTsKKworCisvKioKKyAqIFBlcmZvcm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhl
IGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUgd2l0aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUg
dG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9kZSBoYXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBs
YXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRoIGlzIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisg
KiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlmaWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRo
bSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5nIEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0
b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRo
ZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8g
PSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOwor
ICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5vZGUuICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2Rl
IGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50dWl0aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhl
IGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8vIHRoZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4g
IFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1teSBub2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0
cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2luZyBhIGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5k
IHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVzIGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgor
ICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0OworICBkdW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBT
cGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOwor
ICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChrZXkgPCBjdXJyZW50LmtleSkgeworICAgICAgaWYg
KCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5
IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAg
IHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7CisgICAgICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdo
dDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3VycmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsK
KyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgfQorICAgICAgLy8gTGluayByaWdodC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJy
ZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50OworICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVm
dDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1cnJlbnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJl
bnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoa2V5ID4gY3Vy
cmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAgLy8gUm90YXRlIGxlZnQuCisgICAgICAgIHZhciB0
bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAgICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7Cisg
ICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAg
ICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4KKyAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50Owor
ICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAg
ICB9IGVsc2UgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIC8vIEFzc2VtYmxlLgorICBs
ZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0OworICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsK
KyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmlnaHQ7CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5s
ZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVudDsKK307CisKKworLyoqCisgKiBDb25zdHJ1Y3Rz
IGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICog
QHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAqLworU3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihr
ZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0ga2V5OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9
OworCisKKy8qKgorICogQHR5cGUge1NwbGF5VHJlZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9k
ZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5v
ZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnByb3RvdHlwZS5yaWdodCA9IG51bGw7CisKKworLyoq
CisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRyYXZlcnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGlu
ZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9kZS4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNw
bGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1bmN0aW9uLgorICogQHByaXZhdGUKKyAqLworU3Bs
YXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1
cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3VycmVudCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVu
dC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0LnRyYXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQp
OworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0OworICB9Cit9OworCitmdW5jdGlvbiByZXBv
cnQobXNnKQoreworfQorCitmdW5jdGlvbiBzdGFydChyZXN1bHRPYmplY3QpCit7CisgICAgU3Bs
YXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVzID0gW107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZv
cm1hbmNlLm5vdygpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAg
ICAgICBTcGxheVJ1bigpOworICAgICAgICB2YXIgYWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsK
KyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVyIC0gYmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0g
YWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVhckRvd24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRl
ckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kp
CisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2goe3g6IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7Cisg
ICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0tbGlrZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5y
b3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KSkpOworICAgIAorICAgIHZhciBzdW1PZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9
IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOworICAgIHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5j
eSBTY29yZTogIiArIE1hdGgucm91bmQoMjczOTUuMTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVz
IC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAgCisgICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBb
OTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQorICAgICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUg
IiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNl
bnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkpOworICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1
ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7
Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxOTMgQEAKKzIwMTctMTItMDEgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBHQyBjb25zdHJhaW50IHNvbHZpbmcgc2hvdWxk
IGJlIHBhcmFsbGVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzk5MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZG8gY29uc3RyYWludCBzb2x2
aW5nIGluIHBhcmFsbGVsLiBJdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGEgc21hbGwKKyAgICAg
ICAgU3BlZWRvbWV0ZXIgc3BlZWQtdXAuCisgICAgICAgIAorICAgICAgICBDb25zdHJhaW50cyBj
YW4gbm93IGJlIHBhcmFsbGVsIGluIHR3byBhbG1vc3Qgb3J0aG9nb25hbCB3YXlzOgorICAgICAg
ICAKKyAgICAgICAgLSBBIGNvbnN0cmFpbnQncyBleGVjdXRlIGZ1bmN0aW9uIGNhbiBub3cgcnVu
IGluIHBhcmFsbGVsIHRvIG90aGVyIGNvbnN0cmFpbnRzJyBleGVjdXRlIGZ1bmN0aW9ucy4KKyAg
ICAgICAgICBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIGtpbmQgb2YgcGFyYWxsZWxpc20gdGhhdCB0
aGUgY29uc3RyYWludCBzb2x2ZXIgc3VwcG9ydHMuIFVubGVzcyBhCisgICAgICAgICAgY29uc3Ry
YWludCBvcHRzIG91dCBvZiB0aGlzICh0aGUgSlNDIFNQSSBjb25zdHJhaW50cyBvcHQgb3V0IGZv
ciBjb21wYXQgcmVhc29ucyksIGl0IHdpbGwKKyAgICAgICAgICBhdXRvbWF0aWNhbGx5IGJlIHJ1
biBhcyBwYXJ0IG9mIHRoZSBwYXJhbGxlbCBzb2x2ZXIuIElmIGEgY29uc3RyYWludCBvcHRzIG91
dCwgaXQgd2lsbCBydW4KKyAgICAgICAgICBzZXF1ZW50aWFsbHkgLSB0aGUgc2FtZSB3YXkgYXMg
YmVmb3JlLCBvbiB0aGUgc2FtZSB0aHJlYWQgYXMgYmVmb3JlIC0gYWZ0ZXIgdGhlIHBhcmFsbGVs
CisgICAgICAgICAgY29uc3RyYWludCBzb2x2ZXIgZmluaXNoZXMuCisgICAgICAgIAorICAgICAg
ICAtIEEgY29uc3RyYWludCBjYW4gY3JlYXRlIHBhcmFsbGVsIHdvcmsgZm9yIGl0c2VsZiwgd2hp
Y2ggdGhlIGNvbnN0cmFpbnQgc29sdmVyIHdpbGwgaW50ZXJsZWF2ZQorICAgICAgICAgIHdpdGgg
b3RoZXIgcGFyYWxsZWwgd29yayBmcm9tIG90aGVyIGNvbnN0cmFpbnRzLiBJZiBhIGNvbnN0cmFp
bnQgY2FuIGNyZWF0ZSBhIGxvdCBvZiBwYXJhbGxlbAorICAgICAgICAgIHdvcmssIHRoZW4gdGhl
IHNvbHZlciB3aWxsIGFsbG93IHRoYXQgY29uc3RyYWludCB0byBnZXQgYWxsIGNvcmVzIGZvciBh
cyBsb25nIGFzIGl0IG5lZWRzIHRvCisgICAgICAgICAgZmluaXNoLgorICAgICAgICAKKyAgICAg
ICAgSXQncyBub3QgcG9zc2libGUsIHZpYSB0aGUgQVBJLCB0byBoYXZlIGEgbGVnYWN5IHNlcXVl
bnRpYWwgY29uc3RyYWludCB0aGF0IGNyZWF0ZXMgcGFyYWxsZWwgd29yaworICAgICAgICBmb3Ig
aXRzZWxmLiBIb3dldmVyLCBzdWNoIGNvbnN0cmFpbnRzIGFyZSBmcmVlIHRvIHN0YXJ0IHRoZWly
IG93biB0aHJlYWRzLCBpZiB0aGV5IHJlYWxseSBkaWQgaGF2ZQorICAgICAgICBzb21lIHBhcmFs
bGVsaXNtIG9wcG9ydHVuaXRpZXMuCisgICAgICAgIAorICAgICAgICBBIGxvdCBvZiB0aGlzIGNo
YW5nZSBpcyBhYm91dCBtYWtpbmcgaXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEgc3RydWN0dXJl
cyBpbiBwYXJhbGxlbC4gVGhpcworICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0IGFsbCBjb25z
dHJhaW50cyBwYXJhbGxlbC1lbmFibGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0
cmFpbnQgdXNlcworICAgICAgICB0aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQgY29uc3RyYWlu
dCBpdGVyYXRlcyB0aGUgbWFya2VkIGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRoaXMgY2hhbmdl
CisgICAgICAgIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVsIGl0ZXJhdG9y
cyBvdmVyIHN1YnNwYWNlcywgYWxsb2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMuCisgICAgICAg
IFRoZSBtYXJrZWQgY2VsbCBwYXJhbGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBvdXQgb2YgcGFy
YWxsZWwgaXRlcmF0b3JzIGZvciB0aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAgICAgIGl0ZXJh
dG9yIGlzIGp1c3QgYW4gaXRlcmF0b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5leHQoKSB2ZXJ5
IHF1aWNrbHkuIFdlIGFic3RyYWN0IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRh
c2s8Li4uKCk+Piwgd2hlcmUgLi4uIGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJh
dG9yLiBXZSBrbm93IGl0J3MgZG9uZQorICAgICAgICB3aGVuIGl0IHJldHVybnMgYSBmYWxzaXNo
IHZlcnNpb24gb2YgLi4uIChpbiB0aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3YXlzIGEgcG9p
bnRlciB0eXBlLCBzbworICAgICAgICBkb25lIGlzIGluZGljYXRlZCBieSBudWxsKS4KKworICAg
ICAgICAqIEFQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHA6CisgICAgICAgIChKU0Nv
bnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbToKKyAgICAgICAgKHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKToKKyAgICAgICAg
KHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKToKKyAgICAgICAgKEpTQzo6
c2hvdWxkTWFya1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVz
cyk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ29t
cGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9D
b25zdHJhaW50UGFyYWxsZWxpc20uaDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJu
YWwpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXAp
OgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlND
OjpIZWFwOjpydW5GaXhwb2ludFBoYXNlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcFRoZVBl
cmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlc3VtZVRoZVBlcmlwaGVyeSk6CisgICAg
ICAgIChKU0M6OkhlYXA6OmFkZENvcmVDb25zdHJhaW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6
OnNldEJvbnVzVmlzaXRvclRhc2spOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5UYXNrSW5QYXJh
bGxlbCk6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hTbG90VmlzaXRvcik6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndvcmxkSXNSdW5u
aW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRnVuY3Rpb25JblBhcmFsbGVsKToK
KyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Ondvcmxk
SXNTdG9wcGVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVu
dERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFj
aFNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwU25hcHNo
b3RCdWlsZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5k
Tm9kZSk6CisgICAgICAgICogaGVhcC9MYXJnZUFsbG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6
TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlv
bjo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTG9ja0R1
cmluZ01hcmtpbmcuaDoKKyAgICAgICAgKEpTQzo6bG9ja0R1cmluZ01hcmtpbmcpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvTWFya2Vk
QWxsb2NhdG9yLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmspOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2Vk
Q29uY3VycmVudGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphY3RpdmVXZWFrU2V0c0JlZ2luKToKKyAgICAgICAg
KEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2ZVdlYWtTZXRzRW5kKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6Om5ld0FjdGl2ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRT
cGFjZTo6bmV3QWN0aXZlV2Vha1NldHNFbmQpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0
cmFpbnQuY3BwOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0
cmFpbnQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZSk6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpN
YXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmspOgorICAgICAgICAoSlNDOjpNYXJraW5n
Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0Nv
bnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdD
b25zdHJhaW50Lmg6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpsYXN0RXhlY3V0
ZVBhcmFsbGVsaXNtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnBh
cmFsbGVsaXNtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNr
V29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6
OndvcmtFc3RpbWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29u
c3RyYWludFNldCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQpOgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUlt
cGwpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbCk6Cisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpFeGVj
dXRpb25Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OnNo
b3VsZFRpbWVPdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3Ry
YWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZHJhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkRXhlY3V0ZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpleGVjdXRlKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oOgorICAgICAgICAqIGhlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXI6On5NYXJraW5nQ29uc3RyYWludFNvbHZlcik6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRWaXNpdFNvbWV0aGluZyBjb25zdCk6
CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRlKToKKyAgICAg
ICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRyYWluKToKKyAgICAgICAgKEpTQzo6
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmNvbnZlcmdlKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZCk6CisgICAgICAgIChKU0M6Ok1h
cmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRFeGVjdXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtp
bmdDb25zdHJhaW50U29sdmVyLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvT3BhcXVlUm9vdFNl
dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpQYXJhbGxlbFNvdXJjZUFkYXB0ZXI6OlBhcmFsbGVsU291cmNl
QWRhcHRlcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcik6Cisg
ICAgICAgICogaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQp
OgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdD
b25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNr
V29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4
ZWN1dGVJbXBsKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg6IEFk
ZGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJl
c2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZCk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkSXNVcFRvRGF0ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpwZXJmb3Jt
SW5jcmVtZW50T2ZEcmFpbmluZyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRSZWFj
aFRlcm1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Omhhc1dvcmspOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmRyYWluSW5QYXJhbGxlbFBhc3NpdmVseSk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YWRkT3BhcXVlUm9vdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpj
b250YWluc09wYXF1ZVJvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMpOiBEZWxldGVk
LgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29uc3QpOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlND
OjpTdWJzcGFjZTo6cGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UpOgorICAgICAgICAoSlNDOjpTdWJz
cGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKToKKyAgICAgICAgKiBoZWFw
L1N1YnNwYWNlLmg6CisgICAgICAgICogaGVhcC9TdWJzcGFjZUlubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbCk6CisgICAgICAgICog
aGVhcC9WaXNpdENvdW50ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlZpc2l0Q291bnRlcjo6
VmlzaXRDb3VudGVyKToKKyAgICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjp2aXNpdENvdW50IGNv
bnN0KToKKyAgICAgICAgKiBoZWFwL1Zpc2l0aW5nVGltZW91dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vha0Jsb2NrOjpzcGVjaWFs
aXplZFZpc2l0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjptYXJrSWZDaGVhcCk6CisKIDIwMTctMTEtMjcgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0
QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgREZHU2FmZVRvRXhlY3V0ZSB0byBiZSBhd2Fy
ZSB0aGF0IEFycmF5UHVzaCBpcyBub3cgYSB2YXJhcmdzIG5vZGUKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDggKzUwMSwxMCBAQCBoZWFwL01h
cmtlZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAvTWFya2luZ0NvbnN0cmFp
bnQuY3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAoraGVhcC9NYXJraW5nQ29uc3Ry
YWludFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0
YXRlLmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0
b3IuY3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0
aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJl
dmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29u
c3RyYWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNp
bmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVk
ZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApA
QCAtNzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZv
bGF0aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAot
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+
KAorICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigi
LCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIp
IiksCiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3Ry
YWludEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWlu
dENhbGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBb
Y29uc3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAg
bWFya2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1h
cms7CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3Ry
YWludCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJr
ZXIsIHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAg
IHZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCk7
CiAgICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFp
bnQpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1h
Y2hpbmUubW0JKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0
YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFz
dGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFz
dCgpOwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZp
c2l0b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0
ZSkKKyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChuZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZd
IHsKICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxP
YmplY3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0z
MjcsOCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAog
ICAgICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0
c107CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRp
ZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyAr
MTI4LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFF
M0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJ
MEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUz
QTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBG
MUZCMzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0
aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3
RTEwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5J
bmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlz
dElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsK
IAkJMEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1Rjkw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0zMTEsNiArMzEwLDkgQEAK
IAkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QTM4RjgxQzhFMTNERjAwMTkw
MzE4IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAw
NDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5o
ICovOyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdB
OTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi87IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0Qw
MDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25z
dHJhaW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjREOEM3ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNG
MUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEg
LyogQWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JD
MTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3
QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9Owog
CQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTQ0NSw2ICs0NDcsOCBAQAogCQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5V
cFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjlEMzY5MzFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi87IH07CiAJCTBG
OUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBCMUMzRTFDMTEwMDZD
RDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLzsgfTsKIAkJMEY5RDRDMTExQzNFMkM3NDAw
NkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAv
KiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi87IH07CisJCTBGOURBQTA5MUZEMUMz
Q0YwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8q
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggKi87IH07CisJCTBGOURBQTBBMUZEMUMzRDMwMDc5
QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxl
bFNvdXJjZUFkYXB0ZXIuaCAqLzsgfTsKIAkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91
dFBoYXNlLmggKi87IH07CiAJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0
RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xNDk0LDcgKzE0OTgsNiBAQAogCQlBRDlFODUyRjFFOEEw
QzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8q
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBREJDNTRENTFERjhFQTJCMDA1QkY3MzggLyogV2ViQXNzZW1i
bHlUb0pTQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBREJDNTREMzFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmgg
Ki87IH07CiAJCUFERDhGQTQ2MUVCMzA3OTcwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDhG
QTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLzsgfTsKLQkJ
QUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEREIxRjYyMThENzdEQjcwMDlCNThB
OCAvKiBPcGFxdWVSb290U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFERTgwMjk0MUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUEx
RTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk1MUUwOEYx
QzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUMxRTA4RjFE
RTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5NzFFMDhGMUM5MDA1OERF
NzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk3Niw3ICsxOTc5LDYgQEAKIAkJMEYx
RkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNj
aGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJv
bm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVk
dWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdG9yU2No
ZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYxRkIzOTIxRTE3N0E2
RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWaXNpdGluZ1RpbWVvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHUGxh
bklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTUxRTFBRjdE
RjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdElu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTgxRTFGNjVGOTAw
QTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjI2NCw2ICsyMjY2LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNh
bXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJTYW1wbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAv
KiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRDOTE2
NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBW
aXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRDb3Vu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzczMUZDN0E5NzQwMDFE
MzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc3MUZD
QTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2
aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJG
aXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzEx
IC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2
QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0OTcsNiArMjUwMyw5IEBACiAJCTBGOUQ0QzBCMUMz
RTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHBhdGggPSBmdGwvRlRMRXhjZXB0
aW9uVGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBFMUMzRTJD
NzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUu
Y3BwOyBwYXRoID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlENEMwRjFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEw
NjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIg
LyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5REFBMDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1
IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdT
dG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllcklu
c2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYyMTdG
Q0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDI1NCw3ICs0MjYzLDYgQEAKIAkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNz
ZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcx
MDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2Vj
dGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFEREIxRjYyMThE
NzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QURFODAyOTMxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJv
ci5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2Vi
QXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJB
c3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NTAwLDYgKzU1MDgsNyBAQAogCQkJCTBGRDBFNUU2MUU0M0QzNDcwMDA2QUIwOCAvKiBD
b2xsZWN0b3JQaGFzZS5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBDb25z
ZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8qIENv
bnNlcnZhdGl2ZVJvb3RzLmggKi8sCisJCQkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENv
bnN0cmFpbnRQYXJhbGxlbGlzbS5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAv
KiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRG
NyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVm
ZXJHQy5oICovLApAQCAtNTU4OCwxNyArNTU5NywyMSBAQAogCQkJCTBGNjYwRTM0MUUwNTE3Qjcw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovLAogCQkJCTBGNjYwRTM1MUUwNTE3Qjcw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8sCiAJCQkJMEY2NjBFMzYxRTA1
MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8sCisJCQkJMEY5REFBMDYx
RkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcCAqLywKKwkJCQkw
RjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAqLywK
IAkJCQkxNDJENkYwRTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCAqLywKIAkJCQkx
NDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggKi8sCiAJCQkJMEYxRkIzOEMx
RTE3M0E2MjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGMUZCMzk4
MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEZBNzYyMDIx
REI5MjQyMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5jcHAgKi8sCiAJCQkJMEZBNzYyMDMxREI5
MjQyMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5oICovLAotCQkJCUFEREIxRjYyMThENzdEQjcw
MDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8sCisJCQkJMEY5REFBMDgxRkQxQzNDODAwNzlD
NUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovLAogCQkJCTBGQkI3M0I2MURFRjNBQUMw
MDJDMDA5RSAvKiBQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmggKi8sCiAJCQkJMEZEMEU1RUYxRTQ2
QkYyMzAwMDZBQjA4IC8qIFJlZ2lzdGVyU3RhdGUuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2
MDA5OENDMTIgLyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAogCQkJCTBGMkM2M0E5MUU0
RkE0MkMwMEMxMzgzOSAvKiBSdW5uaW5nU2NvcGUuaCAqLywKKwkJCQkwRjREOEM3NjFGQ0EzQ0Yy
MDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNEQ4Qzc3
MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovLAogCQkJCUMy
MjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4
RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMw
QTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLApAQCAtNTYyMCw3ICs1NjMz
LDcgQEAKIAkJCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFB
IC8qIFRpbnlCbG9vbUZpbHRlci5oICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAv
KiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8sCi0JCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlC
RTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovLAorCQkJCTBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJB
QyAvKiBWaXNpdENvdW50ZXIuaCAqLywKIAkJCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyog
VmlzaXRSYWNlS2V5LmNwcCAqLywKIAkJCQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlz
aXRSYWNlS2V5LmggKi8sCiAJCQkJMUFDRjczNzYxNzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3Bw
ICovLApAQCAtODE2OSw2ICs4MTgyLDcgQEAKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIg
LyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUz
RkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgz
MkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc1MUZD
N0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRh
LmggaW4gSGVhZGVycyAqLywKQEAgLTg3MzYsNiArODc1MCw3IEBACiAJCQkJMEYyQjY2RTUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIy
IC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
QTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVu
Y3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtODg4Myw2ICs4ODk4LDcgQEAKIAkJCQlBNzQ4MkU5
MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBS
ZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIg
LyogSlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAw
MUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUz
MzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIx
Rjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
OUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkwMDIsOSArOTAxOCw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMw
MTZGIC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgx
RkNBM0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJp
bmcuaCBpbiBIZWFkZXJzICovLAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFx
dWVSb290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEg
LyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAg
LyogT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4
RSAvKiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTIxMCw2ICs5MjI2LDcg
QEAKIAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
QWRhcHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEExRkQx
QzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
VHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjQ5LDcgKzkyNjYsNiBAQAogCQkJCTBGNkM3MzUx
MUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8q
IFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0
NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYg
LyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zKFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAg
ICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fc3RydWN0dXJlLT5wcmV2aW91
c0lEKCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3Vz
SUQoKSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJl
LmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk4MCw3ICs5ODAsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlz
aXRXZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxs
ZWQgPSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQor
ICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KHNob3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3Rh
dGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAogCiBib29sIENvZGVCbG9jazo6
c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewot
ICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6
aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTEx
NDcsMTAgKzExNDcsMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRB
ZwogI2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24o
REZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJh
bnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5z
aXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmln
aW4gJiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
dHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTgwLDcgKzExODAsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlm
IChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwpA
QCAtMTI1NCwxNCArMTI1NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3Mo
Y29uc3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVy
ZW5jZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21t
b24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nh
c3Q8Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0Zh
ciA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYg
KGFsbEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZn
Q29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1
cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtl
ZChkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewogICAgICAg
ICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBt
X3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8v
IFRoZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93
biByaWdodFRvUnVuLgotICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3BsYW4tPnZtLT5o
ZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3Rv
cGVkIGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJl
YWQoJm1fZGF0YSk7CiAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxl
ZCkgewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhl
YXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMg
c3RvcHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CiAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFk
eVBsYW5zLmFwcGVuZChtX3BsYW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3BsYW5Db21waWxl
ZC5ub3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyAr
NzEsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBp
ZiAoc2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3Jh
cGgubV92bS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwogICAgIAogICAgIGlmIChzdGF0ZS5hbGxv
Y2F0aW9uRmFpbGVkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0g
Y2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7CisgICAgU2VxdWVudGlhbCwK
KyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2Ug
V1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6
OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAgICBzd2l0Y2ggKHBhcmFs
bGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlh
bDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDoKKyAgICAgICAgb3V0
LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsy
ODEsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX211
dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcywgIk0i
KSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0Fy
cmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNr
QXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5n
Q29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3RyYWludFNldChzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAgICAgLCBtX2hhbmRsZVNldCh2bSkKICAg
ICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9ja1NldD4oKSkKICAgICAs
IG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1YlJvdXRpbmVTZXQ+KCkp
CkBAIC05MTEsNyArOTExLDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3Qg
SlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwogICAgIGlmIChtX211dGF0b3JTaG91bGRC
ZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgaWYgKCFp
c01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICBpZiAoIWlzTWFya2VkKGNlbGwp
KSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxlY3Rpb24gYSBzdG9yZSBpbnRv
IGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQgcGFzdAogICAgICAgICAgICAg
Ly8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIFBv
c3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAgICAgICAgIC8vIG9iamVjdCBnZXRzIG1h
cmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwgZ28gZG93biB0aGUgbm9y
bWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTI0LDE1IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJl
cmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgcHJvdGVjdCBhZ2Fp
bnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vICAg
ICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVubWFya2VkLgotICAgICAgICAgICAgICAg
IC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJyZW50bHkgaGVyZS4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhlcmUuCiAgICAgICAgICAgICAgICAgLy8g
ICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXllZC4KICAgICAgICAgICAgICAgICAvLyAg
ICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNrZWQuCiAgICAgICAgICAgICAgICAgLy8g
ICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVTdHJvbmcgaGVyZS4K
ICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSB3
b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBhZ2FpbiwgZXZlbiB0aG91Z2ggaXQgc2hv
dWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2suIFRoaXMgY2hlY2sgbGV0cyB1cyBjb3Jy
ZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0Ci0gICAgICAgICAg
ICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29udmVyZ2VzIG1vbm90b25pY2FsbHkgdG8g
dHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0
cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjZWxsKSkgewogICAgICAgICAgICAg
ICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3JrIG91dCB3aGV0aGVyIHRoZSBvYmplY3Qg
c2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBw
b2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5LgogICAgICAgICAgICAgICAgICAgICBj
ZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKTsKQEAgLTk0OCw3ICs5
NDgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJUKEhlYXA6
OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICAgICAgQVNTRVJUKEhlYXA6OmlzTWFy
a2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRoZSBvYmplY3Qgd2FzICpqdXN0
KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yIG1heSBzZXQgdGhlCiAgICAg
Ly8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRoZW4gdG8gUG9zc2libHlPbGRPckJsYWNr
IGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwogICAgIC8vIHJhY2Ugd2l0aCB0aGUgY29s
bGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUg
b2JqZWN0IF93aWxsXwpAQCAtMTI2NSw2ICsxMjY1LDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVh
cDo6cnVuRml4cG9pbnRQaGFzZQogICAgIAogICAgIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciA9
ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOwogICAgIAorICAgIG1fb3BhcXVlUm9vdHMuZGVsZXRl
T2xkVGFibGVzKCk7CisgICAgCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKICAgICAgICAg
SGFzaE1hcDxjb25zdCBjaGFyKiwgc2l6ZV90PiB2aXNpdE1hcDsKICAgICAgICAgZm9yRWFjaFNs
b3RWaXNpdG9yKApAQCAtMTI4NywxMCArMTI4OSw2IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6
OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgICAgIAogICAgICAgICBhc3NlcnRTaGFyZWRNYXJr
U3RhY2tzRW1wdHkoKTsKICAgICAgICAgICAgIAotICAgICAgICBzbG90VmlzaXRvci5tZXJnZUlm
TmVjZXNzYXJ5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJh
bGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VJZk5l
Y2Vzc2FyeSgpOwotICAgICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRv
ckRpZFJ1biBpbnRvIGFjY291bnQgd2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxp
a2VseSwKICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIHJvb3QgY29uc3RyYWlu
dHMgYWdhaW4gdW5sZXNzIHRoZSBtdXRhdG9yIGRpZCBydW4uIEF0IGEKICAgICAgICAgLy8gbWlu
aW11bSwgd2UgY291bGQgdXNlIHRoaXMgZm9yIHdvcmsgZXN0aW1hdGVzIC0gYnV0IGl0J3MgcHJv
YmFibHkgbW9yZSB0aGFuIGp1c3QgYW4KQEAgLTEzMDUsNyArMTMwMyw3IEBAIE5FVkVSX0lOTElO
RSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgLy8gV29uZGVyaW5nIHdoYXQg
dGhpcyBkb2VzPyBMb29rIGF0IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpLiBUaGUgRE9NIGFu
ZCBvdGhlcnMgY2FuIGFsc28KICAgICAgICAgLy8gYWRkIHRoZWlyIG93biB1c2luZyBIZWFwOjph
ZGRNYXJraW5nQ29uc3RyYWludCgpLgogICAgICAgICBib29sIGNvbnZlcmdlZCA9Ci0gICAgICAg
ICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvciwgTW9u
b3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4
ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvcik7CiAgICAgICAgIGlmIChjb252ZXJnZWQgJiYg
c2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3Rh
Y2tzRW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBDb2xsZWN0
b3JQaGFzZTo6RW5kKTsKQEAgLTE1MjYsNyArMTUyNCw3IEBAIE5FVkVSX0lOTElORSBib29sIEhl
YXA6OmZpbmlzaENoYW5naW5nUGgKIAogdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29u
ZHVjdG9yIGNvbm4pCiB7Ci0gICAgaWYgKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJ
c1N0b3BwZWQpIHsKKyAgICBpZiAobV93b3JsZElzU3RvcHBlZCkgewogICAgICAgICBkYXRhTG9n
KCJGQVRBTDogd29ybGQgYWxyZWFkeSBzdG9wcGVkLlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTUzNyw3ICsxNTM1LDcgQEAgdm9pZCBIZWFw
OjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29uZHVjdG9yIAogICAgIG1fbXV0YXRvckRpZFJ1biA9IGZh
bHNlOwogCiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwotICAgIG1fY29sbGVjdG9yQmVs
aWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworICAgIG1fd29ybGRJc1N0b3BwZWQg
PSB0cnVlOwogCiAgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAogICAgICAgICBbJl0gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewpAQCAtMTU3NCwxMSArMTU3MiwxMSBAQCBORVZFUl9JTkxJTkUg
dm9pZCBIZWFwOjpyZXN1bWVUaGVQZXJpcGhlCiAgICAgCiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVk
ID0gMDsKICAgICAKLSAgICBpZiAoIW1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQpIHsKKyAgICBpZiAoIW1fd29ybGRJc1N0b3BwZWQpIHsKICAgICAgICAgZGF0YUxvZygi
RmF0YWw6IGNvbGxlY3RvciBkb2VzIG5vdCBiZWxpZXZlIHRoYXQgdGhlIHdvcmxkIGlzIHN0b3Bw
ZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0g
ICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IGZhbHNlOworICAg
IG1fd29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICAKICAgICAvLyBGSVhNRTogVGhpcyBjb3Vs
ZCBiZSB2YXN0bHkgaW1wcm92ZWQ6IHdlIHdhbnQgdG8gZ3JhYiB0aGUgbG9ja3MgaW4gdGhlIG9y
ZGVyIGluIHdoaWNoIHRoZXkKICAgICAvLyBiZWNvbWUgYXZhaWxhYmxlLiBXZSBiYXNpY2FsbHkg
d2FudCBhIGxvY2tBbnkoKSBtZXRob2QgdGhhdCB3aWxsIGxvY2sgd2hhdGV2ZXIgbG9jayBpcyBh
dmFpbGFibGUKQEAgLTI1NzgsNyArMjU3Niw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKCkKIHsKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNl
cnZhdGl2ZSBTY2FuIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Is
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGlt
aW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAgICAg
ICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAgICAg
ICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAtMjU4
OCwxMSArMjU4NiwxMiBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAg
ICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgfSwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwg
c2xvdFZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNjA5LDE5ICsyNjA4LDIxIEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG1fdm0tPmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKG1fdm0tPmxhc3RFeGNlcHRpb24oKSk7CiAgICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgbV9oYW5kbGVTdGFj
ay52aXNpdChzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRl
YnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgICAgICBpZiAo
U2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmls
ZXIoKSkgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmls
ZXItPmdldExvY2soKSk7CkBAIC0yNjM3LDM0ICsyNjM4LDM4IEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV92bS0+c2hhZG93Q2hp
Y2tlbigpLnZpc2l0Q2hpbGRyZW4oc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faml0U3R1YlJv
dXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9vYmplY3RT
cGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
V3JoIiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9yIChXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5o
ZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCiAgICAgICAgICAgICAg
ICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBp
LS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZp
c2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgCkBAIC0yNjc5LDEy
ICsyNjg0LDEzIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgc2xvdFZpc2l0b3IpOwogICAgICAgICB9
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAjZW5kaWYKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAog
ICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBp
dCdzIGJsYWNrLgpAQCAtMjY5MywxMSArMjY5OSwxNSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci52aXNpdEFzQ29u
c3RyYWludChjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9LAotICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKKyAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJNcm1zIiwgIk11dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIGdyYWIgbG9ja3MgdG8gZmlkZGxlIHdpdGggdGhlIG11dGF0b3IgbWFy
ayBzdGFjayBhbmQgdGhlIHJhY2Ugc3RhY2suCisgICAgICAgICAgICAvLyBUaGUgY2hhbmNlcyBv
ZiBjb250ZW50aW9uIG9uIHRob3NlIGxvY2tzIGFyZSBzbGltLCBidXQgd2Ugc2hvdWxkIGRvIGl0
IGFueXdheS4KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSW5kaWNhdGUgdG8gdGhlIGZp
eHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQogICAgICAgICAgICAgc2l6ZV90IHNpemUg
PSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwog
ICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOwpAQCAtMjcxMSw3
ICsyNzIxLDggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKICAgICAgICAgICAgIHJldHVybiBtX211dGF0
b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogICAgICAgICB9
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogfQogCiB2b2lkIEhlYXA6OmFkZE1hcmtp
bmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29uc3RyYWlu
dCkKQEAgLTI3OTQsMTYgKzI4MDUsNiBAQCB2b2lkIEhlYXA6OmFsbG93Q29sbGVjdGlvbigpCiAg
ICAgbV9jb2xsZWN0Q29udGludW91c2x5TG9jay51bmxvY2soKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmIGZ1
bmMpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrKTsKLSAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKLSAgICBmdW5jKCptX211
dGF0b3JTbG90VmlzaXRvcik7Ci0gICAgZm9yIChhdXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxs
ZWxTbG90VmlzaXRvcnMpCi0gICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9yKTsKLX0KLQogdm9pZCBI
ZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBtX211dGF0
b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVlOwpAQCAtMjg0Nyw0ICsyODQ4LDI0IEBAIHZvaWQgSGVh
cDo6cmVtb3ZlSGVhcEZpbmFsaXplckNhbGxiYWNrKGMKICAgICBtX2hlYXBGaW5hbGl6ZXJDYWxs
YmFja3MucmVtb3ZlRmlyc3QoY2FsbGJhY2spOwogfQogCit2b2lkIEhlYXA6OnNldEJvbnVzVmlz
aXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011dGV4KTsKKyAgICBtX2JvbnVz
VmlzaXRvclRhc2sgPSB0YXNrOworICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOworfQorCit2b2lkIEhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgdW5zaWduZWQgaW5pdGlhbFJl
ZkNvdW50ID0gdGFzay0+cmVmQ291bnQoKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKHRhc2sp
OworICAgIHRhc2stPnJ1bigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgc2V0Qm9udXNW
aXNpdG9yVGFzayhudWxscHRyKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9tYXJraW5nTXV0ZXgpOworICAgICAgICB3aGlsZSAodGFzay0+cmVmQ291bnQoKSA+IGlu
aXRpYWxSZWZDb3VudCkKKyAgICAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndh
aXQobV9tYXJraW5nTXV0ZXgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcg
QEAKICNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKICNpbmNsdWRlICJXZWFrUmVmZXJlbmNl
SGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBA
IC0xMTQsNyArMTE1LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3Rp
bWVDaGVja1Jlc29sdXRpb24gPSAxNjsKIAogICAgIHN0YXRpYyBib29sIGlzTWFya2VkKGNvbnN0
IHZvaWQqKTsKLSAgICBzdGF0aWMgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lk
Kik7CiAgICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChIZWFwVmVyc2lvbiwgY29uc3Qg
dm9pZCopOwogICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qgdm9pZCopOwpA
QCAtMTU0LDcgKzE1NCw4IEBAIHB1YmxpYzoKICAgICBNdXRhdG9yU3RhdGUgbXV0YXRvclN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhdGU7IH0KICAgICBzdGQ6Om9wdGlvbmFsPENv
bGxlY3Rpb25TY29wZT4gY29sbGVjdGlvblNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0
aW9uU2NvcGU7IH0KICAgICBib29sIGhhc0hlYXBBY2Nlc3MoKSBjb25zdDsKLSAgICBib29sIGNv
bGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgY29uc3Q7CisgICAgYm9vbCB3
b3JsZElzU3RvcHBlZCgpIGNvbnN0OworICAgIGJvb2wgd29ybGRJc1J1bm5pbmcoKSBjb25zdCB7
IHJldHVybiAhd29ybGRJc1N0b3BwZWQoKTsgfQogCiAgICAgLy8gV2UncmUgYWx3YXlzIGJ1c3kg
b24gdGhlIGNvbGxlY3Rpb24gdGhyZWFkcy4gT24gdGhlIG1haW4gdGhyZWFkLCB0aGlzIHJldHVy
bnMgdHJ1ZSBpZiB3ZSdyZQogICAgIC8vIGhlbHBpbmcgaGVhcC4KQEAgLTM1OCw2ICszNTksMTcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNvbnN0
IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQgcmVtb3ZlSGVhcEZpbmFsaXplckNh
bGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOworICAgIAorICAgIHZvaWQgcnVu
VGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pOwor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBydW5GdW5jdGlvbklu
UGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHJ1blRhc2tJblBhcmFs
bGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPihmdW5jKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hTbG90VmlzaXRv
cihjb25zdCBGdW5jJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpbmdT
Y29wZTsKQEAgLTUyNyw2ICs1MzksOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgYXNzZXJ0
U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CiAKKyAgICB2b2lkIHNldEJvbnVzVmlzaXRvclRhc2so
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4pOworICAgIAogICAgIGNvbnN0
IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAgICBj
b25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwpAQCAtNTc5LDkgKzU5Myw2IEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9yczsKICAgICBMb2NrIG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2s7CiAgICAgCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lkIGZvckVhY2hTbG90VmlzaXRvcihjb25zdCBG
dW5jJik7Ci0KICAgICBIYW5kbGVTZXQgbV9oYW5kbGVTZXQ7CiAgICAgSGFuZGxlU3RhY2sgbV9o
YW5kbGVTdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUJsb2NrU2V0PiBtX2NvZGVCbG9j
a3M7CkBAIC02MzMsOCArNjQ0LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX251bWJlck9m
V2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJz
U2hvdWxkRXhpdCB7IGZhbHNlIH07CiAKLSAgICBMb2NrIG1fb3BhcXVlUm9vdHNNdXRleDsKLSAg
ICBIYXNoU2V0PGNvbnN0IHZvaWQqPiBtX29wYXF1ZVJvb3RzOworICAgIENvbmN1cnJlbnRQdHJI
YXNoU2V0IG1fb3BhcXVlUm9vdHM7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tG
cmFnbWVudExlbmd0aCA9IDMyOwogCkBAIC02NDIsNiArNjUyLDcgQEAgcHJpdmF0ZToKICAgICBM
aXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlv
bmFsRmluYWxpemVyczsKIAogICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50
OworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IG1fYm9udXNWaXNp
dG9yVGFzazsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9j
a0J5dGVzQWxsb2NhdGVkIHsgMCB9OwpAQCAtNjU3LDcgKzY2OCw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG5lZWRGaW5hbGl6ZUJpdCA9IDF1IDw8IDR1OwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxv
d3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAg
QXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7Ci0gICAgYm9vbCBtX2NvbGxlY3RvckJlbGll
dmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fd29ybGRJc1N0
b3BwZWQgeyBmYWxzZSB9OwogICAgIE1vbm90b25pY1RpbWUgbV9iZWZvcmVHQzsKICAgICBNb25v
dG9uaWNUaW1lIG1fYWZ0ZXJHQzsKICAgICBNb25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTE3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDMwICs2MywyMCBAQCBpbmxpbmUgYm9vbCBIZWFwOjpoYXNIZWFwQWNjZXNz
KCkgY29uc3QKICAgICByZXR1cm4gbV93b3JsZFN0YXRlLmxvYWQoKSAmIGhhc0FjY2Vzc0JpdDsK
IH0KIAotaW5saW5lIGJvb2wgSGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQoKSBjb25zdAoraW5saW5lIGJvb2wgSGVhcDo6d29ybGRJc1N0b3BwZWQoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOwor
ICAgIHJldHVybiBtX3dvcmxkSXNTdG9wcGVkOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgYW4gaW5zdGFuY2UgbWV0aG9kLCBzbyB0aGF0IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJz
aW9uKCkgcXVpY2tseS4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzk5ODgKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiBy
YXdDZWxsKQogewotICAgIEFTU0VSVChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpI
ZWxwZXIpOwogICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3
Q2VsbCk7CiAgICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVy
biBjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBi
bG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAot
ICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwg
Y2VsbCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShjb25zdCB2b2lkKiByYXdDZWxsKQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9u
KCkpCi0gICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwot
ICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJu
IGJsb2NrLmlzTWFya2VkQ29uY3VycmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9i
amVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlz
TWFya2VkKGJsb2NrLnZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBj
ZWxsKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkBAIC0xNzksMTkg
KzE2OSwxOSBAQCBpbmxpbmUgdm9pZCBIZWFwOjpyZWxlYXNlU29vbihSZXRhaW5QdHI8CiAKIGlu
bGluZSB2b2lkIEhlYXA6OmluY3JlbWVudERlZmVycmFsRGVwdGgoKQogewotICAgIEFTU0VSVCgh
bWF5QmVHQ1RocmVhZCgpIHx8IG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3Bw
ZWQpOworICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwog
ICAgIG1fZGVmZXJyYWxEZXB0aCsrOwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnRE
ZWZlcnJhbERlcHRoKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKIH0K
IAogaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQo
KQogewotICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1fY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQpOworICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1f
d29ybGRJc1N0b3BwZWQpOwogICAgIG1fZGVmZXJyYWxEZXB0aC0tOwogICAgIAogICAgIGlmIChV
TkxJS0VMWShtX2RpZERlZmVyR0NXb3JrKSkgewpAQCAtMjY5LDQgKzI1OSwxNCBAQCBpbmxpbmUg
dm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnkoKQogICAgICAgICBzdG9wSWZOZWNlc3NhcnlTbG93
KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6OmZvckVhY2hTbG90
VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgZnVuYygqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcik7CisgICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0b3IpOworICAgIGZvciAoYXV0byYg
c2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBmdW5jKCpzbG90
VmlzaXRvcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSGVhcFNuYXBzaG90QnVp
bGRlcjo6YnVpbGRTbmFwc2hvdCgKIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9k
ZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RC
dWlsZGVyKCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAgICAgaWYgKGhh
c0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiAyMjUx
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBi
b29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBDZWxsKikg
eyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChI
ZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KLSAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikg
eyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChI
ZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgYm9vbCBp
c0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxvY2F0ZWQoKTsgfQogICAg
IAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZENlbGw7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9ja0R1cmluZ01hcmtp
bmcuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9j
a0R1cmluZ01hcmtpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxNCArMzMsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIC8vIFVzZSB0aGlzIGxvY2sgc2NvcGUgbGlrZSBzbzoKIC8vIGF1dG8gbG9ja2VyID0g
bG9ja0R1cmluZ01hcmtpbmcoaGVhcCwgbG9jayk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlw
ZT4KLUxvY2tlcjxMb2NrVHlwZT4gbG9ja0R1cmluZ01hcmtpbmcoSGVhcCYgaGVhcCwgTG9ja1R5
cGUmIHBhc3NlZExvY2spCithdXRvIGxvY2tEdXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tU
eXBlJiBwYXNzZWRMb2NrKQogewotICAgIExvY2tUeXBlKiBsb2NrOwotICAgIGlmIChoZWFwLm11
dGF0b3JTaG91bGRCZUZlbmNlZCgpKQotICAgICAgICBsb2NrID0gJnBhc3NlZExvY2s7Ci0gICAg
ZWxzZQotICAgICAgICBsb2NrID0gbnVsbHB0cjsKLSAgICByZXR1cm4gTG9ja2VyPExvY2tUeXBl
Pihsb2NrKTsKKyAgICByZXR1cm4gaG9sZExvY2tJZihwYXNzZWRMb2NrLCBoZWFwLm11dGF0b3JT
aG91bGRCZUZlbmNlZCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIy
NTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1NSw2ICs0NTUsMzMgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6
OmFzc2VydE5vVW5zd2VwdCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK1JlZlB0
cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJrZWRBbGxvY2F0b3I6OnBh
cmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBT
aGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAgICAgICA6IG1fYWxsb2Nh
dG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBtX2luZGV4ID0g
bV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkuZmluZEJpdChtX2luZGV4LCB0cnVlKTsKKyAg
ICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxvY2tzLnNpemUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBtX2FsbG9j
YXRvci5tX2Jsb2Nrc1ttX2luZGV4KytdOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZh
dGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CisgICAgICAgIHNpemVf
dCBtX2luZGV4IHsgMCB9OworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICB9OworICAgIAorICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykpOworfQorCiB2b2lkIE1hcmtlZEFsbG9j
YXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChSYXdQ
b2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRyaWJ1dGVzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lv
biAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
LmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk5LDYgKzEwMCw4IEBAIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJik7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlCbG9j
ayhjb25zdCBGdW5jdG9yJik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxv
Y2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAgIAogICAg
IHZvaWQgYWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIHZvaWQgcmVtb3ZlQmxv
Y2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNiBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlz
TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9v
bCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qg
dm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAg
IGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgICAg
IApAQCAtMjgwLDcgKzI3OSw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgYXJlTWFya3NTdGFsZSgpOwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbik7Ci0gICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdp
dGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAKICAgICBEZXBl
bmRlbmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAgICAg
CkBAIC00OTgsMTggKzQ5NiwxMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NT
dGFsZShICiAgICAgcmV0dXJuIG1hcmtpbmdWZXJzaW9uICE9IG1fbWFya2luZ1ZlcnNpb247CiB9
CiAKLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gTWFya2VkQmxvY2s6OmFyZU1h
cmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKLXsKLSAg
ICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKLSAgICByZXR1cm4gZGVw
ZW5kZW5jeVdpdGgoZGVwZW5kZW5jeSh2ZXJzaW9uKSwgdmVyc2lvbiAhPSBtYXJraW5nVmVyc2lv
bik7Ci19Ci0KIGlubGluZSBEZXBlbmRlbmN5IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3Rh
bGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHJlc3Vs
dC52YWx1ZSkpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247Cisg
ICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBhYm91
dFRvTWFya1Nsb3cobWFya2luZ1ZlcnNpb24pOwotICAgIHJldHVybiByZXN1bHQuZGVwZW5kZW5j
eTsKKyAgICByZXR1cm4gZGVwZW5kZW5jeSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMTUgKzUxNiwx
MCBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBi
b29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29u
c3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikg
PyBmYWxzZSA6IGlzTWFya2VkUmF3KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6
aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZv
aWQqIHApCi17Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3ko
bWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24g
dmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0g
bWFya2luZ1ZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFy
a3MuZ2V0KGF0b21OdW1iZXIocCksIHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9t
YXJrcy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSh2ZXJzaW9uKSk7CiB9CiAKIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRl
cGVuZGVuY3kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJ
KHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw2ICsxNjMsMTEgQEAgcHVibGljOgogICAgIC8v
IFdoZW4gdGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUg
bWFyayBiaXRzIGhhdmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlzTWFya2luZygpIGNv
bnN0IHsgcmV0dXJuIG1faXNNYXJraW5nOyB9CiAgICAgCisgICAgV2Vha1NldCogYWN0aXZlV2Vh
a1NldHNCZWdpbigpIHsgcmV0dXJuIG1fYWN0aXZlV2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdl
YWtTZXQqIGFjdGl2ZVdlYWtTZXRzRW5kKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5lbmQo
KTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX25l
d0FjdGl2ZVdlYWtTZXRzLmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0
c0VuZCgpIHsgcmV0dXJuIG1fbmV3QWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICAKICAgICB2
b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJyYXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nl
cz4gc19zaXplQ2xhc3NGb3JTaXplU3RlcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsMzAgKzI3LDE1IEBACiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIK
IAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgK
LSAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rp
b248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVu
Y3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK01hcmtpbmdDb25z
dHJhaW50OjpNYXJraW5nQ29uc3RyYWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxs
ZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5h
bWUpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9u
KFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5
KQotewotfQotCi1NYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAot
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKLSAgICA6IG1fYWJi
cmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKLSAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUp
KQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAg
ICwgbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbikpCiAgICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKKyAgICAsIG1fcGFyYWxs
ZWxpc20ocGFyYWxsZWxpc20pCiB7CiB9CiAKQEAgLTYzLDE0ICs0OCw1MSBAQCB2b2lkIE1hcmtp
bmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0K
IAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwg
Ym9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFp
bnRQYXJhbGxlbGlzbSBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJy
ZXZpYXRlZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNp
dG9yLCBkaWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24o
dmlzaXRvciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRp
bmdUaW1lb3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2
aXNpdGluZ1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAgVmlzaXRDb3Vu
dGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcmVz
dWx0ID0gZXhlY3V0ZUltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0
Q291bnRlci52aXNpdENvdW50KCk7CisgICAgbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtID0gcmVz
dWx0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6
cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitk
b3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZp
c2l0b3IpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0
b3IpOworICAgIGRvUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICB7CisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCAr
PSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29u
c3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgZmluaXNoUGFyYWxsZWxX
b3JrSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52
aXNpdENvdW50KCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3Jr
SW1wbChTbG90VmlzaXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9
CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZp
c2l0b3ImKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI1MTc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
Q29uc3RyYWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHku
aCIKLSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2lu
Y2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
QEAgLTQzLDE4ICs0Miw5IEBAIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQo
Ci0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwg
Q1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNp
dG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcg
bmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1h
cmtpbmdDb25zdHJhaW50KCk7CiAgICAgCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4OyB9CiAgICAgCkBAIC02NCwzMyArNTQsMzkgQEAgcHVibGljOgogICAgIHZv
aWQgcmVzZXRTdGF0cygpOwogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20g
bGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEV4ZWN1dGVQYXJh
bGxlbGlzbTsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRp
ZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgaWYgKCFt
X3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbih2aXNpdG9yKTsKLSAgICB9Ci0g
ICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlz
aXRvcik7Ci0gICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICBkb3VibGUgd29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICB2b2lkIGRvUGFyYWxs
ZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZp
c2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29u
c3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisgICAgLy8gSWYgdGhpcyBpcyBTZXF1
ZW50aWFsLCBpdCBtZWFucyB0aGF0IHRoZSBjb25zdHJhaW50IGhhcyB0byBiZSBydW4gc2VxdWVu
dGlhbGx5LCB3aXRoIG5vIGNvbmN1cnJlbnQKKyAgICAvLyBjb25zdHJhaW50cy4KKyAgICBDb25z
dHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBjb25zdCB7IHJldHVybiBtX3BhcmFsbGVs
aXNtOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBl
eGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxl
bFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVs
V29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAgCiAg
ICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0cmluZyBtX2FiYnJldmlh
dGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlv
bjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVsaXNtOworICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20geyBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsIH07IC8vIEl0J3MgYSBoZXVyaXN0aWMsIHdlIGNhbiBiZSB3cm9uZy4gVGhpcyBn
dWVzcyBvbmx5IGFmZmVjdHMgdGhlIGZpcnN0IHJ1bi4KICAgICBzaXplX3QgbV9sYXN0VmlzaXRD
b3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2MCArMjYs
MTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNl
dC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQgewotcHVibGljOgotICAgIEV4
ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAgICAgICAgOiBtX3NldChzZXQpCi0gICAg
ICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nOwotICAgIH0KLSAgICAKLSAg
ICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZp
c2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLSAg
ICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KLSAgICBib29sIGRyYWluKEJpdFZl
Y3RvciYgdW5leGVjdXRlZCkKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5l
eGVjdXRlZCkgewotICAgICAgICAgICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4
ZWN1dGVkLmNsZWFyKGluZGV4KTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0KLQotICAgIHZvaWQgZXhlY3V0ZShz
aXplX3QgaW5kZXgpCi0gICAgewotICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUo
bV92aXNpdG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4
ZWN1dGVkLnNldChpbmRleCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBNYXJraW5nQ29u
c3RyYWludFNldCYgbV9zZXQ7Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBNb25v
dG9uaWNUaW1lIG1fdGltZW91dDsKLSAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKLSAgICBib29s
IG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OwotfTsKLQotTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KCkKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5n
Q29uc3RyYWludFNldChIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCiB7CiB9CiAKQEAg
LTEwNywxOCArNjQsMTkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlkU3RhcnRNYXJr
aQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlvbiwgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFk
ZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHks
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQoc3RkOjptYWtl
X3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFkZChzdGQ6
Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVk
TmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBwYXJh
bGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAor
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCiAgICAg
OjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
biwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5IHZvbGF0aWxpdHksCisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVs
aXNtKQogewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZN
b3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0
aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOwor
ICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3Zl
KGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9u
KSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgcGFyYWxs
ZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKApAQCAtMTMxLDkg
Kzg5LDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAgIG1fc2V0LmFwcGVu
ZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRp
bWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2Vu
Y2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZl
cmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAg
ZGF0YUxvZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDgsOSArMTA2LDkgQEAgYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChT
bG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0
b3IsIHRpbWVvdXQpOworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHNvbHZlcigqdGhpcyk7
CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRpb24rKzsKICAgICAKQEAg
LTE1OSwxNiArMTE3LDE0IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252
ZXIKIAogICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMgdGhhdCB3ZSBoYXZlIG5v
dCBleGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4KICAgICAvLyB3ZSBzaG91
bGQgZXhlY3V0ZSB0aG9zZSBub3cuCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1f
dW5leGVjdXRlZFJvb3RzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNvbHZlci5kcmFp
bihtX3VuZXhlY3V0ZWRSb290cyk7CiAgICAgCiAgICAgLy8gRmlyc3QgaXRlcmF0aW9uIGlzIGJl
Zm9yZSBhbnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQncyB1bmxpa2VseSB0byB0cmlnZ2VyIGFu
eSBjb25zdHJhaW50cyBvdGhlcgogICAgIC8vIHRoYW4gcm9vdHMuCiAgICAgaWYgKGl0ZXJhdGlv
biA9PSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFleGVjdXRpb25D
b250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgc29sdmVyLmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpOwogICAgIAogICAg
IC8vIFdlIHdhbnQgdG8ga2VlcCBwcmVmZXJyaW5nIHRoZSBvdXRncm93dGggY29uc3RyYWludHMg
LSB0aGUgb25lcyB0aGF0IG5lZWQgdG8gYmUgZml4cG9pbnRlZAogICAgIC8vIGV2ZW4gaW4gYSBz
dG9wLXRoZS13b3JsZCBHQyAtIHVudGlsIHRoZXkgc3RvcCBwcm9kdWNpbmcuIFRoZXkgaGF2ZSBh
IHRlbmRlbmN5IHRvIGdvIHRvdGFsbHkKQEAgLTIxNSwzMyArMTcxLDE2IEBAIGJvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICAgICAgICAgIHJldHVybiBhLT52b2xh
dGlsaXR5KCkgPiBiLT52b2xhdGlsaXR5KCk7CiAgICAgICAgIH0pOwogICAgIAotICAgIGZvciAo
TWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgOiBtX29yZGVyZWQpIHsKLSAgICAgICAgc2l6
ZV90IGkgPSBjb25zdHJhaW50LT5pbmRleCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWN1
dGlvbkNvbnRleHQuZGlkRXhlY3V0ZShpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBleGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoaSk7Ci0gICAgICAgIAotICAgICAgICAvLyBPbmNl
IHdlJ3JlIGluIGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBsZXQgc29t
ZSBtYXJraW5nIGhhcHBlbiBhbnl0aW1lCi0gICAgICAgIC8vIHdlIGZpbmQgd29yay4KLSAgICAg
ICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVu
dGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBpZiB0aGF0J3MKLSAgICAgICAgLy8gYmV0dGVyIG9yIHdv
cnNlLiBNYXliZSBldmVuIGJldHRlciBpcyB0aGlzOgotICAgICAgICAvLyAtIElmIHRoZSB2aXNp
dG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5pbmcuCi0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3Ig
aXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdzLCByZXR1cm4uCi0gICAgICAgIC8vIC0gRWxzZSBydW4g
dW50aWwgdGltZW91dC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjgzMgotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNv
bWV0aGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBzb2x2ZXIu
Y29udmVyZ2UobV9vcmRlcmVkKTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiB3ZSd2ZSBjb252ZXJnZWQuIFRoYXQgaGFwcGVucyBpZiB3ZSBkaWQgbm90IHZp
c2l0IGFueXRoaW5nLgorICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9
CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOwogICAgIGZvciAo
YXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZp
c2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAg
ICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CisKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0
IHsKIHB1YmxpYzoKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIE1hcmtpbmdDb25z
dHJhaW50U2V0KEhlYXAmKTsKICAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKICAgICAKICAg
ICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwpAQCAtNDEsMTUgKzQzLDE3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENT
dHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAg
ICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCisgICAgICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKICAgICAgICAgOjpGdW5jdGlvbjxkb3Vi
bGUoU2xvdFZpc2l0b3ImKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIHZvaWQgYWRkKHN0
ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIApAQCAtNjAsMjEgKzY0LDE5
IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBh
bGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwog
ICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFp
bmVkIGZyb20gdGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNs
b3RWaXNpdG9yJiwKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGlt
ZTo6aW5maW5pdHkoKSk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3Im
KTsKICAgICAKICAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkg
c2hlbmFuaWdhbnMuCiAgICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CiAgICAgCiBw
cml2YXRlOgotICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEV4
ZWN1dGlvbkNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
OwogICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYsIE1v
bm90b25pY1RpbWUgdGltZW91dCk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNs
b3RWaXNpdG9yJik7CiAgICAgCi0gICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25p
Y1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYg
ZGlkVmlzaXRTb21ldGhpbmcpOworICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRWZWN0
b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRo
aW5nKTsKICAgICAKKyAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRl
ZFJvb3RzOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZl
ci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyAKKworTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1h
cmtpbmdDb25zdHJhaW50U2V0JiBzZXQpCisgICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKKyAgICAs
IG1fbWFpblZpc2l0b3IobV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX3Nl
dChzZXQpCit7CisgICAgbV9oZWFwLmZvckVhY2hTbG90VmlzaXRvcigKKyAgICAgICAgWyZdIChT
bG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgbV92aXNpdENvdW50ZXJzLmFwcGVu
ZChWaXNpdENvdW50ZXIodmlzaXRvcikpOworICAgICAgICB9KTsKK30KKworTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6On5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpCit7Cit9CisKK2Jvb2wgTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKK3sKKyAgICBm
b3IgKGNvbnN0IFZpc2l0Q291bnRlciYgdmlzaXRDb3VudGVyIDogbV92aXNpdENvdW50ZXJzKSB7
CisgICAgICAgIGlmICh2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBNYXJraW5nQ29u
c3RyYWludFNvbHZlcjo6ZXhlY3V0ZShTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNj
b3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3sKKyAgICBt
X2hlYXAucnVuRnVuY3Rpb25JblBhcmFsbGVsKAorICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSB7IHJ1bkV4ZWN1dGlvblRocmVhZCh2aXNpdG9yLCBwcmVmZXJlbmNlLCBwaWNrTmV4
dCk7IH0pOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX2RpZEV4
ZWN1dGVJblBhcmFsbGVsKQorICAgICAgICBtX3NldC5tX3NldFtpbmRleFRvUnVuXS0+ZmluaXNo
UGFyYWxsZWxXb3JrKG1fbWFpblZpc2l0b3IpOworICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwu
Y2xlYXIoKTsKKworICAgIGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6IG1fdG9FeGVjdXRlU2Vx
dWVudGlhbGx5KQorICAgICAgICBleGVjdXRlKCptX3NldC5tX3NldFtpbmRleFRvUnVuXSk7Cisg
ICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuY2xlYXIoKTsKKyAgICAgICAgCisgICAgUkVMRUFT
RV9BU1NFUlQobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIW1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5iaXRDb3VudCgpKTsKK30KKwordm9pZCBN
YXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQorewor
ICAgIGF1dG8gaXRlciA9IHVuZXhlY3V0ZWQuYmVnaW4oKTsKKyAgICBhdXRvIGVuZCA9IHVuZXhl
Y3V0ZWQuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm47CisgICAg
YXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPigK
KyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAg
IGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICAgICAgcmV0dXJuICppdGVyKys7CisgICAgICAgIH0pOworICAgIGV4ZWN1dGUoTmV4
dENvbnN0cmFpbnRGaXJzdCwgcGlja05leHQpOworICAgIHVuZXhlY3V0ZWQuY2xlYXJBbGwoKTsK
K30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVyZ2UoY29uc3QgVmVjdG9y
PE1hcmtpbmdDb25zdHJhaW50Kj4mIG9yZGVyKQoreworICAgIGlmIChkaWRWaXNpdFNvbWV0aGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGlmIChvcmRlci5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgc2l6ZV90IGluZGV4ID0gMDsKKworICAg
IC8vIFdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgY29uc3RyYWludCBzZXF1ZW50aWFsbHkg
aWYgd2UgdGhpbmsgaXQgd2lsbCBxdWlja2x5IGdpdmUgdXMgYQorICAgIC8vIHJlc3VsdC4gSWYg
d2UgcmFuIGl0IGluIHBhcmFsbGVsIHRvIG90aGVyIGNvbnN0cmFpbnRzLCB0aGVuIHdlIG1pZ2h0
IGVuZCB1cCBoYXZpbmcgdG8gd2FpdCBmb3IKKyAgICAvLyB0aG9zZSBvdGhlciBjb25zdHJhaW50
cyB0byBmaW5pc2gsIHdoaWNoIHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSBzaW5jZSBkdXJpbmcg
Y29udmVyZ2VuY2UgaXQncworICAgIC8vIGVtcGlyaWNhbGx5IG1vc3Qgb3B0aW1hbCB0byByZXR1
cm4gdG8gZHJhaW5pbmcgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsuIE1v
c3QKKyAgICAvLyBjb25zdHJhaW50cyBkb24ndCBnZW5lcmF0ZSBhbnkgd29yayBtb3N0IG9mIHRo
ZSB0aW1lLCBhbmQgd2hlbiB0aGV5IGRvIGdlbmVyYXRlIHdvcmssIHRoZXkgdGVuZAorICAgIC8v
IHRvIGdlbmVyYXRlIGVub3VnaCBvZiBpdCB0byBmZWVkIGEgZGVjZW50IGRyYWluaW5nIGN5Y2xl
LiBUaGVyZWZvcmUsIHBhdXNlIHRpbWVzIGFyZSBsb3dlc3QgaWYKKyAgICAvLyB3ZSBnZXQgdGhl
IGhlY2sgb3V0IG9mIGhlcmUgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsu
IEkgdGhpbmsgdGhhdCBwYXJ0IG9mIHdoYXQKKyAgICAvLyBtYWtlcyB0aGlzIG9wdGltYWwgaXMg
dGhhdCB3ZSBhbHNvIG5ldmVyIGFib3J0IHJ1bm5pbmcgYSBjb25zdHJhaW50IGVhcmx5LCBzbyB3
aGVuIHdlIGRvIHJ1bgorICAgIC8vIG9uZSwgaXQgaGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdlbmVy
YXRlIGFzIG11Y2ggd29yayBhcyBpdCBwb3NzaWJseSBjYW4uCisgICAgLy8KKyAgICAvLyBTaW1p
bGFyIHJlYXNvbmluZyBhcHBsaWVzIHRvIGNvbnN0cmFpbnRzIHRoYXQgdGVuZCB0byByZXR1cm4g
Q29zbnRyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbAorICAgIC8vIGZyb20gZXhlY3V0ZS4gVGhv
c2UgY29uc3RyYWludHMgdHlwaWNhbGx5IGhhdmUgYSB2ZXJ5IGZhc3QtcnVubmluZyBleGVjdXRl
IGZ1bmN0aW9uLCB3aGljaCB0aGVuCisgICAgLy8gb2ZmbG9hZHMgYWxtb3N0IGFsbCBvZiB0aGUg
d29yayB0byBhIHBhcmFsbGVsIHdvcmtlci4gSW4gdGhhdCBjYXNlLCBpdCBtYWtlcyBzZW5zZSB0
byBydW4gdGhlCisgICAgLy8gZXhlY3V0ZSBmdW5jdGlvbiBzZXF1ZW50aWFsbHkuCisgICAgaWYg
KG9yZGVyW2luZGV4XS0+d29ya0VzdGltYXRlKG1fbWFpblZpc2l0b3IpCisgICAgICAgIHx8IG9y
ZGVyW2luZGV4XS0+bGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpID09IENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgZXhlY3V0ZSgqb3JkZXJbaW5kZXgrK10pOworICAg
ICAgICAKKyAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkKKyAgICAg
ICAgICAgICYmIChvcmRlci5pc0VtcHR5KCkgfHwgZGlkVmlzaXRTb21ldGhpbmcoKSkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBhdXRvIHBpY2tOZXh0ID0gc2Nv
cGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+KAorICAgICAgICBbJl0gKCkgLT4g
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAgaWYgKGRpZFZpc2l0U29tZXRo
aW5nKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBvcmRlci5zaXplKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IHJldHVybiBvcmRlcltpbmRleCsrXS0+aW5kZXgoKTsKKyAgICAgICAgfSk7CisgICAgCisgICAg
ZXhlY3V0ZShQYXJhbGxlbFdvcmtGaXJzdCwgcGlja05leHQpOworfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOjpleGVjdXRlKE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50KQor
eworICAgIGlmIChtX2V4ZWN1dGVkLmdldChjb25zdHJhaW50LmluZGV4KCkpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtID0gY29u
c3RyYWludC5leGVjdXRlKG1fbWFpblZpc2l0b3IpOworICAgIGRpZEV4ZWN1dGUocGFyYWxsZWxp
c20sIGNvbnN0cmFpbnQuaW5kZXgoKSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYgdmlzaXRvciwgU2NoZWR1bGVyUHJl
ZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4o
KT4gcGlja05leHQpCit7CisgICAgZm9yICg7OykgeworICAgICAgICBib29sIGRvUGFyYWxsZWxX
b3JrTW9kZTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhUb1J1bjsKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgYXV0byB0cnlQ
YXJhbGxlbFdvcmsgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXhUb1J1biA9IG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5maXJzdCgpOwor
ICAgICAgICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF1dG8gdHJ5TmV4dENvbnN0cmFpbnQg
PSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBpY2tSZXN1bHQgPSBw
aWNrTmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaWNrUmVzdWx0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhlY3V0
ZWQuZ2V0KCpwaWNrUmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbKnBp
Y2tSZXN1bHRdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxs
ZWxpc20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5hcHBlbmQoKnBpY2tS
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9ICpw
aWNrUmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKHByZWZlcmVuY2UgPT0gUGFyYWxsZWxXb3JrRmlyc3Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcmFsbGVsV29yaygpIHx8IHRyeU5leHRD
b25zdHJhaW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJ5TmV4dENvbnN0cmFpbnQo
KSB8fCB0cnlQYXJhbGxlbFdvcmsoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoIW1fbnVtQWN0aXZlVGhyZWFkcykKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBBbnkgd2FpdGluZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1c3QgcnVubmluZyB0aGUg
U2xvdFZpc2l0b3IuCisgICAgICAgICAgICAgICAgLy8gSSB3b25kZXIgaWYgdGhhdCB3b3VsZCBi
ZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9u
dW1BY3RpdmVUaHJlYWRzKys7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1hcmtpbmdD
b25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkKKyAgICAgICAg
ICAgIGNvbnN0cmFpbnQuZG9QYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKHZpc2l0b3IpOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoZG9QYXJhbGxlbFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRl
SW5QYXJhbGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9k
aWRFeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWwudGFrZUZpcnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCB2YWx1
ZSkgeyByZXR1cm4gdmFsdWUgPT0gaW5kZXhUb1J1bjsgfSk7CisgICAgICAgICAgICAgICAgICAg
IG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fZXhlY3V0ZWQu
c2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdG9F
eGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAg
IG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX251bUFjdGl2ZVRocmVhZHMtLTsKKyAgICAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFs
bCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
OjpkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSwgdW5zaWduZWQg
aW5kZXgpCit7CisgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgIGlmIChwYXJhbGxlbGlz
bSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIG1fdG9FeGVj
dXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXgpOworICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWxTZXQuc2V0KGluZGV4KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNvbHZlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgi
CisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4K
KyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEhlYXA7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKK2NsYXNz
IE1hcmtpbmdDb25zdHJhaW50U2V0OworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAgIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0Jik7CisgICAgfk1hcmtpbmdDb25zdHJh
aW50U29sdmVyKCk7CisgICAgCisgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZygpIGNvbnN0Owor
ICAgIAorICAgIGVudW0gU2NoZWR1bGVyUHJlZmVyZW5jZSB7CisgICAgICAgIFBhcmFsbGVsV29y
a0ZpcnN0LAorICAgICAgICBOZXh0Q29uc3RyYWludEZpcnN0CisgICAgfTsKKworICAgIHZvaWQg
ZXhlY3V0ZShTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4oKT4gcGlja05leHQpOworICAgIAorICAgIHZvaWQgZHJhaW4oQml0VmVjdG9yJiB1
bmV4ZWN1dGVkKTsKKyAgICAKKyAgICB2b2lkIGNvbnZlcmdlKGNvbnN0IFZlY3RvcjxNYXJraW5n
Q29uc3RyYWludCo+JiBvcmRlcik7CisgICAgCisgICAgdm9pZCBleGVjdXRlKE1hcmtpbmdDb25z
dHJhaW50Jik7CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgcnVuRXhlY3V0aW9uVGhyZWFkKFNs
b3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICAKKyAgICB2b2lkIGRpZEV4ZWN1dGUoQ29u
c3RyYWludFBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRleCk7CisKKyAgICBIZWFwJiBtX2hlYXA7
CisgICAgU2xvdFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7CisgICAgTWFya2luZ0NvbnN0cmFpbnRT
ZXQmIG1fc2V0OworICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOworICAgIERlcXVlPHVuc2lnbmVk
LCAzMj4gbV90b0V4ZWN1dGVJblBhcmFsbGVsOworICAgIEJpdFZlY3RvciBtX3RvRXhlY3V0ZUlu
UGFyYWxsZWxTZXQ7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV9kaWRFeGVjdXRlSW5QYXJh
bGxlbDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseTsK
KyAgICBMb2NrIG1fbG9jazsKKyAgICBDb25kaXRpb24gbV9jb25kaXRpb247CisgICAgdW5zaWdu
ZWQgbV9udW1BY3RpdmVUaHJlYWRzIHsgMCB9OworICAgIFZlY3RvcjxWaXNpdENvdW50ZXIsIDE2
PiBtX3Zpc2l0Q291bnRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNpb24gMjI1MTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShub25leGlz
dGVudCkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgT3Bh
cXVlUm9vdFNldCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BhcXVlUm9vdFNldCk7Ci1w
dWJsaWM6Ci0gICAgT3BhcXVlUm9vdFNldCgpCi0gICAgICAgIDogbV9sYXN0UXVlcmllZFJvb3Qo
bnVsbHB0cikKLSAgICAgICAgLCBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290KGZhbHNlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRhaW5zKHZvaWQqIHJvb3QpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAocm9vdCAhPSBtX2xhc3RRdWVyaWVkUm9vdCkgewotICAgICAgICAgICAgbV9s
YXN0UXVlcmllZFJvb3QgPSByb290OwotICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVk
Um9vdCA9IG1fcm9vdHMuY29udGFpbnMocm9vdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmlzRW1wdHkoKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fcm9vdHMuY2xlYXIoKTsKLSAgICAg
ICAgbV9sYXN0UXVlcmllZFJvb3QgPSBudWxscHRyOwotICAgICAgICBtX2NvbnRhaW5zTGFzdFF1
ZXJpZWRSb290ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBhZGQodm9pZCogcm9vdCkKLSAg
ICB7Ci0gICAgICAgIGlmIChyb290ID09IG1fbGFzdFF1ZXJpZWRSb290KQotICAgICAgICAgICAg
bV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBtX3Jvb3Rz
LmFkZChyb290KS5pc05ld0VudHJ5OwotICAgIH0KLQotICAgIGludCBzaXplKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLnNpemUoKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0
PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fcm9vdHMuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQqPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmVuZCgp
OwotICAgIH0KLQotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8dm9pZCo+IG1fcm9vdHM7Ci0gICAg
bXV0YWJsZSB2b2lkKiBtX2xhc3RRdWVyaWVkUm9vdDsKLSAgICBtdXRhYmxlIGJvb2wgbV9jb250
YWluc0xhc3RRdWVyaWVkUm9vdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3Vy
Y2VBZGFwdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5hbWUgSW5uZXJUeXBl
LCB0eXBlbmFtZSBVbndyYXBGdW5jPgorY2xhc3MgUGFyYWxsZWxTb3VyY2VBZGFwdGVyIDogcHVi
bGljIFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+IHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbFNvdXJj
ZUFkYXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29u
c3QgVW53cmFwRnVuYyYgdW53cmFwRnVuYykKKyAgICAgICAgOiBtX291dGVyU291cmNlKG91dGVy
U291cmNlKQorICAgICAgICAsIG1fdW53cmFwRnVuYyh1bndyYXBGdW5jKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgSW5uZXJUeXBlIHJ1bigpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlm
IChtX2lubmVyU291cmNlKSB7CisgICAgICAgICAgICAgICAgaWYgKElubmVyVHlwZSByZXN1bHQg
PSBtX2lubmVyU291cmNlLT5ydW4oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICBtX2lubmVyU291cmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9IG1fdW53cmFwRnVu
YyhtX291dGVyU291cmNlLT5ydW4oKSk7CisgICAgICAgIH0gd2hpbGUgKG1faW5uZXJTb3VyY2Up
OworICAgICAgICByZXR1cm4gSW5uZXJUeXBlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJl
ZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gbV9vdXRlclNvdXJjZTsKKyAgICBSZWZQdHI8
U2hhcmVkVGFzazxJbm5lclR5cGUoKT4+IG1faW5uZXJTb3VyY2U7CisgICAgVW53cmFwRnVuYyBt
X3Vud3JhcEZ1bmM7CisgICAgTG9jayBtX2xvY2s7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
dXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4KK1JlZjxQ
YXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBlLCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+PiBj
cmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+
PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53cmFwRnVuYykKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBlLCBJbm5lclR5
cGUsIFVud3JhcEZ1bmM+KG91dGVyU291cmNlLCB1bndyYXBGdW5jKSk7Cit9CisgICAgCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAor
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCisg
ICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUo
bmFtZSksIHZvbGF0aWxpdHksIHBhcmFsbGVsaXNtKQorICAgICwgbV9leGVjdXRlRnVuY3Rpb24o
V1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQoreworfQorCitTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0
ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29y
a0VzdGltYXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwg
Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQorICAgIDogTWFya2luZ0NvbnN0cmFp
bnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBw
YXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0
aW9uKSkKKyAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNrV29y
a0VzdGltYXRlRnVuY3Rpb24pKQoreworfQorCitTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKworZG91YmxlIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBp
ZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbih2aXNpdG9yKTsKK30KKworQ29uc3Ry
YWludFBhcmFsbGVsaXNtIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAg
ICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
TWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtp
bmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcg
bmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBD
b25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYp
PiwKKyAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICBkb3VibGUgcXVpY2tXb3Jr
RXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToK
KyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVy
cmlkZTsKKworICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5j
dGlvbjsKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0Vz
dGltYXRlRnVuY3Rpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjI1MTc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OCw5ICs5OCw3IEBAIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogCiB2b2lk
IFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogewotICAgIGlmIChoZWFwKCktPmNvbGxl
Y3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkg
bm93LgotICAgIGVsc2UKKyAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xs
ZWN0aW9uU2NvcGU6OkVkZW4pCiAgICAgICAgIHJlc2V0KCk7CiAKICAgICBpZiAoSGVhcFByb2Zp
bGVyKiBoZWFwUHJvZmlsZXIgPSB2bSgpLmhlYXBQcm9maWxlcigpKQpAQCAtMTExLDcgKzEwOSw2
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0
b3I6OnJlc2V0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5zaXplKCkp
OwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1f
aGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7CkBAIC0yNzcsNyArMjc0LDcgQEAgdm9pZCBT
bG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZQogdGVtcGxhdGU8dHlwZW5hbWUgQ29u
dGFpbmVyVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJr
U3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6
aXNNYXJrZWQoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAgICAgCiAg
ICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKQEAgLTM0Niw3ICszNDMsNyBAQCBwcml2YXRlOgog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlND
ZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxs
KSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAKICAgICBTZXRDdXJy
ZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwogICAgIApAQCAtNDM1
LDcgKzQzMiw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogCiB2
b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKGNvbnN0IEFic3RyYWN0TG9j
a2VyJikKIHsKLSAgICBtX211dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFwLmNvbGxlY3RvckJlbGll
dmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0
b3IpOworICAgIG1fbXV0YXRvcklzU3RvcHBlZCA9IChtX2hlYXAud29ybGRJc1N0b3BwZWQoKSAm
IG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6
OnVwZGF0ZU11dGF0b3JJc1N0b3BwZWQoKQpAQCAtNDUyLDcgKzQ0OSw3IEBAIGJvb2wgU2xvdFZp
c2l0b3I6Omhhc0Fja25vd2xlZGdlZFRoYXRUaGUKIAogYm9vbCBTbG90VmlzaXRvcjo6bXV0YXRv
cklzU3RvcHBlZElzVXBUb0RhdGUoKSBjb25zdAogewotICAgIHJldHVybiBtX211dGF0b3JJc1N0
b3BwZWQgPT0gKG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgp
ICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICByZXR1cm4gbV9tdXRhdG9y
SXNTdG9wcGVkID09IChtX2hlYXAud29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JT
dG9wcGVkTXV0YXRvcik7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om9wdGltaXplRm9yU3RvcHBl
ZE11dGF0b3IoKQpAQCAtNDkwLDggKzQ4Nyw2IEBAIE5FVkVSX0lOTElORSB2b2lkIFNsb3RWaXNp
dG9yOjpkcmFpbihNb24KICAgICAgICAgbV9yaWdodFRvUnVuLnNhZmVwb2ludCgpOwogICAgICAg
ICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAgICAgfQotICAgIAotICAgIG1lcmdlSWZOZWNlc3Nh
cnkoKTsKIH0KIAogc2l6ZV90IFNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmlu
ZyhzaXplX3QgYnl0ZXNSZXF1ZXN0ZWQpCkBAIC01NTAsNyArNTQ1LDYgQEAgc2l6ZV90IFNsb3RW
aXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcgogICAgIH0KIAogICAgIGRvbmF0ZUFsbCgpOwot
ICAgIG1lcmdlSWZOZWNlc3NhcnkoKTsKIAogICAgIHJldHVybiBieXRlc1Zpc2l0ZWQoKTsKIH0K
QEAgLTU2MSwxNyArNTU1LDE2IEBAIGJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRp
b24oKQogICAgIHJldHVybiBkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcik7CiB9CiAKLWJvb2wg
U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImKQor
Ym9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyKQogewotICAgIHJldHVybiBpc0VtcHR5KCkKLSAgICAgICAgJiYgIW1faGVhcC5t
X251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICYmIG1faGVhcC5tX3NoYXJl
ZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCi0gICAgICAgICYmIG1faGVhcC5tX3NoYXJl
ZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1faGVhcC5tX251bWJl
ck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCisgICAgICAgICYmICFoYXNXb3JrKGxvY2tlcik7CiB9
CiAKIGJvb2wgU2xvdFZpc2l0b3I6Omhhc1dvcmsoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewot
ICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkK
KyAgICByZXR1cm4gIWlzRW1wdHkoKQorICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkQ29sbGVj
dG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0
b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKIH0KIApAQCAtNTgzLDEyICs1NzYsMTQgQEAgTkVWRVJf
SU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlcwogCiAgICAgYm9vbCBpc0FjdGl2ZSA9
IGZhbHNlOwogICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+IGJvbnVzVGFzazsKKyAgICAgICAgCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAg
ICAgICAgICBpZiAoaXNBY3RpdmUpCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZB
Y3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2Fp
dGluZ1BhcmFsbGVsTWFya2VycysrOwotCisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChz
aGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4pIHsKICAgICAgICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKQEAg
LTYyOSwyOCArNjI0LDU3IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5S
ZXMKIAogICAgICAgICAgICAgICAgIGF1dG8gaXNSZWFkeSA9IFsmXSAoKSAtPiBib29sIHsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzawogICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgbV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAg
ICAgICB9OwogCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlh
YmxlLndhaXRVbnRpbChtX2hlYXAubV9tYXJraW5nTXV0ZXgsIHRpbWVvdXQsIGlzUmVhZHkpOwog
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaGFzV29yayhsb2NrZXIpCisg
ICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2spCisgICAgICAg
ICAgICAgICAgICAgIGJvbnVzVGFzayA9IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2s7CisgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX3BhcmFsbGVsTWFya2Vy
c1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3Vs
dDo6RG9uZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygK
LSAgICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9u
U3RhdHVzIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAot
ICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVs
TWFya2Vycyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIWJvbnVzVGFzayAmJiBpc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3JFYWNoTWFy
a1N0YWNrKAorICAgICAgICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykg
LT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFs
U29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5n
R2xvYmFsU3RhY2soc3RhY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5t
X251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4odGlt
ZW91dCk7CisgICAgICAgIGlmIChib251c1Rhc2spIHsKKyAgICAgICAgICAgIGJvbnVzVGFzay0+
cnVuKCp0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IElkZWFsbHks
IHdlIHdvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMuIEhvd2V2ZXIsIHRoZSBwYXJhbGxlbCBtYXJr
aW5nIGFsZ29yaXRobSB3aWxsCisgICAgICAgICAgICAvLyBnZXQgY29uZnVzZWQgaWYgd2UgaW5p
dGlhdGUgaXQgd2l0aCB0aGUgaGVscGVyIHZpc2l0b3JzIGhhdmluZyBhbnl0aGluZyBpbiB0aGVp
ciBzdGFja3MuCisgICAgICAgICAgICAvLyBBbHNvLCB0aGlzIHByb3RlY3RzIGJ1Z3MgdGhhdCBp
bnZvbHZlIHJhY2VzIGJldHdlZW4gdmlzaXRDaGlsZHJlbiBhbmQgb25lIG9mIHRoZQorICAgICAg
ICAgICAgLy8gY29uc3RyYWludHMuCisgICAgICAgICAgICAvL2RvbmF0ZUFsbCgpOworCisgICAg
ICAgICAgICAvLyBUaGUgbWFpbiB0aHJlYWQgY291bGQgc3RpbGwgYmUgcnVubmluZywgYW5kIG1h
eSBydW4gZm9yIGEgd2hpbGUuIFVubGVzcyB3ZSBjbGVhciB0aGUgdGFzaworICAgICAgICAgICAg
Ly8gb3Vyc2VsdmVzLCB3ZSB3aWxsIGtlZXAgbG9vcGluZyBhcm91bmQgdHJ5aW5nIHRvIHJ1biB0
aGUgdGFzay4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgICAgICAgICAgICAgaWYgKG1faGVh
cC5tX2JvbnVzVmlzaXRvclRhc2sgPT0gYm9udXNUYXNrKQorICAgICAgICAgICAgICAgICAgICBt
X2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBib251
c1Rhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc0VtcHR5KCkpOworICAgICAgICAgICAgZHJh
aW4odGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlzQWN0aXZlID0gdHJ1
ZTsKICAgICB9CiB9CkBAIC02NzAsMTUgKzY5NCwxOSBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJh
aW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkg
PT0gMQogICAgICAgICB8fCAobV9oZWFwLm1fd29ybGRTdGF0ZS5sb2FkKCkgJiBIZWFwOjptdXRh
dG9yV2FpdGluZ0JpdCkKICAgICAgICAgfHwgIW1faGVhcC5oYXNIZWFwQWNjZXNzKCkKLSAgICAg
ICAgfHwgbV9oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsK
KyAgICAgICAgfHwgbV9oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgLy8gVGhpcyBp
cyBhbiBvcHRpbWl6YXRpb24gb3ZlciBkcmFpbkluUGFyYWxsZWwoKSB3aGVuIHdlIGhhdmUgYSBj
b25jdXJyZW50IG11dGF0b3IgYnV0CiAgICAgICAgIC8vIG90aGVyd2lzZSBpdCBpcyBub3QgcHJv
Zml0YWJsZS4KICAgICAgICAgcmV0dXJuIGRyYWluSW5QYXJhbGxlbCh0aW1lb3V0KTsKICAgICB9
CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwotICAgIGRv
bmF0ZUFsbChsb2NrZXIpOwotICAgIAorICAgIGRvbmF0ZUFsbChob2xkTG9jayhtX2hlYXAubV9t
YXJraW5nTXV0ZXgpKTsKKyAgICByZXR1cm4gd2FpdEZvclRlcm1pbmF0aW9uKHRpbWVvdXQpOwor
fQorCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OndhaXRGb3JU
ZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgIGZvciAoOzspIHsKICAgICAgICAg
aWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5S
ZXN1bHQ6OlRpbWVkT3V0OwpAQCAtNzExLDYxICs3MzksNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpk
b25hdGVBbGwoY29uc3QgQWJzdHJhCiAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlh
YmxlLm5vdGlmeUFsbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZv
aWQqIHJvb3QpCi17Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
aWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBp
ZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKSB7Ci0gICAgICAgIC8vIFB1dCBk
aXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4KLSAgICAgICAgbV9oZWFwLm1fb3BhcXVl
Um9vdHMuYWRkKHJvb3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFB1dCBpbnRv
IHRoZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2Ug
aW4KLSAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0
IGdyb3cgdG9vIGxhcmdlLgotICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAg
ICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLX0KLQotYm9vbCBTbG90VmlzaXRvcjo6Y29udGFp
bnNPcGFxdWVSb290KHZvaWQqIHJvb3QpIGNvbnN0Ci17Ci0gICAgaWYgKCFyb290KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUpOwot
ICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKLX0KLQotVHJp
U3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqIHJvb3Qp
IGNvbnN0Ci17Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsK
LSAgICAKLSAgICBpZiAobV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0
dXJuIFRydWVUcmlTdGF0ZTsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAu
bV9vcGFxdWVSb290c011dGV4KTsKLSAgICBpZiAobV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFp
bnMocm9vdCkpCi0gICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgcmV0dXJuIE1peGVk
VHJpU3RhdGU7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlSWZOZWNlc3NhcnkoKQotewot
ICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1l
cmdlT3BhcXVlUm9vdHMoKTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290
c0lmUHJvZml0YWJsZSgpCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29wYXF1
ZVJvb3RzLnNpemUoKSkgPCBPcHRpb25zOjpvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKLX0KLSAgICAKIHZvaWQgU2xv
dFZpc2l0b3I6OmRvbmF0ZSgpCiB7CiAgICAgaWYgKCFtX2lzSW5QYXJhbGxlbE1vZGUpIHsKQEAg
LTc4NSwxNiArNzU4LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oTW9ub3Rv
bgogICAgIGRyYWluKHRpbWVvdXQpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1
ZVJvb3RzKCkKLXsKLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
aGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgICAgICBmb3IgKGF1dG8qIHJvb3QgOiBtX29w
YXF1ZVJvb3RzKQotICAgICAgICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwot
ICAgIH0KLSAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgU2xvdFZpc2l0b3I6
OmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3Rlciogd2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlcikKIHsKICAgICBtX2hlYXAubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVy
cy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJdGVyYXRp
b25TdGF0dXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJPcGFxdWVSb290
U2V0LmgiCiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8d3RmL01vbm90b25p
Y1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC05NSwxMCArOTQsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKICAg
ICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopOwogCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKKyAgICBib29sIGFkZE9wYXF1ZVJv
b3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KICAgICAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7
Ci0gICAgVHJpU3RhdGUgY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCopIGNvbnN0Owor
ICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKIAogICAgIGJvb2wgaXNF
bXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0
YWNrLmlzRW1wdHkoKTsgfQogCkBAIC0xMjEsNiArMTE5LDggQEAgcHVibGljOgogCiAgICAgU2hh
cmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1v
bm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5Q
YXJhbGxlbFBhc3NpdmVseShNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKKyAgICAKKyAgICBTaGFyZWREcmFpblJlc3VsdCB3YWl0Rm9yVGVybWluYXRp
b24oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAK
ICAgICAvLyBBdHRlbXB0cyB0byBwZXJmb3JtIGFuIGluY3JlbWVudCBvZiBkcmFpbmluZyB0aGF0
IGludm9sdmVzIG9ubHkgd2Fsa2luZyBgYnl0ZXNgIHdvcnRoIG9mIGRhdGEuIFRoaXMKICAgICAv
LyBpcyBsaWtlbHkgdG8gYWNjaWRlbnRhbGx5IHdhbGsgbW9yZSBvciBsZXNzIHRoYW4gdGhhdC4g
SXQgd2lsbCB1c3VhbGx5IG1hcmsgbW9yZSB0aGFuIGJ5dGVzLiBJdCBtYXkKQEAgLTEyOCw4ICsx
MjgsNiBAQCBwdWJsaWM6CiAgICAgLy8gcmFyZSBjYXNlcyBoYXBwZW4gdGVtcG9yYXJpbHkgZXZl
biBpZiB3ZSdyZSBub3QgcmVhY2hpbmcgdGVybWluYXRpb24pLgogICAgIHNpemVfdCBwZXJmb3Jt
SW5jcmVtZW50T2ZEcmFpbmluZyhzaXplX3QgYnl0ZXMpOwogICAgIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgbWVyZ2VJZk5lY2Vzc2FyeSgpOwotCiAgICAgLy8gVGhpcyBpbmZvcm1zIHRo
ZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxp
dmUuIElmIHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBm
cmVlZCBhdCBlbmQgb2YgR0MuCiAgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJh
c2UpOwpAQCAtMTk0LDEwICsxOTIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgbm90ZUxp
dmVBdXhpbGlhcnlDZWxsKEhlYXBDZWxsKik7CiAgICAgCi0gICAgdm9pZCBtZXJnZU9wYXF1ZVJv
b3RzKCk7Ci0KLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLQogICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIGRvbmF0
ZUtub3duUGFyYWxsZWwoKTsKQEAgLTIxNSw3ICsyMDksNiBAQCBwcml2YXRlOgogCiAgICAgTWFy
a1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKICAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0
b3JTdGFjazsKLSAgICBPcGFxdWVSb290U2V0IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25p
bmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4K
ICAgICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMg
YSBkZWJ1Z2dpbmcgbW9kZS4KICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAko
cmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsMjMgQEAgQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYQogICAgICAgICBhcHBlbmRIaWRkZW4oYmFy
cmllcnNbaV0pOwogfQogCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2
b2lkKiBwdHIpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmFkZChwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbV92aXNpdENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29s
IFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcHRyKSBjb25zdAoreworICAg
IHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFpbnMocHRyKTsKK30KKwogaW5saW5l
IHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkK
IHsKICAgICBpZiAobV9pc0ZpcnN0VmlzaXQpIHsKQEAgLTE1OSwxMiArMTc2LDEyIEBAIGlubGlu
ZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0CiAKIGlubGluZSBWTSYgU2xvdFZpc2l0
b3I6OnZtKCkKIHsKLSAgICByZXR1cm4gKm1faGVhcC5tX3ZtOworICAgIHJldHVybiAqbV9oZWFw
LnZtKCk7CiB9CiAKIGlubGluZSBjb25zdCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gKm1faGVhcC5tX3ZtOworICAgIHJldHVybiAqbV9oZWFwLnZtKCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgog
I2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIlBhcmFsbGVsU291cmNl
QWRhcHRlci5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRl
ICJTdWJzcGFjZUlubGluZXMuaCIKIApAQCAtMTYwLDYgKzE2MSw0MyBAQCBNYXJrZWRCbG9jazo6
SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1Jl
ZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbEFs
bG9jYXRvclNvdXJjZSgpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1h
cmtlZEFsbG9jYXRvciooKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEFsbG9jYXRvciog
cnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiByZXN1bHQgPSBtX2Fs
bG9jYXRvcjsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgbV9hbGxv
Y2F0b3IgPSByZXN1bHQtPm5leHRBbGxvY2F0b3JJblN1YnNwYWNlKCk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgICAgIExvY2sgbV9sb2NrOworICAg
IH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKG1fZmlyc3RBbGxvY2F0b3Ip
KTsKK30KKworUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IFN1YnNw
YWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKQoreworICAgIHJldHVybiBj
cmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkQmxvY2s6
OkhhbmRsZSo+KAorICAgICAgICBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpLAorICAgICAgICBb
XSAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIC0+IFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtl
ZEJsb2NrOjpIYW5kbGUqKCk+PiB7CisgICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3It
PnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAgICAgICB9KTsKK30KKwogTWFya2Vk
QWxsb2NhdG9yKiBTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2xvdyhzaXplX3Qgc2l6ZSkKIHsKICAg
ICBzaXplX3QgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1MTc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtODEsMTcgKzgxLDI0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgog
ICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5jJik7CiAgICAgCisgICAgUmVmUHRy
PFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gcGFyYWxsZWxBbGxvY2F0b3JTb3VyY2Uo
KTsKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1h
cmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAg
IAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpI
YW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKTsKKyAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExhcmdlQWxsb2NhdGlv
bihjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2
b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNTMgQEAgdm9pZCBTdWJzcGFjZTo6
Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hN
YXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGNsYXNzIFRhc2sg
OiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgICAg
ICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQorICAgICAgICAgICAgLCBtX2Jsb2NrU291cmNl
KHN1YnNwYWNlLnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpKQorICAgICAgICAg
ICAgLCBtX2Z1bmMoZnVuYykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3Vy
Y2UtPnJ1bigpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2VsbCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQg
a2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVu
Yyh2aXNpdG9yLCBjZWxsLCBraW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbmVl
ZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9zdWJzcGFjZS5mb3JFYWNo
TGFyZ2VBbGxvY2F0aW9uKAorICAgICAgICAgICAgICAgIFsmXSAoTGFyZ2VBbGxvY2F0aW9uKiBh
bGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uLT5pc01hcmtl
ZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGFsbG9jYXRpb24t
PmNlbGwoKSwgbV9zdWJzcGFjZS5tX2F0dHJpYnV0ZXMuY2VsbEtpbmQpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN1YnNw
YWNlJiBtX3N1YnNwYWNlOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6
SGFuZGxlKigpPj4gbV9ibG9ja1NvdXJjZTsKKyAgICAgICAgRnVuYyBtX2Z1bmM7CisgICAgICAg
IExvY2sgbV9sb2NrOworICAgICAgICBib29sIG1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25z
IHsgdHJ1ZSB9OworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0
aGlzLCBmdW5jKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiB2b2lkIFN1YnNwYWNl
Ojpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3JFYWNoTWFya2Vk
QmxvY2soCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgVmlzaXRDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBWaXNpdENvdW50ZXIoKSB7IH0KKyAgICAK
KyAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDogbV92aXNp
dG9yKCZ2aXNpdG9yKQorICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlzaXRvci52aXNp
dENvdW50KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92aXNpdG9yLT52aXNpdENvdW50KCkgLSBtX2lu
aXRpYWxWaXNpdENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU2xvdFZpc2l0b3Iq
IG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7
IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFZpc2l0aW5nVGltZW91dCB7Ci1wdWJsaWM6Ci0g
ICAgVmlzaXRpbmdUaW1lb3V0KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZpc2l0aW5nVGlt
ZW91dChTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fZGlkVmlzaXRTb21ldGhpbmcoZGlkVmlzaXRT
b21ldGhpbmcpCi0gICAgICAgICwgbV92aXNpdENvdW50QmVmb3JlKHZpc2l0b3IudmlzaXRDb3Vu
dCgpKQotICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgc2l6ZV90IHZpc2l0Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdENvdW50KCkgLSBtX3Zpc2l0Q291bnRCZWZvcmU7
Ci0gICAgfQotCi0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyhTbG90VmlzaXRvciYgdmlzaXRv
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nIHx8IHZp
c2l0Q291bnQodmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dChT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWRWaXNp
dFNvbWV0aGluZyh2aXNpdG9yKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAg
IAotcHJpdmF0ZToKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OwotICAg
IHNpemVfdCBtX3Zpc2l0Q291bnRCZWZvcmUgeyAwIH07Ci0gICAgTW9ub3RvbmljVGltZSBtX3Rp
bWVvdXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyAr
MTExLDcgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpz
VmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZENvbmN1cnJlbnRseShtYXJr
aW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChjb250YWluZXIuaXNN
YXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxK
U1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
MjI1MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwMSwxNCArMTEwMSwxNCBAQCBib29sIFN0cnVjdHVyZTo6aXND
aGVhcER1cmluZ0dDKCkKICAgICAvLyBoYXMgYW55IGxhcmdlIHByb3BlcnR5IG5hbWVzLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTczMzQKICAgICAK
LSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAh
c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoc3Rv
cmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBI
ZWFwOjppc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAgICYmIChoYXNQb2x5
UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWQoc3Rv
cmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNDaGVhcER1cmluZ0dDKCkpCi0g
ICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKTsKKyAgICAgICAg
cmV0dXJuIEhlYXA6OmlzTWFya2VkKHRoaXMpOwogICAgIAogICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1MTc4
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MCBA
QAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBkb2VzIHNvbWUg
Y2hhbmdlcyB0byBtYWtlIGl0IGVhc2llciB0byBkbyBwYXJhbGxlbCBjb25zdHJhaW50IHNvbHZp
bmc6CisgICAgICAgIAorICAgICAgICAtIEkgZmluYWxseSByZW1vdmVkIGRlcGVuZGVuY3lXaXRo
LiBUaGlzIHdhcyBhIHNpbGx5IGNvbnN0cnVjdCB3aG9zZSBvbmx5IHB1cnBvc2UgaXMgdG8gY29u
ZnVzZQorICAgICAgICAgIHBlb3BsZSBhYm91dCB3aGF0IGl0IG1lYW5zIHRvIGhhdmUgYSBkZXBl
bmRlbmN5IGNoYWluLiBJIHRvb2sgdGhhdCBhcyBhbiBvcHBvcnR1bml0eSB0byBncmVhbHkKKyAg
ICAgICAgICBzaW1wbGlmeSB0aGUgR0MncyB1c2Ugb2YgZGVwZW5kZW5jeSBjaGFpbmluZy4KKyAg
ICAgICAgCisgICAgICAgIC0gQWRkZWQgbW9yZSBsb2dpYyB0byBEZXF1ZTw+LCBzaW5jZSBJIHVz
ZSBpdCBmb3IgcGFydCBvZiB0aGUgbG9hZCBiYWxhbmNlci4KKyAgICAgICAgCisgICAgICAgIC0g
TWFkZSBpdCBwb3NzaWJsZSB0byBwcm9maWxlIGxvY2sgY29udGVudGlvbi4gU2VlCisgICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDI1MCNjMCBmb3Ig
c29tZSBwcmVsaW1pbmFyeSBtZWFzdXJlbWVudHMuCisgICAgICAgIAorICAgICAgICAtIEludHJv
ZHVjZWQgaG9sZExvY2tJZiwgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBwZXJmb3JtIHByZWRpY2F0
ZWQgbG9jayBhY3F1aXNpdGlvbi4gV2UgdXNlIHRoYXQKKyAgICAgICAgICB0byBwaWNrIGEgbG9j
ayBpbiBXZWJDb3JlLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdURjo6ZGVwZW5kZW5jeSk6Cisg
ICAgICAgIChXVEY6OkRlcGVuZGVuY3lXaXRoOjpEZXBlbmRlbmN5V2l0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OmRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvQml0
VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6aXRlcmF0b3I6Om9wZXJhdG9yKysp
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hT
ZXQ6OkNvbmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhh
c2hTZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQ
dHJIYXNoU2V0OjpkZWxldGVPbGRUYWJsZXMpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRy
SGFzaFNldDo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRTbG93KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCk6CisgICAg
ICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAg
KiB3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRQdHJIYXNoU2V0Ojpjb250YWlucyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJI
YXNoU2V0OjphZGQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6c2l6ZSBj
b25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6bWF4TG9h
ZCBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpoYXNoKToKKyAg
ICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmNhc3QpOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50UHRySGFzaFNldDo6Y29udGFpbnNJbXBsIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZEltcGwpOgorICAgICAgICAqIHd0Zi9EZXF1ZS5oOgor
ICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdCk6CisgICAgICAgICogd3Rm
L0Zhc3RNYWxsb2MuaDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6CisgICAgICAgIChXVEY6Okxv
Y2tCYXNlOjpsb2NrU2xvdyk6CisgICAgICAgICogd3RmL0xvY2tlci5oOgorICAgICAgICAoV1RG
Ojpob2xkTG9ja0lmKToKKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRhLmg6CisgICAgICAgICog
d3RmL1NoYXJlZFRhc2suaDoKKyAgICAgICAgKFdURjo6U2hhcmVkVGFzazxQYXNzZWRSZXN1bHRU
eXBlKToKKyAgICAgICAgKFdURjo6U2hhcmVkVGFzazxSZXN1bHRUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvU3RhY2tTaG90Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6
OlN0YWNrU2hvdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdURjo6U3RhY2tTaG90OjphcnJheSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hv
dDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3IgYm9vbCBj
b25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlN0YWNrU2hvdDo6aGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hv
dDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1No
b3Q6Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6ZGVsZXRlZFZh
bHVlQXJyYXkpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RIYXNoOjpoYXNoKToKKyAgICAgICAg
KFdURjo6U3RhY2tTaG90SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHd0Zi9TdGFja1Nob3RQcm9m
aWxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OlN0YWNrU2hv
dFByb2ZpbGVyKToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OnByb2ZpbGUpOgor
ICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cnVuKToKKwogMjAxNi0wOC0wNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHNvbWUgbWlub3IgcHJv
YmxlbXMgaW4gdGhlIFN0cmluZ0ltcGwgaGVhZGVyCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcg
QEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEY1MjZCMUY0MjFGRjgw
MDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxv
Yy5jcHAgKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBC
QThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKKwkJMEYzMENC
NUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRC
NTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNEOEYxMURCNUFE
REMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9t
YXRpY1RocmVhZC5jcHAgKi87IH07CiAJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdh
Y2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVCRjE3NDFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovOyB9OwogCQkwRjYwRjMy
RjFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZD
IC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4MSw2ICsxODIsOCBAQAogCQkw
RjMwQkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYzMEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoU2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBCQThGMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dn
aW5nSGFzaFRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5n
SGFzaFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RG
MTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVu
dFB0ckhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVu
dFB0ckhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMURENzAxRjEz
MDhCQzAwNzJFQjRBIC8qIExvY2tBbGdvcml0aG1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExv
Y2tBbGdvcml0aG1JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4
QzdEMUY0N0FBOUQwMDNDRkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
aW5nVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4
QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMyw2ICsy
MjYsOCBAQAogCQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJp
bnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRT
dHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RTE2NURCQTcz
MDA1QUQzODcgLyogUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDQx
RkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdGFja1Nob3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFB
MDUxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMx
N0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN5c3RlbVRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTc4Nyw2ICs3OTIsOCBAQAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBD
b21waWxhdGlvblRocmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUxQTgyNUEwMDQxMjNGRiAvKiBD
b21waWxlci5oICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlBMkJCQyAvKiBDb21wbGV0aW9u
SGFuZGxlci5oICovLAorCQkJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50
UHRySGFzaFNldC5jcHAgKi8sCisJCQkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1
cnJlbnRQdHJIYXNoU2V0LmggKi8sCiAJCQkJMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENv
bmRpdGlvbi5oICovLAogCQkJCUUzOEM0MTI2MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNw
cCAqLywKIAkJCQlFMzhDNDEyNzFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5oICovLApAQCAt
OTkzLDYgKzEwMDAsOCBAQAogCQkJCUE4QTQ3MzBEMTUxQTgyNUIwMDQxMjNGRiAvKiBTcGVjdHJ1
bS5oICovLAogCQkJCUE4QTQ3MzBFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5jcHAg
Ki8sCiAJCQkJQThBNDczMEYxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmggKi8sCisJ
CQkJMEY5REFBMDQxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdC5oICovLAorCQkJCTBGOURB
QTA1MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3RQcm9maWxlci5oICovLAogCQkJCUZFREFD
RDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLywKIAkJCQlGRURBQ0QzQzE2
MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oICovLAogCQkJCTMxM0VERUM5Nzc4RTQ5QzlC
RUE5MUNGQyAvKiBTdGFja1RyYWNlLmNwcCAqLywKQEAgLTE0MTMsNiArMTQyMiw3IEBACiAJCQkJ
MEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFGMTc1MkIxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRDb2RlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1MkMxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRE
ZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAv
KiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyRDFG
M0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5RDMzNjIxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dURi93
dGYvQXRvbWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsMTEgKzM0NiwxNiBAQCBBTFdBWVNf
SU5MSU5FIERlcGVuZGVuY3kgbnVsbERlcGVuZGVuY3koCiAgICAgcmV0dXJuIDA7CiB9CiAKLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0g
OD46OnR5cGUqID0gbnVsbHB0cj4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElO
RSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBkZXBlbmRl
bmN5OwotICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsK
KyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQzMl90IGNvcHk7CisgICAgICAgIFQgdmFsdWU7Cisg
ICAgfSB1OworICAgIHUuY29weSA9IDA7CisgICAgdS52YWx1ZSA9IHZhbHVlOwogI2lmIENQVShB
Uk02NCkKICAgICAvLyBDcmVhdGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUg
YXNzZW1ibHksIHdob3NlIGNvbXB1dGF0aW9uCiAgICAgLy8gaXNuJ3QgdmlzaWJsZSB0byB0aGUg
b3B0aW1pemVyLiBUaGlzIHplcm8gaXMgdGhlbiB1c2FibGUgYXMgYW4gb2Zmc2V0IGluCkBAIC0z
NjMsODAgKzM2OCwyMCBAQCBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZh
CiAgICAgLy8gb3IgYW4gYWNxdWlyZSBsb2FkLgogICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ld
LCAld1tpbl0sICV3W2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5
KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkp
KTsKICNlbGlmIENQVShBUk0pCiAgICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVb
aW5dIgogICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDog
W2luXSAiciIoY29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2Vsc2UKICAg
ICAvLyBObyBkZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCiAgICAg
bG9hZExvYWRGZW5jZSgpOwogICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShj
b3B5KTsKKyAgICBVTlVTRURfUEFSQU0odS5jb3B5KTsKICNlbmRpZgogICAgIHJldHVybiBkZXBl
bmRlbmN5OwogfQogCi0vLyBGSVhNRTogVGhpcyBjb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8g
dGhlIG90aGVyIGRlcGVuZGVuY3koKSBvdmVybG9hZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDUKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQg
ZGVwZW5kZW5jeTsKLSAgICB1aW50MzJfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2
YWx1ZSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tp
bl0sICV3W2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAg
ICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtk
ZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRl
cGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2Vsc2UKLSAgICBsb2FkTG9h
ZEZlbmNlKCk7Ci0gICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOwot
I2VuZGlmCi0gICAgcmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0
cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0g
MT46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdp
dGggewotcHVibGljOgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5
KG51bGxEZXBlbmRlbmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgRGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1
ZSkKLSAgICAgICAgOiBkZXBlbmRlbmN5KGRlcGVuZGVuY3kpCi0gICAgICAgICwgdmFsdWUodmFs
dWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7Ci0gICAg
VCB2YWx1ZTsKLX07Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIERlcGVuZGVu
Y3lXaXRoPFQ+IGRlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVl
KTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUKiBjb25zdW1lKFQqIHBvaW50
ZXIsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKQEAgLTQ2OSwxMCArNDE0LDggQEAgQUxXQVlT
X0lOTElORSBUJiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKgogCiB1c2luZyBXVEY6OkF0b21pYzsK
IHVzaW5nIFdURjo6RGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7CiB1c2lu
ZyBXVEY6OmNvbnN1bWU7CiB1c2luZyBXVEY6OmRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OmRlcGVu
ZGVuY3lXaXRoOwogdXNpbmcgV1RGOjplbnN1cmVQb2ludGVyOwogdXNpbmcgV1RGOjpudWxsRGVw
ZW5kZW5jeTsKIApJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDEzIEBA
IHB1YmxpYzogCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAorICAgICAg
ICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0
b3IgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICArKygqdGhpcyk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKICAgICAgICAgYm9vbCBpc0F0RW5kKCkgY29uc3QK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPj0gbV9iaXRWZWN0b3ItPnNp
emUoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsNyBA
QCBzZXQoV1RGX0hFQURFUlMKICAgICBDbG9ja1R5cGUuaAogICAgIENvbXBpbGF0aW9uVGhyZWFk
LmgKICAgICBDb21waWxlci5oCisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQuaAogICAgIENvbmRp
dGlvbi5oCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIuaAogICAgIENyb3NzVGhyZWFkVGFzay5oCkBA
IC0xMzAsNiArMTMxLDggQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU2VnbWVudGVkVmVjdG9yLmgK
ICAgICBTbWFsbFB0clNldC5oCiAgICAgU3RhY2tCb3VuZHMuaAorICAgIFN0YWNrU2hvdC5oCisg
ICAgU3RhY2tTaG90UHJvZmlsZXIuaAogICAgIFN0YWNrU3RhdHMuaAogICAgIFN0YWNrVHJhY2Uu
aAogICAgIFN0ZExpYkV4dHJhcy5oCkBAIC0yMTYsNiArMjE5LDcgQEAgc2V0KFdURl9TT1VSQ0VT
CiAgICAgQ1BVVGltZS5jcHAKICAgICBDbG9ja1R5cGUuY3BwCiAgICAgQ29tcGlsYXRpb25UaHJl
YWQuY3BwCisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCiAgICAgQ3Jvc3NUaHJlYWRDb3Bp
ZXIuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAKICAgICBDcnlwdG9ncmFwaGlj
YWxseVJhbmRvbU51bWJlci5jcHAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFz
aFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDb25jdXJyZW50UHRySGFzaFNldC5oIgorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK0NvbmN1cnJlbnRQdHJIYXNoU2V0OjpDb25jdXJyZW50
UHRySGFzaFNldCgpCit7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCitDb25jdXJyZW50UHRySGFz
aFNldDo6fkNvbmN1cnJlbnRQdHJIYXNoU2V0KCkKK3sKK30KKwordm9pZCBDb25jdXJyZW50UHRy
SGFzaFNldDo6ZGVsZXRlT2xkVGFibGVzKCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4gY2Fz
ZS4gSXQgZG9lcyBub3QgbWFrZSBpdCBPSyBmb3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFkZCgp
LiBCdXQgaXQgbWlnaHQgcHJldmVudAorICAgIC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2UgZGlk
IG1ha2UgdGhhdCBtaXN0YWtlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsg
CisgICAgCisgICAgbV9hbGxUYWJsZXMucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgIFsmXSAo
c3RkOjp1bmlxdWVfcHRyPFRhYmxlPiYgdGFibGUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0
dXJuIHRhYmxlLmdldCgpICE9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgfSk7Cit9
CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmNsZWFyKCkKK3sKKyAgICAvLyBUaGlzIGlz
IGp1c3QgaW4gY2FzZS4gSXQgZG9lcyBub3QgbWFrZSBpdCBPSyBmb3Igb3RoZXIgdGhyZWFkcyB0
byBjYWxsIGFkZCgpLiBCdXQgaXQgbWlnaHQgcHJldmVudAorICAgIC8vIHNvbWUgYmFkIGNyYXNo
ZXMgaWYgd2UgZGlkIG1ha2UgdGhhdCBtaXN0YWtlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsgCisgICAgCisgICAgbV9hbGxUYWJsZXMuY2xlYXIoKTsKKyAgICBpbml0aWFs
aXplKCk7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmluaXRpYWxpemUoKQorewor
ICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBpbml0aWFsU2l6ZSA9IDMyOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxUYWJsZT4gdGFibGUgPSBUYWJsZTo6Y3JlYXRlKGluaXRpYWxTaXplKTsKKyAgICBtX3Rh
YmxlLnN0b3JlUmVsYXhlZCh0YWJsZS5nZXQoKSk7CisgICAgbV9hbGxUYWJsZXMuYXBwZW5kKFdU
Rk1vdmUodGFibGUpKTsKK30KKworYm9vbCBDb25jdXJyZW50UHRySGFzaFNldDo6YWRkU2xvdyhU
YWJsZSogdGFibGUsIHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVk
IGluZGV4LCB2b2lkKiBwdHIpCit7CisgICAgaWYgKHRhYmxlLT5sb2FkLmV4Y2hhbmdlQWRkKDEp
ID49IHRhYmxlLT5tYXhMb2FkKCkpCisgICAgICAgIHJldHVybiByZXNpemVBbmRBZGQocHRyKTsK
KyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHZvaWQqIG9sZEVudHJ5ID0gdGFibGUtPmFy
cmF5W2luZGV4XS5jb21wYXJlRXhjaGFuZ2VTdHJvbmcobnVsbHB0ciwgcHRyKTsKKyAgICAgICAg
aWYgKCFvbGRFbnRyeSkgeworICAgICAgICAgICAgaWYgKG1fdGFibGUubG9hZCgpICE9IHRhYmxl
KSB7CisgICAgICAgICAgICAgICAgLy8gV2UgYWRkZWQgYW4gZW50cnkgdG8gYW4gb2xkIHRhYmxl
ISBXZSBuZWVkIHRvIHJlZXhlY3V0ZSB0aGUgYWRkIG9uIHRoZSBuZXcgdGFibGUuCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFkZChwdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9sZEVudHJ5ID09IHB0cikKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgIH0KK30K
Kwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkoKQoreworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBUYWJsZSogdGFibGUgPSBtX3Rh
YmxlLmxvYWRSZWxheGVkKCk7CisgICAgaWYgKHRhYmxlLT5sb2FkLmxvYWRSZWxheGVkKCkgPCB0
YWJsZS0+bWF4TG9hZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RkOjp1bmlxdWVf
cHRyPFRhYmxlPiBuZXdUYWJsZSA9IFRhYmxlOjpjcmVhdGUodGFibGUtPnNpemUgKiAyKTsKKyAg
ICB1bnNpZ25lZCBtYXNrID0gbmV3VGFibGUtPm1hc2s7CisgICAgdW5zaWduZWQgbG9hZCA9IDA7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLT5zaXplOyArK2kpIHsKKyAgICAg
ICAgdm9pZCogcHRyID0gdGFibGUtPmFycmF5W2ldLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlm
ICghcHRyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBBdG9taWM8dm9p
ZCo+JiBlbnRyeVJlZiA9IG5ld1RhYmxlLT5hcnJheVtpbmRleF07CisgICAgICAgICAgICB2b2lk
KiBlbnRyeSA9IGVudHJ5UmVmLmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5
KSB7CisgICAgICAgICAgICAgICAgZW50cnlSZWYuc3RvcmVSZWxheGVkKHB0cik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChlbnRyeSAhPSBwdHIpOworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgbG9hZCsrOworICAgIH0KKyAgICAKKyAgICBuZXdUYWJs
ZS0+bG9hZC5zdG9yZVJlbGF4ZWQobG9hZCk7CisgICAgCisgICAgbV90YWJsZS5zdG9yZShuZXdU
YWJsZS5nZXQoKSk7CisgICAgbV9hbGxUYWJsZXMuYXBwZW5kKFdURk1vdmUobmV3VGFibGUpKTsK
K30KKworYm9vbCBDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKHZvaWQqIHB0cikK
K3sKKyAgICByZXNpemVJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBhZGQocHRyKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gQ29uY3VycmVudFB0
ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlPiByZXN1bHQobmV3IChmYXN0TWFsbG9j
KE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgYXJyYXkpICsgc2l6ZW9mKEF0b21pYzx2b2lkKj4pICog
c2l6ZSkpIFRhYmxlKCkpOworICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAgcmVzdWx0LT5t
YXNrID0gc2l6ZSAtIDE7CisgICAgcmVzdWx0LT5sb2FkLnN0b3JlUmVsYXhlZCgwKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICByZXN1bHQtPmFycmF5
W2ldLnN0b3JlUmVsYXhlZChudWxscHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXRv
bWljcy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hG
dW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IFRoaXMgaXMgYSBjb25jdXJyZW50IGhhc2gtYmFzZWQgc2V0IGZvciBwb2ludGVycy4gSXQncyBv
cHRpbWl6ZWQgZm9yOgorLy8KKy8vIC0gSGlnaCByYXRlIG9mIGNvbnRhaW5zKCkgY2FsbHMuCisv
LyAtIEhpZ2ggcmF0ZSBvZiBhZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyBuZXcu
IGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIChub3AgYWRkcykKKy8vICAgZG9u
J3QgbXV0YXRlIHRoZSB0YWJsZSBhdCBhbGwuCisvLyAtIE5vdCB0b28gbWFueSB0aHJlYWRzLiBJ
IGRvdWJ0IHRoaXMgc2NhbGVzIGJleW9uZCB+NC4gVGhvdWdoLCBpdCBtYXkgYWN0dWFsbHkgc2Nh
bGUgYmV0dGVyIHRoYW4gdGhhdAorLy8gICBpZiB0aGUgcmF0ZSBvZiBub3AgYWRkcyBpcyBhYnN1
cmRseSBoaWdoLgorLy8KKy8vIElmIHdlIHdhbnRlZCB0aGlzIHRvIHNjYWxlIGJldHRlciwgdGhl
IG1haW4gY2hhbmdlIHdlJ2QgaGF2ZSB0byBtYWtlIGlzIGhvdyB0aGlzIHRhYmxlIGRldGVybWlu
ZXMgd2hlbgorLy8gdG8gcmVzaXplLiBSaWdodCBub3cgaXQncyBhIHNoYXJlZCBjb3VudGVyLiBX
ZSBsb2NrO3hhZGQgdGhpcyBjb3VudGVyLiBPbmUgZWFzeSB3YXkgdG8gbWFrZSB0aGF0CisvLyBz
Y2FsYWJsZSBpcyB0byByZXF1aXJlIGVhY2ggdGhyZWFkIHRoYXQgd29ya3Mgd2l0aCB0aGUgQ29u
Y3VycmVudFB0ckhhc2hTZXQgdG8gcmVnaXN0ZXIgaXRzZWxmIGZpcnN0LgorLy8gVGhlbiBlYWNo
IHRocmVhZCB3b3VsZCBoYXZlIHNvbWUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSBjb3VudGVy
LiBXZSBjb3VsZCBpbnN0aXR1dGUgdGhlIHBvbGljeSB0aGF0CisvLyBlYWNoIHRocmVhZCBzaW1w
bHkgaW5jcmVtZW50cyBpdHMgb3duIGxvYWQgY291bnRlciwgaW4gaXRzIG93biBkYXRhIHN0cnVj
dHVyZS4gVGhlbiwgaWYgYW55IHNlYXJjaCB0bworLy8gcmVzb2x2ZSBhIGNvbGxpc2lvbiBkb2Vz
IG1vcmUgdGhhbiBOIGl0ZXJhdGlvbnMsIHdlIGNhbiBjb21wdXRlIGEgY29tYmluZWQgbG9hZCBi
eSBzdW1taW5nIHRoZSBsb2FkCisvLyBjb3VudGVycyBvZiBhbGwgb2YgdGhlIHRocmVhZCBkYXRh
IHN0cnVjdHVyZXMuCisvLworLy8gQ29uY3VycmVudFB0ckhhc2hTZXQncyBtYWluIHVzZXIsIHRo
ZSBHQywgc2VlcyBhIDk4JSBub3AgYWRkIHJhdGUgaW4gU3BlZWRvbWV0ZXIuIFRoYXQncyB3aHkg
dGhpcworLy8gZm9jdXNlcyBzbyBtdWNoIG9uIGNhc2VzIHdoZXJlIHRoZSB0YWJsZSBkb2VzIG5v
dCBjaGFuZ2UuCitjbGFzcyBDb25jdXJyZW50UHRySGFzaFNldCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ29uY3VycmVudFB0ckhhc2hTZXQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworCitwdWJsaWM6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIENvbmN1cnJlbnRQdHJIYXNo
U2V0KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5Db25jdXJyZW50UHRySGFzaFNldCgpOwor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBjb250YWlucyhUIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5zSW1wbChjYXN0KHZhbHVlKSk7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBhZGQoVCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZGRJbXBsKGNhc3QodmFsdWUpKTsKKyAgICB9CisgICAg
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUu
bG9hZFJlbGF4ZWQoKS0+bG9hZC5sb2FkUmVsYXhlZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBP
bmx5IGNhbGwgd2hlbiB5b3Uga25vdyB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQo
KS4gVGhpcyBmcmVlcyB1cCBtZW1vcnkgd2l0aG91dCBjaGFuZ2luZworICAgIC8vIHRoZSBjb250
ZW50cyBvZiB0aGUgdGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlT2xk
VGFibGVzKCk7CisgICAgCisgICAgLy8gT25seSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBv
dGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJlZXMgdXAgYWxsIG1lbW9yeSBleGNl
cHQgZm9yCisgICAgLy8gdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGhhc2h0YWJsZS4KKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhcigpOworICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
VGFibGUgeworICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IAorICAgICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBjcmVhdGUodW5zaWduZWQg
c2l6ZSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBtYXhMb2FkKCkgY29uc3QgeyByZXR1
cm4gc2l6ZSAvIDI7IH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHNpemU7IC8vIFRoaXMg
aXMgaW1tdXRhYmxlLgorICAgICAgICB1bnNpZ25lZCBtYXNrOyAvLyBUaGlzIGlzIGltbXV0YWJs
ZS4KKyAgICAgICAgQXRvbWljPHVuc2lnbmVkPiBsb2FkOworICAgICAgICBBdG9taWM8dm9pZCo+
IGFycmF5WzFdOworICAgIH07CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2godm9pZCog
cHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKHB0cik7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgdm9pZCogY2FzdChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoVCkgPD0gc2l6ZW9mKHZvaWQqKSwgInR5cGUgdG9vIGJpZyIpOworICAg
ICAgICB1bmlvbiB7CisgICAgICAgICAgICB2b2lkKiBwdHI7CisgICAgICAgICAgICBUIHZhbHVl
OworICAgICAgICB9IHU7CisgICAgICAgIHUucHRyID0gbnVsbHB0cjsKKyAgICAgICAgdS52YWx1
ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdS5wdHI7CisgICAgfQorICAgIAorICAgIGJvb2wg
Y29udGFpbnNJbXBsKHZvaWQqIHB0cikgY29uc3QKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJs
ZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxl
LT5tYXNrOworICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsK
KyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4
ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKGVudHJ5ID09IHB0cikKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGEgbmV3IGVudHJ5IHdhcyBhZGRlZC4K
KyAgICBib29sIGFkZEltcGwodm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxl
ID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUt
Pm1hc2s7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOwor
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsK
KyAgICAgICAgICAgIHZvaWQqIGVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhl
ZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRk
U2xvdyh0YWJsZSwgbWFzaywgc3RhcnRJbmRleCwgaW5kZXgsIHB0cik7CisgICAgICAgICAgICBp
ZiAoZW50cnkgPT0gcHRyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIGJvb2wgYWRkU2xvdyhUYWJsZSogdGFibGUsIHVuc2lnbmVkIG1hc2ss
IHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4LCB2b2lkKiBwdHIpOworCisgICAg
dm9pZCByZXNpemVJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wgcmVzaXplQW5kQWRkKHZvaWQqIHB0
cik7CisgICAgCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4sIDQ+IG1fYWxsVGFi
bGVzOworICAgIEF0b21pYzxUYWJsZSo+IG1fdGFibGU7IC8vIFRoaXMgaXMgbmV2ZXIgbnVsbC4K
KyAgICBMb2NrIG1fbG9jazsgLy8gV2UganVzdCB1c2UgdGhpcyB0byBjb250cm9sIHJlc2l6ZSBy
YWNlcy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNvbmN1cnJlbnRQ
dHJIYXNoU2V0OwpJbmRleDogU291cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0
Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDExIEBAIHB1YmxpYzoKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgYXBwZW5kQW5k
QnViYmxlKFUmJiwgY29uc3QgRnVuYyYpOwogICAgIAorICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJu
IHRoZSBmaXJzdCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBS
ZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCisgICAgLy8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3
YXlzIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRh
a2VGaXJzdChjb25zdCBGdW5jJik7CisKICAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgbGFz
dCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEg
bnVsbCB2ZXJzaW9uIG9mCiAgICAgLy8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVy
bnMgZmFsc2UuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KQEAgLTU3MSw2ICs1NzYsMjUg
QEAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcAogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgoraW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlRmlyc3QoY29uc3QgRnVu
YyYgZnVuYykKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgdW5zaWduZWQgc2l6ZSA9
IHRoaXMtPnNpemUoKTsKKyAgICB3aGlsZSAoY291bnQgPCBzaXplKSB7CisgICAgICAgIFQgY2Fu
ZGlkYXRlID0gdGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAg
ICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAgIHByZXBlbmQodGFrZUxh
c3QoKSk7CisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAgICB9CisgICAgICAg
IGNvdW50Kys7CisgICAgICAgIGFwcGVuZChXVEZNb3ZlKGNhbmRpZGF0ZSkpOworICAgIH0KKyAg
ICByZXR1cm4gVCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogaW5saW5lIFQgRGVxdWU8VCwgaW5saW5l
Q2FwYWNpdHk+Ojp0YWtlTGFzdChjb25zdCBGdW5jJiBmdW5jKQogewogICAgIHVuc2lnbmVkIGNv
dW50ID0gMDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw3IEBA
IHVzaW5nIFdURjo6ZmFzdEFsaWduZWRGcmVlOwogI2RlZmluZSBXVEZfUFJJVkFURV9JTkxJTkUg
aW5saW5lCiAjZW5kaWYKIAotI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBcCi1wdWJs
aWM6IFwKKyNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfSU1QTCBcCiAgICAgdm9pZCog
b3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgdm9pZCog
b3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IFwKICAgICBcCkBA
IC0yNjMsNyArMjYyLDE1IEBAIHB1YmxpYzogXAogICAgICAgICBBU1NFUlQobG9jYXRpb24pOyBc
CiAgICAgICAgIHJldHVybiBsb2NhdGlvbjsgXAogICAgIH0gXAorCisjZGVmaW5lIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEIFwKK3B1YmxpYzogXAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
X0lNUEwgXAogcHJpdmF0ZTogXAogdHlwZWRlZiBpbnQgX190aGlzSXNIZXJlVG9Gb3JjZUFTZW1p
Y29sb25BZnRlclRoaXNNYWNybwogCisjZGVmaW5lIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRCBcCisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfSU1QTCBcCit0eXBlZGVmIGludCBf
X3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xvbkFmdGVyVGhpc01hY3JvCisKICNlbmRpZiAvKiBX
VEZfRmFzdE1hbGxvY19oICovCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkocmV2aXNpb24gMjI1MTc4KQorKysgU291
cmNlL1dURi93dGYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNywxNiBAQAog
I2luY2x1ZGUgIkxvY2suaCIKIAogI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5o
PgorI2luY2x1ZGUgPHd0Zi9TdGFja1Nob3RQcm9maWxlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IAorc3RhdGljIGNvbnN0ZXhwciBib29sIHByb2ZpbGVMb2NrQ29udGVudGlvbiA9IGZhbHNlOwor
CiB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCiB7CisgICAgaWYgKHByb2ZpbGVMb2NrQ29udGVu
dGlvbikKKyAgICAgICAgU1RBQ0tfU0hPVF9QUk9GSUxFKDQsIDIsIDUpOwogICAgIERlZmF1bHRM
b2NrQWxnb3JpdGhtOjpsb2NrU2xvdyhtX2J5dGUpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9Mb2NrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrZXIuaAkocmV2aXNp
b24gMjI1MTc4KQorKysgU291cmNlL1dURi93dGYvTG9ja2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTIyLDYgKzEyMiwxMiBAQCBMb2NrZXI8TG9ja1R5cGU+IGhvbGRMb2NrKExvY2tU
eXBlJiBsb2NrCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgorTG9ja2VyPExvY2tU
eXBlPiBob2xkTG9ja0lmKExvY2tUeXBlJiBsb2NrLCBib29sIHByZWRpY2F0ZSkKK3sKKyAgICBy
ZXR1cm4gTG9ja2VyPExvY2tUeXBlPihwcmVkaWNhdGUgPyAmbG9jayA6IG51bGxwdHIpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KIExvY2tlcjxMb2NrVHlwZT4gdHJ5SG9sZExv
Y2soTG9ja1R5cGUmIGxvY2spCiB7CiAgICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT46OnRyeUxv
Y2sobG9jayk7CkBAIC0xMzQsNSArMTQwLDYgQEAgdXNpbmcgV1RGOjpMb2NrZXI7CiB1c2luZyBX
VEY6Ok5vTG9ja2luZ05lY2Vzc2FyeVRhZzsKIHVzaW5nIFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5
OwogdXNpbmcgV1RGOjpob2xkTG9jazsKK3VzaW5nIFdURjo6aG9sZExvY2tJZjsKIAogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dU
Ri93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw2ICsxNzQsMTMgQEAg
cHJpdmF0ZToKIAogLy8gVGhpcyBpcyBmb3Igd2hlbiB5b3UgYWxyZWFkeSByZWZlciB0byBhIGZ1
bmN0b3IgYnkgcmVmZXJlbmNlLCBhbmQgeW91IGtub3cgaXRzIGxpZmV0aW1lIGlzCiAvLyBnb29k
LiBUaGlzIGp1c3QgY3JlYXRlcyBhIFNjb3BlZExhbWJkYSB0aGF0IHBvaW50cyB0byB5b3VyIGZ1
bmN0b3IuCisvLworLy8gTm90ZSB0aGF0IHRoaXMgaXMgYWx3YXlzIHdyb25nOgorLy8KKy8vIGF1
dG8gcmVmID0gc2NvcGVkTGFtYmRhUmVmKFsuLi5dICguLi4pIHsuLi59KTsKKy8vCisvLyBCZWNh
dXNlIHRoZSBzY29wZWRMYW1iZGFSZWYgd2lsbCByZWZlciB0byB0aGUgbGFtYmRhIGJ5IHJlZmVy
ZW5jZSwgYW5kIHRoZSBsYW1iZGEgd2lsbCBkaWUgYWZ0ZXIgdGhlCisvLyBzZW1pY29sb24uIFVz
ZSBzY29wZWRMYW1iZGEoKSBpbiB0aGF0IGNhc2UuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CiBTY29wZWRMYW1iZGFSZWZGdW5jdG9yPEZ1bmN0aW9u
VHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhUmVmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV1RGL3d0
Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDExIEBAIG5hbWVzcGFj
ZSBXVEYgewogLy8gc3RhdGUgaW4gbWVtYmVyIGZpZWxkcy4gVGhpcyBjYW4gYmUgbW9yZSBuYXR1
cmFsIGlmIHlvdSB3YW50IGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgd2hhdAogLy8gc3RhdGUg
aXMgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoZSB0YXNrLgogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTaGFyZWRUYXNrOwotdGVtcGxhdGU8dHlwZW5hbWUgUmVz
dWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KLWNsYXNzIFNoYXJlZFRhc2s8UmVz
dWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFNoYXJlZFRhc2s8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBQYXNzZWRSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xh
c3MgU2hhcmVkVGFzazxQYXNzZWRSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFzazxQYXNzZWRSZXN1bHRUeXBlIChBcmd1
bWVudFR5cGVzLi4uKT4+IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NlZFJlc3VsdFR5cGUg
UmVzdWx0VHlwZTsKKyAgICAKICAgICBTaGFyZWRUYXNrKCkgeyB9CiAgICAgdmlydHVhbCB+U2hh
cmVkVGFzaygpIHsgfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3QuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TdGFja1Nob3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBTdGFja1Nob3QgeworcHVibGljOgorICAgIFN0YWNrU2hvdCgpIHsgfQorICAgIAorICAg
IEFMV0FZU19JTkxJTkUgU3RhY2tTaG90KHNpemVfdCBzaXplKQorICAgICAgICA6IG1fc2l6ZShz
aXplKQorICAgIHsKKyAgICAgICAgaWYgKHNpemUpIHsKKyAgICAgICAgICAgIG1fYXJyYXkgPSBz
dGQ6Om1ha2VfdW5pcXVlPHZvaWQqW10+KHNpemUpOworICAgICAgICAgICAgaW50IGludFNpemUg
PSBzaXplOworICAgICAgICAgICAgV1RGR2V0QmFja3RyYWNlKG1fYXJyYXkuZ2V0KCksICZpbnRT
aXplKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oaW50
U2l6ZSkgPD0gc2l6ZSk7CisgICAgICAgICAgICBtX3NpemUgPSBpbnRTaXplOworICAgICAgICAg
ICAgaWYgKCFtX3NpemUpCisgICAgICAgICAgICAgICAgbV9hcnJheSA9IG51bGxwdHI7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICAgICAgOiBtX2FycmF5KGRlbGV0ZWRWYWx1ZUFycmF5KCkpCisgICAgICAg
ICwgbV9zaXplKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBTdGFja1Nob3QmIG9wZXJhdG9y
PShjb25zdCBTdGFja1Nob3QmIG90aGVyKQorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PHZvaWQqW10+IG5ld0FycmF5ID0gc3RkOjptYWtlX3VuaXF1ZTx2b2lkKltdPihvdGhlci5tX3Np
emUpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gb3RoZXIubV9zaXplOyBpLS07KQorICAgICAg
ICAgICAgbmV3QXJyYXlbaV0gPSBvdGhlci5tX2FycmF5W2ldOworICAgICAgICBtX3NpemUgPSBv
dGhlci5tX3NpemU7CisgICAgICAgIG1fYXJyYXkgPSBXVEZNb3ZlKG5ld0FycmF5KTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAgICBTdGFja1Nob3QoY29uc3QgU3RhY2tT
aG90JiBvdGhlcikKKyAgICB7CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgfQorICAgIAor
ICAgIHZvaWQqKiBhcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXkuZ2V0KCk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIAorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYXJyYXk7IH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU3RhY2tTaG90JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChtX3NpemUgIT0gb3RoZXIubV9zaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fc2l6ZTsgaS0tOykgeworICAg
ICAgICAgICAgaWYgKG1fYXJyYXlbaV0gIT0gb3RoZXIubV9hcnJheVtpXSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fc2l6ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBtX3NpemU7IGktLTspCisgICAgICAgICAgICByZXN1bHQgXj0gUHRySGFzaDx2b2lk
Kj46Omhhc2gobV9hcnJheVtpXSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhbV9zaXplICYmIG1fYXJyYXkuZ2V0KCkgPT0gZGVsZXRlZFZh
bHVlQXJyYXkoKTsKKyAgICB9CisgICAgCisgICAgLy8gTWFrZSBTcGVjdHJ1bTw+IGhhcHB5Lgor
ICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFN0YWNrU2hvdCYpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkKiogZGVsZXRlZFZhbHVlQXJyYXko
KSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEp
KTsgfQorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lkKltdPiBtX2FycmF5OworICAgIHNp
emVfdCBtX3NpemUgeyAwIH07Cit9OworCitzdHJ1Y3QgU3RhY2tTaG90SGFzaCB7CisgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3RhY2tTaG90JiBzaG90KSB7IHJldHVybiBzaG90Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0YWNrU2hvdCYgYSwgY29uc3Qg
U3RhY2tTaG90JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8U3RhY2tTaG90PiB7CisgICAgdHlwZWRlZiBTdGFja1Nob3RIYXNoIEhhc2g7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8U3RhY2tTaG90PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxTdGFja1Nob3Q+
IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNr
U2hvdFByb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tTaG90UHJv
ZmlsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9maWxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvUHJvY2Vz
c0lELmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVtLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrVHJh
Y2UuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTaG90Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xh
c3MgU3RhY2tTaG90UHJvZmlsZXIgeworcHVibGljOgorICAgIFN0YWNrU2hvdFByb2ZpbGVyKHVu
c2lnbmVkIG51bUZyYW1lcywgdW5zaWduZWQgZnJhbWVzVG9Ta2lwLCB1bnNpZ25lZCBzdGFja3NU
b1JlcG9ydCkKKyAgICAgICAgOiBtX251bUZyYW1lcyhudW1GcmFtZXMpCisgICAgICAgICwgbV9m
cmFtZXNUb1NraXAoZnJhbWVzVG9Ta2lwKQorICAgICAgICAsIG1fc3RhY2tzVG9SZXBvcnQoc3Rh
Y2tzVG9SZXBvcnQpCisgICAgeworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiU3RhY2tTaG90UHJv
ZmlsZXIiLCBbdGhpc10gKCkgeyBydW4oKTsgfSk7CisgICAgfQorCisgICAgLy8gTkVWRVJfSU5M
SU5FIHNvIHRoYXQgZnJhbWVzVG9Ta2lwIGlzIHByZWRpY3RhYmxlLgorICAgIE5FVkVSX0lOTElO
RSB2b2lkIHByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICBtX3Byb2ZpbGUuYWRkKFN0YWNrU2hvdChtX251bUZyYW1lcyArIG1f
ZnJhbWVzVG9Ta2lwKSk7CisgICAgICAgIG1fdG90YWxDb3VudCsrOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgTk9fUkVUVVJOIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgIHNsZWVwKDFfcyk7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBhdXRvIGxpc3QgPSBtX3Byb2ZpbGUuYnVpbGRM
aXN0KCk7CisgICAgICAgICAgICBkYXRhTG9nKCJcbkhvdHRlc3Qgc3RhY2tzIGluICIsIGdldEN1
cnJlbnRQcm9jZXNzSUQoKSwgIjpcbiIpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGxp
c3Quc2l6ZSgpLCBjb3VudCA9IDA7IGktLSAmJiBjb3VudCA8IG1fc3RhY2tzVG9SZXBvcnQ7IGNv
dW50KyspIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9IGxpc3RbaV07CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiXG5Ub3AgIyIsIGNvdW50ICsgMSwgIiBzdGFjazogIiwgZW50cnku
Y291bnQgKiAxMDAgLyBtX3RvdGFsQ291bnQsICIlXG4iKTsKKyAgICAgICAgICAgICAgICBTdGFj
a1RyYWNlIHRyYWNlKGVudHJ5LmtleS5hcnJheSgpICsgbV9mcmFtZXNUb1NraXAsIGVudHJ5Lmtl
eS5zaXplKCkgLSBtX2ZyYW1lc1RvU2tpcCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZyh0cmFj
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIFdvcmRMb2NrIG1fbG9jazsKKyAgICBTcGVjdHJ1bTxTdGFja1No
b3QsIGRvdWJsZT4gbV9wcm9maWxlOworICAgIGRvdWJsZSBtX3RvdGFsQ291bnQgeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9udW1GcmFtZXM7CisgICAgdW5zaWduZWQgbV9mcmFtZXNUb1NraXA7Cisg
ICAgdW5zaWduZWQgbV9zdGFja3NUb1JlcG9ydDsKK307CisKKyNkZWZpbmUgU1RBQ0tfU0hPVF9Q
Uk9GSUxFKG51bUZyYW1lcywgZnJhbWVzVG9Ta2lwLCBzdGFja3NUb1JlcG9ydCkgZG8geyBcCisg
ICAgc3RhdGljIFN0YWNrU2hvdFByb2ZpbGVyKiBzdGFja1Nob3RQcm9maWxlcjsgXAorICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGFja1Nob3RQcm9maWxlck9uY2VGbGFnOyBcCisgICAgc3Rk
OjpjYWxsX29uY2Uoc3RhY2tTaG90UHJvZmlsZXJPbmNlRmxhZywgW10geyBzdGFja1Nob3RQcm9m
aWxlciA9IG5ldyBTdGFja1Nob3RQcm9maWxlcihudW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3Rh
Y2tzVG9SZXBvcnQpOyB9KTsgXAorICAgIHN0YWNrU2hvdFByb2ZpbGVyLT5wcm9maWxlKCk7IFwK
K30gd2hpbGUgKGZhbHNlKQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTctMTItMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBHQyBjb25zdHJhaW50IHNvbHZpbmcgc2hvdWxkIGJlIHBhcmFs
bGVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5
MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgYmVjYXVzZSBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoaXMgY2hhbmdlIGlzIGJl
c3QgdGVzdGVkIHVzaW5nIERPTS1HQy1pbnRlbnNpdmUKKyAgICAgICAgYmVuY2htYXJrcyBsaWtl
IFNwZWVkb21ldGVyIGFuZCBEcm9tYWVvLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXJhbGxl
bGl6ZXMgdGhlIERPTSdzIG91dHB1dCBjb25zdHJhaW50LCBhbmQgbWFrZXMgc29tZSBzbWFsbCBj
aGFuZ2VzIHRvIG1ha2UgdGhpcyBtb3JlCisgICAgICAgIHNjYWxhYmxlLgorCisgICAgICAgICog
Rm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOiBBZGRlZC4K
KyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oOiBSZW1v
dmVkLgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRPTUdDT3V0cHV0Q29uc3RyYWlu
dDo6RE9NR0NPdXRwdXRDb25zdHJhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUdDT3V0cHV0
Q29uc3RyYWludDo6fkRPTUdDT3V0cHV0Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUdDT3V0cHV0Q29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNWTUNsaWVudERhdGE6OmluaXROb3JtYWxXb3JsZCk6CisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhckV2ZW50VGFyZ2V0RGF0YSk6CisKIDIwMTctMTEtMjcg
IFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtDb29yZEdy
YXBoaWNzXSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgZG9lc24ndCBuZWVkIHRvIGluaGVyaXQg
ZnJvbSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6Q2xpZW50CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAkocmV2aXNpb24gMjI1MTc4KQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3Jp
cHRMb2FkZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAogYmluZGlu
Z3MvanMvQ2FsbFRyYWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmluZGluZ3Mv
anMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxk
LmNwcAogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdt
YSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
aD4KKwpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGlu
Z1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjUxNzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVu
dCkKQEAgLTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9WaXNpdGluZ1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTE3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzUxLDYgKzM1MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQ
b2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
NzE2NkUxQzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAwNDQzQzNG
IC8qIEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFEQkEwMDQ0
M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAv
KiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFBMEYxRkQx
QzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIyIC8q
IERPTUdDT3V0cHV0Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5MDBBM0Y0
QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xh
eWVyVXBkYXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQjYyNTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1MkQxOERF
MUIxNTAwQTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8q
IFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTg4OSw5ICsxODkwLDcgQEAKIAkJNzcyODY5NEUxNEY4ODgyNTAwRjQ4NERDIC8q
IEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NzI4Njk0QjE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCAqLzsgfTsKIAkJNzcyODY5NEYxNEY4ODgyNTAwRjQ4
NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzcyODY5NEMxNEY4ODgyNTAwRjQ4NERDIC8qIEVY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oICovOyB9OwogCQk3NzI4Njk4NDE0RkQ5QURBMDBG
NDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3Mjg2OTgyMTRGRDlBREEwMEY0ODREQyAv
KiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oICovOyB9OwotCQk3Nzc5QkQ5NTFGMzEy
RDAxMDBDMjE0MTcgLyogVmlzdWFsVmlld3BvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzc3OUJEOTQxRjMxMTdCNzAwQzIxNDE3IC8qIFZpc3Vh
bFZpZXdwb3J0LmNwcCAqLzsgfTsKIAkJNzc3OUJEOTYxRjMyMjQ2QTAwQzIxNDE3IC8qIEpTVmlz
dWFsVmlld3BvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc3NzlCRDkyMUYyRkRCRjcwMEMyMTQxNyAvKiBKU1Zpc3VhbFZpZXdwb3J0LmggKi87IH07
Ci0JCTc3NzlCRDk3MUYzMjI0NkQwMEMyMTQxNyAvKiBKU1Zpc3VhbFZpZXdwb3J0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3NzlCRDkxMUYyRkRC
Q0UwMEMyMTQxNyAvKiBKU1Zpc3VhbFZpZXdwb3J0LmNwcCAqLzsgfTsKIAkJNzdBMTdBNzExMkYy
ODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3QTE3QTZFMTJGMjgxODIwMDRFMDJGNiAv
KiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgKi87IH07CiAJCTc3QTE3QTcyMTJGMjgxODIwMDRF
MDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzdBMTdBNkYxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRl
eEFycmF5T2JqZWN0LmggKi87IH07CiAJCTc3QTE3QTc3MTJGMjg2NDIwMDRFMDJGNiAvKiBXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc3QTE3QTc0MTJGMjg2NDIwMDRFMDJGNiAvKiBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTLmNwcCAqLzsgfTsKQEAgLTU0NDcsNiArNTQ0Niw4IEBACiAJCTBGOEI0NTc0
MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxi
YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTRBMzk1MUVGMUIxMDUwMEZC
QUZGQiAvKiBKU0RPTVF1YWRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNET01RdWFkQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNo
TW9uaXRvcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMEMxRkQx
QzY2MzAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01HQ091dHB1dENvbnN0cmFpbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwRTFGRDFDNjY0MDA3OUM1QjIgLyogRE9NR0NP
dXRwdXRDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUdD
T3V0cHV0Q29uc3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEwODUy
QjFFNkZCNTVBMDA5NzVGREQgLyogQ1NTUHJvcGVydGllcy5qc29uICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5qc29uOyBwYXRoID0gQ1NTUHJv
cGVydGllcy5qc29uOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyNEQ3NzE2MkRG
OTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NMYXllclVwZGF0ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkEyNEQ3ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NM
YXllclVwZGF0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NM
YXllclVwZGF0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOTY2LDYgKzIy
OTY3LDggQEAKIAkJCQk5NTIwNzYwMjFGMjY3NUY5MDA3RDJBQUIgLyogQ2FsbFRyYWNlclR5cGVz
LmggKi8sCiAJCQkJMEY2MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLywK
IAkJCQkwRjYwRjMyQTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uaCAqLywKKwkJCQkwRjlE
QUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcCAqLywKKwkJ
CQkwRjlEQUEwRTFGRDFDNjY0MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmggKi8s
CiAJCQkJN0M1MTZBRDIxRjM1MjUyMDAwMzRCNkJGIC8qIERPTVByb21pc2VQcm94eS5oICovLAog
CQkJCUJDNTNEQTQ3MTE0MzEzNEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3BwICovLAog
CQkJCUJDNTNEQTJEMTE0MzEyMUUwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuaCAqLywKQEAg
LTI3NTE5LDYgKzI3NTIyLDcgQEAKIAkJCQk1MThGNTAwNDE5NENBQzNBMDA4MUJBQUUgLyogSlNH
YW1lcGFkQnV0dG9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTgwREE2NDBFOUM0NzAzMDAwRDZG
NzUgLyogSlNHZW9sb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU4MERBNjYwRTlDNDcw
MzAwMEQ2Rjc1IC8qIEpTR2VvcG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURBQTBG
MUZEMUM2NkEwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGREE3QzFGMTg4MzIyRkMwMEM5NTRCNSAvKiBKU0dlc3R1cmVFdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODQ4MkI3NTIxMTk4Q0I2QjAwQkZCMDA1IC8qIEpTSGFzaENoYW5nZUV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0RDE0RjBDMjc1QzY4MDA2QkM2MTcgLyogSlNI
aXN0b3J5LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTUdDT3V0
cHV0Q29uc3RyYWludC5oIgorCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2lu
Y2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL01hcmtlZEFsbG9jYXRv
cklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oPgorI2luY2x1
ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK0RPTUdDT3V0cHV0
Q29uc3RyYWludDo6RE9NR0NPdXRwdXRDb25zdHJhaW50KFZNJiB2bSwgSlNWTUNsaWVudERhdGEm
IGNsaWVudERhdGEpCisgICAgOiBNYXJraW5nQ29uc3RyYWludCgiRG9tb3V0IiwgIkRPTSBPdXRw
dXQgQ29uc3RyYWludCIsIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpCisgICAg
LCBtX3ZtKHZtKQorICAgICwgbV9jbGllbnREYXRhKGNsaWVudERhdGEpCisgICAgLCBtX2xhc3RF
eGVjdXRpb25WZXJzaW9uKHZtLmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSkKK3sKK30K
KworRE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdHJhaW50KCkKK3sKK30K
KworQ29uc3RyYWludFBhcmFsbGVsaXNtIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUlt
cGwoU2xvdFZpc2l0b3ImKQoreworICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CisgICAgICAg
ICAgICAKKyAgICBpZiAoaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpID09IG1fbGFzdEV4
ZWN1dGlvblZlcnNpb24pCisgICAgICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxsZWxpc206OlNl
cXVlbnRpYWw7CisgICAgICAgICAgICAKKyAgICBtX2xhc3RFeGVjdXRpb25WZXJzaW9uID0gaGVh
cC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOworCisgICAgUkVMRUFTRV9BU1NFUlQobV90YXNr
cy5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNw
YWNlKAorICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgeworICAgICAgICAgICAgYXV0
byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nh
c3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxl
KHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdGFza3Mu
YXBwZW5kKHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChmdW5jKSk7CisgICAg
ICAgIH0pOworICAgICAgICAgICAgCisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWw7Cit9CisgICAgICAgIAordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFy
YWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKGF1dG8mIHRh
c2sgOiBtX3Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4odmlzaXRvcik7Cit9CisgICAgICAgIAor
dm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZp
c2l0b3ImKQoreworICAgIG1fdGFza3MuY2xlYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEpTVk1DbGllbnREYXRhOworCitjbGFzcyBET01HQ091dHB1dENv
bnN0cmFpbnQgOiBwdWJsaWMgSlNDOjpNYXJraW5nQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAg
RE9NR0NPdXRwdXRDb25zdHJhaW50KEpTQzo6Vk0mLCBKU1ZNQ2xpZW50RGF0YSYpOworICAgIH5E
T01HQ091dHB1dENvbnN0cmFpbnQoKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0M6OkNvbnN0
cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRl
OworICAgIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyAgICBKU1ZNQ2xpZW50RGF0
YSYgbV9jbGllbnREYXRhOworICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlvblZlcnNpb247Cisg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+PiBtX3Rhc2tz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyNTE3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAKKyNpbmNsdWRlICJET01HQ091dHB1
dENvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxoZWFw
L0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaD4KLSNpbmNsdWRl
IDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL01hcmtlZEJs
b2NrSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8aGVhcC9WaXNpdGluZ1RpbWVvdXQuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIApAQCAtNzIsNDMgKzcwLDcgQEAgdm9pZCBKU1ZNQ2xp
ZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKFZNKgogICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnRE
YXRhID0gbmV3IEpTVk1DbGllbnREYXRhKCp2bSk7CiAgICAgdm0tPmNsaWVudERhdGEgPSBjbGll
bnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAgICAgCi0gICAgYXV0byBjb25z
dHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oCi0gICAgICAgICJX
Y29jIiwgIldlYkNvcmUgT3V0cHV0IENvbnN0cmFpbnRzIiwKLSAgICAgICAgW3ZtLCBjbGllbnRE
YXRhLCBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IHZtLT5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJz
aW9uKCldCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpIG11dGFibGUgewotICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLT5oZWFwOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lv
bigpID09IGxhc3RFeGVjdXRpb25WZXJzaW9uKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0
b3JFeGVjdXRpb25WZXJzaW9uKCk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFuYWdl
IHRoZSB2aXNpdCBjb3VudCBoZXJlIG91cnNlbHZlcy4gV2UgbmVlZCB0byBrbm93IHRoYXQgaWYg
dGhpcyBhZGRzCi0gICAgICAgICAgICAvLyBvcGFxdWUgcm9vdHMgdGhlbiB3ZSBjYW5ub3QgZGVj
bGFyZSB0ZXJtaW5hdGlvbiB5ZXQuIFRoZSB3YXkgd2Ugc2lnbmFsIHRoaXMgdG8gdGhlCi0gICAg
ICAgICAgICAvLyBjb25zdHJhaW50IHNvbHZlciBpcyBieSBhZGRpbmcgdG8gdGhlIHZpc2l0IGNv
dW50LgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgbnVtT3BhcXVlUm9vdHNCZWZv
cmUgPSBoZWFwLm51bU9wYXF1ZVJvb3RzKCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtl
IHRoaXMgcGFyYWxsZWwhCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1SZXZpc2l0ZWQgPSAwOwot
ICAgICAgICAgICAgY2xpZW50RGF0YS0+Zm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKLSAg
ICAgICAgICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgewotICAgICAgICAgICAgICAg
ICAgICBzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbCgKLSAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBD
ZWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSgqdm0p
LT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGwsIHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1SZXZpc2l0ZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiKCIsIG51bVJldmlzaXRlZCwgIikiKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoaGVh
cC5udW1PcGFxdWVSb290cygpIC0gbnVtT3BhcXVlUm9vdHNCZWZvcmUpOwotICAgICAgICB9LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKLSAgICB2bS0+aGVh
cC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKKyAgICB2bS0+aGVh
cC5hZGRNYXJraW5nQ29uc3RyYWludChzdGQ6Om1ha2VfdW5pcXVlPERPTUdDT3V0cHV0Q29uc3Ry
YWludD4oKnZtLCAqY2xpZW50RGF0YSkpOwogICAgICAgICAKICAgICBjbGllbnREYXRhLT5tX25v
cm1hbFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoKnZtLCB0cnVlKTsKICAgICB2bS0+
bV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMjUxNzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQmVmb3JlTG9hZEV2ZW50LmgiCiAjaW5j
bHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAj
aW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbnRh
aW5lck5vZGVBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgi
CkBAIC0yMTYyLDcgKzIxNjMsMTQgQEAgRXZlbnRUYXJnZXREYXRhKiBOb2RlOjpldmVudFRhcmdl
dERhdGEoKQogCiBFdmVudFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJl
bnRseSgpCiB7Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1h
cExvY2spOworICAgIC8vIE5vdCBob2xkaW5nIHRoZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0
b3BwZWQgYWNjZWxlcmF0ZXMgcGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nLCB3aGljaAorICAg
IC8vIGNhbGxzIHRoaXMgZnVuY3Rpb24gZnJvbSBtYW55IHRocmVhZHMuIFBhcmFsbGVsIGNvbnN0
cmFpbnQgc29sdmluZyBjYW4gaGFwcGVuIHdpdGggdGhlIHdvcmxkCisgICAgLy8gcnVubmluZyBv
ciBzdG9wcGVkLCBidXQgaWYgd2UgZG8gaXQgd2l0aCBhIHJ1bm5pbmcgd29ybGQsIHRoZW4gd2Un
cmUgdXN1YWxseSBtaXhpbmcgY29uc3RyYWludAorICAgIC8vIHNvbHZpbmcgd2l0aCBvdGhlciB3
b3JrLiBUaGVyZWZvcmUsIHRoZSBtb3N0IGxpa2VseSB0aW1lIGZvciBjb250ZW50aW9uIG9uIHRo
aXMgbG9jayBpcyB3aGVuIHRoZQorICAgIC8vIHdvcmxkIGlzIHN0b3BwZWQuIFdlIGRvbid0IGhh
dmUgdG8gaG9sZCB0aGUgbG9jayB3aGVuIHRoZSB3b3JsZCBpcyBzdG9wcGVkLCBiZWNhdXNlIGEg
c3RvcHBlZCB3b3JsZAorICAgIC8vIG1lYW5zIHRoYXQgd2Ugd2lsbCBuZXZlciBtdXRhdGUgdGhl
IGV2ZW50IHRhcmdldCBkYXRhIG1hcC4KKyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxs
KCk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9ja0lmKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9j
aywgdm0gJiYgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgcmV0dXJuIGhhc0V2ZW50
VGFyZ2V0RGF0YSgpID8gZXZlbnRUYXJnZXREYXRhTWFwKCkuZ2V0KHRoaXMpIDogbnVsbHB0cjsK
IH0KIApAQCAtMjE3MSw2ICsyMTc5LDkgQEAgRXZlbnRUYXJnZXREYXRhJiBOb2RlOjplbnN1cmVF
dmVudFRhcmdldAogICAgIGlmIChoYXNFdmVudFRhcmdldERhdGEoKSkKICAgICAgICAgcmV0dXJu
ICpldmVudFRhcmdldERhdGFNYXAoKS5nZXQodGhpcyk7CiAKKyAgICBKU0M6OlZNKiB2bSA9IGNv
bW1vblZNT3JOdWxsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtIHx8IHZtLT5oZWFwLndvcmxk
SXNSdW5uaW5nKCkpOworCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0
RGF0YU1hcExvY2spOwogICAgIHNldEhhc0V2ZW50VGFyZ2V0RGF0YSh0cnVlKTsKICAgICByZXR1
cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmFkZCh0aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPEV2ZW50
VGFyZ2V0RGF0YT4oKSkuaXRlcmF0b3ItPnZhbHVlOwpAQCAtMjE3OCw2ICsyMTg5LDggQEAgRXZl
bnRUYXJnZXREYXRhJiBOb2RlOjplbnN1cmVFdmVudFRhcmdldAogCiB2b2lkIE5vZGU6OmNsZWFy
RXZlbnRUYXJnZXREYXRhKCkKIHsKKyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtIHx8IHZtLT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOwog
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc19ldmVudFRhcmdldERhdGFNYXBMb2NrKTsKICAg
ICBldmVudFRhcmdldERhdGFNYXAoKS5yZW1vdmUodGhpcyk7CiB9CkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDIpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0x
Mi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0
cmFpbnQgc29sdmluZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2MtYmVuY2ht
YXJrczogQWRkIHNwbGF5LWxhdGVuY3kgdGVzdCwgc2luY2UgdGhpcyBjaGFuZ2UgbmVlZGVkIHRv
IGJlIGNhcmVmdWxseSB2YWxpZGF0ZWQgd2l0aCB0aGF0IGJlbmNobWFyay4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcDogQWRkZWQuIFRoaXMgaGFz
IHVuaXQgdGVzdHMgb2YgdGhlIG5ldyBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlLiBUaGUgdGVz
dHMgZm9jdXMgb24gY29ycmVjdG5lc3MgdW5kZXIgc2VyaWFsIGV4ZWN1dGlvbiwgd2hpY2ggYXBw
ZWFycyB0byBiZSBlbm91Z2ggZm9yIG5vdyAoaXQncyBzbyBlYXN5IHRvIGNhdGNoIGEgY29uY3Vy
cmVuY3kgYnVnIGJ5IGp1c3QgcnVubmluZyB0aGUgR0MpLgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisKIDIwMTctMTItMDEgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBTYW1wbGVNYXAuY3BwIEFQSSB0ZXN0cyB0byBD
TWFrZQpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHJldmlzaW9uIDIyNTE3OCkKKysr
IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw4IEBAIExPTkdTUElERVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAKIFY4X1BB
VEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU3VuU3BpZGVyIiArICJ0ZXN0cyIgKyAidjgt
djYiCiBUQUlMQkVOQ0hfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJUYWlsQmVuY2g5
MDAwIgogTUlDUk9CRU5DSE1BUktTX1BBVEggPSBPUEVOU09VUkNFX1BBVEggKyAiSlNUZXN0cyIg
KyAibWljcm9iZW5jaG1hcmtzIgotT0NUQU5FX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVT
VFNfUEFUSCArICJPY3RhbmUiICsgIndyYXBwZXJzIgorT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCA9
IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJPY3RhbmUiCitPQ1RBTkVfV1JBUFBFUl9QQVRIID0g
T1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCArICJ3cmFwcGVycyIKIEpTQkVOQ0hfUEFUSCA9IFBFUkZP
Uk1BTkNFVEVTVFNfUEFUSCArICJKU0JlbmNoIgogU0lYU1BFRURfUEFUSCA9IFBFUkZPUk1BTkNF
VEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAidGVzdHMiCiBTSVhTUEVFRF9XUkFQUEVSX1BBVEgg
PSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU2l4U3BlZWQiICsgIndyYXBwZXJzIgpAQCAtODQx
LDYgKzg0MiwyMCBAQCBjbGFzcyBTaW5nbGVGaWxlVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCiAg
IGVuZAogZW5kCiAKKyMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2YgYSBzaW5nbGUgZmlsZSBh
bmQgbXVzdCBiZSBsb2FkZWQgaW4gaXRzIG93biBnbG9iYWwgb2JqZWN0IGVhY2gKKyMgdGltZSAo
aS5lLiBydW4oKSksIGJ1dCByZXR1cm5zIGl0cyByZXN1bHQgaW4gYSBjdXN0b20gd2F5LgorY2xh
c3MgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycworICBhdHRyX3JlYWRl
ciA6YmVuY2hQYXRoCisgIAorICBkZWYgaW5pdGlhbGl6ZShiZW5jaFBhdGgpCisgICAgQGJlbmNo
UGF0aCA9IGJlbmNoUGF0aAorICBlbmQKKyAgCisgIGRlZiBraW5kCisgICAgOnNpbmdsZUZpbGVD
dXN0b21UaW1lZEJlbmNobWFyaworICBlbmQKK2VuZAorCiAjIEJlbmNobWFyayB0aGF0IGNvbnNp
c3RzIG9mIG9uZSBvciBtb3JlIGRhdGEgZmlsZXMgdGhhdCBzaG91bGQgYmUgbG9hZGVkIGdsb2Jh
bGx5LCBmb2xsb3dlZAogIyBieSBhIGNvbW1hbmQgdG8gcnVuIHRoZSBiZW5jaG1hcmsuCiBjbGFz
cyBNdWx0aUZpbGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKQEAgLTk2NSw2ICs5ODAsMjUgQEAg
ZGVmIGVtaXRCZW5jaFJ1bkNvZGVGaWxlKG5hbWUsIHBsYW4sIGJlbgogICAgICAgICBkb3VibGVQ
dXRzKCRzdGRlcnIsZmlsZSwiICAgIGlmIChfX2JlbmNoZXJfaW5kZXggPj0gI3t3YXJtdXB9KSBw
cmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiBcIiArIChfX2Jl
bmNoZXJfaW5kZXggLSAje3dhcm11cH0pICsgXCI6IFRpbWU6IFwiKygoX19hZnRlci1fX2JlZm9y
ZSkvX19ydW5zKSk7IikKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0iKQogICAg
ICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiI3tiZW5jaFBhcmFtcy50ZWFyRG93bkNvbW1h
bmQuanN9IikKKyAgICAgIGVsc2lmIGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVDdXN0
b21UaW1lZEJlbmNobWFyaworICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rp
b24gX19iZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCisgICAgICAgIGRvdWJsZVB1dHMo
JHN0ZGVycixmaWxlLCIgICB2YXIgX19iZW5jaGVyX3Jlc3VsdCA9IHt2YWx1ZTogbnVsbH07IikK
KyAgICAgICAgJHJlcnVuLnRpbWVzIHsKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmls
ZSwiICAgcnVuKF9fYmVuY2hlcl93aGF0LCBfX2JlbmNoZXJfcmVzdWx0KTsiKQorICAgICAgICB9
CisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBpZiAoX19iZW5jaGVyX3Jlc3Vs
dC52YWx1ZSA9PSBudWxsKSIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAg
ICB0aHJvdyBuZXcgRXJyb3IoXCJOdWxsIHJlc3VsdFwiKTsiKQorICAgICAgICBkb3VibGVQdXRz
KCRzdGRlcnIsZmlsZSwiICAgcmV0dXJuIF9fYmVuY2hlcl9yZXN1bHQudmFsdWU7IikKKyAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0iKQorICAgICAgICAkd2FybXVwLnRpbWVzIHsK
KyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiX19iZW5jaGVyX3J1bigje2JlbmNo
UGFyYW1zLmJlbmNoUGF0aC5pbnNwZWN0fSkiKQorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCJnYygpOyIpIHVubGVzcyBwbGFuLnZtLnNob3VsZE1lYXN1cmVHQworICAgICAgICB9
CisgICAgICAgICRpbm5lci50aW1lcyB7CisgICAgICAgICAgfCBpbm5lckluZGV4IHwKKyAgICAg
ICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwicHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19
OiAje3BsYW4uaXRlcmF0aW9ufTogI3tpbm5lckluZGV4fTogVGltZTogXCIrX19iZW5jaGVyX3J1
bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5pbnNwZWN0fSkpOyIpCisgICAgICAgICAgZG91Ymxl
UHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdD
CisgICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgICAgcmFpc2UgdW5sZXNzIGJlbmNoUGFyYW1z
LmtpbmQgPT0gOnNpbmdsZUZpbGVUaW1lZEJlbmNobWFyawogICAgICAgICBkb3VibGVQdXRzKCRz
dGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCkBA
IC0xNTk0LDYgKzE2MjgsMTkgQEAgY2xhc3MgT2N0YW5lQmVuY2htYXJrCiAgIGVuZAogZW5kCiAK
K2NsYXNzIEN1c3RvbVRpbWVkQmVuY2htYXJrCisgIGluY2x1ZGUgQmVuY2htYXJrCisgIAorICBk
ZWYgaW5pdGlhbGl6ZShuYW1lLCBmdWxsUGF0aCkKKyAgICBAbmFtZSA9IG5hbWUKKyAgICBAZnVs
bFBhdGggPSBmdWxsUGF0aAorICBlbmQKKyAgCisgIGRlZiBlbWl0UnVuQ29kZShwbGFuKQorICAg
IGVtaXRCZW5jaFJ1bkNvZGUoZnVsbG5hbWUsIHBsYW4sIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJl
bmNobWFya1BhcmFtZXRlcnMubmV3KGVuc3VyZUZpbGUoIkN1c3RvbVRpbWVkLSN7QG5hbWV9Iiwg
QGZ1bGxQYXRoKSkpCisgIGVuZAorZW5kCisKIGNsYXNzIEtyYWtlbkJlbmNobWFyawogICBpbmNs
dWRlIEJlbmNobWFyawogICAKQEAgLTMwMTAsNiArMzA1Nyw3IEBAIGJlZ2luCiAgICAgfCBhcmdz
IHwKICAgICBPQ1RBTkUuYWRkIE9jdGFuZUJlbmNobWFyay5uZXcoKmFyZ3MpCiAgIH0KKyAgT0NU
QU5FLmFkZCBDdXN0b21UaW1lZEJlbmNobWFyay5uZXcoInNwbGF5LWxhdGVuY3kiLCAoT1BFTlNP
VVJDRV9PQ1RBTkVfUEFUSCArICJzcGxheS5qcyIpLnRvX3MpCiAKICAgS1JBS0VOID0gQmVuY2ht
YXJrU3VpdGUubmV3KCJLcmFrZW4iLCA6YXJpdGhtZXRpY01lYW4sIC0xKQogICBbImFpLWFzdGFy
IiwgImF1ZGlvLWJlYXQtZGV0ZWN0aW9uIiwgImF1ZGlvLWRmdCIsICJhdWRpby1mZnQiLApJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjUxNzgpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5
OCw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvQmxvb21GaWx0ZXIuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RG
L0NTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NoZWNrZWRB
cml0aG1ldGljT3BlcmF0aW9ucy5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL0NvbmRpdGlvbi5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
Q3Jvc3NUaHJlYWRUYXNrLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9E
YXRlTWF0aC5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjUxNzgp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCQkwRjEzOUU3ODFBNDIz
QTZCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAv
KiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICovOyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBG
NTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0
Zm9ybVV0aWxpdGllc0NvY29hLm1tICovOyB9OwogCQkwRjJDMjBCODFEQ0Q1NDUwMDA1NDJEOUUg
LyogVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJEOUUgLyogVGltZS5jcHAgKi87IH07CisJCTBGMzBDQjVD
MUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUz
MjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjNCOTRBNzFBNzcyNjc0
MDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcy
IC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSAqLzsgfTsKIAkJMEY0RkZBOUUxRUQz
QUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RkZBOUQxRUQzQUE4NTAwRjcx
MTFGIC8qIFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tICovOyB9OwogCQkxMTVFQjM0MzFF
RTBCQTAzMDAzQzJDMEEgLyogVmlld3BvcnRTaXplRm9yVmlld3BvcnRVbml0cy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExNUVCMzQyMUVFMEI3MjAw
MDNDMkMwQSAvKiBWaWV3cG9ydFNpemVGb3JWaWV3cG9ydFVuaXRzLm1tICovOyB9OwpAQCAtMTA2
Nyw2ICsxMDY4LDcgQEAKIAkJMEYxMzlFNzUxQTQyM0E1MzAwRjU5MEY1IC8qIFdlYWtPYmpDUHRy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vha09iakNQdHIu
bW07IHBhdGggPSBjb2NvYS9XZWFrT2JqQ1B0ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxN0JCRDQxNUFGNkM0RDAwN0FCNzUzIC8qIFdlYkNvcmVTdGF0aXN0aWNzV2l0aE5v
V2ViUHJvY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJD
b3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJEOUUgLyogVGltZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjk0QTUxQTc3MjY2
QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFG
IC8qIFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEZGQUEwMUVEM0QwREUwMEY3MTExRiAvKiBJbWFnZUlP
LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gSW1hZ2VJTy5mcmFtZXdvcms7IHBhdGggPSBT
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ltYWdlSU8uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
U0RLUk9PVDsgfTsKQEAgLTI1ODEsNiArMjU4Myw3IEBACiAJCQkJMjZGMUI0NDIxNUNBNDM0RjAw
RDFFNEJGIC8qIEF0b21pY1N0cmluZy5jcHAgKi8sCiAJCQkJRTQwMDE5MzAxQUNFOUI1QzAwMUIw
QTJBIC8qIEJsb29tRmlsdGVyLmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQg
LyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjMwQ0I1QjFGQ0Ux
NzkyMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAogCQkJCTBGRUFFMzY3
MUI3RDE5Q0IwMENFMTdGMiAvKiBDb25kaXRpb24uY3BwICovLAogCQkJCTUxNzE0RUI5MUQwODc0
MTYwMDQ3MjNDNCAvKiBDcm9zc1RocmVhZFRhc2suY3BwICovLAogCQkJCTI2QTJDNzJFMTVFMkU3
M0MwMDVCMUExNCAvKiBDU3RyaW5nLmNwcCAqLywKQEAgLTMxNjUsNiArMzE2OCw3IEBACiAJCQkJ
N0M4M0RFRjYxRDBBNTkwQzAwRkVCQ0YzIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0M4M0RFRkUxRDBBNTkwQzAwRkVCQ0YzIC8qIE5ha2VkUHRyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1N0Q1NEYzMUYzMzhDMzYwMEE5N0FBNyAvKiBOZXZlckRlc3Ryb3llZC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMwQ0I1QzFGQ0UxNzk2MDA0QjUzMjMgLyogQ29uY3Vy
cmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDExRDBBNTkwQzAw
RkVCQ0YzIC8qIE9wdGlvbmFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNzdCQUEzMUQ5QUZG
RkMwMDVGQzU2OCAvKiBPcHRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDIx
RDBBNTkwQzAwRkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0NvbmN1
cnJlbnRQdHJIYXNoU2V0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKKworbmFtZXNwYWNlIHsKKworLy8gYGNvbW1hbmRzYCBpcyBhIHN0cmlu
ZyB0aGF0IHRlbGxzIHRoaXMgdGhpbmcgd2hhdCB0byBkby4gSXQgaGFzIHRvIGhhdmUgYW4gZXZl
biBudW1iZXIgb2YgY2hhcmFjdGVycy4KKy8vIFRoZSBjaGFyYWN0ZXIgcGFpcnMgYXJlIGNvbW1h
bmRzLiBDb21tYW5kczoKKy8vCisvLyAreCAgICAgQWRkcyAneCcgdG8gdGhlIHNldCAoY2FzdHMg
J3gnIHRvIGEgdm9pZCopIGFuZCBhc3NlcnRzIHRoYXQgaXQncyBuZXcuCisvLyAheCAgICAgQWRk
cyAneCcgdG8gdGhlIHNldCBhbmQgYXNzZXJ0cyB0aGF0IGl0IHdhcyB0aGVyZSBhbHJlYWR5Lgor
Ly8gPXggICAgIEFzc2VydHMgdGhhdCAneCcgaXMgaW4gdGhlIHNldAorLy8gLXggICAgIEFzc2Vy
dHMgdGhhdCAneCcgaXMgbm90IGluIHRoZSBzZXQKK3ZvaWQgZG9UZXN0KGNvbnN0IGNoYXIqIGNv
bW1hbmRzKQoreworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IHNldDsKKyAgICBmb3IgKGNvbnN0
IGNoYXIqIGNvbW1hbmQgPSBjb21tYW5kczsgY29tbWFuZFswXSAmJiBjb21tYW5kWzFdOyBjb21t
YW5kICs9IDIpIHsKKyAgICAgICAgdm9pZCogcHRyID0gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KGNvbW1hbmRbMV0pKTsKKyAgICAgICAgc3dpdGNoIChjb21tYW5k
WzBdKSB7CisgICAgICAgIGNhc2UgJysnOgorICAgICAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmFk
ZChwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICchJzoKKyAgICAgICAg
ICAgIEVYUEVDVF9GQUxTRShzZXQuYWRkKHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKHB0cikp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgRVhQ
RUNUX0ZBTFNFKHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEVtcHR5KQoreworICAg
IGRvVGVzdCgiIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVF
bGVtZW50KQoreworICAgIGRvVGVzdCgiK3g9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3Vy
cmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnRNdWx0aXBsZVRpbWVzKQoreworICAgIGRvVGVz
dCgiK3gheCF4IXgheCF4IXgheCF4IXgheD14LXktMCIpOworfQorCitURVNUKFdURl9Db25jdXJy
ZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudE1hbnlUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4
IXgheCF4IXgheCF4IXgheCF4IXg9eC15LTAheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVu
dHMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2kr
bytwK2ErcytkK2YrZytoK2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtB
K1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9
cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1Z
PVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK1RFU1Qo
V1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c01hbnlUaW1lcykKK3sK
KyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStz
K2QrZitnK2graitrK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0Yr
RytIK0orSytMK1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11
PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89
UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4hMSEyITMhNCE1ITYhNyE4ITkhMCFx
IXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUh
UiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2
ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIh
biFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSEx
ITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwh
eiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFD
IVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYh
ZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFK
IUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8h
cCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFT
IUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIh
dCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFV
IUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkh
MCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFX
IUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQh
NSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2
IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4h
TSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFr
IWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVoh
WCFDIVYhQiFOIU0iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExv
dHNPZkVsZW1lbnRzQW5kUXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rl
c3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2gr
aitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1q
PWstbC16LXgtYy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwt
Wi1YLUMtVi1CLU4tTStsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtG
K0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9
dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1P
PVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK1RFU1QoV1RGX0Nv
bmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRTb21lRWxlbWVudHNNdWx0aXBsZVRpbWVzVGhlbkFkZFRo
ZVJlc3RBbmRRdWVyeVNvbWVCZWZvcmVBZGRpbmdUaGVSZXN0KQoreworICAgIGRvVGVzdCgiKzEr
MiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0
ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUh
ciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3
IWUhciF0ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0K3krdStpK28rcCthK3MrZCtmK2cr
aCtqK2s9MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1o
PWo9ay1sLXoteC1jLXYtYi1uLW0tUS1XLUUtUi1ULVktVS1JLU8tUC1BLVMtRC1GLUctSC1KLUst
TC1aLVgtQy1WLUItTi1NK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytE
K0YrRytIK0orSytMK1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9
eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1J
PU89UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328149</attachid>
            <date>2017-12-01 13:36:36 -0800</date>
            <delta_ts>2017-12-01 14:08:21 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>233114</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MyBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIEl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgYSBzbWFs
bAorICAgICAgICBTcGVlZG9tZXRlciBzcGVlZC11cC4KKyAgICAgICAgCisgICAgICAgIENvbnN0
cmFpbnRzIGNhbiBub3cgYmUgcGFyYWxsZWwgaW4gdHdvIGFsbW9zdCBvcnRob2dvbmFsIHdheXM6
CisgICAgICAgIAorICAgICAgICAtIEEgY29uc3RyYWludCdzIGV4ZWN1dGUgZnVuY3Rpb24gY2Fu
IG5vdyBydW4gaW4gcGFyYWxsZWwgdG8gb3RoZXIgY29uc3RyYWludHMnIGV4ZWN1dGUgZnVuY3Rp
b25zLgorICAgICAgICAgIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMga2luZCBvZiBwYXJhbGxlbGlz
bSB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBzdXBwb3J0cy4gVW5sZXNzIGEKKyAgICAgICAg
ICBjb25zdHJhaW50IG9wdHMgb3V0IG9mIHRoaXMgKHRoZSBKU0MgU1BJIGNvbnN0cmFpbnRzIG9w
dCBvdXQgZm9yIGNvbXBhdCByZWFzb25zKSwgaXQgd2lsbAorICAgICAgICAgIGF1dG9tYXRpY2Fs
bHkgYmUgcnVuIGFzIHBhcnQgb2YgdGhlIHBhcmFsbGVsIHNvbHZlci4gSWYgYSBjb25zdHJhaW50
IG9wdHMgb3V0LCBpdCB3aWxsIHJ1bgorICAgICAgICAgIHNlcXVlbnRpYWxseSAtIHRoZSBzYW1l
IHdheSBhcyBiZWZvcmUsIG9uIHRoZSBzYW1lIHRocmVhZCBhcyBiZWZvcmUgLSBhZnRlciB0aGUg
cGFyYWxsZWwKKyAgICAgICAgICBjb25zdHJhaW50IHNvbHZlciBmaW5pc2hlcy4KKyAgICAgICAg
CisgICAgICAgIC0gQSBjb25zdHJhaW50IGNhbiBjcmVhdGUgcGFyYWxsZWwgd29yayBmb3IgaXRz
ZWxmLCB3aGljaCB0aGUgY29uc3RyYWludCBzb2x2ZXIgd2lsbCBpbnRlcmxlYXZlCisgICAgICAg
ICAgd2l0aCBvdGhlciBwYXJhbGxlbCB3b3JrIGZyb20gb3RoZXIgY29uc3RyYWludHMuIElmIGEg
Y29uc3RyYWludCBjYW4gY3JlYXRlIGEgbG90IG9mIHBhcmFsbGVsCisgICAgICAgICAgd29yaywg
dGhlbiB0aGUgc29sdmVyIHdpbGwgYWxsb3cgdGhhdCBjb25zdHJhaW50IHRvIGdldCBhbGwgY29y
ZXMgZm9yIGFzIGxvbmcgYXMgaXQgbmVlZHMgdG8KKyAgICAgICAgICBmaW5pc2guCisgICAgICAg
IAorICAgICAgICBJdCdzIG5vdCBwb3NzaWJsZSwgdmlhIHRoZSBBUEksIHRvIGhhdmUgYSBsZWdh
Y3kgc2VxdWVudGlhbCBjb25zdHJhaW50IHRoYXQgY3JlYXRlcyBwYXJhbGxlbCB3b3JrCisgICAg
ICAgIGZvciBpdHNlbGYuIEhvd2V2ZXIsIHN1Y2ggY29uc3RyYWludHMgYXJlIGZyZWUgdG8gc3Rh
cnQgdGhlaXIgb3duIHRocmVhZHMsIGlmIHRoZXkgcmVhbGx5IGRpZCBoYXZlCisgICAgICAgIHNv
bWUgcGFyYWxsZWxpc20gb3Bwb3J0dW5pdGllcy4KKyAgICAgICAgCisgICAgICAgIEEgbG90IG9m
IHRoaXMgY2hhbmdlIGlzIGFib3V0IG1ha2luZyBpdCBlYXN5IHRvIGl0ZXJhdGUgR0MgZGF0YSBz
dHJ1Y3R1cmVzIGluIHBhcmFsbGVsLiBUaGlzCisgICAgICAgIGNoYW5nZSBtYWtlcyBhbG1vc3Qg
YWxsIGNvbnN0cmFpbnRzIHBhcmFsbGVsLWVuYWJsZWQsIGJ1dCBvbmx5IHRoZSBET00ncyBvdXRw
dXQgY29uc3RyYWludCB1c2VzCisgICAgICAgIHRoZSBwYXJhbGxlbCB3b3JrIEFQSS4gVGhhdCBj
b25zdHJhaW50IGl0ZXJhdGVzIHRoZSBtYXJrZWQgY2VsbHMgaW4gdHdvIHN1YnNwYWNlcy4gVGhp
cyBjaGFuZ2UKKyAgICAgICAgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIGNvbXBvc2UgcGFyYWxsZWwg
aXRlcmF0b3JzIG92ZXIgc3Vic3BhY2VzLCBhbGxvY2F0b3JzLCBibG9ja3MsIGFuZCBjZWxscy4K
KyAgICAgICAgVGhlIG1hcmtlZCBjZWxsIHBhcmFsbGVsIGl0ZXJhdG9yIGlzIGNvbXBvc2VkIG91
dCBvZiBwYXJhbGxlbCBpdGVyYXRvcnMgZm9yIHRoZSBvdGhlcnMuIEEgcGFyYWxsZWwKKyAgICAg
ICAgaXRlcmF0b3IgaXMganVzdCBhbiBpdGVyYXRvciB0aGF0IGNhbiBkbyBhbiBhdG9taWMgbmV4
dCgpIHZlcnkgcXVpY2tseS4gV2UgYWJzdHJhY3QgdGhlbSB1c2luZworICAgICAgICBSZWZQdHI8
U2hhcmVkVGFzazwuLi4oKT4+LCB3aGVyZSAuLi4gaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0
aGUgaXRlcmF0b3IuIFdlIGtub3cgaXQncyBkb25lCisgICAgICAgIHdoZW4gaXQgcmV0dXJucyBh
IGZhbHNpc2ggdmVyc2lvbiBvZiAuLi4gKGluIHRoZSBjdXJyZW50IGNvZGUsIHRoYXQncyBhbHdh
eXMgYSBwb2ludGVyIHR5cGUsIHNvCisgICAgICAgIGRvbmUgaXMgaW5kaWNhdGVkIGJ5IG51bGwp
LgorCisgICAgICAgICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcDoKKyAgICAg
ICAgKEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAqIEFQSS9K
U1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgor
ICAgICAgICAoc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCk6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRXZWFrbHkpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UpOgorICAgICAg
ICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRldGVybWlu
ZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3BwOgorICAgICAgICAqIGZ0
bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAg
KiBoZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldCk6CisgICAg
ICAgIChKU0M6OkhlYXA6OnJ1bkZpeHBvaW50UGhhc2UpOgorICAgICAgICAoSlNDOjpIZWFwOjpz
dG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVzdW1lVGhlUGVyaXBoZXJ5
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1blRh
c2tJblBhcmFsbGVsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6d29y
bGRJc1J1bm5pbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5GdW5jdGlvbkluUGFy
YWxsZWwpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVh
cDo6d29ybGRJc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFwOjppc01hcmtlZCk6
CisgICAgICAgIChKU0M6OkhlYXA6OmluY3JlbWVudERlZmVycmFsRGVwdGgpOgorICAgICAgICAo
SlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpIZWFw
Ojpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hl
YXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAgICAgICAoSlNDOjpIZWFwU25hcHNob3RCdWlsZGVy
OjphcHBlbmROb2RlKToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5oOgorICAgICAg
ICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkKToKKyAgICAgICAgKEpTQzo6TGFyZ2VB
bGxvY2F0aW9uOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9Mb2NrRHVyaW5nTWFya2luZy5oOgorICAgICAgICAoSlNDOjpsb2NrRHVyaW5nTWFya2luZyk6
CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJr
ZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSk6CisgICAgICAgICogaGVh
cC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphcmVNYXJrc1N0
YWxlV2l0aERlcGVuZGVuY3kpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkU3Bh
Y2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2ZVdlYWtTZXRzQmVnaW4pOgor
ICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWN0aXZlV2Vha1NldHNFbmQpOgorICAgICAgICAo
SlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNCZWdpbik6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjpuZXdBY3RpdmVXZWFrU2V0c0VuZCk6CisgICAgICAgICogaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpNYXJr
aW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRl
KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZSk6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayk6CisgICAgICAgIChKU0M6
Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmspOgorICAgICAgICAoSlNDOjpN
YXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwpOgorICAgICAgICAqIGhlYXAv
TWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6Omxh
c3RFeGVjdXRlUGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3Ry
YWludDo6cGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dDo6cXVpY2tXb3JrRXN0aW1hdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29u
c3RyYWludDo6d29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdD
b25zdHJhaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1h
cmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVy
Z2VuY2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZl
cmdlbmNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRl
QWxsKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRl
eHQ6OkV4ZWN1dGlvbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29u
c3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkVmlzaXRTb21ldGhpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29u
dGV4dDo6c2hvdWxkVGltZU91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkcmFpbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkaWRFeGVj
dXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6
OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0Lmg6CisgICAgICAgICogaGVh
cC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJr
aW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIpOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdDb25zdHJhaW50U29sdmVyKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZFZpc2l0U29tZXRoaW5n
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZHJhaW4pOgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVyZ2UpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKToKKyAgICAgICAg
KEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1dGUpOgorICAgICAgICAqIGhl
YXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9PcGFx
dWVSb290U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0
ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBhcmFsbGVsU291cmNlQWRhcHRlcjo6UGFyYWxs
ZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFw
dGVyKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29u
c3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6cXVpY2tXb3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3Ry
YWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcpOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3Rh
Y2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aGFzV29y
ayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQpOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbik6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cyk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFx
dWVSb290KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBj
b25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9TdWJzcGFjZS5jcHA6CisgICAg
ICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSk6CisgICAgICAgIChK
U0M6OlN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UpOgorICAgICAg
ICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKToKKyAg
ICAgICAgKiBoZWFwL1Zpc2l0Q291bnRlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VmlzaXRD
b3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpWaXNpdENvdW50ZXI6OnZpc2l0
Q291bnQgY29uc3QpOgorICAgICAgICAqIGhlYXAvVmlzaXRpbmdUaW1lb3V0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogaGVhcC9XZWFrQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpXZWFrQmxvY2s6
OnNwZWNpYWxpemVkVmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKToKKwogMjAxNy0xMS0zMCAgWXVzdWtlIFN1enVraSAgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgSlNGaXhlZEFycmF5IGZv
ciBvcF9uZXdfYXJyYXlfYnVmZmVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTUwNSw4ICs1MDUsMTAgQEAgaGVhcC9NYXJrZWRCbG9jay5jcHAKIGhl
YXAvTWFya2VkU3BhY2UuY3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNldC5jcHAKK2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBo
ZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL011dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCiBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9TcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAogaGVhcC9TdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5n
Q29uc3RyYWludFByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQ2FzdC5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5o
IgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTcyLDExICs3MSwxMSBA
QCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgLy8gZWxzZSBn
ZXRzIG1hcmtlZC4KICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5ID0gQ29uc3Ry
YWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZzsKICAgICAKLSAgICBhdXRvIGNvbnN0cmFp
bnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PigKKyAgICBhdXRvIGNvbnN0
cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PigKICAgICAg
ICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NT
dHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwg
UmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAi
LCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFj
aywgdXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
ICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9
IGlzTWFya2VkOwogICAgICAgICAgICAgbWFya2VyLk1hcmsgPSBtYXJrOwpAQCAtODQsNyArODMs
OCBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNvbnN0cmFpbnRDYWxsYmFjaygmbWFya2VyLCB1c2VyRGF0YSk7CiAg
ICAgICAgIH0sCi0gICAgICAgIHZvbGF0aWxpdHkpOworICAgICAgICB2b2xhdGlsaXR5LAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZtLmhl
YXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI4Myw5ICsyODMsOCBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaChKU0M6CiAgICAgICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICB2b2lkKiBuZXh0Um9vdCA9IHN0YWNrLmxhc3QoKTsKICAgICAgICAgICAg
IHN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3Bh
cXVlUm9vdFRyaVN0YXRlKG5leHRSb290KSA9PSBUcnVlVHJpU3RhdGUpCisgICAgICAgICAgICBp
ZiAoIXZpc2l0b3IuYWRkT3BhcXVlUm9vdChuZXh0Um9vdCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4dFJvb3QpOwogCiAg
ICAgICAgICAgICBhdXRvIGFwcGVuZE93bmVkT2JqZWN0cyA9IFsmXSB7CiAgICAgICAgICAgICAg
ICAgTlNNYXBUYWJsZSAqb3duZWRPYmplY3RzID0gW2V4dGVybmFsT2JqZWN0R3JhcGggb2JqZWN0
Rm9yS2V5OnN0YXRpY19jYXN0PGlkPihuZXh0Um9vdCldOwpAQCAtMzI3LDggKzMyNiw2IEBAIHZv
aWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiAKICAgICAgICAgfQogICAgICAg
ICBbZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHJlbW92ZUFsbE9iamVjdHNdOwogICAgIH0KLQotICAg
IHZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwogfQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJ
X0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUz
QTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5
NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyog
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBB
OUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYy
MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87
IH07Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdB
NkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZH
UGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9Owog
CQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RG
MDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1
RkIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRv
clNjaGVkdWxlci5oICovOyB9OwpAQCAtMzEyLDYgKzMxMSw5IEBACiAJCTBGNEEzOEZBMUM4RTEz
REYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBs
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMERE
MDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdp
bkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhD
NzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZp
c2l0Q291bnRlci5oICovOyB9OworCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3Ry
YWludFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0
RDhDNzgxRkNBM0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0Yz
MDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEg
LyogQWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNT
cGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRF
MDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUyRkZE
REIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0Niw2ICs0
NDgsOCBAQAogCQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFB
RTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi87IH07CiAJCTBGOUQ0QzBEMUMz
RTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBG
VExFeGNlcHRpb25UYXJnZXQuaCAqLzsgfTsKIAkJMEY5RDRDMTExQzNFMkM3NDAwNkNEOTg0IC8q
IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi87IH07CisJCTBGOURBQTA5MUZEMUMzQ0YwMDc5QzVC
MiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyLmggKi87IH07CisJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQ
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFk
YXB0ZXIuaCAqLzsgfTsKIAkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFy
cmllckluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0
YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmgg
Ki87IH07CiAJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBE
NTJBRTAgLyogUHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xNDk5LDcgKzE1MDMsNiBAQAogCQlBRDlFODUyRjFFOEEwQzdDMDA4REUz
OUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBREJDNTRENTFERjhFQTJCMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2Fs
bGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREJD
NTREMzFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi87IH07CiAJ
CUFERDhGQTQ2MUVCMzA3OTcwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDhGQTQzMUVCMzA3
NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLzsgfTsKLQkJQUREQjFGNjMx
OEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFx
dWVSb290U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk0
MUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUExRTA4RjFERTAw
NThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk1MUUwOEYxQzkwMDU4REU3
OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUMxRTA4RjFERTAwNThERTc4
IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5NzFFMDhGMUM5MDA1OERFNzggLyogV2Vi
QXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk4MSw3ICsxOTg0LDYgQEAKIAkJMEYxRkIzOEExRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BU
aGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9u
b3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUw
IC8qIFZpc2l0aW5nVGltZW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
aXNpdGluZ1RpbWVvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTQx
RTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHUGxhbklubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTUxRTFBRjdERjAwQTlCRTUw
IC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8q
IE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0
YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3MCw2ICsy
MjcyLDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJTYW1wbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFy
cmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRDOTE2NTFDMjlGNEYy
MDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRDb3VudGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBD
b25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFE
MzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxs
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZp
eE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4
T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIz
T3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09y
aWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI1MDMsNiArMjUwOSw5IEBACiAJCTBGOUQ0QzBCMUMzRTFDMTEwMDZD
RDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBFMUMzRTJDNzQwMDZDRDk4
NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBwYXRo
ID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjlENEMwRjFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwNjFGRDFDM0M4
MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5
REFBMDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRp
b25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBo
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5MTcwMENC
NjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0YWNr
TGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI2Nyw3ICs0
Mjc2LDYgQEAKIAkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYg
LyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFEREIxRjYyMThENzdEQjcwMDlC
NThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTMx
RTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJvci5jcHA7IHBh
dGggPSBqcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtF
cnJvci5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlM
aW5rRXJyb3JDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxp
bmtFcnJvckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTE3
LDYgKzU1MjUsNyBAQAogCQkJCTBGRENFMTI4MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1
YnNwYWNlLmggKi8sCiAJCQkJMTQ2QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2
ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFGMjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0
aXZlUm9vdHMuaCAqLywKKwkJCQkwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJMEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0
cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJCQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERl
ZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmgg
Ki8sCkBAIC01NjExLDE3ICs1NjIwLDIxIEBACiAJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAqLywKIAkJCQkwRjY2MEUzNjFFMDUxN0I4MDAz
MTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuaCAqLywKKwkJCQkwRjlEQUEwNjFGRDFDM0M4
MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwICovLAorCQkJCTBGOURBQTA3
MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovLAogCQkJCTE0
MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBG
MTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywKIAkJCQkwRjFGQjM4QzFFMTczQTYy
MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOTgxRTFGNjVG
OTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkwRkE3NjIwMjFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJCQkwRkE3NjIwMzFEQjkyNDIzMDBC
N0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCi0JCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4
IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKKwkJCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyog
UGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggKi8sCiAJCQkJMEZCQjczQjYxREVGM0FBQzAwMkMwMDlF
IC8qIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCAqLywKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAw
NkFCMDggLyogUmVnaXN0ZXJTdGF0ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0Mx
MiAvKiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAw
QzEzODM5IC8qIFJ1bm5pbmdTY29wZS5oICovLAorCQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJB
QyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCisJCQkJMEY0RDhDNzcxRkNBM0NG
MzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIx
NUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFC
ODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0
ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC01NjQzLDcgKzU2NTYsNyBAQAog
CQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlu
eUJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyog
VmlzaXRpbmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZp
c2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJh
Y2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuaCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBA
IC04MjAwLDYgKzgyMTMsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRl
Y29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBC
eXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBC
QTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAw
MUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVC
ODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBI
ZWFkZXJzICovLApAQCAtODc2OCw2ICs4NzgyLDcgQEAKIAkJCQkwRjJCNjZFNTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJW
aWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEQUEwOTFGRDFDM0NGMDA3OUM1QjIgLyogTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8sCkBAIC04OTE2LDYgKzg5MzEsNyBAQAogCQkJCUE3NDgyRTkzMTE2QTdD
QUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dl
YWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMyQUMg
LyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAz
OUQwNjkgLyogSlNXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFQjFGNzVBRDcz
MDAwQkNBQUYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYx
RThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICov
LApAQCAtOTAzNSw5ICs5MDUxLDkgQEAKIAkJCQlFM0MyOTVERDFFRDJDQkRBMDBEMzAxNkYgLyog
T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDNFNDBBMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjREOEM3ODFGQ0EzQ0ZB
MDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDQ2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPYmplY3RQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNv
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVy
YW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9w
ZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjQzLDYgKzkyNTksNyBAQAogCQkJ
CTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9y
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVk
QXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEQUEwQTFGRDFDM0QzMDA3
OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRC
OTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTkyODMsNyArOTMwMCw2IEBACiAJCQkJMEY2QzczNTExQUM5Rjk5
RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkUwNTAyRDFBQTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRS
YWNlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyog
Vk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVu
dHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIwLDcgKzMyMCw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wK
IAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBp
ZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkp
CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkK
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTcyLDcgKzk3Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWts
eShTbG90VmlzaXRvciYKICAgICAKICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRy
dWU7CiAKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYg
KEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxk
VmlzaXRTdHJvbmdseShsb2NrZXIpKSB7CkBAIC0xMTI0LDcgKzExMjQsNyBAQCBzdGF0aWMgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lVG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYg
KEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtl
ZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEzOSwxMCAr
MTEzOSwxMCBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYg
RU5BQkxFKERGR19KSVQpCiBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6Oldl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9u
Lm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5t
X2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAh
SGVhcDo6aXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0
cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0
aW9uLm1fZnJvbS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTExNzIsNyArMTE3Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJl
SURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6
OmlzTWFya2VkQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYg
KEhlYXA6OmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjQ2
LDE0ICsxMjQ2LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5z
aXplKCk7ICsraSkgewogICAgICAgICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vh
a1JlZmVyZW5jZXNbaV0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2Rl
QmxvY2sqPigqcmVmZXJlbmNlLT52bSgpLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZENvbmN1cnJlbnRseShyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6
aXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFs
c2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJl
TGl2ZVNvRmFyKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24t
PndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVy
ZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0Nv
bW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNw
cAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMyArMTA0LDEzIEBAIHByb3RlY3RlZDoK
ICAgICAgICAgICAgIGRhdGFMb2cobV93b3JrbGlzdCwgIjogQ29tcGlsaW5nICIsIG1fcGxhbi0+
a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUn
cyBubyB3YXkgZm9yIHRoZSBHQyB0byBiZSBzYWZlcG9pbnRpbmcgc2luY2Ugd2Ugb3duIHJpZ2h0
VG9SdW4uCi0gICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAud29y
bGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiSGVhcCBpcyBzdG9wZWQgYnV0
IGhlcmUgd2UgYXJlISAoMSlcbiIpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZCgmbV9k
YXRhKTsKICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UgIT0gUGxhbjo6Q2FuY2VsbGVkKSB7Ci0g
ICAgICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVX
b3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC53b3Js
ZElzU3RvcHBlZCgpKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGVhcCBpcyBzdG9wcGVk
IGJ1dCBoZXJlIHdlIGFyZSEgKDIpXG4iKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQpAQCAtMTMwLDcgKzEzMCw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3JlYWR5UGxhbnMu
YXBwZW5kKG1fcGxhbik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVk
KCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAud29ybGRJ
c1N0b3BwZWQoKSk7CiAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcGxhbkNvbXBpbGVkLm5vdGlm
eUFsbCgpOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBA
IHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmIChzYWZl
cG9pbnRSZXN1bHQuZGlkR2V0Q2FuY2VsbGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSRUxF
QVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgubV92bS5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRo
ZVdvcmxkSXNTdG9wcGVkKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3Zt
LmhlYXAud29ybGRJc1N0b3BwZWQoKSk7CiAgICAgCiAgICAgaWYgKHN0YXRlLmFsbG9jYXRpb25G
YWlsZWQpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBD
b25zdHJhaW50UGFyYWxsZWxpc20gOiB1aW50OF90IHsKKyAgICBTZXF1ZW50aWFsLAorICAgIFBh
cmFsbGVsCit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgewor
CitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3Ry
YWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQoreworICAgIHN3aXRjaCAocGFyYWxsZWxpc20p
IHsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOgorICAg
ICAgICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsOgorICAgICAgICBvdXQucHJpbnQo
IlBhcmFsbGVsIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDcgKzI4MSw3IEBA
IEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNs
b3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAg
ICwgbV9tdXRhdG9yTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkp
CiAgICAgLCBtX3JhY2VNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4o
KSkKLSAgICAsIG1fY29uc3RyYWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJh
aW50U2V0PigpKQorICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2lu
Z0NvbnN0cmFpbnRTZXQ+KCp0aGlzKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9j
b2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRT
dHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTkx
MSw3ICs5MTEsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAg
ICAgbV9iYXJyaWVyc0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2Vk
KSB7CiAgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2Vk
Q29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAg
ICAgICAgICAgIC8vIER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5t
YXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xs
ZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlC
bGFjayBvYmplY3QuIElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0
IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFy
a2luZwpAQCAtOTI0LDE1ICs5MjQsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhp
cyByYWNlOgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9i
amVjdCBzdGFydHMgb3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAg
IC0tPiBXZSBkbyBpc01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8v
ICAgICAtLT4gV2UgZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikg
T2JqZWN0IGlzIG1hcmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBP
YmplY3QgaXMgc2Nhbm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+
IFdlIGRvIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhh
dmUgbWFkZSB0aGUgb2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAg
ICAgICAgICAgICAgICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3Vy
IG1pc3Rha2UuIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAv
LyBpc01hcmtlZENvbmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgot
ICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAg
ICAgICAgICAgIC8vIGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisg
ICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIEl0J3MgZGlmZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQg
YmUgZ3JleSBvciBibGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBX
ZSBzYXkgYmxhY2sgY29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNl
dENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk0OCw3IEBA
IHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2Vs
bCkpOwogICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtl
ZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0
ZSB0byBEZWZpbml0ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55
IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3Ig
aGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3Qg
X3dpbGxfCkBAIC0xMjY1LDYgKzEyNjUsOCBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5G
aXhwb2ludFBoYXNlCiAgICAgCiAgICAgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yID0gKm1fY29s
bGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgCisgICAgbV9vcGFxdWVSb290cy5kZWxldGVPbGRUYWJs
ZXMoKTsKKyAgICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewogICAgICAgICBIYXNoTWFw
PGNvbnN0IGNoYXIqLCBzaXplX3Q+IHZpc2l0TWFwOwogICAgICAgICBmb3JFYWNoU2xvdFZpc2l0
b3IoCkBAIC0xMjg3LDEwICsxMjg5LDYgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4
cG9pbnRQaGFzZQogICAgICAgICAgICAgCiAgICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NF
bXB0eSgpOwogICAgICAgICAgICAgCi0gICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlSWZOZWNlc3Nh
cnkoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xv
dFZpc2l0b3JzKQotICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZUlmTmVjZXNzYXJ5
KCk7Ci0gICAgICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IFRha2UgbV9tdXRhdG9yRGlkUnVu
IGludG8gYWNjb3VudCB3aGVuIHNjaGVkdWxpbmcgY29uc3RyYWludHMuIE1vc3QgbGlrZWx5LAog
ICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyBhZ2Fp
biB1bmxlc3MgdGhlIG11dGF0b3IgZGlkIHJ1bi4gQXQgYQogICAgICAgICAvLyBtaW5pbXVtLCB3
ZSBjb3VsZCB1c2UgdGhpcyBmb3Igd29yayBlc3RpbWF0ZXMgLSBidXQgaXQncyBwcm9iYWJseSBt
b3JlIHRoYW4ganVzdCBhbgpAQCAtMTMwNSw3ICsxMzAzLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wg
SGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRv
ZXM/IExvb2sgYXQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVy
cyBjYW4gYWxzbwogICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtp
bmdDb25zdHJhaW50KCkuCiAgICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1f
Y29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNv
bnZlcmdlbmNlKHNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKGNvbnZlcmdlZCAmJiBzbG90Vmlz
aXRvci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0
eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNl
OjpFbmQpOwpAQCAtMTUyNiw3ICsxNTI0LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6Zmlu
aXNoQ2hhbmdpbmdQaAogCiB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3Ig
Y29ubikKIHsKLSAgICBpZiAobV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCkgeworICAgIGlmIChtX3dvcmxkSXNTdG9wcGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZBVEFM
OiB3b3JsZCBhbHJlYWR5IHN0b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNTM3LDcgKzE1MzUsNyBAQCB2b2lkIEhlYXA6OnN0b3BU
aGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgCiAgICAgbV9tdXRhdG9yRGlkUnVuID0gZmFsc2U7CiAK
ICAgICBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZCA9IHRydWU7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IHRydWU7
CiAKICAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCiAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CkBAIC0xNTc0LDExICsxNTcyLDExIEBAIE5FVkVSX0lOTElORSB2b2lkIEhl
YXA6OnJlc3VtZVRoZVBlcmlwaGUKICAgICAKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAwOwog
ICAgIAotICAgIGlmICghbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkg
eworICAgIGlmICghbV93b3JsZElzU3RvcHBlZCkgewogICAgICAgICBkYXRhTG9nKCJGYXRhbDog
Y29sbGVjdG9yIGRvZXMgbm90IGJlbGlldmUgdGhhdCB0aGUgd29ybGQgaXMgc3RvcHBlZC5cbiIp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICBtX2Nv
bGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CisgICAgbV93b3Js
ZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZh
c3RseSBpbXByb3ZlZDogd2Ugd2FudCB0byBncmFiIHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4g
d2hpY2ggdGhleQogICAgIC8vIGJlY29tZSBhdmFpbGFibGUuIFdlIGJhc2ljYWxseSB3YW50IGEg
bG9ja0FueSgpIG1ldGhvZCB0aGF0IHdpbGwgbG9jayB3aGF0ZXZlciBsb2NrIGlzIGF2YWlsYWJs
ZQpAQCAtMjU3OCw3ICsyNTc2LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZl
IFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29w
ZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBt
X29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAgICAgICAgICAgICBD
b25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CkBAIC0yNTg4LDExICsy
NTg2LDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIGdh
dGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBz
bG90VmlzaXRvci5hcHBlbmQoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICB9LAotICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAog
ICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90Vmlz
aXRvcik7CiAjZW5kaWYKQEAgLTI2MDksMTkgKzI2MDgsMjEgQEAgdm9pZCBIZWFwOjphZGRDb3Jl
Q29uc3RyYWludHMoKQogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bV92bS0+ZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAg
IlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ry
b25nSGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0
KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6
OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXll
ZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsK
ICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkQiLCAiRGVidWdnZXIi
LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRp
bmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikg
ewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgICAgIGlmIChTYW1wbGlu
Z1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7
CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0
TG9jaygpKTsKQEAgLTI2MzcsMzQgKzI2MzgsMzggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCku
dmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJK
c3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMt
PnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgK
ICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZp
c2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcmgiLCAi
V2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAgICAgICAgICAgICAgICBjdXJy
ZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAg
ICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFr
UmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2NzksMTIgKzI2ODQs
MTMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQogICAgICAgICAgICAgICAgIGRh
dGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOworICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAorICAgICAgICBDb25zdHJhaW50UGFy
YWxsZWxpc206OlBhcmFsbGVsKTsKICNlbmRpZgogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBpdGVyYXRlRXhl
Y3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoCiAgICAgICAg
ICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAg
ICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxh
Y2suCkBAIC0yNjkzLDExICsyNjk5LDE1IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLnZpc2l0QXNDb25zdHJhaW50
KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCi0gICAgICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOworICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eTo6U2VsZG9tR3JleWVkLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBh
cmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1ybXMi
LCAiTXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
bmVlZHMgdG8gZ3JhYiBsb2NrcyB0byBmaWRkbGUgd2l0aCB0aGUgbXV0YXRvciBtYXJrIHN0YWNr
IGFuZCB0aGUgcmFjZSBzdGFjay4KKyAgICAgICAgICAgIC8vIFRoZSBjaGFuY2VzIG9mIGNvbnRl
bnRpb24gb24gdGhvc2UgbG9ja3MgYXJlIHNsaW0sIGJ1dCB3ZSBzaG91bGQgZG8gaXQgYW55d2F5
LgorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQg
dGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0
YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiAgICAgICAg
ICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CkBAIC0yNzExLDcgKzI3MjEs
OCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImKSAtPiBkb3VibGUgewogICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRvck1hcmtT
dGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiAgICAgICAgIH0sCi0gICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiB9CiAKIHZvaWQgSGVhcDo6YWRkTWFya2luZ0NvbnN0
cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50PiBjb25zdHJhaW50KQpAQCAt
Mjc5NCwxNiArMjgwNSw2IEBAIHZvaWQgSGVhcDo6YWxsb3dDb2xsZWN0aW9uKCkKICAgICBtX2Nv
bGxlY3RDb250aW51b3VzbHlMb2NrLnVubG9jaygpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgotdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKLXsK
LSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwot
ICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwotICAgIGZ1bmMoKm1fbXV0YXRvclNs
b3RWaXNpdG9yKTsKLSAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RW
aXNpdG9ycykKLSAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OnNl
dE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKQogewogICAgIG1fbXV0YXRvclNob3Vs
ZEJlRmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3LDQgKzI4NDgsMjQgQEAgdm9pZCBIZWFwOjpyZW1v
dmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwogICAgIG1faGVhcEZpbmFsaXplckNhbGxiYWNrcy5y
ZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAKK3ZvaWQgSGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFz
ayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0ZXgpOworICAgIG1fYm9udXNWaXNpdG9y
VGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7
Cit9CisKK3ZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICB1bnNpZ25lZCBpbml0aWFsUmVmQ291bnQg
PSB0YXNrLT5yZWZDb3VudCgpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sodGFzayk7CisgICAg
dGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICBzZXRCb251c1Zpc2l0b3JU
YXNrKG51bGxwdHIpOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21h
cmtpbmdNdXRleCk7CisgICAgICAgIHdoaWxlICh0YXNrLT5yZWZDb3VudCgpID4gaW5pdGlhbFJl
ZkNvdW50KQorICAgICAgICAgICAgbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChtX21h
cmtpbmdNdXRleCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2lu
Y2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgogI2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL0Nv
bmN1cnJlbnRQdHJIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTExNCw3
ICsxMTUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNr
UmVzb2x1dGlvbiA9IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCop
OwotICAgIHN0YXRpYyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAg
ICBzdGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7
CiAgICAgCiAgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xNTQs
NyArMTU0LDggQEAgcHVibGljOgogICAgIE11dGF0b3JTdGF0ZSBtdXRhdG9yU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX211dGF0b3JTdGF0ZTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlv
blNjb3BlPiBjb2xsZWN0aW9uU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3Rpb25TY29w
ZTsgfQogICAgIGJvb2wgaGFzSGVhcEFjY2VzcygpIGNvbnN0OwotICAgIGJvb2wgY29sbGVjdG9y
QmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNT
dG9wcGVkKCkgY29uc3Q7CisgICAgYm9vbCB3b3JsZElzUnVubmluZygpIGNvbnN0IHsgcmV0dXJu
ICF3b3JsZElzU3RvcHBlZCgpOyB9CiAKICAgICAvLyBXZSdyZSBhbHdheXMgYnVzeSBvbiB0aGUg
Y29sbGVjdGlvbiB0aHJlYWRzLiBPbiB0aGUgbWFpbiB0aHJlYWQsIHRoaXMgcmV0dXJucyB0cnVl
IGlmIHdlJ3JlCiAgICAgLy8gaGVscGluZyBoZWFwLgpAQCAtMzU4LDYgKzM1OSwxNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCBhZGRIZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZp
bmFsaXplckNhbGxiYWNrJik7CiAgICAgdm9pZCByZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2so
Y29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CisgICAgCisgICAgdm9pZCBydW5UYXNrSW5Q
YXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIHJ1bkZ1bmN0aW9uSW5QYXJhbGxl
bChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgcnVuVGFza0luUGFyYWxsZWwoY3Jl
YXRlU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+KGZ1bmMpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0
IEZ1bmMmKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2NhdGluZ1Njb3BlOwpA
QCAtNTI3LDYgKzUzOSw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBhc3NlcnRTaGFyZWRN
YXJrU3RhY2tzRW1wdHkoKTsKIAorICAgIHZvaWQgc2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisgICAgCiAgICAgY29uc3QgSGVhcFR5
cGUgbV9oZWFwVHlwZTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwogICAgIGNvbnN0IHNp
emVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CkBAIC01NzksOSArNTkzLDYgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8U2xvdFZpc2l0b3IqPiBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzOwog
ICAgIExvY2sgbV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jazsKICAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgZm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmKTsK
LQogICAgIEhhbmRsZVNldCBtX2hhbmRsZVNldDsKICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0
YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQmxvY2tTZXQ+IG1fY29kZUJsb2NrczsKQEAg
LTYzMyw4ICs2NDQsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZXYWl0aW5n
UGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0IHsgZmFsc2UgfTsKIAotICAgIExvY2sgbV9vcGFxdWVSb290c011dGV4OwotICAgIEhhc2hT
ZXQ8Y29uc3Qgdm9pZCo+IG1fb3BhcXVlUm9vdHM7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQg
bV9vcGFxdWVSb290czsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja0ZyYWdtZW50
TGVuZ3RoID0gMzI7CiAKQEAgLTY0Miw2ICs2NTIsNyBAQCBwcml2YXRlOgogICAgIExpc3RhYmxl
SGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzOwogCiAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQgbV9oZWxwZXJDbGllbnQ7CisgICAg
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gbV9ib251c1Zpc2l0b3JUYXNr
OwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIHNpemVfdCBtX2Jsb2NrQnl0ZXNB
bGxvY2F0ZWQgeyAwIH07CkBAIC02NTcsNyArNjY4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbmVlZEZpbmFsaXplQml0ID0gMXUgPDwgNHU7CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG11dGF0b3JXYWl0aW5nQml0ID0gMXUgPDwgNXU7IC8vIEFsbG93cyB0aGUg
bXV0YXRvciB0byB1c2UgdGhpcyBhcyBhIGNvbmRpdGlvbiB2YXJpYWJsZS4KICAgICBBdG9taWM8
dW5zaWduZWQ+IG1fd29ybGRTdGF0ZTsKLSAgICBib29sIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV93b3JsZElzU3RvcHBlZCB7
IGZhbHNlIH07CiAgICAgTW9ub3RvbmljVGltZSBtX2JlZm9yZUdDOwogICAgIE1vbm90b25pY1Rp
bWUgbV9hZnRlckdDOwogICAgIE1vbm90b25pY1RpbWUgbV9zdG9wVGltZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsMzAgKzYzLDIwIEBAIGlubGluZSBib29sIEhlYXA6Omhhc0hlYXBBY2Nlc3MoKSBjb25z
dAogICAgIHJldHVybiBtX3dvcmxkU3RhdGUubG9hZCgpICYgaGFzQWNjZXNzQml0OwogfQogCi1p
bmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgp
IGNvbnN0CitpbmxpbmUgYm9vbCBIZWFwOjp3b3JsZElzU3RvcHBlZCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQ7CisgICAgcmV0
dXJuIG1fd29ybGRJc1N0b3BwZWQ7CiB9CiAKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhbiBp
bnN0YW5jZSBtZXRob2QsIHNvIHRoYXQgaXQgY2FuIGdldCB0aGUgbWFya2luZ1ZlcnNpb24oKSBx
dWlja2x5LgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTk4
OAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwp
CiB7Ci0gICAgQVNTRVJUKG1heUJlR0NUaHJlYWQoKSAhPSBHQ1RocmVhZFR5cGU6OkhlbHBlcik7
CiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsK
ICAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwt
PmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7CiAgICAgTWFya2VkQmxvY2smIGJsb2NrID0g
Y2VsbC0+bWFya2VkQmxvY2soKTsKLSAgICByZXR1cm4gYmxvY2suaXNNYXJrZWQoCi0gICAgICAg
IGJsb2NrLnZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsK
LX0KLQotQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0
IHZvaWQqIHJhd0NlbGwpCi17Ci0gICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihyYXdDZWxsKTsKLSAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7Ci0gICAgTWFy
a2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKLSAgICByZXR1cm4gYmxvY2su
aXNNYXJrZWRDb25jdXJyZW50bHkoCi0gICAgICAgIGJsb2NrLnZtKCktPmhlYXAub2JqZWN0U3Bh
Y2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKKyAgICByZXR1cm4gYmxvY2suaXNNYXJrZWQo
YmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwog
fQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6dGVzdEFuZFNldE1hcmtlZChIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcmF3Q2VsbCkKQEAgLTE3OSwxOSArMTY5LDE5
IEBAIGlubGluZSB2b2lkIEhlYXA6OnJlbGVhc2VTb29uKFJldGFpblB0cjwKIAogaW5saW5lIHZv
aWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdD
VGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7Cisg
ICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9k
ZWZlcnJhbERlcHRoKys7CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFs
RGVwdGgoKQogewotICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1fY29sbGVjdG9yQmVs
aWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOworICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgp
IHx8IG1fd29ybGRJc1N0b3BwZWQpOwogICAgIG1fZGVmZXJyYWxEZXB0aC0tOwogfQogCiBpbmxp
bmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCiB7Ci0g
ICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVX
b3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElz
U3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiAgICAgCiAgICAgaWYgKFVOTElLRUxZ
KG1fZGlkRGVmZXJHQ1dvcmspKSB7CkBAIC0yNjksNCArMjU5LDE0IEBAIGlubGluZSB2b2lkIEhl
YXA6OnN0b3BJZk5lY2Vzc2FyeSgpCiAgICAgICAgIHN0b3BJZk5lY2Vzc2FyeVNsb3coKTsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9y
KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFs
bGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
KyAgICBmdW5jKCptX211dGF0b3JTbG90VmlzaXRvcik7CisgICAgZm9yIChhdXRvJiBzbG90Vmlz
aXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9y
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkocmV2aXNpb24gMjI1NDAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjpi
dWlsZFNuYXBzaG90KAogdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBBU1NFUlQobV9wcm9maWxlci5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIo
KSA9PSB0aGlzKTsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkp
OworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAKICAgICBpZiAoaGFzRXhpc3Rp
bmdOb2RlRm9yQ2VsbChjZWxsKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNN
YXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVy
biBpc01hcmtlZCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBDZWxs
KiwgRGVwZW5kZW5jeSkgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVy
biBpc01hcmtlZCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBWZXJz
aW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KICAgICBib29sIGlzTGl2ZSgp
IHsgcmV0dXJuIGlzTWFya2VkKCkgfHwgaXNOZXdseUFsbG9jYXRlZCgpOyB9CiAgICAgCiAgICAg
Ym9vbCBoYXNWYWxpZENlbGwoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZhbGlkQ2VsbDsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9ja0R1cmluZ01hcmtpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5n
TWFya2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDE0ICszMyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
Ly8gVXNlIHRoaXMgbG9jayBzY29wZSBsaWtlIHNvOgogLy8gYXV0byBsb2NrZXIgPSBsb2NrRHVy
aW5nTWFya2luZyhoZWFwLCBsb2NrKTsKIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotTG9j
a2VyPExvY2tUeXBlPiBsb2NrRHVyaW5nTWFya2luZyhIZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFz
c2VkTG9jaykKK2F1dG8gbG9ja0R1cmluZ01hcmtpbmcoSGVhcCYgaGVhcCwgTG9ja1R5cGUmIHBh
c3NlZExvY2spCiB7Ci0gICAgTG9ja1R5cGUqIGxvY2s7Ci0gICAgaWYgKGhlYXAubXV0YXRvclNo
b3VsZEJlRmVuY2VkKCkpCi0gICAgICAgIGxvY2sgPSAmcGFzc2VkTG9jazsKLSAgICBlbHNlCi0g
ICAgICAgIGxvY2sgPSBudWxscHRyOwotICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+KGxvY2sp
OworICAgIHJldHVybiBob2xkTG9ja0lmKHBhc3NlZExvY2ssIGhlYXAubXV0YXRvclNob3VsZEJl
RmVuY2VkKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NDAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQ0LDYgKzQ0NCwzMyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0
Tm9VbnN3ZXB0KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorUmVmUHRyPFNoYXJl
ZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxO
b3RFbXB0eUJsb2NrU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRh
c2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhN
YXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxs
b2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIHJ1bigpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIG1faW5kZXggPSBtX2FsbG9j
YXRvci5tX21hcmtpbmdOb3RFbXB0eS5maW5kQml0KG1faW5kZXgsIHRydWUpOworICAgICAgICAg
ICAgaWYgKG1faW5kZXggPj0gbV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1f
YmxvY2tzW21faW5kZXgrK107CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgTWFya2VkQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKKyAgICAgICAgc2l6ZV90IG1faW5k
ZXggeyAwIH07CisgICAgICAgIExvY2sgbV9sb2NrOworICAgIH07CisgICAgCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzKSk7Cit9CisKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIo
dGhpcyksICI6IiwgbV9jZWxsU2l6ZSwgIi8iLCBtX2F0dHJpYnV0ZXMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtMTAzLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlCbG9jayhjb25z
dCBGdW5jdG9yJik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6Okhh
bmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHZvaWQg
YWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIHZvaWQgcmVtb3ZlQmxvY2soTWFy
a2VkQmxvY2s6OkhhbmRsZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3ICsyNTgsNiBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2Vk
KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBpc01h
cmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCop
OwogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAgIGJvb2wg
dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgICAgIApAQCAt
MjgwLDcgKzI3OSw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYXJl
TWFya3NTdGFsZSgpOwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbik7Ci0gICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdpdGhEZXBl
bmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAKICAgICBEZXBlbmRlbmN5
IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAgICAgCkBAIC00
OTgsMTggKzQ5NiwxMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZShI
CiAgICAgcmV0dXJuIG1hcmtpbmdWZXJzaW9uICE9IG1fbWFya2luZ1ZlcnNpb247CiB9CiAKLUFM
V0FZU19JTkxJTkUgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gTWFya2VkQmxvY2s6OmFyZU1hcmtzU3Rh
bGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKLXsKLSAgICBIZWFw
VmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKLSAgICByZXR1cm4gZGVwZW5kZW5j
eVdpdGgoZGVwZW5kZW5jeSh2ZXJzaW9uKSwgdmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbik7Ci19
Ci0KIGlubGluZSBEZXBlbmRlbmN5IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRo
RGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHJlc3VsdC52YWx1
ZSkpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYg
KFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBhYm91dFRvTWFy
a1Nsb3cobWFya2luZ1ZlcnNpb24pOwotICAgIHJldHVybiByZXN1bHQuZGVwZW5kZW5jeTsKKyAg
ICByZXR1cm4gZGVwZW5kZW5jeSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMTUgKzUxNiwxMCBAQCBp
bmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBib29sIE1h
cmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9p
ZCogcCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikgPyBmYWxz
ZSA6IGlzTWFya2VkUmF3KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHAp
Ci17Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2lu
Z1ZlcnNpb24pOwotICAgIGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24gdmVyc2lv
biA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2lu
Z1ZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0
KGF0b21OdW1iZXIocCksIHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJrcy5n
ZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSh2ZXJzaW9uKSk7CiB9CiAKIGlubGluZSBib29s
IE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsMTEgQEAgcHVibGljOgogICAgIC8vIFdoZW4g
dGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUgbWFyayBi
aXRzIGhhdmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlzTWFya2luZygpIGNvbnN0IHsg
cmV0dXJuIG1faXNNYXJraW5nOyB9CiAgICAgCisgICAgV2Vha1NldCogYWN0aXZlV2Vha1NldHNC
ZWdpbigpIHsgcmV0dXJuIG1fYWN0aXZlV2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQq
IGFjdGl2ZVdlYWtTZXRzRW5kKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQor
ICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX25ld0FjdGl2
ZVdlYWtTZXRzLmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0VuZCgp
IHsgcmV0dXJuIG1fbmV3QWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICAKICAgICB2b2lkIGR1
bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJyYXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nlcz4gc19z
aXplQ2xhc3NGb3JTaXplU3RlcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMzAgKzI3LDE1IEBACiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24s
Ci0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK01hcmtpbmdDb25zdHJhaW50
OjpNYXJraW5nQ29uc3RyYWludChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20g
cGFyYWxsZWxpc20pCiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCiAg
ICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1v
dmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQotewot
fQotCi1NYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIDo6
RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24s
Ci0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKLSAgICA6IG1fYWJicmV2aWF0
ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKLSAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAg
ICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV9x
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
bikpCiAgICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKKyAgICAsIG1fcGFyYWxsZWxpc20o
cGFyYWxsZWxpc20pCiB7CiB9CiAKQEAgLTYzLDE0ICs0OCw1MSBAQCB2b2lkIE1hcmtpbmdDb25z
dHJhaW50OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9p
ZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYg
ZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJh
bGxlbGlzbSBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRl
ZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBk
aWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRv
ciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1l
b3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGlu
Z1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZp
c2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcmVzdWx0ID0g
ZXhlY3V0ZUltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRl
ci52aXNpdENvdW50KCk7CisgICAgbV9sYXN0RXhlY3V0ZVBhcmFsbGVsaXNtID0gcmVzdWx0Owor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tX
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUg
TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3Ip
OworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOwor
ICAgIGRvUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNp
dENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6ZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0
Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1w
bCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENv
dW50KCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChT
bG90VmlzaXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3Im
KQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsMTIgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29uc3Ry
YWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIKLSNp
bmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUg
PHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQz
LDE4ICs0Miw5IEBAIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAg
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1h
cmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+
LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwg
Q29uc3RyYWludFZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJr
aW5nQ29uc3RyYWludCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdD
b25zdHJhaW50KCk7CiAgICAgCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CiAgICAgCkBAIC02NCwzMyArNTQsMzkgQEAgcHVibGljOgogICAgIHZvaWQgcmVz
ZXRTdGF0cygpOwogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbGFzdEV4
ZWN1dGVQYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlz
bTsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0
U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgZG91YmxlIHF1aWNrV29ya0Vz
dGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0
dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbih2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0g
ICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7
Ci0gICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0Vz
dGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICBkb3VibGUgd29ya0VzdGlt
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3Jr
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3Im
KTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisgICAgLy8gSWYgdGhpcyBpcyBTZXF1ZW50aWFs
LCBpdCBtZWFucyB0aGF0IHRoZSBjb25zdHJhaW50IGhhcyB0byBiZSBydW4gc2VxdWVudGlhbGx5
LCB3aXRoIG5vIGNvbmN1cnJlbnQKKyAgICAvLyBjb25zdHJhaW50cy4KKyAgICBDb25zdHJhaW50
UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBjb25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRl
SW1wbChTbG90VmlzaXRvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJ
bXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0lt
cGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtp
bmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5z
aWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFt
ZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAg
ICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVsaXNtOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20geyBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsIH07IC8vIEl0J3MgYSBoZXVyaXN0aWMsIHdlIGNhbiBiZSB3cm9uZy4gVGhpcyBndWVzcyBv
bmx5IGFmZmVjdHMgdGhlIGZpcnN0IHJ1bi4KICAgICBzaXplX3QgbV9sYXN0VmlzaXRDb3VudCB7
IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2MCArMjYsMTcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgog
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29s
dmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQgewotcHVibGljOgotICAgIEV4ZWN1dGlv
bkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICwg
bV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nOwotICAgIH0KLSAgICAKLSAgICBib29s
IHNob3VsZFRpbWVPdXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29t
ZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICAvLyBS
ZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KLSAgICBib29sIGRyYWluKEJpdFZlY3RvciYg
dW5leGVjdXRlZCkKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRl
ZCkgewotICAgICAgICAgICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVk
LmNsZWFyKGluZGV4KTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0KLQotICAgIHZvaWQgZXhlY3V0ZShzaXplX3Qg
aW5kZXgpCi0gICAgewotICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNp
dG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVk
LnNldChpbmRleCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBNYXJraW5nQ29uc3RyYWlu
dFNldCYgbV9zZXQ7Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBNb25vdG9uaWNU
aW1lIG1fdGltZW91dDsKLSAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKLSAgICBib29sIG1fZGlk
VmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OwotfTsKLQotTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1h
cmtpbmdDb25zdHJhaW50U2V0KCkKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3Ry
YWludFNldChIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCiB7CiB9CiAKQEAgLTEwNywx
OCArNjQsMTkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlkU3RhcnRNYXJraQogICAg
IG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3Ry
aW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1
ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5h
bWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2Vf
dW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSks
IFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlz
bSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCiAgICAgOjpGdW5j
dGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKLSAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5IHZvbGF0aWxpdHksCisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQog
ewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFi
YnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwg
V1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFk
ZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJl
dmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwgV1RG
TW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20p
KTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKApAQCAtMTMxLDkgKzg5LDkg
QEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAogICAgIG1fc2V0LmFwcGVuZChXVEZN
b3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0
ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
Citib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxv
ZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDgsOSArMTA2LDkgQEAgYm9vbCBNYXJr
aW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90Vmlz
aXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRp
bWVvdXQpOworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHNvbHZlcigqdGhpcyk7CiAgICAg
CiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRpb24rKzsKICAgICAKQEAgLTE1OSwx
NiArMTE3LDE0IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKIAog
ICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3RyYWludHMgdGhhdCB3ZSBoYXZlIG5vdCBleGVj
dXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUsIHRoZW4KICAgICAvLyB3ZSBzaG91bGQgZXhl
Y3V0ZSB0aG9zZSBub3cuCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVj
dXRlZFJvb3RzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNvbHZlci5kcmFpbihtX3Vu
ZXhlY3V0ZWRSb290cyk7CiAgICAgCiAgICAgLy8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBh
bnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQncyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25z
dHJhaW50cyBvdGhlcgogICAgIC8vIHRoYW4gcm9vdHMuCiAgICAgaWYgKGl0ZXJhdGlvbiA9PSAx
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0
LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgc29sdmVyLmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpOwogICAgIAogICAgIC8vIFdl
IHdhbnQgdG8ga2VlcCBwcmVmZXJyaW5nIHRoZSBvdXRncm93dGggY29uc3RyYWludHMgLSB0aGUg
b25lcyB0aGF0IG5lZWQgdG8gYmUgZml4cG9pbnRlZAogICAgIC8vIGV2ZW4gaW4gYSBzdG9wLXRo
ZS13b3JsZCBHQyAtIHVudGlsIHRoZXkgc3RvcCBwcm9kdWNpbmcuIFRoZXkgaGF2ZSBhIHRlbmRl
bmN5IHRvIGdvIHRvdGFsbHkKQEAgLTIxNSwzMyArMTcxLDE2IEBAIGJvb2wgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICAgICAgICAgIHJldHVybiBhLT52b2xhdGlsaXR5
KCkgPiBiLT52b2xhdGlsaXR5KCk7CiAgICAgICAgIH0pOwogICAgIAotICAgIGZvciAoTWFya2lu
Z0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgOiBtX29yZGVyZWQpIHsKLSAgICAgICAgc2l6ZV90IGkg
PSBjb25zdHJhaW50LT5pbmRleCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNv
bnRleHQuZGlkRXhlY3V0ZShpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBleGVj
dXRpb25Db250ZXh0LmV4ZWN1dGUoaSk7Ci0gICAgICAgIAotICAgICAgICAvLyBPbmNlIHdlJ3Jl
IGluIGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJr
aW5nIGhhcHBlbiBhbnl0aW1lCi0gICAgICAgIC8vIHdlIGZpbmQgd29yay4KLSAgICAgICAgLy8g
RklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRp
bWVvdXQ/IE5vdCBjbGVhciBpZiB0aGF0J3MKLSAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBN
YXliZSBldmVuIGJldHRlciBpcyB0aGlzOgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlz
IGVtcHR5LCBrZWVwIHJ1bm5pbmcuCi0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFz
IGF0IGxlYXN0IE4gdGhpbmdzLCByZXR1cm4uCi0gICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwg
dGltZW91dC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjgzMgotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGlu
ZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBzb2x2ZXIuY29udmVy
Z2UobV9vcmRlcmVkKTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiB3ZSd2ZSBjb252ZXJnZWQuIFRoYXQgaGFwcGVucyBpZiB3ZSBkaWQgbm90IHZpc2l0IGFu
eXRoaW5nLgorICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAKIHZv
aWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOwogICAgIGZvciAoYXV0byYg
Y29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3Is
IGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAg
Y29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
ICAgICAgICAgZGF0YUxvZygiICIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw5ICszMSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSGVh
cDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworCiBjbGFzcyBNYXJraW5nQ29uc3Ry
YWludFNldCB7CiBwdWJsaWM6Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICBNYXJr
aW5nQ29uc3RyYWludFNldChIZWFwJik7CiAgICAgfk1hcmtpbmdDb25zdHJhaW50U2V0KCk7CiAg
ICAgCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKQEAgLTQxLDE1ICs0NCwxNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAg
ICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYs
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkp
OworICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCiAgICAgICAgIDo6RnVuY3Rp
b248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7
CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICB2b2lk
IGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTYwLDIx
ICs2NSwxOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhl
Y3V0ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBub25lIG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsu
IFRoaXMKICAgICAvLyBhc3N1bWVzIHRoYXQgeW91J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBh
bmQgZHJhaW5lZCBmcm9tIHRoZXJlLgotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKAotICAg
ICAgICBTbG90VmlzaXRvciYsCi0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RW
aXNpdG9yJik7CiAgICAgCiAgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhv
dXQgYW55IHNoZW5hbmlnYW5zLgogICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOwog
ICAgIAogcHJpdmF0ZToKLSAgICBjbGFzcyBFeGVjdXRpb25Db250ZXh0OwotICAgIGZyaWVuZCBj
bGFzcyBFeGVjdXRpb25Db250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlcjsKICAgICAKLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0
b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbChTbG90VmlzaXRvciYpOwogICAgIAotICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBN
b25vdG9uaWNUaW1lLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQs
IGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwg
Qml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNp
dFNvbWV0aGluZyk7CiAgICAgCisgICAgSGVhcCYgbV9oZWFwOwogICAgIEJpdFZlY3RvciBtX3Vu
ZXhlY3V0ZWRSb290czsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3RoczsKICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJraW5n
Q29uc3RyYWludFNvbHZlci5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgCisKK01hcmtpbmdDb25zdHJhaW50U29sdmVyOjpNYXJraW5nQ29uc3RyYWludFNv
bHZlcihNYXJraW5nQ29uc3RyYWludFNldCYgc2V0KQorICAgIDogbV9oZWFwKHNldC5tX2hlYXAp
CisgICAgLCBtX21haW5WaXNpdG9yKG1faGVhcC5jb2xsZWN0b3JTbG90VmlzaXRvcigpKQorICAg
ICwgbV9zZXQoc2V0KQoreworICAgIG1faGVhcC5mb3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAg
IFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIG1fdmlzaXRDb3VudGVy
cy5hcHBlbmQoVmlzaXRDb3VudGVyKHZpc2l0b3IpKTsKKyAgICAgICAgfSk7Cit9CisKK01hcmtp
bmdDb25zdHJhaW50U29sdmVyOjp+TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoKQoreworfQorCiti
b29sIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRWaXNpdFNvbWV0aGluZygpIGNvbnN0Cit7
CisgICAgZm9yIChjb25zdCBWaXNpdENvdW50ZXImIHZpc2l0Q291bnRlciA6IG1fdmlzaXRDb3Vu
dGVycykgeworICAgICAgICBpZiAodmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJl
bmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit7
CisgICAgbV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAgICAgICAgWyZdIChTbG90Vmlz
aXRvciYgdmlzaXRvcikgeyBydW5FeGVjdXRpb25UaHJlYWQodmlzaXRvciwgcHJlZmVyZW5jZSwg
cGlja05leHQpOyB9KTsKKyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDog
bV9kaWRFeGVjdXRlSW5QYXJhbGxlbCkKKyAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0t
PmZpbmlzaFBhcmFsbGVsV29yayhtX21haW5WaXNpdG9yKTsKKyAgICBtX2RpZEV4ZWN1dGVJblBh
cmFsbGVsLmNsZWFyKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX3RvRXhl
Y3V0ZVNlcXVlbnRpYWxseSkKKyAgICAgICAgZXhlY3V0ZSgqbV9zZXQubV9zZXRbaW5kZXhUb1J1
bl0pOworICAgIG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmNsZWFyKCk7CisgICAgICAgIAorICAg
IFJFTEVBU0VfQVNTRVJUKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuYml0Q291bnQoKSk7Cit9CisK
K3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRl
ZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSB1bmV4ZWN1dGVkLmJlZ2luKCk7CisgICAgYXV0byBlbmQg
PSB1bmV4ZWN1dGVkLmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJu
OworICAgIGF1dG8gcGlja05leHQgPSBzY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4oKT4oCisgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAg
ICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAgICAgICB9KTsKKyAgICBleGVj
dXRlKE5leHRDb25zdHJhaW50Rmlyc3QsIHBpY2tOZXh0KTsKKyAgICB1bmV4ZWN1dGVkLmNsZWFy
QWxsKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmNvbnZlcmdlKGNvbnN0
IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBvcmRlcikKK3sKKyAgICBpZiAoZGlkVmlzaXRT
b21ldGhpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpZiAob3JkZXIuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIHNpemVfdCBpbmRleCA9IDA7
CisKKyAgICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbnN0cmFpbnQgc2VxdWVu
dGlhbGx5IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVpY2tseSBnaXZlIHVzIGEKKyAgICAvLyByZXN1
bHQuIElmIHdlIHJhbiBpdCBpbiBwYXJhbGxlbCB0byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3
ZSBtaWdodCBlbmQgdXAgaGF2aW5nIHRvIHdhaXQgZm9yCisgICAgLy8gdGhvc2Ugb3RoZXIgY29u
c3RyYWludHMgdG8gZmluaXNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2Ug
ZHVyaW5nIGNvbnZlcmdlbmNlIGl0J3MKKyAgICAvLyBlbXBpcmljYWxseSBtb3N0IG9wdGltYWwg
dG8gcmV0dXJuIHRvIGRyYWluaW5nIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3
b3JrLiBNb3N0CisgICAgLy8gY29uc3RyYWludHMgZG9uJ3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9z
dCBvZiB0aGUgdGltZSwgYW5kIHdoZW4gdGhleSBkbyBnZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQK
KyAgICAvLyB0byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmlu
ZyBjeWNsZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisgICAgLy8gd2Ug
Z2V0IHRoZSBoZWNrIG91dCBvZiBoZXJlIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRl
cyB3b3JrLiBJIHRoaW5rIHRoYXQgcGFydCBvZiB3aGF0CisgICAgLy8gbWFrZXMgdGhpcyBvcHRp
bWFsIGlzIHRoYXQgd2UgYWxzbyBuZXZlciBhYm9ydCBydW5uaW5nIGEgY29uc3RyYWludCBlYXJs
eSwgc28gd2hlbiB3ZSBkbyBydW4KKyAgICAvLyBvbmUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0
byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2libHkgY2FuLgorICAgIC8vCisgICAg
Ly8gU2ltaWxhciByZWFzb25pbmcgYXBwbGllcyB0byBjb25zdHJhaW50cyB0aGF0IHRlbmQgdG8g
cmV0dXJuIENvc250cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwKKyAgICAvLyBmcm9tIGV4ZWN1
dGUuIFRob3NlIGNvbnN0cmFpbnRzIHR5cGljYWxseSBoYXZlIGEgdmVyeSBmYXN0LXJ1bm5pbmcg
ZXhlY3V0ZSBmdW5jdGlvbiwgd2hpY2ggdGhlbgorICAgIC8vIG9mZmxvYWRzIGFsbW9zdCBhbGwg
b2YgdGhlIHdvcmsgdG8gYSBwYXJhbGxlbCB3b3JrZXIuIEluIHRoYXQgY2FzZSwgaXQgbWFrZXMg
c2Vuc2UgdG8gcnVuIHRoZQorICAgIC8vIGV4ZWN1dGUgZnVuY3Rpb24gc2VxdWVudGlhbGx5Lgor
ICAgIGlmIChvcmRlcltpbmRleF0tPndvcmtFc3RpbWF0ZShtX21haW5WaXNpdG9yKQorICAgICAg
ICB8fCBvcmRlcltpbmRleF0tPmxhc3RFeGVjdXRlUGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIGV4ZWN1dGUoKm9yZGVyW2luZGV4Kytd
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgp
CisgICAgICAgICAgICAmJiAob3JkZXIuaXNFbXB0eSgpIHx8IGRpZFZpc2l0U29tZXRoaW5nKCkp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgYXV0byBwaWNrTmV4
dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPigKKyAgICAgICAgWyZd
ICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAgIGlmIChkaWRWaXNp
dFNvbWV0aGluZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXIuc2l6ZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gb3JkZXJbaW5kZXgrK10tPmluZGV4KCk7CisgICAgICAgIH0pOworICAg
IAorICAgIGV4ZWN1dGUoUGFyYWxsZWxXb3JrRmlyc3QsIHBpY2tOZXh0KTsKK30KKwordm9pZCBN
YXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYgY29uc3Ry
YWludCkKK3sKKyAgICBpZiAobV9leGVjdXRlZC5nZXQoY29uc3RyYWludC5pbmRleCgpKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlz
bSA9IGNvbnN0cmFpbnQuZXhlY3V0ZShtX21haW5WaXNpdG9yKTsKKyAgICBkaWRFeGVjdXRlKHBh
cmFsbGVsaXNtLCBjb25zdHJhaW50LmluZGV4KCkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVk
dWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAgYm9vbCBkb1Bh
cmFsbGVsV29ya01vZGU7CisgICAgICAgIHVuc2lnbmVkIGluZGV4VG9SdW47CisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIGF1
dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAg
ICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuZmly
c3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHRyeU5leHRDb25z
dHJhaW50ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwaWNrUmVz
dWx0ID0gcGlja05leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGlja1Jlc3Vs
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2V4ZWN1dGVkLmdldCgqcGlja1Jlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1f
c2V0WypwaWNrUmVzdWx0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50
LnBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5k
KCpwaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9S
dW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3Jr
TW9kZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVmZXJlbmNlID09IFBhcmFsbGVsV29y
a0ZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJhbGxlbFdvcmsoKSB8fCB0
cnlOZXh0Q29uc3RyYWludCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyeU5leHRDb25z
dHJhaW50KCkgfHwgdHJ5UGFyYWxsZWxXb3JrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKCFtX251bUFjdGl2ZVRocmVhZHMpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogQW55IHdhaXRpbmcgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5p
bmcgdGhlIFNsb3RWaXNpdG9yLgorICAgICAgICAgICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQg
d291bGQgYmUgcHJvZml0YWJsZS4KKyAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1f
bG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fbnVtQWN0aXZlVGhyZWFkcysrOworICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBN
YXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFtpbmRleFRvUnVuXTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUpCisg
ICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxsZWxXb3JrKHZpc2l0b3IpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSh2aXNpdG9y
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkgeworICAgICAgICAgICAgICAgIGlmIChtX3Rv
RXhlY3V0ZUluUGFyYWxsZWxTZXQuZ2V0KGluZGV4VG9SdW4pKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJ
blBhcmFsbGVsLnRha2VGaXJzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAodW5zaWdu
ZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGluZGV4VG9SdW47IH0pOworICAgICAgICAgICAg
ICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuY2xlYXIoaW5kZXhUb1J1bik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2V4
ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxpc20g
PT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAgICAgICAgICAg
ICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAg
ICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzLS07CisgICAgICAgICAgICBtX2NvbmRpdGlvbi5u
b3RpZnlBbGwoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlcjo6ZGlkRXhlY3V0ZShDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20sIHVu
c2lnbmVkIGluZGV4KQoreworICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICBpZiAocGFy
YWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICBt
X3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgbV90b0V4ZWN1dGVJ
blBhcmFsbGVsU2V0LnNldChpbmRleCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlZpc2l0Q291
bnRlci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7
CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKKworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50U29sdmVy
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1YmxpYzoKKyAgICBNYXJr
aW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYpOworICAgIH5NYXJraW5n
Q29uc3RyYWludFNvbHZlcigpOworICAgIAorICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBj
b25zdDsKKyAgICAKKyAgICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2UgeworICAgICAgICBQYXJh
bGxlbFdvcmtGaXJzdCwKKyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJzdAorICAgIH07CisKKyAg
ICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICAKKyAgICB2b2lkIGRyYWluKEJpdFZl
Y3RvciYgdW5leGVjdXRlZCk7CisgICAgCisgICAgdm9pZCBjb252ZXJnZShjb25zdCBWZWN0b3I8
TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpOworICAgIAorICAgIHZvaWQgZXhlY3V0ZShNYXJr
aW5nQ29uc3RyYWludCYpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRo
cmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgCisgICAgdm9pZCBkaWRFeGVj
dXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgpOworCisgICAgSGVhcCYg
bV9oZWFwOworICAgIFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOworICAgIE1hcmtpbmdDb25z
dHJhaW50U2V0JiBtX3NldDsKKyAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKKyAgICBEZXF1ZTx1
bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBCaXRWZWN0b3IgbV90b0V4
ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IG1fZGlkRXhlY3V0
ZUluUGFyYWxsZWw7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV90b0V4ZWN1dGVTZXF1ZW50
aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAg
IHVuc2lnbmVkIG1fbnVtQWN0aXZlVGhyZWFkcyB7IDAgfTsKKyAgICBWZWN0b3I8VmlzaXRDb3Vu
dGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIE9wYXF1ZVJvb3RTZXQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZVJvb3RT
ZXQpOwotcHVibGljOgotICAgIE9wYXF1ZVJvb3RTZXQoKQotICAgICAgICA6IG1fbGFzdFF1ZXJp
ZWRSb290KG51bGxwdHIpCi0gICAgICAgICwgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdChmYWxz
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjb250YWlucyh2b2lkKiByb290KSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKHJvb3QgIT0gbV9sYXN0UXVlcmllZFJvb3QpIHsKLSAgICAgICAg
ICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gcm9vdDsKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0
UXVlcmllZFJvb3QgPSBtX3Jvb3RzLmNvbnRhaW5zKHJvb3QpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290OwotICAgIH0KLQotICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5pc0VtcHR5KCk7Ci0g
ICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX3Jvb3RzLmNsZWFyKCk7
Ci0gICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb250YWlu
c0xhc3RRdWVyaWVkUm9vdCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgYWRkKHZvaWQqIHJv
b3QpCi0gICAgewotICAgICAgICBpZiAocm9vdCA9PSBtX2xhc3RRdWVyaWVkUm9vdCkKLSAgICAg
ICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSB0cnVlOwotICAgICAgICByZXR1cm4g
bV9yb290cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsKLSAgICB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5zaXplKCk7Ci0gICAgfQotCi0gICAg
SGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3Jvb3RzLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46
OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290
cy5lbmQoKTsKLSAgICB9Ci0KLQotcHJpdmF0ZToKLSAgICBIYXNoU2V0PHZvaWQqPiBtX3Jvb3Rz
OwotICAgIG11dGFibGUgdm9pZCogbV9sYXN0UXVlcmllZFJvb3Q7Ci0gICAgbXV0YWJsZSBib29s
IG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRh
cHRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFs
bGVsU291cmNlQWRhcHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElu
bmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4KK2NsYXNzIFBhcmFsbGVsU291cmNlQWRhcHRl
ciA6IHB1YmxpYyBTaGFyZWRUYXNrPElubmVyVHlwZSgpPiB7CitwdWJsaWM6CisgICAgUGFyYWxs
ZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3Vy
Y2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMpCisgICAgICAgIDogbV9vdXRlclNvdXJj
ZShvdXRlclNvdXJjZSkKKyAgICAgICAgLCBtX3Vud3JhcEZ1bmModW53cmFwRnVuYykKKyAgICB7
CisgICAgfQorICAgIAorICAgIElubmVyVHlwZSBydW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBkbyB7CisgICAgICAg
ICAgICBpZiAobV9pbm5lclNvdXJjZSkgeworICAgICAgICAgICAgICAgIGlmIChJbm5lclR5cGUg
cmVzdWx0ID0gbV9pbm5lclNvdXJjZS0+cnVuKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9IG51bGxwdHI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5uZXJTb3VyY2UgPSBtX3Vu
d3JhcEZ1bmMobV9vdXRlclNvdXJjZS0+cnVuKCkpOworICAgICAgICB9IHdoaWxlIChtX2lubmVy
U291cmNlKTsKKyAgICAgICAgcmV0dXJuIElubmVyVHlwZSgpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG1fb3V0ZXJTb3VyY2U7CisgICAg
UmVmUHRyPFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+PiBtX2lubmVyU291cmNlOworICAgIFVud3Jh
cEZ1bmMgbV91bndyYXBGdW5jOworICAgIExvY2sgbV9sb2NrOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5lclR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+
CitSZWY8UGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBG
dW5jPj4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVy
VHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwg
SW5uZXJUeXBlLCBVbndyYXBGdW5jPihvdXRlclNvdXJjZSwgdW53cmFwRnVuYykpOworfQorICAg
IAorfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3Ry
YWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVs
aXNtKQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBX
VEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1
bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0
ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+
IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBx
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdD
b25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRp
bGl0eSwgcGFyYWxsZWxpc20pCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1
dGVGdW5jdGlvbikpCisgICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShx
dWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQ6On5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpCit7Cit9CisKK2RvdWJsZSBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Cit9CisK
K0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUlt
cGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRv
cik7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Np
bXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCA6IHB1Ymxp
YyBNYXJraW5nQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9S
VF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAorICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
ID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1
aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZTsKKyAgICAKK3By
aXZhdGU6CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9y
Jikgb3ZlcnJpZGU7CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVj
dXRlRnVuY3Rpb247CisgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlj
a1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIy
NTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTgsOSArOTgsNyBAQCBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkK
IAogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIHsKLSAgICBpZiAoaGVhcCgp
LT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCi0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVy
Z2VkIGJ5IG5vdy4KLSAgICBlbHNlCisgICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkg
PT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKQogICAgICAgICByZXNldCgpOwogCiAgICAgaWYgKEhl
YXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gdm0oKS5oZWFwUHJvZmlsZXIoKSkKQEAgLTExMSw3
ICsxMDksNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNs
b3RWaXNpdG9yOjpyZXNldCgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9vdHMu
c2l6ZSgpKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0gMDsK
ICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBudWxscHRyOwpAQCAtMjc3LDcgKzI3NCw3IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVu
YW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewot
ICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJU
KEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwog
ICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CkBAIC0zNDYsNyArMzQzLDcgQEAgcHJp
dmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNv
bnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAg
U2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAK
QEAgLTQzNSw3ICs0MzIsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVs
KCkKIAogdm9pZCBTbG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZChjb25zdCBBYnN0
cmFjdExvY2tlciYpCiB7Ci0gICAgbV9tdXRhdG9ySXNTdG9wcGVkID0gKG1faGVhcC5jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3Bw
ZWRNdXRhdG9yKTsKKyAgICBtX211dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFwLndvcmxkSXNTdG9w
cGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RW
aXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKCkKQEAgLTQ1Miw3ICs0NDksNyBAQCBib29s
IFNsb3RWaXNpdG9yOjpoYXNBY2tub3dsZWRnZWRUaGF0VGhlCiAKIGJvb2wgU2xvdFZpc2l0b3I6
Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tdXRh
dG9ySXNTdG9wcGVkID09IChtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7CisgICAgcmV0dXJuIG1f
bXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGlt
aXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6ZUZv
clN0b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4ICs0ODcsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsK
ICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KLSAgICAKLSAgICBtZXJnZUlm
TmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9m
RHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVzdGVkKQpAQCAtNTUwLDcgKzU0NSw2IEBAIHNpemVf
dCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHIKICAgICB9CiAKICAgICBkb25hdGVB
bGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiAKICAgICByZXR1cm4gYnl0ZXNWaXNpdGVk
KCk7CiB9CkBAIC01NjEsMTcgKzU1NSwxNiBAQCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRl
cm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQog
Ci1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9j
a2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFt
X2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAu
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAu
bV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAu
bV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycworICAgICAgICAmJiAhaGFzV29yayhsb2Nr
ZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNF
bXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJl
ZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFy
ZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKQEAgLTU4MywxMiArNTc2LDE0IEBA
IE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNB
Y3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7
Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwor
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgp
OwogICAgICAgICAgICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251
bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91
dCkpCkBAIC02MjksMjggKzYyNCw1NyBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJl
ZERyYWluUmVzCiAKICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9v
bCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAg
ICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1Jl
YWR5KTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9j
a2VyKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQor
ICAgICAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNr
OworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxl
bE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJh
aW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJr
U3RhY2soCi0gICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0
ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxz
RnJvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhz
dGFjayksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3Rh
dHVzOjpDb250aW51ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9y
RWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYg
c3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFj
ay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVz
cG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZX
YWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRy
YWluKHRpbWVvdXQpOworICAgICAgICBpZiAoYm9udXNUYXNrKSB7CisgICAgICAgICAgICBib251
c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
ZGVhbGx5LCB3ZSB3b3VsZCBub3QgaGF2ZSB0byBkbyB0aGlzLiBIb3dldmVyLCB0aGUgcGFyYWxs
ZWwgbWFya2luZyBhbGdvcml0aG0gd2lsbAorICAgICAgICAgICAgLy8gZ2V0IGNvbmZ1c2VkIGlm
IHdlIGluaXRpYXRlIGl0IHdpdGggdGhlIGhlbHBlciB2aXNpdG9ycyBoYXZpbmcgYW55dGhpbmcg
aW4gdGhlaXIgc3RhY2tzLgorICAgICAgICAgICAgLy8gQWxzbywgdGhpcyBwcm90ZWN0cyBidWdz
IHRoYXQgaW52b2x2ZSByYWNlcyBiZXR3ZWVuIHZpc2l0Q2hpbGRyZW4gYW5kIG9uZSBvZiB0aGUK
KyAgICAgICAgICAgIC8vIGNvbnN0cmFpbnRzLgorICAgICAgICAgICAgLy9kb25hdGVBbGwoKTsK
KworICAgICAgICAgICAgLy8gVGhlIG1haW4gdGhyZWFkIGNvdWxkIHN0aWxsIGJlIHJ1bm5pbmcs
IGFuZCBtYXkgcnVuIGZvciBhIHdoaWxlLiBVbmxlc3Mgd2UgY2xlYXIgdGhlIHRhc2sKKyAgICAg
ICAgICAgIC8vIG91cnNlbHZlcywgd2Ugd2lsbCBrZWVwIGxvb3BpbmcgYXJvdW5kIHRyeWluZyB0
byBydW4gdGhlIHRhc2suCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgICAgIGlm
IChtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID09IGJvbnVzVGFzaykKKyAgICAgICAgICAgICAg
ICAgICAgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgYm9udXNUYXNrID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAg
ICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpc0FjdGl2
ZSA9IHRydWU7CiAgICAgfQogfQpAQCAtNjcwLDE1ICs2OTQsMTkgQEAgU2xvdFZpc2l0b3I6OlNo
YXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFy
a2VycygpID09IDEKICAgICAgICAgfHwgKG1faGVhcC5tX3dvcmxkU3RhdGUubG9hZCgpICYgSGVh
cDo6bXV0YXRvcldhaXRpbmdCaXQpCiAgICAgICAgIHx8ICFtX2hlYXAuaGFzSGVhcEFjY2Vzcygp
Ci0gICAgICAgIHx8IG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCgpKSB7CisgICAgICAgIHx8IG1faGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgIC8v
IFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIG92ZXIgZHJhaW5JblBhcmFsbGVsKCkgd2hlbiB3ZSBo
YXZlIGEgY29uY3VycmVudCBtdXRhdG9yIGJ1dAogICAgICAgICAvLyBvdGhlcndpc2UgaXQgaXMg
bm90IHByb2ZpdGFibGUuCiAgICAgICAgIHJldHVybiBkcmFpbkluUGFyYWxsZWwodGltZW91dCk7
CiAgICAgfQogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsK
LSAgICBkb25hdGVBbGwobG9ja2VyKTsKLSAgICAKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9o
ZWFwLm1fbWFya2luZ011dGV4KSk7CisgICAgcmV0dXJuIHdhaXRGb3JUZXJtaW5hdGlvbih0aW1l
b3V0KTsKK30KKworU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjp3
YWl0Rm9yVGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKICAgICBmb3IgKDs7KSB7CiAg
ICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJl
ZERyYWluUmVzdWx0OjpUaW1lZE91dDsKQEAgLTcxMSw2MSArNzM5LDYgQEAgdm9pZCBTbG90Vmlz
aXRvcjo6ZG9uYXRlQWxsKGNvbnN0IEFic3RyYQogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVl
Um9vdCh2b2lkKiByb290KQotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewotICAgICAgICAv
LyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5t
X29wYXF1ZVJvb3RzLmFkZChyb290KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBQ
dXQgaW50byB0aGUgbG9jYWwgc2V0LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVy
eSBvbmNlIGluCi0gICAgLy8gYSB3aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0
cyBkb24ndCBncm93IHRvbyBsYXJnZS4KLSAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxl
KCk7Ci0gICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci19Ci0KLWJvb2wgU2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25zdAotewotICAgIGlmICghcm9vdCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxN
b2RlKTsKLSAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Ci19
Ci0KLVRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lk
KiByb290KSBjb25zdAotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIEZhbHNlVHJp
U3RhdGU7Ci0gICAgCi0gICAgaWYgKG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCkpCi0gICAg
ICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgaWYgKG1faGVhcC5tX29wYXF1ZVJvb3Rz
LmNvbnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHJldHVy
biBNaXhlZFRyaVN0YXRlOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZUlmTmVjZXNzYXJ5
KCkKLXsKLSAgICBpZiAobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3Bh
cXVlUm9vdHNJZlByb2ZpdGFibGUoKQotewotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0gICAgCiB2
b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQogewogICAgIGlmICghbV9pc0luUGFyYWxsZWxNb2Rl
KSB7CkBAIC03ODUsMTYgKzc1OCw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWlu
KE1vbm90b24KICAgICBkcmFpbih0aW1lb3V0KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6bWVy
Z2VPcGFxdWVSb290cygpCi17Ci0gICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4KTsKLSAgICAgICAgZm9yIChhdXRvKiByb290
IDogbV9vcGFxdWVSb290cykKLSAgICAgICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChy
b290KTsKLSAgICB9Ci0gICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotfQotCiB2b2lkIFNsb3RW
aXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIq
IHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCiB7CiAgICAgbV9oZWFwLm1fd2Vha1JlZmVyZW5jZUhh
cnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjI1NDAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAi
SXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAiT3Bh
cXVlUm9vdFNldC5oIgogI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9N
b25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTUsMTAg
Kzk0LDkgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1
ZSk7CiAgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CisgICAgYm9vbCBhZGRP
cGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCiAg
ICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCop
IGNvbnN0OwotICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBj
b25zdDsKKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAKICAgICBi
b29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211
dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KIApAQCAtMTIxLDYgKzExOSw4IEBAIHB1YmxpYzoKIAog
ICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVv
dXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBk
cmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3Rvbmlj
VGltZTo6aW5maW5pdHkoKSk7CisgICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQgd2FpdEZvclRl
cm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOwogCiAgICAgLy8gQXR0ZW1wdHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQgb2YgZHJhaW5p
bmcgdGhhdCBpbnZvbHZlcyBvbmx5IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBkYXRhLiBUaGlz
CiAgICAgLy8gaXMgbGlrZWx5IHRvIGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3IgbGVzcyB0aGFu
IHRoYXQuIEl0IHdpbGwgdXN1YWxseSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQgbWF5CkBAIC0x
MjgsOCArMTI4LDYgQEAgcHVibGljOgogICAgIC8vIHJhcmUgY2FzZXMgaGFwcGVuIHRlbXBvcmFy
aWx5IGV2ZW4gaWYgd2UncmUgbm90IHJlYWNoaW5nIHRlcm1pbmF0aW9uKS4KICAgICBzaXplX3Qg
cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzKTsKICAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlSWZOZWNlc3NhcnkoKTsKLQogICAgIC8vIFRoaXMgaW5m
b3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVw
aW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KICAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdp
bGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgogICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2
b2lkKiBiYXNlKTsKQEAgLTE5NCwxMCArMTkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAgIAotICAgIHZvaWQgbWVyZ2VP
cGFxdWVSb290cygpOwotCi0gICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7
Ci0KICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9p
ZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CkBAIC0yMTUsNyArMjA5LDYgQEAgcHJpdmF0ZToKIAog
ICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CiAgICAgTWFya1N0YWNrQXJyYXkg
bV9tdXRhdG9yU3RhY2s7Ci0gICAgT3BhcXVlUm9vdFNldCBtX29wYXF1ZVJvb3RzOyAvLyBIYW5k
bGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFnZSBjb2xs
ZWN0b3IuCiAgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNl
ZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCiAgICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVk
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxp
bmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDIzIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAgICAgICAgYXBwZW5kSGlk
ZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmFkZE9wYXF1
ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQocHRyKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QK
K3sKKyAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7Cit9CisK
IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
IHNpemUpCiB7CiAgICAgaWYgKG1faXNGaXJzdFZpc2l0KSB7CkBAIC0xNTksMTIgKzE3NiwxMiBA
QCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAogCiBpbmxpbmUgVk0mIFNs
b3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4g
Km1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJQYXJhbGxl
bFNvdXJjZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAj
aW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKQEAgLTg4LDUgKzg5LDQyIEBAIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gU3Vic3BhY2U6OnBhcmFs
bGVsQWxsb2NhdG9yU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRh
c2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0
b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2VkQWxsb2Nh
dG9yKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9
IG1fYWxsb2NhdG9yOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBt
X2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICAgICAgTG9jayBtX2xvY2s7
CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sobV9maXJzdEFsbG9j
YXRvcikpOworfQorCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4g
U3Vic3BhY2U6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpCit7CisgICAgcmV0
dXJuIGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRC
bG9jazo6SGFuZGxlKj4oCisgICAgICAgIHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCksCisgICAg
ICAgIFtdIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVmUHRyPFNoYXJlZFRhc2s8
TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIGFsbG9j
YXRvci0+cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAgICAgIH0pOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNyArNjksMjQgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNvbnN0IEZ1
bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+PiBw
YXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTm90RW1wdHlNYXJrZWRC
bG9jayhjb25zdCBGdW5jJik7CiAgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPFNo
YXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlNYXJrZWRC
bG9ja1NvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9p
ZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYp
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUmVmUHRyPFNoYXJlZFRh
c2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNo
TGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4
NCw1MyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1
bmMpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNv
bnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCisgICAg
ICAgICAgICAsIG1fYmxvY2tTb3VyY2Uoc3Vic3BhY2UucGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJs
b2NrU291cmNlKCkpCisgICAgICAgICAgICAsIG1fZnVuYyhmdW5jKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBv
dmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRs
ZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKKyAgICAgICAgICAgICAgICBoYW5k
bGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxs
KiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGNlbGwsIGtpbmQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
ICAgICAgICAgICAgIGlmICghbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBtX25lZWRUb1Zpc2l0TGFyZ2VB
bGxvY2F0aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX3N1YnNwYWNlLmZvckVhY2hMYXJnZUFsbG9jYXRpb24oCisgICAgICAgICAgICAgICAg
WyZdIChMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFsbG9jYXRpb24tPmlzTWFya2VkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1
bmModmlzaXRvciwgYWxsb2NhdGlvbi0+Y2VsbCgpLCBtX3N1YnNwYWNlLm1fYXR0cmlidXRlcy5j
ZWxsS2luZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgU3Vic3BhY2UmIG1fc3Vic3BhY2U7CisgICAgICAgIFJlZlB0cjxT
aGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBtX2Jsb2NrU291cmNlOworICAgICAg
ICBGdW5jIG1fZnVuYzsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgICAgIGJvb2wgbV9uZWVk
VG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgeyB0cnVlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMsIGZ1bmMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJiBmdW5j
KQogewogICAgIGZvckVhY2hNYXJrZWRCbG9jaygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgeworcHVibGljOgorICAgIFZp
c2l0Q291bnRlcigpIHsgfQorICAgIAorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlz
aXRvcikKKyAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCisgICAgICAgICwgbV9pbml0aWFs
VmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zpc2l0
b3ItPnZpc2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291bnQ7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIHNpemVf
dCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1Rp
bWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVmlzaXRp
bmdUaW1lb3V0IHsKLXB1YmxpYzoKLSAgICBWaXNpdGluZ1RpbWVvdXQoKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRp
ZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAgIDogbV9kaWRW
aXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKLSAgICAgICAgLCBtX3Zpc2l0Q291bnRC
ZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQo
KSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFZpc2l0U29tZXRo
aW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
ZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQo
bV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIGJvb2wgbV9kaWRWaXNpdFNv
bWV0aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsK
LSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6
ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlz
TWFya2VkQ29uY3VycmVudGx5KG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAg
ICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0Nl
bGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghd2Vh
a0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46
OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250
ZXh0KCksIHZpc2l0b3IpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0
IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFy
Z2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAg
JiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVy
biAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgp
KSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3Qo
KSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29s
IFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYg
KCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHRoaXMpOworICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAg
CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBw
YXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGRvZXMgc29tZSBjaGFuZ2VzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIHBh
cmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZzoKKyAgICAgICAgCisgICAgICAgIC0gSSBmaW5hbGx5
IHJlbW92ZWQgZGVwZW5kZW5jeVdpdGguIFRoaXMgd2FzIGEgc2lsbHkgY29uc3RydWN0IHdob3Nl
IG9ubHkgcHVycG9zZSBpcyB0byBjb25mdXNlCisgICAgICAgICAgcGVvcGxlIGFib3V0IHdoYXQg
aXQgbWVhbnMgdG8gaGF2ZSBhIGRlcGVuZGVuY3kgY2hhaW4uIEkgdG9vayB0aGF0IGFzIGFuIG9w
cG9ydHVuaXR5IHRvIGdyZWFseQorICAgICAgICAgIHNpbXBsaWZ5IHRoZSBHQydzIHVzZSBvZiBk
ZXBlbmRlbmN5IGNoYWluaW5nLgorICAgICAgICAKKyAgICAgICAgLSBBZGRlZCBtb3JlIGxvZ2lj
IHRvIERlcXVlPD4sIHNpbmNlIEkgdXNlIGl0IGZvciBwYXJ0IG9mIHRoZSBsb2FkIGJhbGFuY2Vy
LgorICAgICAgICAKKyAgICAgICAgLSBNYWRlIGl0IHBvc3NpYmxlIHRvIHByb2ZpbGUgbG9jayBj
b250ZW50aW9uLiBTZWUKKyAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgwMjUwI2MwIGZvciBzb21lIHByZWxpbWluYXJ5IG1lYXN1cmVtZW50cy4KKyAg
ICAgICAgCisgICAgICAgIC0gSW50cm9kdWNlZCBob2xkTG9ja0lmLCB3aGljaCBtYWtlcyBpdCBl
YXN5IHRvIHBlcmZvcm0gcHJlZGljYXRlZCBsb2NrIGFjcXVpc2l0aW9uLiBXZSB1c2UgdGhhdAor
ICAgICAgICAgIHRvIHBpY2sgYSBsb2NrIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAg
ICAoV1RGOjpkZXBlbmRlbmN5KToKKyAgICAgICAgKFdURjo6RGVwZW5kZW5jeVdpdGg6OkRlcGVu
ZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGVwZW5kZW5jeVdpdGgpOiBEZWxl
dGVkLgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9y
OjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHA6IEFkZGVkLgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQpOgorICAgICAg
ICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6fkNvbmN1cnJlbnRQdHJIYXNoU2V0KToKKyAg
ICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcyk6CisgICAg
ICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcik6CisgICAgICAgIChXVEY6OkNv
bmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFB0ckhhc2hTZXQ6OmFkZFNsb3cpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNl
dDo6cmVzaXplSWZOZWNlc3NhcnkpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNl
dDo6cmVzaXplQW5kQWRkKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRh
YmxlOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmNvbnRhaW5zKToKKyAgICAg
ICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZCk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRQdHJIYXNoU2V0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0
ckhhc2hTZXQ6OlRhYmxlOjptYXhMb2FkIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFB0ckhhc2hTZXQ6Omhhc2gpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6
Y2FzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpjb250YWluc0ltcGwg
Y29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6YWRkSW1wbCk6Cisg
ICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6dGFr
ZUZpcnN0KToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5oOgorICAgICAgICAqIHd0Zi9Mb2Nr
LmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYv
TG9ja2VyLmg6CisgICAgICAgIChXVEY6OmhvbGRMb2NrSWYpOgorICAgICAgICAqIHd0Zi9TY29w
ZWRMYW1iZGEuaDoKKyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpT
aGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUpOgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFJl
c3VsdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TdGFja1Nob3QuaDogQWRkZWQuCisg
ICAgICAgIChXVEY6OlN0YWNrU2hvdDo6U3RhY2tTaG90KToKKyAgICAgICAgKFdURjo6U3RhY2tT
aG90OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6OmFycmF5IGNvbnN0KToK
KyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3Rh
Y2tTaG90OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojpv
cGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpoYXNoIGNvbnN0KToK
KyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6
CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I+IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6U3RhY2tTaG90OjpkZWxldGVkVmFsdWVBcnJheSk6CisgICAgICAgIChXVEY6OlN0YWNrU2hv
dEhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RIYXNoOjplcXVhbCk6CisgICAg
ICAgICogd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpTdGFj
a1Nob3RQcm9maWxlcjo6U3RhY2tTaG90UHJvZmlsZXIpOgorICAgICAgICAoV1RGOjpTdGFja1No
b3RQcm9maWxlcjo6cHJvZmlsZSk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdFByb2ZpbGVyOjpy
dW4pOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJp
bGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJ
CTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0
NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0
NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNw
cCAqLzsgfTsKKwkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNo
U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07
CiAJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RUYxREI1QURE
QzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi87IH07CiAJCTBGNUJGMTc2MUYyM0Q0
OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3NDFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3Bw
ICovOyB9OwogCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MEYz
MkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4
Myw2ICsxODQsOCBAQAogCQkwRjMwQkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hN
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8q
IExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dp
bmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBCQThGMUU3ODcw
OEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0
QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJFQjRBIC8qIExvY2tBbGdvcml0aG1JbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG1JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQwMDNDRkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIyNiw2ICsyMjksOCBAQAogCQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyog
RmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQ
cmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RDE2NURC
QTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY5REFBMDQxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1Nob3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5REFBMDUxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAv
KiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdUb0hh
c2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVRyYWNpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5NCw2ICs3OTksOCBAQAogCQkJCTBGOEYyQjkwMTcy
RTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUx
QTgyNUEwMDQxMjNGRiAvKiBDb21waWxlci5oICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlB
MkJCQyAvKiBDb21wbGV0aW9uSGFuZGxlci5oICovLAorCQkJCTBGMzBDQjU4MUZDREYxMzMwMDRC
NTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCisJCQkJMEYzMENCNTkxRkNERjEz
MzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8sCiAJCQkJMEZEQjY5OEQxQjdD
NjQzQTAwMEMxMDc4IC8qIENvbmRpdGlvbi5oICovLAogCQkJCUUzOEM0MTI2MUVCNEUwNjgwMDQy
OTU3RCAvKiBDUFVUaW1lLmNwcCAqLywKIAkJCQlFMzhDNDEyNzFFQjRFMDY4MDA0Mjk1N0QgLyog
Q1BVVGltZS5oICovLApAQCAtMTAwNSw2ICsxMDEyLDggQEAKIAkJCQlBOEE0NzMwRDE1MUE4MjVC
MDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0MTIzRkYg
LyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNGRiAvKiBT
dGFja0JvdW5kcy5oICovLAorCQkJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1No
b3QuaCAqLywKKwkJCQkwRjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmls
ZXIuaCAqLywKIAkJCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAg
Ki8sCiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAqLywKIAkJ
CQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8sCkBAIC0xNDI2
LDYgKzE0MzUsNyBAQAogCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJCMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJz
aXN0ZW50Q29kZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJDMUYzRDQ4NjAwMEM3
NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMwQ0I1
QTFGQ0RGMTM0MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFGMTc1MkQxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRFbmNvZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzYyMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0
cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDEx
ICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5KAogICAg
IHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9IG51bGxwdHI+Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCiB7CiAg
ICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50NjRfdCBjb3B5ID0gYml0d2lzZV9jYXN0
PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5pb24geworICAgICAgICB1aW50MzJfdCBjb3B5Owor
ICAgICAgICBUIHZhbHVlOworICAgIH0gdTsKKyAgICB1LmNvcHkgPSAwOworICAgIHUudmFsdWUg
PSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAgICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZh
bHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgogICAgIC8vIGlz
bid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFz
IGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICszNjgsMjAgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRl
bmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4KICAgICBhc20o
ImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCiAgICAgICAgIDogW2RlcGVuZGVu
Y3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAgICAg
IDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxpZiBDUFUoQVJNKQogICAgIGFzbSgiZW9yICVbZGVw
ZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBl
bmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1
LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVwZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMg
YXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVuY2UoKTsKICAgICBkZXBlbmRlbmN5ID0gMDsK
LSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgVU5VU0VEX1BBUkFNKHUuY29weSk7CiAjZW5k
aWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAotLy8gRklYTUU6IFRoaXMgY29kZSBpcyBh
bG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0vLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBl
KiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVl
KQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29weSA9IGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lmIENQVShBUk02NCkKLSAgICBhc20oImVvciAl
d1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9
ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJN
KQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBb
ZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsK
LSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwotICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVO
VVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5OwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09
IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5j
eShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90
Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERl
cGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0
YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
c3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5V2l0aCgpCi0g
ICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAsIHZhbHVlKCkK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5k
ZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQot
ICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19OwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRl
cGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBEZXBlbmRlbmN5V2l0aDxU
PihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUg
VCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CkBAIC00Njks
MTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUgVCYgZW5zdXJlUG9pbnRlcihBdG9taWM8VCoKIAog
dXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6OkRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OkRl
cGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpjb25zdW1lOwogdXNpbmcgV1RGOjpkZXBlbmRlbmN5
OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKIHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsK
IHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZl
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgKysoKnRo
aXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCiAgICAgICAgIGJv
b2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2luZGV4
ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTE4LDYgKzE4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQ2xvY2tUeXBlLmgKICAg
ICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaAorICAgIENvbmN1cnJlbnRQdHJI
YXNoU2V0LmgKICAgICBDb25kaXRpb24uaAogICAgIENyb3NzVGhyZWFkQ29waWVyLmgKICAgICBD
cm9zc1RocmVhZFRhc2suaApAQCAtMTMyLDYgKzEzMyw4IEBAIHNldChXVEZfSEVBREVSUwogICAg
IFNlZ21lbnRlZFZlY3Rvci5oCiAgICAgU21hbGxQdHJTZXQuaAogICAgIFN0YWNrQm91bmRzLmgK
KyAgICBTdGFja1Nob3QuaAorICAgIFN0YWNrU2hvdFByb2ZpbGVyLmgKICAgICBTdGFja1N0YXRz
LmgKICAgICBTdGFja1RyYWNlLmgKICAgICBTdGRMaWJFeHRyYXMuaApAQCAtMjE4LDYgKzIyMSw3
IEBAIHNldChXVEZfU09VUkNFUwogICAgIENQVVRpbWUuY3BwCiAgICAgQ2xvY2tUeXBlLmNwcAog
ICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAog
ICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3Bw
CiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYv
d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudFB0ckhhc2hTZXQuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitDb25jdXJyZW50UHRy
SGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworICAgIGluaXRpYWxpemUoKTsKK30K
KworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCgpCit7Cit9CisK
K3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcygpCit7CisgICAgLy8g
VGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRo
cmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJh
ZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFibGVzLnJlbW92ZUFsbE1hdGNo
aW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4mIHRhYmxlKSAtPiBib29s
IHsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS5nZXQoKSAhPSBtX3RhYmxlLmxvYWRSZWxheGVk
KCk7CisgICAgICAgIH0pOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcigp
Cit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sg
Zm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAg
ICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFibGVzLmNs
ZWFyKCk7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0
Ojppbml0aWFsaXplKCkKK3sKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgaW5pdGlhbFNpemUgPSAz
MjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IHRhYmxlID0gVGFibGU6OmNyZWF0ZShpbml0
aWFsU2l6ZSk7CisgICAgbV90YWJsZS5zdG9yZVJlbGF4ZWQodGFibGUuZ2V0KCkpOworICAgIG1f
YWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKHRhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0
ckhhc2hTZXQ6OmFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKQoreworICAgIGlmICh0YWJsZS0+
bG9hZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJsZS0+bWF4TG9hZCgpKQorICAgICAgICByZXR1cm4g
cmVzaXplQW5kQWRkKHB0cik7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICB2b2lkKiBv
bGRFbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0uY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG51bGxw
dHIsIHB0cik7CisgICAgICAgIGlmICghb2xkRW50cnkpIHsKKyAgICAgICAgICAgIGlmIChtX3Rh
YmxlLmxvYWQoKSAhPSB0YWJsZSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGFkZGVkIGFuIGVu
dHJ5IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVlZCB0byByZWV4ZWN1dGUgdGhlIGFkZCBvbiB0aGUg
bmV3IHRhYmxlLgorICAgICAgICAgICAgICAgIHJldHVybiBhZGQocHRyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChvbGRF
bnRyeSA9PSBwdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGluZGV4ID0g
KGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFy
dEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlm
TmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAg
VGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgIGlmICh0YWJsZS0+bG9h
ZC5sb2FkUmVsYXhlZCgpIDwgdGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gbmV3VGFibGUgPSBUYWJsZTo6Y3JlYXRlKHRh
YmxlLT5zaXplICogMik7CisgICAgdW5zaWduZWQgbWFzayA9IG5ld1RhYmxlLT5tYXNrOworICAg
IHVuc2lnbmVkIGxvYWQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+
c2l6ZTsgKytpKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IHRhYmxlLT5hcnJheVtpXS5sb2FkUmVs
YXhlZCgpOworICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgQXRvbWljPHZvaWQqPiYgZW50cnlSZWYgPSBuZXdUYWJsZS0+YXJyYXlbaW5kZXhd
OworICAgICAgICAgICAgdm9pZCogZW50cnkgPSBlbnRyeVJlZi5sb2FkUmVsYXhlZCgpOworICAg
ICAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgICAgIGVudHJ5UmVmLnN0b3JlUmVs
YXhlZChwdHIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkgIT0gcHRyKTsKKyAgICAgICAgICAgIGluZGV4ID0g
KGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0g
c3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvYWQrKzsKKyAgICB9
CisgICAgCisgICAgbmV3VGFibGUtPmxvYWQuc3RvcmVSZWxheGVkKGxvYWQpOworICAgIAorICAg
IG1fdGFibGUuc3RvcmUobmV3VGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVuZChX
VEZNb3ZlKG5ld1RhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6
ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1
cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6
VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6Y3JlYXRlKHVuc2lnbmVkIHNpemUp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gcmVz
dWx0KG5ldyAoZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIGFycmF5KSArIHNpemVv
ZihBdG9taWM8dm9pZCo+KSAqIHNpemUpKSBUYWJsZSgpKTsKKyAgICByZXN1bHQtPnNpemUgPSBz
aXplOworICAgIHJlc3VsdC0+bWFzayA9IHNpemUgLSAxOworICAgIHJlc3VsdC0+bG9hZC5zdG9y
ZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAg
ICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9yZVJlbGF4ZWQobnVsbHB0cik7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29u
Y3VycmVudFB0ckhhc2hTZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25j
dXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEgY29uY3VycmVudCBoYXNoLWJhc2VkIHNldCBm
b3IgcG9pbnRlcnMuIEl0J3Mgb3B0aW1pemVkIGZvcjoKKy8vCisvLyAtIEhpZ2ggcmF0ZSBvZiBj
b250YWlucygpIGNhbGxzLgorLy8gLSBIaWdoIHJhdGUgb2YgYWRkKCkgY2FsbHMgdGhhdCBkb24n
dCBhZGQgYW55dGhpbmcgbmV3LiBhZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyAo
bm9wIGFkZHMpCisvLyAgIGRvbid0IG11dGF0ZSB0aGUgdGFibGUgYXQgYWxsLgorLy8gLSBOb3Qg
dG9vIG1hbnkgdGhyZWFkcy4gSSBkb3VidCB0aGlzIHNjYWxlcyBiZXlvbmQgfjQuIFRob3VnaCwg
aXQgbWF5IGFjdHVhbGx5IHNjYWxlIGJldHRlciB0aGFuIHRoYXQKKy8vICAgaWYgdGhlIHJhdGUg
b2Ygbm9wIGFkZHMgaXMgYWJzdXJkbHkgaGlnaC4KKy8vCisvLyBJZiB3ZSB3YW50ZWQgdGhpcyB0
byBzY2FsZSBiZXR0ZXIsIHRoZSBtYWluIGNoYW5nZSB3ZSdkIGhhdmUgdG8gbWFrZSBpcyBob3cg
dGhpcyB0YWJsZSBkZXRlcm1pbmVzIHdoZW4KKy8vIHRvIHJlc2l6ZS4gUmlnaHQgbm93IGl0J3Mg
YSBzaGFyZWQgY291bnRlci4gV2UgbG9jazt4YWRkIHRoaXMgY291bnRlci4gT25lIGVhc3kgd2F5
IHRvIG1ha2UgdGhhdAorLy8gc2NhbGFibGUgaXMgdG8gcmVxdWlyZSBlYWNoIHRocmVhZCB0aGF0
IHdvcmtzIHdpdGggdGhlIENvbmN1cnJlbnRQdHJIYXNoU2V0IHRvIHJlZ2lzdGVyIGl0c2VsZiBm
aXJzdC4KKy8vIFRoZW4gZWFjaCB0aHJlYWQgd291bGQgaGF2ZSBzb21lIGRhdGEgc3RydWN0dXJl
IHRoYXQgaGFzIGEgY291bnRlci4gV2UgY291bGQgaW5zdGl0dXRlIHRoZSBwb2xpY3kgdGhhdAor
Ly8gZWFjaCB0aHJlYWQgc2ltcGx5IGluY3JlbWVudHMgaXRzIG93biBsb2FkIGNvdW50ZXIsIGlu
IGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmUuIFRoZW4sIGlmIGFueSBzZWFyY2ggdG8KKy8vIHJlc29s
dmUgYSBjb2xsaXNpb24gZG9lcyBtb3JlIHRoYW4gTiBpdGVyYXRpb25zLCB3ZSBjYW4gY29tcHV0
ZSBhIGNvbWJpbmVkIGxvYWQgYnkgc3VtbWluZyB0aGUgbG9hZAorLy8gY291bnRlcnMgb2YgYWxs
IG9mIHRoZSB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzLgorLy8KKy8vIENvbmN1cnJlbnRQdHJIYXNo
U2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNlZXMgYSA5OCUgbm9wIGFkZCByYXRlIGluIFNwZWVk
b21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIGZvY3VzZXMgc28gbXVjaCBvbiBjYXNlcyB3aGVy
ZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdlLgorY2xhc3MgQ29uY3VycmVudFB0ckhhc2hTZXQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1cnJlbnRQdHJIYXNoU2V0KTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBDb25jdXJyZW50UHRySGFzaFNldCgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+Q29uY3Vy
cmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJv
b2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb250YWluc0ltcGwo
Y2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkSW1wbChjYXN0KHZh
bHVlKSk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3RhYmxlLmxvYWRSZWxheGVkKCktPmxvYWQubG9hZFJlbGF4ZWQoKTsKKyAg
ICB9CisgICAgCisgICAgLy8gT25seSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0
aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJlZXMgdXAgbWVtb3J5IHdpdGhvdXQgY2hhbmdp
bmcKKyAgICAvLyB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygpOworICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVu
IHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZyZWVz
IHVwIGFsbCBtZW1vcnkgZXhjZXB0IGZvcgorICAgIC8vIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBo
YXNodGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXIoKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RydWN0IFRhYmxlIHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUYWJs
ZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbWF4
TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLyAyOyB9CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4KKyAgICAgICAgdW5zaWduZWQgbWFzazsg
Ly8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAgIEF0b21pYzx1bnNpZ25lZD4gbG9hZDsKKyAg
ICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsxXTsKKyAgICB9OworICAgIAorICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBQdHJIYXNoPHZv
aWQqPjo6aGFzaChwdHIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQqIGNhc3QoVCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IHNpemVvZih2b2lkKiksICJ0
eXBlIHRvbyBiaWciKTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgdm9pZCogcHRyOwor
ICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAgfSB1OworICAgICAgICB1LnB0ciA9IG51bGxw
dHI7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHUucHRyOworICAg
IH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zSW1wbCh2b2lkKiBwdHIpIGNvbnN0CisgICAgewor
ICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVu
c2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9
IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsK
KyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJy
YXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5k
ZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5l
dyBlbnRyeSB3YXMgYWRkZWQuCisgICAgYm9vbCBhZGRJbXBsKHZvaWQqIHB0cikKKyAgICB7Cisg
ICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5z
aWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0g
aGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4Owor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJh
eVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFkZFNsb3codGFibGUsIG1hc2ssIHN0YXJ0SW5kZXgsIGluZGV4LCBw
dHIpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09IHB0cikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGFkZFNsb3coVGFibGUqIHRh
YmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwg
dm9pZCogcHRyKTsKKworICAgIHZvaWQgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIHJl
c2l6ZUFuZEFkZCh2b2lkKiBwdHIpOworICAgIAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
VGFibGU+LCA0PiBtX2FsbFRhYmxlczsKKyAgICBBdG9taWM8VGFibGUqPiBtX3RhYmxlOyAvLyBU
aGlzIGlzIG5ldmVyIG51bGwuCisgICAgTG9jayBtX2xvY2s7IC8vIFdlIGp1c3QgdXNlIHRoaXMg
dG8gY29udHJvbCByZXNpemUgcmFjZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEw
MCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4K
ICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAv
LyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxi
YWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYg
aXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3QoY29uc3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3Zl
IGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVy
bnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNh
bGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6
dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwor
ICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6
ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VGaXJzdCgpOworICAgICAgICBpZiAoZnVu
YyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAg
ICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsK
KyAgICAgICAgfQorICAgICAgICBjb3VudCsrOworICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5k
aWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGlu
ZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykK
IHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFs
bG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzNCw4ICsyMzQsNyBAQCB1c2luZyBXVEY6OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZpbmUg
V1RGX1BSSVZBVEVfSU5MSU5FIGlubGluZQogI2VuZGlmCiAKLSNkZWZpbmUgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQgXAotcHVibGljOiBcCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
X0lNUEwgXAogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJu
IHA7IH0gXAogICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1
cm4gcDsgfSBcCiAgICAgXApAQCAtMjYzLDcgKzI2MiwxNSBAQCBwdWJsaWM6IFwKICAgICAgICAg
QVNTRVJUKGxvY2F0aW9uKTsgXAogICAgICAgICByZXR1cm4gbG9jYXRpb247IFwKICAgICB9IFwK
KworI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBcCitwdWJsaWM6IFwKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKIHByaXZhdGU6IFwKIHR5cGVkZWYgaW50IF9fdGhp
c0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KIAorI2RlZmluZSBXVEZfTUFL
RV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQgXAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lN
UEwgXAordHlwZWRlZiBpbnQgX190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNN
YWNybworCiAjZW5kaWYgLyogV1RGX0Zhc3RNYWxsb2NfaCAqLwpJbmRleDogU291cmNlL1dURi93
dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywxMSArMjcsMTYgQEAKICNpbmNsdWRlICJMb2NrLmgiCiAKICNpbmNsdWRlIDx3dGYvTG9j
a0FsZ29yaXRobUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTaG90UHJvZmlsZXIuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBwcm9maWxlTG9ja0Nv
bnRlbnRpb24gPSBmYWxzZTsKKwogdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogeworICAgIGlm
IChwcm9maWxlTG9ja0NvbnRlbnRpb24pCisgICAgICAgIFNUQUNLX1NIT1RfUFJPRklMRSg0LCAy
LCA1KTsKICAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0KIApJ
bmRleDogU291cmNlL1dURi93dGYvTG9ja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvTG9ja2VyLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMiw2ICsxMjIsMTIgQEAgTG9ja2VyPExvY2tU
eXBlPiBob2xkTG9jayhMb2NrVHlwZSYgbG9jawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2Nr
VHlwZT4KK0xvY2tlcjxMb2NrVHlwZT4gaG9sZExvY2tJZihMb2NrVHlwZSYgbG9jaywgYm9vbCBw
cmVkaWNhdGUpCit7CisgICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4ocHJlZGljYXRlID8gJmxv
Y2sgOiBudWxscHRyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2NrZXI8
TG9ja1R5cGU+IHRyeUhvbGRMb2NrKExvY2tUeXBlJiBsb2NrKQogewogICAgIHJldHVybiBMb2Nr
ZXI8TG9ja1R5cGU+Ojp0cnlMb2NrKGxvY2spOwpAQCAtMTM0LDUgKzE0MCw2IEBAIHVzaW5nIFdU
Rjo6TG9ja2VyOwogdXNpbmcgV1RGOjpOb0xvY2tpbmdOZWNlc3NhcnlUYWc7CiB1c2luZyBXVEY6
Ok5vTG9ja2luZ05lY2Vzc2FyeTsKIHVzaW5nIFdURjo6aG9sZExvY2s7Cit1c2luZyBXVEY6Omhv
bGRMb2NrSWY7CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDIy
NTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzQsNiArMTc0LDEzIEBAIHByaXZhdGU6CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFs
cmVhZHkgcmVmZXIgdG8gYSBmdW5jdG9yIGJ5IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBs
aWZldGltZSBpcwogLy8gZ29vZC4gVGhpcyBqdXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhh
dCBwb2ludHMgdG8geW91ciBmdW5jdG9yLgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGFsd2F5
cyB3cm9uZzoKKy8vCisvLyBhdXRvIHJlZiA9IHNjb3BlZExhbWJkYVJlZihbLi4uXSAoLi4uKSB7
Li4ufSk7CisvLworLy8gQmVjYXVzZSB0aGUgc2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIgdG8g
dGhlIGxhbWJkYSBieSByZWZlcmVuY2UsIGFuZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVyIHRo
ZQorLy8gc2VtaWNvbG9uLiBVc2Ugc2NvcGVkTGFtYmRhKCkgaW4gdGhhdCBjYXNlLgogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVkTGFtYmRh
UmVmRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYVJlZihjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogewpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5
ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRo
aXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBv
dmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFz
ay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRl
bXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1j
bGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMu
Li4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1l
bnRUeXBlcy4uLik+IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFz
c2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRl
ZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsg
fQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2soKSB7IH0KIApJbmRleDogU291cmNlL1dURi93dGYv
U3RhY2tTaG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3RhY2tTaG90IHsKK3B1YmxpYzoKKyAgICBTdGFja1No
b3QoKSB7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6ZSkK
KyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplKSB7CisgICAg
ICAgICAgICBtX2FycmF5ID0gc3RkOjptYWtlX3VuaXF1ZTx2b2lkKltdPihzaXplKTsKKyAgICAg
ICAgICAgIGludCBpbnRTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIFdURkdldEJhY2t0cmFjZSht
X2FycmF5LmdldCgpLCAmaW50U2l6ZSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0
aWNfY2FzdDxzaXplX3Q+KGludFNpemUpIDw9IHNpemUpOworICAgICAgICAgICAgbV9zaXplID0g
aW50U2l6ZTsKKyAgICAgICAgICAgIGlmICghbV9zaXplKQorICAgICAgICAgICAgICAgIG1fYXJy
YXkgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdChXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9hcnJheShkZWxldGVkVmFs
dWVBcnJheSgpKQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
U3RhY2tTaG90JiBvcGVyYXRvcj0oY29uc3QgU3RhY2tTaG90JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lkKltdPiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8
dm9pZCpbXT4ob3RoZXIubV9zaXplKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG90aGVyLm1f
c2l6ZTsgaS0tOykKKyAgICAgICAgICAgIG5ld0FycmF5W2ldID0gb3RoZXIubV9hcnJheVtpXTsK
KyAgICAgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgICAgICBtX2FycmF5ID0gV1RGTW92
ZShuZXdBcnJheSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgU3Rh
Y2tTaG90KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IG90
aGVyOworICAgIH0KKyAgICAKKyAgICB2b2lkKiogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Fy
cmF5LmdldCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
KyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2Fy
cmF5OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zaXplICE9IG90aGVyLm1fc2l6ZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBt
X3NpemU7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1fYXJy
YXlbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3NpemU7CisgICAgICAg
IAorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9zaXplOyBpLS07KQorICAgICAgICAgICAgcmVz
dWx0IF49IFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fYXJyYXlbaV0pOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc2l6ZSAmJiBtX2FycmF5
LmdldCgpID09IGRlbGV0ZWRWYWx1ZUFycmF5KCk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ug
U3BlY3RydW08PiBoYXBweS4KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBTdGFja1Nob3QmKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCoq
IGRlbGV0ZWRWYWx1ZUFycmF5KCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigxKSk7IH0KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCpb
XT4gbV9hcnJheTsKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworfTsKKworc3RydWN0IFN0YWNr
U2hvdEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYgc2hv
dCkgeyByZXR1cm4gc2hvdC5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBT
dGFja1Nob3QmIGEsIGNvbnN0IFN0YWNrU2hvdCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPFN0YWNrU2hvdD4geworICAgIHR5cGVkZWYgU3RhY2tTaG90
SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8U3RhY2tTaG90PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvU3RhY2tTaG90UHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Cisj
aW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNrU2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAgICBT
dGFja1Nob3RQcm9maWxlcih1bnNpZ25lZCBudW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1lc1RvU2tp
cCwgdW5zaWduZWQgc3RhY2tzVG9SZXBvcnQpCisgICAgICAgIDogbV9udW1GcmFtZXMobnVtRnJh
bWVzKQorICAgICAgICAsIG1fZnJhbWVzVG9Ta2lwKGZyYW1lc1RvU2tpcCkKKyAgICAgICAgLCBt
X3N0YWNrc1RvUmVwb3J0KHN0YWNrc1RvUmVwb3J0KQorICAgIHsKKyAgICAgICAgVGhyZWFkOjpj
cmVhdGUoIlN0YWNrU2hvdFByb2ZpbGVyIiwgW3RoaXNdICgpIHsgcnVuKCk7IH0pOworICAgIH0K
KworICAgIC8vIE5FVkVSX0lOTElORSBzbyB0aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0YWJs
ZS4KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBwcm9maWxlKCkKKyAgICB7CisgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9wcm9maWxlLmFkZChTdGFja1No
b3QobV9udW1GcmFtZXMgKyBtX2ZyYW1lc1RvU2tpcCkpOworICAgICAgICBtX3RvdGFsQ291bnQr
KzsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigpCisgICAg
eworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBzbGVlcCgxX3MpOworICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgYXV0byBsaXN0
ID0gbV9wcm9maWxlLmJ1aWxkTGlzdCgpOworICAgICAgICAgICAgZGF0YUxvZygiXG5Ib3R0ZXN0
IHN0YWNrcyBpbiAiLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCksICI6XG4iKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUoKSwgY291bnQgPSAwOyBpLS0gJiYgY291bnQgPCBt
X3N0YWNrc1RvUmVwb3J0OyBjb3VudCsrKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZW50cnkg
PSBsaXN0W2ldOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuVG9wICMiLCBjb3VudCArIDEs
ICIgc3RhY2s6ICIsIGVudHJ5LmNvdW50ICogMTAwIC8gbV90b3RhbENvdW50LCAiJVxuIik7Cisg
ICAgICAgICAgICAgICAgU3RhY2tUcmFjZSB0cmFjZShlbnRyeS5rZXkuYXJyYXkoKSArIG1fZnJh
bWVzVG9Ta2lwLCBlbnRyeS5rZXkuc2l6ZSgpIC0gbV9mcmFtZXNUb1NraXApOworICAgICAgICAg
ICAgICAgIGRhdGFMb2codHJhY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBXb3JkTG9jayBtX2xvY2s7Cisg
ICAgU3BlY3RydW08U3RhY2tTaG90LCBkb3VibGU+IG1fcHJvZmlsZTsKKyAgICBkb3VibGUgbV90
b3RhbENvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRnJhbWVzOworICAgIHVuc2lnbmVk
IG1fZnJhbWVzVG9Ta2lwOworICAgIHVuc2lnbmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9OworCisj
ZGVmaW5lIFNUQUNLX1NIT1RfUFJPRklMRShudW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tz
VG9SZXBvcnQpIGRvIHsgXAorICAgIHN0YXRpYyBTdGFja1Nob3RQcm9maWxlciogc3RhY2tTaG90
UHJvZmlsZXI7IFwKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJvZmlsZXJP
bmNlRmxhZzsgXAorICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWcs
IFtdIHsgc3RhY2tTaG90UHJvZmlsZXIgPSBuZXcgU3RhY2tTaG90UHJvZmlsZXIobnVtRnJhbWVz
LCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVwb3J0KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQcm9m
aWxlci0+cHJvZmlsZSgpOyBcCit9IHdoaWxlIChmYWxzZSkKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEyLTAxICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2
aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9y
LiBUaGlzIGNoYW5nZSBpcyBiZXN0IHRlc3RlZCB1c2luZyBET00tR0MtaW50ZW5zaXZlCisgICAg
ICAgIGJlbmNobWFya3MgbGlrZSBTcGVlZG9tZXRlciBhbmQgRHJvbWFlby4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgcGFyYWxsZWxpemVzIHRoZSBET00ncyBvdXRwdXQgY29uc3RyYWludCwgYW5k
IG1ha2VzIHNvbWUgc21hbGwgY2hhbmdlcyB0byBtYWtlIHRoaXMgbW9yZQorICAgICAgICBzY2Fs
YWJsZS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNp
dGluZ1RpbWVvdXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3Mv
anMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpE
T01HQ091dHB1dENvbnN0cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFs
bGVsV29ya0ltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWlu
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmV2ZW50VGFy
Z2V0RGF0YUNvbmN1cnJlbnRseSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVFdmVu
dFRhcmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJFdmVudFRhcmdldERh
dGEpOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJp
bGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRN
b2R1bGVTY3JpcHRMb2FkZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNw
cAogYmluZGluZ3MvanMvQ2FsbFRyYWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAor
YmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3Jh
cHBlcldvcmxkLmNwcAogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVh
cC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBA
QAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaD4KKwpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVh
cC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShu
b25leGlzdGVudCkKQEAgLTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9WaXNpdGluZ1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzUxLDYgKzM1MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAv
KiBMZW5ndGhQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4NzE2NkUxQzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJB
MzAwNDQzQzNGIC8qIEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0Mz
RiAvKiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURD
NDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEw
MDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5
REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAw
NzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRG
OTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBH
cmFwaGljc0xheWVyVXBkYXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQjYyNTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NjI1MkQxOERFMUIxNTAwQTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAw
MTBDREE1IC8qIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Ny
b2xsaW5nVHJlZVN0aWNreU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNTQ0Niw2ICs1NDQ3LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAw
NDQzQzNGIC8qIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpT
RE9NUXVhZEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0RPTVF1YWRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1
NzE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1
QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERPTUdDT3V0cHV0Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0
cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25z
dHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEw
MDk3NUZERCAvKiBDU1NQcm9wZXJ0aWVzLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpz
b247IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRD
MCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5ODAsNiArMjI5ODMsOCBAQAog
CQkJCTk1MjA3NjAyMUYyNjc1RjkwMDdEMkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJ
CQkwRjYwRjMyOTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBG
MzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2
NjMwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBF
MUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUx
NkFEMjFGMzUyNTIwMDAzNEI2QkYgLyogRE9NUHJvbWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RB
NDcxMTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RB
MkQxMTQzMTIxRTAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5oICovLApAQCAtMjc1NDcsNiAr
Mjc1NTIsNyBAQAogCQkJCTUxOEY1MDA0MTk0Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dl
b2xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUg
LyogSlNHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAw
NzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZE
QTdDMUYxODgzMjJGQzAwQzk1NEI1IC8qIEpTR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NDgyQjc1MjExOThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRw
dXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJh
aW50LmgiCisKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVh
cC9IZWFwSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5o
PgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9T
dWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50
OjpET01HQ091dHB1dENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0
YSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KCJEb21vdXQiLCAiRE9NIE91dHB1dCBDb25zdHJh
aW50IiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXllZCkKKyAgICAsIG1fdm0odm0p
CisgICAgLCBtX2NsaWVudERhdGEoY2xpZW50RGF0YSkKKyAgICAsIG1fbGFzdEV4ZWN1dGlvblZl
cnNpb24odm0uaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpKQoreworfQorCitET01HQ091
dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQoKQoreworfQorCitDb25zdHJh
aW50UGFyYWxsZWxpc20gRE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90Vmlz
aXRvciYpCit7CisgICAgSGVhcCYgaGVhcCA9IG1fdm0uaGVhcDsKKyAgICAgICAgICAgIAorICAg
IGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVy
c2lvbikKKyAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsK
KyAgICAgICAgICAgIAorICAgIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JF
eGVjdXRpb25WZXJzaW9uKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3Rhc2tzLmlzRW1wdHko
KSk7CisgICAgbV9jbGllbnREYXRhLmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCisgICAg
ICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBb
XSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6Oktp
bmQpIHsKKyAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwq
PihoZWFwQ2VsbCk7CisgICAgICAgICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52
bSgpKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV90YXNrcy5hcHBlbmQoc3Vi
c3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGZ1bmMpKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgICAgICAKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDsK
K30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJ
bXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoYXV0byYgdGFzayA6IG1fdGFz
a3MpCisgICAgICAgIHRhc2stPnJ1bih2aXNpdG9yKTsKK30KKyAgICAgICAgCit2b2lkIERPTUdD
T3V0cHV0Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7
CisgICAgbV90YXNrcy5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3Ry
YWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJl
ZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSlNWTUNsaWVudERhdGE7CisKK2NsYXNzIERPTUdDT3V0cHV0Q29uc3RyYWludCA6
IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBET01HQ091dHB1
dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTVk1DbGllbnREYXRhJik7CisgICAgfkRPTUdDT3V0cHV0
Q29uc3RyYWludCgpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTQzo6Q29uc3RyYWludFBhcmFs
bGVsaXNtIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRvUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVu
dERhdGE7CisgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsKKyAgICBWZWN0b3I8
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4+IG1fdGFza3M7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDE0ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAorI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWlu
dC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhlYXAvRmFzdE1hbGxv
Y0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgotI2luY2x1ZGUgPGhlYXAvTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Zp
c2l0aW5nVGltZW91dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CkBAIC03NCw0MyArNzIs
NyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQoVk0qCiAgICAgSlNWTUNs
aWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEoKnZtKTsKICAgICB2bS0+
Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRoaXMgcG9pbnRlci4KICAg
ICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJh
aW50PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29uc3RyYWludHMiLAotICAg
ICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9uID0gdm0tPmhlYXAubXV0
YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
ciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBIZWFwJiBo
ZWFwID0gdm0tPmhlYXA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoZWFwLm11dGF0
b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0RXhlY3V0aW9uVmVy
c2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKLQotICAgICAgICAgICAgLy8g
V2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNvdW50IGhlcmUgb3Vyc2VsdmVzLiBXZSBuZWVk
IHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKLSAgICAgICAgICAgIC8vIG9wYXF1ZSByb290cyB0
aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0aW9uIHlldC4gVGhlIHdheSB3ZSBzaWduYWwg
dGhpcyB0byB0aGUKLSAgICAgICAgICAgIC8vIGNvbnN0cmFpbnQgc29sdmVyIGlzIGJ5IGFkZGlu
ZyB0byB0aGUgdmlzaXQgY291bnQuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBu
dW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9vdHMoKTsKLQotICAgICAgICAg
ICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51
bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnREYXRhLT5mb3JFYWNoT3V0cHV0Q29u
c3RyYWludFNwYWNlKAotICAgICAgICAgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5k
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nh
c3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwt
Pm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgc2xvdFZpc2l0
b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVJldmlzaXRlZCsrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIoIiwgbnVtUmV2
aXNpdGVkLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90VmlzaXRvci5tZXJn
ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFk
ZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBudW1PcGFxdWVSb290c0JlZm9y
ZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5
ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoY29uc3RyYWlu
dCkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6bWFrZV91bmlxdWU8
RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7CiAgICAgICAgIAogICAg
IGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSgqdm0s
IHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFdl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJCZWZvcmVM
b2FkRXZlbnQuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCisjaW5jbHVk
ZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJDb250ZXh0
TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIsNyArMjE2MywxNCBAQCBFdmVudFRhcmdldERhdGEq
IE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAKIEV2ZW50VGFyZ2V0RGF0YSogTm9kZTo6ZXZlbnRU
YXJnZXREYXRhQ29uY3VycmVudGx5KCkKIHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNf
ZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CisgICAgLy8gTm90IGhvbGRpbmcgdGhlIGxvY2sgd2hl
biB0aGUgd29ybGQgaXMgc3RvcHBlZCBhY2NlbGVyYXRlcyBwYXJhbGxlbCBjb25zdHJhaW50IHNv
bHZpbmcsIHdoaWNoCisgICAgLy8gY2FsbHMgdGhpcyBmdW5jdGlvbiBmcm9tIG1hbnkgdGhyZWFk
cy4gUGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nIGNhbiBoYXBwZW4gd2l0aCB0aGUgd29ybGQK
KyAgICAvLyBydW5uaW5nIG9yIHN0b3BwZWQsIGJ1dCBpZiB3ZSBkbyBpdCB3aXRoIGEgcnVubmlu
ZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5IG1peGluZyBjb25zdHJhaW50CisgICAgLy8gc29s
dmluZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJlZm9yZSwgdGhlIG1vc3QgbGlrZWx5IHRpbWUgZm9y
IGNvbnRlbnRpb24gb24gdGhpcyBsb2NrIGlzIHdoZW4gdGhlCisgICAgLy8gd29ybGQgaXMgc3Rv
cHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0
b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdvcmxkCisgICAgLy8gbWVhbnMgdGhhdCB3ZSB3aWxs
IG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFyZ2V0IGRhdGEgbWFwLgorICAgIEpTQzo6Vk0qIHZt
ID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYoc19ldmVu
dFRhcmdldERhdGFNYXBMb2NrLCB2bSAmJiB2bS0+aGVhcC53b3JsZElzUnVubmluZygpKTsKICAg
ICByZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRhKCkgPyBldmVudFRhcmdldERhdGFNYXAoKS5nZXQo
dGhpcykgOiBudWxscHRyOwogfQogCkBAIC0yMTcxLDYgKzIxNzksOSBAQCBFdmVudFRhcmdldERh
dGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAgICAgaWYgKGhhc0V2ZW50VGFyZ2V0RGF0YSgp
KQogICAgICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmdldCh0aGlzKTsKIAorICAg
IEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0g
fHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CisKICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAgc2V0SGFzRXZlbnRUYXJnZXREYXRh
KHRydWUpOwogICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFwKCkuYWRkKHRoaXMsIHN0ZDo6
bWFrZV91bmlxdWU8RXZlbnRUYXJnZXREYXRhPigpKS5pdGVyYXRvci0+dmFsdWU7CkBAIC0yMTc4
LDYgKzIxODksOCBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAK
IHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogeworICAgIEpTQzo6Vk0qIHZtID0g
Y29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29y
bGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0
RGF0YU1hcExvY2spOwogICAgIGV2ZW50VGFyZ2V0RGF0YU1hcCgpLnJlbW92ZSh0aGlzKTsKIH0K
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAqIFNjcmlw
dHMvcnVuLWpzYy1iZW5jaG1hcmtzOiBBZGQgc3BsYXktbGF0ZW5jeSB0ZXN0LCBzaW5jZSB0aGlz
IGNoYW5nZSBuZWVkZWQgdG8gYmUgY2FyZWZ1bGx5IHZhbGlkYXRlZCB3aXRoIHRoYXQgYmVuY2ht
YXJrLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
OiBBZGRlZC4gVGhpcyBoYXMgdW5pdCB0ZXN0cyBvZiB0aGUgbmV3IGNvbmN1cnJlbnQgZGF0YSBz
dHJ1Y3R1cmUuIFRoZSB0ZXN0cyBmb2N1cyBvbiBjb3JyZWN0bmVzcyB1bmRlciBzZXJpYWwgZXhl
Y3V0aW9uLCB3aGljaCBhcHBlYXJzIHRvIGJlIGVub3VnaCBmb3Igbm93IChpdCdzIHNvIGVhc3kg
dG8gY2F0Y2ggYSBjb25jdXJyZW5jeSBidWcgYnkganVzdCBydW5uaW5nIHRoZSBHQykuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0xMi0wMSAgQWxpY2lhIEJveWEgR2Fy
Y8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIFNhbXBsZU1hcC5j
cHAgQVBJIHRlc3RzIHRvIENNYWtlCkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2ht
YXJrcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkocmV2
aXNpb24gMjI1NDAzKQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgTE9OR1NQSURFUl9QQVRIID0gUEVSRk9STUFOQ0VU
RVNUU19QQVRIIAogVjhfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTdW5TcGlkZXIi
ICsgInRlc3RzIiArICJ2OC12NiIKIFRBSUxCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19Q
QVRIICsgIlRhaWxCZW5jaDkwMDAiCiBNSUNST0JFTkNITUFSS1NfUEFUSCA9IE9QRU5TT1VSQ0Vf
UEFUSCArICJKU1Rlc3RzIiArICJtaWNyb2JlbmNobWFya3MiCi1PQ1RBTkVfV1JBUFBFUl9QQVRI
ID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIgKyAid3JhcHBlcnMiCitPUEVOU09V
UkNFX09DVEFORV9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIKK09DVEFO
RV9XUkFQUEVSX1BBVEggPSBPUEVOU09VUkNFX09DVEFORV9QQVRIICsgIndyYXBwZXJzIgogSlNC
RU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIkpTQmVuY2giCiBTSVhTUEVFRF9Q
QVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ0ZXN0cyIKIFNJWFNQ
RUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAi
d3JhcHBlcnMiCkBAIC04NDEsNiArODQyLDIwIEBAIGNsYXNzIFNpbmdsZUZpbGVUaW1lZEJlbmNo
bWFya1BhcmFtZXRlcnMKICAgZW5kCiBlbmQKIAorIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBv
ZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0IGJlIGxvYWRlZCBpbiBpdHMgb3duIGdsb2JhbCBvYmpl
Y3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1bigpKSwgYnV0IHJldHVybnMgaXRzIHJlc3VsdCBpbiBh
IGN1c3RvbSB3YXkuCitjbGFzcyBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0
ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5jaFBhdGgKKyAgCisgIGRlZiBpbml0aWFsaXplKGJlbmNo
UGF0aCkKKyAgICBAYmVuY2hQYXRoID0gYmVuY2hQYXRoCisgIGVuZAorICAKKyAgZGVmIGtpbmQK
KyAgICA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgIGVuZAorZW5kCisKICMgQmVu
Y2htYXJrIHRoYXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgZGF0YSBmaWxlcyB0aGF0IHNob3Vs
ZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZvbGxvd2VkCiAjIGJ5IGEgY29tbWFuZCB0byBydW4gdGhl
IGJlbmNobWFyay4KIGNsYXNzIE11bHRpRmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwpAQCAt
OTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1pdEJlbmNoUnVuQ29kZUZpbGUobmFtZSwgcGxhbiwgYmVu
CiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgaWYgKF9fYmVuY2hlcl9pbmRl
eCA+PSAje3dhcm11cH0pIHByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJh
dGlvbn06IFwiICsgKF9fYmVuY2hlcl9pbmRleCAtICN7d2FybXVwfSkgKyBcIjogVGltZTogXCIr
KChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1bnMpKTsiKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRl
cnIsZmlsZSwifSIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIje2JlbmNoUGFy
YW1zLnRlYXJEb3duQ29tbWFuZC5qc30iKQorICAgICAgZWxzaWYgYmVuY2hQYXJhbXMua2luZCA9
PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgICAgICAgIGRvdWJsZVB1dHMoJHN0
ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKKyAg
ICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHZhciBfX2JlbmNoZXJfcmVzdWx0ID0g
e3ZhbHVlOiBudWxsfTsiKQorICAgICAgICAkcmVydW4udGltZXMgeworICAgICAgICAgIGRvdWJs
ZVB1dHMoJHN0ZGVycixmaWxlLCIgICBydW4oX19iZW5jaGVyX3doYXQsIF9fYmVuY2hlcl9yZXN1
bHQpOyIpCisgICAgICAgIH0KKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIGlm
IChfX2JlbmNoZXJfcmVzdWx0LnZhbHVlID09IG51bGwpIikKKyAgICAgICAgZG91YmxlUHV0cygk
c3RkZXJyLGZpbGUsIiAgICAgIHRocm93IG5ldyBFcnJvcihcIk51bGwgcmVzdWx0XCIpOyIpCisg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICByZXR1cm4gX19iZW5jaGVyX3Jlc3Vs
dC52YWx1ZTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCisgICAgICAg
ICR3YXJtdXAudGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJfX2Jl
bmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSIpCisgICAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVh
c3VyZUdDCisgICAgICAgIH0KKyAgICAgICAgJGlubmVyLnRpbWVzIHsKKyAgICAgICAgICB8IGlu
bmVySW5kZXggfAorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJwcmludChcIiN7
bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiAje2lubmVySW5kZXh9OiBUaW1l
OiBcIitfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSk7IikK
KyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52
bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQogICAgICAgZWxzZQogICAgICAgICByYWlzZSB1
bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrCiAgICAg
ICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVu
Y2hlcl93aGF0KSB7IikKQEAgLTE1OTQsNiArMTYyOCwxOSBAQCBjbGFzcyBPY3RhbmVCZW5jaG1h
cmsKICAgZW5kCiBlbmQKIAorY2xhc3MgQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgaW5jbHVkZSBC
ZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0aWFsaXplKG5hbWUsIGZ1bGxQYXRoKQorICAgIEBuYW1l
ID0gbmFtZQorICAgIEBmdWxsUGF0aCA9IGZ1bGxQYXRoCisgIGVuZAorICAKKyAgZGVmIGVtaXRS
dW5Db2RlKHBsYW4pCisgICAgZW1pdEJlbmNoUnVuQ29kZShmdWxsbmFtZSwgcGxhbiwgU2luZ2xl
RmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycy5uZXcoZW5zdXJlRmlsZSgiQ3VzdG9t
VGltZWQtI3tAbmFtZX0iLCBAZnVsbFBhdGgpKSkKKyAgZW5kCitlbmQKKwogY2xhc3MgS3Jha2Vu
QmVuY2htYXJrCiAgIGluY2x1ZGUgQmVuY2htYXJrCiAgIApAQCAtMzAxMCw2ICszMDU3LDcgQEAg
YmVnaW4KICAgICB8IGFyZ3MgfAogICAgIE9DVEFORS5hZGQgT2N0YW5lQmVuY2htYXJrLm5ldygq
YXJncykKICAgfQorICBPQ1RBTkUuYWRkIEN1c3RvbVRpbWVkQmVuY2htYXJrLm5ldygic3BsYXkt
bGF0ZW5jeSIsIChPUEVOU09VUkNFX09DVEFORV9QQVRIICsgInNwbGF5LmpzIikudG9fcykKIAog
ICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0ZS5uZXcoIktyYWtlbiIsIDphcml0aG1ldGljTWVhbiwg
LTEpCiAgIFsiYWktYXN0YXIiLCAiYXVkaW8tYmVhdC1kZXRlY3Rpb24iLCAiYXVkaW8tZGZ0Iiwg
ImF1ZGlvLWZmdCIsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDYgKzkzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcAorICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKICAgICAke1RFU1RX
RUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRoLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIx
QTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBG
MTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0Ey
QjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMkMyMEI4
MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNwcCAq
LzsgfTsKKwkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBD
QjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJ
CTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCOTRB
NTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovOyB9
OwogCQkwRjRGRkE5RTFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRl
eHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRG
RkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gKi87
IH07CiAJCTBGNTY1MUY3MUZDRTREREMwMDMxMEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9G
cmFnbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTY1MUY2MUZDRTREREIwMDMxMEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVu
dC5tbSAqLzsgfTsKQEAgLTEwNzIsNiArMTA3Myw3IEBACiAJCTBGMTM5RTc1MUE0MjNBNTMwMEY1
OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFdlYWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2EvV2Vha09iakNQdHIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVBRjZDNEQwMDdBQjc1MyAvKiBXZWJD
b3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRp
bWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBD
b25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3Jp
cHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdF
dmFsdWF0ZUphdmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEZG
QTlEMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNuYXBzaG90VmlhUmVuZGVySW5D
b250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGRkFBMDFFRDNEMERF
MDBGNzExMUYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEltYWdlSU8u
ZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1l
d29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0yNTkzLDYgKzI1OTUsNyBAQAogCQkJ
CTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNTdHJpbmcuY3BwICovLAogCQkJCUU0
MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgKi8sCiAJCQkJQTdBOTY2
REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8s
CisJCQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0aW9uLmNwcCAqLywK
IAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRUYXNrLmNwcCAqLywK
IAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAgKi8sCkBAIC0zMTc5
LDYgKzMxODIsNyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBO
YWtlZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcg
LyogTmV2ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUMxRkNFMTc5
NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJl
bnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25hbWVzcGFjZSB7CisKKy8vIGBj
b21tYW5kc2AgaXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlzIHRoaW5nIHdoYXQgdG8gZG8uIEl0
IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisvLyBUaGUgY2hhcmFj
dGVyIHBhaXJzIGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6CisvLworLy8gK3ggICAgIEFkZHMgJ3gn
IHRvIHRoZSBzZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBhbmQgYXNzZXJ0cyB0aGF0IGl0J3Mg
bmV3LgorLy8gIXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgYW5kIGFzc2VydHMgdGhhdCBpdCB3
YXMgdGhlcmUgYWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIGluIHRoZSBz
ZXQKKy8vIC14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5vdCBpbiB0aGUgc2V0Cit2b2lkIGRv
VGVzdChjb25zdCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBz
ZXQ7CisgICAgZm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0gY29tbWFuZHM7IGNvbW1hbmRbMF0g
JiYgY29tbWFuZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IGJpdHdp
c2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb21tYW5kWzFdKSk7CisgICAg
ICAgIHN3aXRjaCAoY29tbWFuZFswXSkgeworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKHNldC5hZGQocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAnISc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmFkZChwdHIpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICct
JzoKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30K
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNo
U2V0LCBFbXB0eSkKK3sKKyAgICBkb1Rlc3QoIiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50
UHRySGFzaFNldCwgQWRkT25lRWxlbWVudCkKK3sKKyAgICBkb1Rlc3QoIit4PXgteS0wIik7Cit9
CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50TXVsdGlwbGVU
aW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4IXgheCF4IXg9eC15LTAiKTsKK30K
KworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnRNYW55VGltZXMp
Cit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgteS0wIXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hT
ZXQsIEFkZExvdHNPZkVsZW1lbnRzKQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5
KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6K3grYyt2K2IrbittK1Er
VytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00
PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9
dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1O
PU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxl
bWVudHNNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3cr
ZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitU
K1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9
OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1t
PVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uITEh
MiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6
IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMh
ViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFn
IWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUoh
SyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFw
IWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMh
RCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0
IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUh
SSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVch
RSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1
ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYh
YiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFN
ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWsh
bCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFY
IUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQh
ZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFI
IUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkh
byFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFB
IVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJl
bnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c0FuZFF1ZXJ5U29tZUJlZm9yZUFkZGluZ1Ro
ZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1
K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9
aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1SLVQtWS1VLUktTy1Q
LUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2IrbittK1ErVytFK1Ir
VCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03
PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49
bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIp
OworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkU29tZUVsZW1lbnRzTXVs
dGlwbGVUaW1lc1RoZW5BZGRUaGVSZXN0QW5kUXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkK
K3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCExITIhMyE0ITUh
NiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0
ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIh
MyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCt5
K3UraStvK3ArYStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9
dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1P
LVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTStsK3oreCtjK3YrYituK20rUStXK0Ur
UitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02
PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9
bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0u
Iik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328156</attachid>
            <date>2017-12-01 14:08:21 -0800</date>
            <delta_ts>2017-12-01 14:34:49 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>233144</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MyBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIEl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgYSBzbWFs
bAorICAgICAgICBTcGVlZG9tZXRlciBzcGVlZC11cCAoMC42OCUgZmFzdGVyIHdpdGggcCA9IDAu
MDM2KS4KKyAgICAgICAgCisgICAgICAgIENvbnN0cmFpbnRzIGNhbiBub3cgYmUgcGFyYWxsZWwg
aW4gdHdvIGFsbW9zdCBvcnRob2dvbmFsIHdheXM6CisgICAgICAgIAorICAgICAgICAtIEEgY29u
c3RyYWludCdzIGV4ZWN1dGUgZnVuY3Rpb24gY2FuIG5vdyBydW4gaW4gcGFyYWxsZWwgdG8gb3Ro
ZXIgY29uc3RyYWludHMnIGV4ZWN1dGUgZnVuY3Rpb25zLgorICAgICAgICAgIFRoaXMgaXMgdGhl
IG1vc3QgYmFzaWMga2luZCBvZiBwYXJhbGxlbGlzbSB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZl
ciBzdXBwb3J0cy4gVW5sZXNzIGEKKyAgICAgICAgICBjb25zdHJhaW50IG9wdHMgb3V0IG9mIHRo
aXMgKHRoZSBKU0MgU1BJIGNvbnN0cmFpbnRzIG9wdCBvdXQgZm9yIGNvbXBhdCByZWFzb25zKSwg
aXQgd2lsbAorICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYmUgcnVuIGFzIHBhcnQgb2YgdGhlIHBh
cmFsbGVsIHNvbHZlci4gSWYgYSBjb25zdHJhaW50IG9wdHMgb3V0LCBpdCB3aWxsIHJ1bgorICAg
ICAgICAgIHNlcXVlbnRpYWxseSAtIHRoZSBzYW1lIHdheSBhcyBiZWZvcmUsIG9uIHRoZSBzYW1l
IHRocmVhZCBhcyBiZWZvcmUgLSBhZnRlciB0aGUgcGFyYWxsZWwKKyAgICAgICAgICBjb25zdHJh
aW50IHNvbHZlciBmaW5pc2hlcy4KKyAgICAgICAgCisgICAgICAgIC0gQSBjb25zdHJhaW50IGNh
biBjcmVhdGUgcGFyYWxsZWwgd29yayBmb3IgaXRzZWxmLCB3aGljaCB0aGUgY29uc3RyYWludCBz
b2x2ZXIgd2lsbCBpbnRlcmxlYXZlCisgICAgICAgICAgd2l0aCBvdGhlciBwYXJhbGxlbCB3b3Jr
IGZyb20gb3RoZXIgY29uc3RyYWludHMuIElmIGEgY29uc3RyYWludCBjYW4gY3JlYXRlIGEgbG90
IG9mIHBhcmFsbGVsCisgICAgICAgICAgd29yaywgdGhlbiB0aGUgc29sdmVyIHdpbGwgYWxsb3cg
dGhhdCBjb25zdHJhaW50IHRvIGdldCBhbGwgY29yZXMgZm9yIGFzIGxvbmcgYXMgaXQgbmVlZHMg
dG8KKyAgICAgICAgICBmaW5pc2guCisgICAgICAgIAorICAgICAgICBJdCdzIG5vdCBwb3NzaWJs
ZSwgdmlhIHRoZSBBUEksIHRvIGhhdmUgYSBsZWdhY3kgc2VxdWVudGlhbCBjb25zdHJhaW50IHRo
YXQgY3JlYXRlcyBwYXJhbGxlbCB3b3JrCisgICAgICAgIGZvciBpdHNlbGYuIEhvd2V2ZXIsIHN1
Y2ggY29uc3RyYWludHMgYXJlIGZyZWUgdG8gc3RhcnQgdGhlaXIgb3duIHRocmVhZHMsIGlmIHRo
ZXkgcmVhbGx5IGRpZCBoYXZlCisgICAgICAgIHNvbWUgcGFyYWxsZWxpc20gb3Bwb3J0dW5pdGll
cy4KKyAgICAgICAgCisgICAgICAgIEEgbG90IG9mIHRoaXMgY2hhbmdlIGlzIGFib3V0IG1ha2lu
ZyBpdCBlYXN5IHRvIGl0ZXJhdGUgR0MgZGF0YSBzdHJ1Y3R1cmVzIGluIHBhcmFsbGVsLiBUaGlz
CisgICAgICAgIGNoYW5nZSBtYWtlcyBhbG1vc3QgYWxsIGNvbnN0cmFpbnRzIHBhcmFsbGVsLWVu
YWJsZWQsIGJ1dCBvbmx5IHRoZSBET00ncyBvdXRwdXQgY29uc3RyYWludCB1c2VzCisgICAgICAg
IHRoZSBwYXJhbGxlbCB3b3JrIEFQSS4gVGhhdCBjb25zdHJhaW50IGl0ZXJhdGVzIHRoZSBtYXJr
ZWQgY2VsbHMgaW4gdHdvIHN1YnNwYWNlcy4gVGhpcyBjaGFuZ2UKKyAgICAgICAgbWFrZXMgaXQg
dmVyeSBlYXN5IHRvIGNvbXBvc2UgcGFyYWxsZWwgaXRlcmF0b3JzIG92ZXIgc3Vic3BhY2VzLCBh
bGxvY2F0b3JzLCBibG9ja3MsIGFuZCBjZWxscy4KKyAgICAgICAgVGhlIG1hcmtlZCBjZWxsIHBh
cmFsbGVsIGl0ZXJhdG9yIGlzIGNvbXBvc2VkIG91dCBvZiBwYXJhbGxlbCBpdGVyYXRvcnMgZm9y
IHRoZSBvdGhlcnMuIEEgcGFyYWxsZWwKKyAgICAgICAgaXRlcmF0b3IgaXMganVzdCBhbiBpdGVy
YXRvciB0aGF0IGNhbiBkbyBhbiBhdG9taWMgbmV4dCgpIHZlcnkgcXVpY2tseS4gV2UgYWJzdHJh
Y3QgdGhlbSB1c2luZworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazwuLi4oKT4+LCB3aGVyZSAu
Li4gaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgaXRlcmF0b3IuIFdlIGtub3cgaXQncyBk
b25lCisgICAgICAgIHdoZW4gaXQgcmV0dXJucyBhIGZhbHNpc2ggdmVyc2lvbiBvZiAuLi4gKGlu
IHRoZSBjdXJyZW50IGNvZGUsIHRoYXQncyBhbHdheXMgYSBwb2ludGVyIHR5cGUsIHNvCisgICAg
ICAgIGRvbmUgaXMgaW5kaWNhdGVkIGJ5IG51bGwpLgorCisgICAgICAgICogQVBJL0pTTWFya2lu
Z0NvbnN0cmFpbnRQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdyb3VwQWRkTWFya2lu
Z0NvbnN0cmFpbnQpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAg
ICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4dGVybmFsUmVtZW1i
ZXJlZFNldCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMg
Y29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmlzaXRXZWFrbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3Vs
ZEpldHRpc29uRHVlVG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcv
REZHV29ya2xpc3QuY3BwOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBoZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogaGVh
cC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6Okhl
YXA6OmFkZFRvUmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkZpeHBvaW50
UGhhc2UpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6cmVzdW1lVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRk
Q29yZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFz
ayk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hl
YXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6d29ybGRJc1J1bm5pbmcgY29uc3QpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpydW5GdW5jdGlvbkluUGFyYWxsZWwpOgorICAgICAgICAqIGhlYXAvSGVh
cElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6d29ybGRJc1N0b3BwZWQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmluY3Jl
bWVudERlZmVycmFsRGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKToKKyAgICAgICAgKiBo
ZWFwL0xhcmdlQWxsb2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246Omlz
TWFya2VkKToKKyAgICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZENvbmN1cnJl
bnRseSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oOgorICAg
ICAgICAoSlNDOjpsb2NrRHVyaW5nTWFya2luZyk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1w
dHlCbG9ja1NvdXJjZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAg
ICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91
dFRvTWFyayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2Vk
U3BhY2U6OmFjdGl2ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6
YWN0aXZlV2Vha1NldHNFbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZl
V2Vha1NldHNCZWdpbik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpuZXdBY3RpdmVXZWFr
U2V0c0VuZCk6CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChK
U0M6Ok1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0Nv
bnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnQ6OndvcmtFc3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpk
b1BhcmFsbGVsV29yayk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQ
YXJhbGxlbFdvcmspOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxl
bFdvcmtJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFs
bGVsV29ya0ltcGwpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAg
ICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6Omxhc3RFeGVjdXRlUGFyYWxsZWxpc20gY29uc3Qp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6cGFyYWxsZWxpc20gY29uc3QpOgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcDoKKyAgICAgICAg
KEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAg
ICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UpOgorICAgICAgICAoSlNDOjpNYXJr
aW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCk6CisgICAgICAgIChKU0M6
Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OkV4ZWN1dGlvbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4
dDo6ZGlkVmlzaXRTb21ldGhpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJr
aW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6c2hvdWxkVGltZU91dCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25D
b250ZXh0OjpkcmFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkaWRFeGVjdXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUp
OiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdD
b25zdHJhaW50U2V0Lmg6CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6fk1hcmtpbmdDb25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29u
c3RyYWludFNvbHZlcjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNv
bHZlcjo6Y29udmVyZ2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6
cnVuRXhlY3V0aW9uVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OmRpZEV4ZWN1dGUpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aDogQWRkZWQuCisgICAgICAgICogaGVhcC9PcGFxdWVSb290U2V0Lmg6IFJlbW92ZWQuCisgICAg
ICAgICogaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OlBhcmFsbGVsU291cmNlQWRhcHRlcjo6UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAg
KEpTQzo6Y3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKiBoZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtp
bmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNp
bXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAg
ICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOgorICAg
ICAgICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAg
ICAqIGhlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogaGVh
cC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRTdGFydE1h
cmtpbmcpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVzZXQpOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1cGRhdGVN
dXRhdG9ySXNTdG9wcGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0
b3BwZWRJc1VwVG9EYXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWlu
KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5n
KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjpkcmFpbkZyb21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5J
blBhcmFsbGVsUGFzc2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OndhaXRGb3JU
ZXJtaW5hdGlvbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1
ZVJvb3RUcmlTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptZXJnZUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9T
bG90VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjp2bSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAg
ICAgICogaGVhcC9TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxl
bEFsbG9jYXRvclNvdXJjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbE5vdEVt
cHR5TWFya2VkQmxvY2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAg
ICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9y
RWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL1Zpc2l0Q291bnRlci5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAg
ICAgICAoSlNDOjpWaXNpdENvdW50ZXI6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAqIGhl
YXAvVmlzaXRpbmdUaW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9XZWFrQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0No
ZWFwRHVyaW5nR0MpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKToKKwog
MjAxNy0xMS0zMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBbSlNDXSBVc2UgSlNGaXhlZEFycmF5IGZvciBvcF9uZXdfYXJyYXlfYnVmZmVyCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwNSw4ICs1MDUs
MTAgQEAgaGVhcC9NYXJrZWRCbG9jay5jcHAKIGhlYXAvTWFya2VkU3BhY2UuY3BwCiBoZWFwL01h
cmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKK2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCiBo
ZWFwL011dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCiBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAog
aGVhcC9TdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFBy
aXZhdGUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCAr
MjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91
dC5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKQEAgLTcyLDExICs3MSwxMSBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFy
a2luZ0NvbnN0cmFpbnQoCiAgICAgLy8gZWxzZSBnZXRzIG1hcmtlZC4KICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5ID0gQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFy
a2luZzsKICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtp
bmdDb25zdHJhaW50PigKKyAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50PigKICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJh
aW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRD
YWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFp
bnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIiki
KSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAgIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAg
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsK
ICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAgICAgbWFy
a2VyLk1hcmsgPSBtYXJrOwpAQCAtODQsNyArODMsOCBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRk
TWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbnN0cmFpbnRD
YWxsYmFjaygmbWFya2VyLCB1c2VyRGF0YSk7CiAgICAgICAgIH0sCi0gICAgICAgIHZvbGF0aWxp
dHkpOworICAgICAgICB2b2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206
OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZtLmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoV1RG
TW92ZShjb25zdHJhaW50KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4Myw5
ICsyODMsOCBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6CiAgICAg
ICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB2b2lkKiBuZXh0Um9v
dCA9IHN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKG5leHRSb290KSA9
PSBUcnVlVHJpU3RhdGUpCisgICAgICAgICAgICBpZiAoIXZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2aXNpdG9y
LmFkZE9wYXF1ZVJvb3QobmV4dFJvb3QpOwogCiAgICAgICAgICAgICBhdXRvIGFwcGVuZE93bmVk
T2JqZWN0cyA9IFsmXSB7CiAgICAgICAgICAgICAgICAgTlNNYXBUYWJsZSAqb3duZWRPYmplY3Rz
ID0gW2V4dGVybmFsT2JqZWN0R3JhcGggb2JqZWN0Rm9yS2V5OnN0YXRpY19jYXN0PGlkPihuZXh0
Um9vdCldOwpAQCAtMzI3LDggKzMyNiw2IEBAIHZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNl
dChKU0M6OlZNJiAKICAgICAgICAgfQogICAgICAgICBbZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHJl
bW92ZUFsbE9iamVjdHNdOwogICAgIH0KLQotICAgIHZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgp
OwogfQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdE
b3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5o
ICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhl
V29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9w
VGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5
QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVv
dXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1
MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAg
LyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFG
QjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwpAQCAtMzEy
LDYgKzMxMSw5IEBACiAJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4
MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyog
VHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5
MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBC
M09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovOyB9OworCQkwRjRE
OEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAx
RDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFDIC8qIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUxQ0QxQzRD
MUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAx
OEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlE
RTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhh
c2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0Niw2ICs0NDgsOCBAQAogCQkwRjlEMzY5NTFBRTlDQzMz
MDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5V
cFBoYXNlLmggKi87IH07CiAJCTBGOUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRp
b25UYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLzsgfTsK
IAkJMEY5RDRDMTExQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0
QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi87
IH07CisJCTBGOURBQTA5MUZEMUMzQ0YwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFB
MDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggKi87IH07CisJ
CTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTA4MUZEMUMz
QzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCAqLzsgfTsKIAkJMEY5RTMyNjQx
QjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlFMzI2MjFCMDVBQjA0
MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY5
RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENC
NjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi87IH07CiAJCTBGOUZDOEM1MTRFMUI2MDQw
MEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDk5LDcgKzE1MDMs
NiBAQAogCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ5RTg1
MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREJDNTRENTFERjhFQTJC
MDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREJDNTREMzFERjhFQTAwMDA1QkY3MzggLyogV2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlLmggKi87IH07CiAJCUFERDhGQTQ2MUVCMzA3OTcwMERGNTQyRiAv
KiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rp
b25QYXJzZXIuaCAqLzsgfTsKLQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJv
b3RTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
REIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOTkxRTA4RjFERTAwNThE
RTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk0MUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFz
c2VtYmx5TGlua0Vycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQURFODAyOUExRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vy
cm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFERTgwMjk1MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNv
bnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQURFODAyOUMxRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
REU4MDI5NzFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk4
MSw3ICsxOTg0LDYgQEAKIAkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3Vz
U3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAg
LyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QzFFMTczQTYyMDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdGluZ1RpbWVvdXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5J
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVz
Lmg7IHBhdGggPSBkZmcvREZHUGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxRkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0
aCA9IGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI3MCw2ICsyMjcyLDEwIEBACiAJCTBGNEEzOEY4MUM4RTEz
REYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3VwZXJTYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5
NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0g
YjMvQjNPcmlnaW5EdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4Qzcy
MUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBT
aW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29u
c3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0
MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMv
YWlyL0FpckZpeE9idmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNP
cmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MDMsNiArMjUw
OSw5IEBACiAJCTBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7
IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOUQ0QzBFMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBwYXRoID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlENEMwRjFDM0Uy
Qzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHBh
dGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlE
QUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDgxRkQxQzNDODAwNzlDNUIyIC8qIFBh
cmFsbGVsU291cmNlQWRhcHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllcklu
c2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUUzMjYyMUIwNUFCMDQwMDgw
MUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDI2Nyw3ICs0Mjc2LDYgQEAKIAkJQUREMDlBRjMxRjYyNDgy
RTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJs
eS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYg
LyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTMxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
SlNXZWJBc3NlbWJseUxpbmtFcnJvci5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5TGlua0Vy
cm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTQxRTA4RjFDOTAw
NThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBwYXRoID0ganMvSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NTFF
MDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVj
dG9yLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTE3LDYgKzU1MjUsNyBAQAogCQkJCTBGRENFMTI4
MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8sCiAJCQkJMTQ2QjE0REIx
MkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFG
MjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKKwkJCQkwRjREOEM3
MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJMEY3
REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJCQkJ
MkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRC
MTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjExLDE3ICs1NjIwLDIxIEBA
CiAJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8s
CiAJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNw
cCAqLywKIAkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRT
ZXQuaCAqLywKKwkJCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuY3BwICovLAorCQkJCTBGOURBQTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5n
Q29uc3RyYWludFNvbHZlci5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBN
YXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3Rh
Y2suaCAqLywKIAkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxl
ci5jcHAgKi8sCiAJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVs
ZXIuaCAqLywKIAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNw
cCAqLywKIAkJCQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8s
Ci0JCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKKwkJ
CQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggKi8s
CiAJCQkJMEZCQjczQjYxREVGM0FBQzAwMkMwMDlFIC8qIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUu
aCAqLywKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFCMDggLyogUmVnaXN0ZXJTdGF0ZS5oICov
LAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAvKiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3Bl
LmggKi8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAwQzEzODM5IC8qIFJ1bm5pbmdTY29wZS5oICov
LAorCQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5jcHAgKi8sCisJCQkJMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNp
dG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3Iu
aCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVz
LmggKi8sCkBAIC01NjQzLDcgKzU2NTYsNyBAQAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1
MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkx
NDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY1
RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJ
CQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8sCisJCQkJ
MEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUy
QTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEw
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywKIAkJCQkxQUNGNzM3NjE3MUNB
NkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04MjAwLDYgKzgyMTMsNyBAQAogCQkJCTY1
MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxl
bGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENh
Y2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlC
NkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZG
NUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODc2OCw2ICs4Nzgy
LDcgQEAKIAkJCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTkxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjlEQUEwOTFGRDFDM0NGMDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZB
MSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUI3MENGREUxREI2OUU2
NjAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTE2LDYg
Kzg5MzEsNyBAQAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RN
YXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0Iw
NzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFrU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBRDVDMzZFQjFGNzVBRDczMDAwQkNBQUYgLyogSlNXZWJBc3NlbWJseS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTAzNSw5ICs5MDUxLDkgQEAKIAkJ
CQlFM0MyOTVERDFFRDJDQkRBMDBEMzAxNkYgLyogT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBBMUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0
MEMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjREOEM3ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ2MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBPYmplY3RQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjRBOEY3MEU1NTU3NzUw
MDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQUREQjFGNjMx
OEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC05MjQzLDYgKzkyNTksNyBAQAogCQkJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAv
KiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDYxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjY3MDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjlEQUEwQTFGRDFDM0QzMDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFw
dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlw
ZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MEIxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTkyODMsNyAr
OTMwMCw2IEBACiAJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyRDFBQTkwOTU2MDBEMzNCMzMg
LyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFG
OEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjFGQjM5MzFFMTc3
QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1
MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIGJvb2wgQWNjZXNz
Q2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAg
ICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgIGlmIChIZWFwOjppc01hcmtl
ZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcyLDcgKzk3Miw3
IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYKICAgICAKICAgICBt
X3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRydWU7CiAKLSAgICBpZiAoSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmdseShsb2NrZXIpKSB7CkBA
IC0xMTI0LDcgKzExMjQsNyBAQCBzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1l
VG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNv
bkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEzOSwxMCArMTEzOSwxMCBAQCBib29sIENvZGVCbG9jazo6
c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYgRU5BQkxFKERGR19KSVQpCiBzdGF0aWMgYm9v
bCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFu
c2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNN
YXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgIGlm
ICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWQodHJhbnNpdGlvbi5t
X2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYg
KCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCisg
ICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNzIsNyArMTE3Miw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAg
ICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlE
KTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CiAgICAgICAgICAg
ICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJ
RCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG9sZFN0
cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG9sZFN0cnVjdHVy
ZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3Ry
dWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFsbEFy
ZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjQ2LDE0ICsxMjQ2LDE0IEBAIHZvaWQgQ29kZUJs
b2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBKU0Nl
bGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7CiAgICAg
ICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sqPigqcmVmZXJlbmNlLT52bSgpLCBy
ZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShyZWZl
cmVuY2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAg
ICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAgICAg
ICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5j
ZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCwxMyArMTA0LDEzIEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIGRhdGFMb2cobV93b3Jr
bGlzdCwgIjogQ29tcGlsaW5nICIsIG1fcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIp
OwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUncyBubyB3YXkgZm9yIHRoZSBHQyB0byBiZSBz
YWZlcG9pbnRpbmcgc2luY2Ugd2Ugb3duIHJpZ2h0VG9SdW4uCi0gICAgICAgIGlmIChtX3BsYW4t
PnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAg
ICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAg
ICAgZGF0YUxvZygiSGVhcCBpcyBzdG9wZWQgYnV0IGhlcmUgd2UgYXJlISAoMSlcbiIpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAg
ICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZCgmbV9kYXRhKTsKICAgICAgICAgaWYgKG1fcGxhbi0+
c3RhZ2UgIT0gUGxhbjo6Q2FuY2VsbGVkKSB7Ci0gICAgICAgICAgICBpZiAobV9wbGFuLT52bS0+
aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAg
ICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSGVhcCBpcyBzdG9wcGVkIGJ1dCBoZXJlIHdlIGFyZSEgKDIpXG4iKTsK
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgfQpAQCAtMTMwLDcgKzEzMCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV93b3JrbGlzdC5tX3JlYWR5UGxhbnMuYXBwZW5kKG1fcGxhbik7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3Rv
ckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAud29ybGRJc1N0b3BwZWQoKSk7CiAgICAgICAgICAgICBt
X3dvcmtsaXN0Lm1fcGxhbkNvbXBpbGVkLm5vdGlmeUFsbCgpOwogICAgICAgICB9CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUs
IFNhZmVwb2ludDo6UmUKIAogICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlkR2V0Q2FuY2VsbGVk
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgubV92
bS5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhlYXAud29ybGRJc1N0b3BwZWQoKSk7CiAg
ICAgCiAgICAgaWYgKHN0YXRlLmFsbG9jYXRpb25GYWlsZWQpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxl
bGlzbS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0
cmFpbnRQYXJhbGxlbGlzbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBDb25zdHJhaW50UGFyYWxsZWxpc20gOiB1aW50
OF90IHsKKyAgICBTZXF1ZW50aWFsLAorICAgIFBhcmFsbGVsCit9OworICAgIAorfSAvLyBuYW1l
c3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNt
KQoreworICAgIHN3aXRjaCAocGFyYWxsZWxpc20pIHsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOgorICAgICAgICBvdXQucHJpbnQoIlNlcXVlbnRpYWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsOgorICAgICAgICBvdXQucHJpbnQoIlBhcmFsbGVsIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgxLDcgKzI4MSw3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8
U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0YWNrKHN0ZDo6
bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJrU3RhY2soc3Rk
OjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3RyYWludFNldChz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwgbV9jb25zdHJh
aW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0aGlzKSkKICAg
ICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8
Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1
ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTkxMSw3ICs5MTEsNyBAQCB2b2lkIEhlYXA6OmFk
ZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkKys7CiAg
ICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAgIFdURjo6bG9hZExvYWRG
ZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAg
ICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8vIER1cmluZyBhIGZ1bGwg
Y29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2
aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEg
c3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmplY3QuIElmIHRoZQogICAgICAg
ICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4g
aXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0LDE1ICs5MjQsMTUgQEAg
dm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgICAgICAgICAgICAg
IC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAgICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMgb3V0IGJsYWNrICsgdW5t
YXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZENvbmN1cnJl
bnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWQgaGVy
ZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1hcmtlZCBhbmQgZ3JleWVk
LgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nhbm5lZCBhbmQgYmxhY2tl
ZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21pY0NvbXBhcmVFeGNoYW5n
ZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAg
ICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUgb2JqZWN0IHdoaXRlIGFn
YWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAgICAgICAvLyBiZSBibGFjay4g
VGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRoaXMgcmVsaWVzIG9uIHRo
ZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtlZENvbmN1cnJlbnRseSBjb252
ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAgICAgICAgIGlmIChpc01hcmtl
ZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkIGNvbnZl
cmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGlzTWFya2Vk
KGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlmZmljdWx0IHRvIHdvcmsg
b3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBibGFjayBhdAogICAgICAg
ICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sgY29uc2VydmF0aXZlbHku
CiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3Np
Ymx5QmxhY2spOwpAQCAtOTQ4LDcgKzk0OCw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVk
U2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxz
ZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAg
ICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8vIEl0IGNvdWxkIGJlIHRo
YXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xs
ZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0ZWx5R3JleSBhbmQgdGhl
biB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvCiAg
ICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBp
cyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0xMjY1LDYgKzEyNjUsOCBA
QCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgCiAgICAgU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yID0gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgCisg
ICAgbV9vcGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAKICAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSkgewogICAgICAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBzaXplX3Q+IHZpc2l0
TWFwOwogICAgICAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCkBAIC0xMjg3LDEwICsxMjg5LDYgQEAg
TkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAgICAgCiAg
ICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgCi0gICAg
ICAgIHNsb3RWaXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgZm9yIChhdXRvJiBw
YXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICAgICAgcGFy
YWxsZWxWaXNpdG9yLT5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKICAgICAgICAg
Ly8gRklYTUU6IFRha2UgbV9tdXRhdG9yRGlkUnVuIGludG8gYWNjb3VudCB3aGVuIHNjaGVkdWxp
bmcgY29uc3RyYWludHMuIE1vc3QgbGlrZWx5LAogICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRv
IGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyBhZ2FpbiB1bmxlc3MgdGhlIG11dGF0b3IgZGlkIHJ1
bi4gQXQgYQogICAgICAgICAvLyBtaW5pbXVtLCB3ZSBjb3VsZCB1c2UgdGhpcyBmb3Igd29yayBl
c3RpbWF0ZXMgLSBidXQgaXQncyBwcm9iYWJseSBtb3JlIHRoYW4ganVzdCBhbgpAQCAtMTMwNSw3
ICsxMzAzLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAg
ICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAgICAgICAvLyBhZGQg
dGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCkuCiAgICAgICAgIGJv
b2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZl
cmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAg
ICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yKTsKICAg
ICAgICAgaWYgKGNvbnZlcmdlZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNo
YW5nZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNlOjpFbmQpOwpAQCAtMTUyNiw3ICsxNTI0LDcg
QEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogCiB2b2lkIEhlYXA6
OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgY29ubikKIHsKLSAgICBpZiAobV9jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmIChtX3dvcmxkSXNTdG9w
cGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiB3b3JsZCBhbHJlYWR5IHN0b3BwZWQuXG4i
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNTM3
LDcgKzE1MzUsNyBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgCiAg
ICAgbV9tdXRhdG9yRGlkUnVuID0gZmFsc2U7CiAKICAgICBzdXNwZW5kQ29tcGlsZXJUaHJlYWRz
KCk7Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IHRydWU7
CisgICAgbV93b3JsZElzU3RvcHBlZCA9IHRydWU7CiAKICAgICBmb3JFYWNoU2xvdFZpc2l0b3Io
CiAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CkBAIC0xNTc0LDExICsx
NTcyLDExIEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OnJlc3VtZVRoZVBlcmlwaGUKICAgICAK
ICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAwOwogICAgIAotICAgIGlmICghbV9jb2xsZWN0b3JC
ZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmICghbV93b3JsZElzU3RvcHBl
ZCkgewogICAgICAgICBkYXRhTG9nKCJGYXRhbDogY29sbGVjdG9yIGRvZXMgbm90IGJlbGlldmUg
dGhhdCB0aGUgd29ybGQgaXMgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxk
SXNTdG9wcGVkID0gZmFsc2U7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIAog
ICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZDogd2Ugd2FudCB0byBn
cmFiIHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQogICAgIC8vIGJlY29tZSBh
dmFpbGFibGUuIFdlIGJhc2ljYWxseSB3YW50IGEgbG9ja0FueSgpIG1ldGhvZCB0aGF0IHdpbGwg
bG9jayB3aGF0ZXZlciBsb2NrIGlzIGF2YWlsYWJsZQpAQCAtMjU3OCw3ICsyNTc2LDcgQEAgdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5n
U2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNl
cnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25z
ZXJ2YXRpdmVTY2FuKCk7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRp
dmVSb290cygqdGhpcyk7CkBAIC0yNTg4LDExICsyNTg2LDEyIEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25z
ZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29uc2VydmF0
aXZlUm9vdHMpOwogICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3Jl
eWVkQnlFeGVjdXRpb24pOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlF
eGVjdXRpb24sCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAg
IAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwg
Um9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikgewogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJu
YWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRvcik7CiAjZW5kaWYKQEAgLTI2MDksMTkg
KzI2MDgsMjEgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+ZXhjZXB0aW9uKCkpOwogICAgICAg
ICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV92bS0+bGFzdEV4Y2VwdGlvbigp
KTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhl
Y3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9u
LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAg
ICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CiAg
ICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uLAorICAgICAgICBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9G
SUxFUikKICAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVy
ID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2MzcsMzQgKzI2Mzgs
MzggQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihzbG90VmlzaXRvcik7
CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbiwK
KyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9j
b25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAot
ICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewog
ICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNs
b3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6Okdy
ZXllZEJ5RXhlY3V0aW9uKTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
RXhlY3V0aW9uLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAg
ICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7
CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwog
ICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5n
KTsKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZywKKyAgICAg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJXcmgiLCAiV2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7
CiAgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
Pm5leHQoKSkKICAgICAgICAgICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNs
b3RWaXNpdG9yKTsKICAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6Okdy
ZXllZEJ5TWFya2luZyk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1h
cmtpbmcsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAog
I2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
RHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6
Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAgICAgICAgICAgICAgREZHOjpleGlzdGlu
Z1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAg
ICAgICAgICAgICAKQEAgLTI2NzksMTIgKzI2ODQsMTMgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5n
OjpWZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBz
bG90VmlzaXRvcik7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpH
cmV5ZWRCeU1hcmtpbmcpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlN
YXJraW5nLAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICNlbmRp
ZgogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiQ2IiLCAiQ29kZUJs
b2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yKSB7CiAgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nr
c1dpdGhvdXRIb2xkaW5nTG9ja3MoCiAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUgQ29kZUJsb2NrIGFz
IGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCkBAIC0yNjkzLDExICsyNjk5LDE1IEBA
IHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAgICAgICAg
IHNsb3RWaXNpdG9yLnZpc2l0QXNDb25zdHJhaW50KGNvZGVCbG9jayk7CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21H
cmV5ZWQpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkLAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1ybXMiLCAiTXV0YXRvcitSYWNlIE1hcmsgU3RhY2si
LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRp
bmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikg
eworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZ3JhYiBsb2NrcyB0byBmaWRk
bGUgd2l0aCB0aGUgbXV0YXRvciBtYXJrIHN0YWNrIGFuZCB0aGUgcmFjZSBzdGFjay4KKyAgICAg
ICAgICAgIC8vIFRoZSBjaGFuY2VzIG9mIGNvbnRlbnRpb24gb24gdGhvc2UgbG9ja3MgYXJlIHNs
aW0sIGJ1dCB3ZSBzaG91bGQgZG8gaXQgYW55d2F5LgorICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAg
ICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9y
YWNlTWFya1N0YWNrLT5zaXplKCk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0
Q291bnQoc2l6ZSk7CkBAIC0yNzExLDcgKzI3MjEsOCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewogICAg
ICAgICAgICAgcmV0dXJuIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0
YWNrLT5zaXplKCk7CiAgICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpH
cmV5ZWRCeUV4ZWN1dGlvbik7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eUV4ZWN1dGlvbiwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CiB9
CiAKIHZvaWQgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtp
bmdDb25zdHJhaW50PiBjb25zdHJhaW50KQpAQCAtMjc5NCwxNiArMjgwNSw2IEBAIHZvaWQgSGVh
cDo6YWxsb3dDb2xsZWN0aW9uKCkKICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrLnVubG9j
aygpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjpmb3JFYWNoU2xv
dFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZp
c2l0b3IpOwotICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKLSAgICBmb3IgKGF1dG8m
IHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgZnVuYygqc2xv
dFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29s
IHZhbHVlKQogewogICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3
LDQgKzI4NDgsMjQgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwog
ICAgIG1faGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAK
K3ZvaWQgSGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJr
aW5nTXV0ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuVGFza0lu
UGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sK
KyAgICB1bnNpZ25lZCBpbml0aWFsUmVmQ291bnQgPSB0YXNrLT5yZWZDb3VudCgpOworICAgIHNl
dEJvbnVzVmlzaXRvclRhc2sodGFzayk7CisgICAgdGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RW
aXNpdG9yKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKG51bGxwdHIpOworICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAgIHdoaWxl
ICh0YXNrLT5yZWZDb3VudCgpID4gaW5pdGlhbFJlZkNvdW50KQorICAgICAgICAgICAgbV9tYXJr
aW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChtX21hcmtpbmdNdXRleCk7CisgICAgfQorfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgog
I2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21h
dGljVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTExNCw3ICsxMTUsNiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9IDE2OwogCiAgICAgc3Rh
dGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRpYyBib29sIGlzTWFya2Vk
Q29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFy
a2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAgc3RhdGljIHNpemVfdCBj
ZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xNTQsNyArMTU0LDggQEAgcHVibGljOgogICAgIE11
dGF0b3JTdGF0ZSBtdXRhdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGF0ZTsg
fQogICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBjb2xsZWN0aW9uU2NvcGUoKSBj
b25zdCB7IHJldHVybiBtX2NvbGxlY3Rpb25TY29wZTsgfQogICAgIGJvb2wgaGFzSGVhcEFjY2Vz
cygpIGNvbnN0OwotICAgIGJvb2wgY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3Bw
ZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNTdG9wcGVkKCkgY29uc3Q7CisgICAgYm9vbCB3
b3JsZElzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuICF3b3JsZElzU3RvcHBlZCgpOyB9CiAKICAg
ICAvLyBXZSdyZSBhbHdheXMgYnVzeSBvbiB0aGUgY29sbGVjdGlvbiB0aHJlYWRzLiBPbiB0aGUg
bWFpbiB0aHJlYWQsIHRoaXMgcmV0dXJucyB0cnVlIGlmIHdlJ3JlCiAgICAgLy8gaGVscGluZyBo
ZWFwLgpAQCAtMzU4LDYgKzM1OSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRIZWFw
RmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CiAgICAgdm9p
ZCByZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNr
Jik7CisgICAgCisgICAgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+Pik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
KyAgICB2b2lkIHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsK
KyAgICAgICAgcnVuVGFza0luUGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+KGZ1bmMpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IHZvaWQgZm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmKTsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgQWxsb2NhdGluZ1Njb3BlOwpAQCAtNTI3LDYgKzUzOSw4IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKIAorICAgIHZv
aWQgc2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+Pik7CisgICAgCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKICAgICBjb25zdCBz
aXplX3QgbV9yYW1TaXplOwogICAgIGNvbnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CkBA
IC01NzksOSArNTkzLDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8U2xvdFZpc2l0b3IqPiBtX2F2
YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzOwogICAgIExvY2sgbV9wYXJhbGxlbFNsb3RWaXNp
dG9yTG9jazsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgZm9y
RWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmKTsKLQogICAgIEhhbmRsZVNldCBtX2hhbmRsZVNl
dDsKICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxD
b2RlQmxvY2tTZXQ+IG1fY29kZUJsb2NrczsKQEAgLTYzMyw4ICs2NDQsNyBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAg
IGJvb2wgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKIAotICAgIExvY2sg
bV9vcGFxdWVSb290c011dGV4OwotICAgIEhhc2hTZXQ8Y29uc3Qgdm9pZCo+IG1fb3BhcXVlUm9v
dHM7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQgbV9vcGFxdWVSb290czsKIAogICAgIHN0YXRp
YyBjb25zdCBzaXplX3Qgc19ibG9ja0ZyYWdtZW50TGVuZ3RoID0gMzI7CiAKQEAgLTY0Miw2ICs2
NTIsNyBAQCBwcml2YXRlOgogICAgIExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxp
emVyPjo6TGlzdCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzOwogCiAgICAgUGFyYWxsZWxIZWxw
ZXJDbGllbnQgbV9oZWxwZXJDbGllbnQ7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4gbV9ib251c1Zpc2l0b3JUYXNrOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQogICAgIHNpemVfdCBtX2Jsb2NrQnl0ZXNBbGxvY2F0ZWQgeyAwIH07CkBAIC02NTcsNyAr
NjY4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbmVlZEZpbmFsaXpl
Qml0ID0gMXUgPDwgNHU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG11dGF0b3JXYWl0aW5n
Qml0ID0gMXUgPDwgNXU7IC8vIEFsbG93cyB0aGUgbXV0YXRvciB0byB1c2UgdGhpcyBhcyBhIGNv
bmRpdGlvbiB2YXJpYWJsZS4KICAgICBBdG9taWM8dW5zaWduZWQ+IG1fd29ybGRTdGF0ZTsKLSAg
ICBib29sIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9
OworICAgIGJvb2wgbV93b3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CiAgICAgTW9ub3RvbmljVGlt
ZSBtX2JlZm9yZUdDOwogICAgIE1vbm90b25pY1RpbWUgbV9hZnRlckdDOwogICAgIE1vbm90b25p
Y1RpbWUgbV9zdG9wVGltZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElu
bGluZXMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMzAgKzYzLDIwIEBAIGlubGluZSBi
b29sIEhlYXA6Omhhc0hlYXBBY2Nlc3MoKSBjb25zdAogICAgIHJldHVybiBtX3dvcmxkU3RhdGUu
bG9hZCgpICYgaGFzQWNjZXNzQml0OwogfQogCi1pbmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0b3JC
ZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpIGNvbnN0CitpbmxpbmUgYm9vbCBIZWFwOjp3
b3JsZElzU3RvcHBlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQ7CisgICAgcmV0dXJuIG1fd29ybGRJc1N0b3BwZWQ7CiB9CiAK
Ky8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhbiBpbnN0YW5jZSBtZXRob2QsIHNvIHRoYXQgaXQg
Y2FuIGdldCB0aGUgbWFya2luZ1ZlcnNpb24oKSBxdWlja2x5LgorLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTk4OAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6
OmlzTWFya2VkKGNvbnN0IHZvaWQqIHJhd0NlbGwpCiB7Ci0gICAgQVNTRVJUKG1heUJlR0NUaHJl
YWQoKSAhPSBHQ1RocmVhZFR5cGU6OkhlbHBlcik7CiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKICAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9j
YXRpb24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2Vk
KCk7CiAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKLSAgICBy
ZXR1cm4gYmxvY2suaXNNYXJrZWQoCi0gICAgICAgIGJsb2NrLnZtKCktPmhlYXAub2JqZWN0U3Bh
Y2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqIHJhd0NlbGwpCi17Ci0gICAgSGVh
cENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKLSAgICBpZiAo
Y2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxs
b2NhdGlvbigpLmlzTWFya2VkKCk7Ci0gICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFy
a2VkQmxvY2soKTsKLSAgICByZXR1cm4gYmxvY2suaXNNYXJrZWRDb25jdXJyZW50bHkoCi0gICAg
ICAgIGJsb2NrLnZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxs
KTsKKyAgICByZXR1cm4gYmxvY2suaXNNYXJrZWQoYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFj
ZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVh
cDo6dGVzdEFuZFNldE1hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9p
ZCogcmF3Q2VsbCkKQEAgLTE3OSwxOSArMTY5LDE5IEBAIGlubGluZSB2b2lkIEhlYXA6OnJlbGVh
c2VTb29uKFJldGFpblB0cjwKIAogaW5saW5lIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxE
ZXB0aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkg
fHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKIGlubGlu
ZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgoKQogewotICAgIEFTU0VSVCghbWF5
QmVHQ1RocmVhZCgpIHx8IG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQp
OworICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwogICAg
IG1fZGVmZXJyYWxEZXB0aC0tOwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZl
cnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkg
fHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJU
KCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERl
cHRoLS07CiAgICAgCiAgICAgaWYgKFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspKSB7CkBAIC0y
NjksNCArMjU5LDE0IEBAIGlubGluZSB2b2lkIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeSgpCiAgICAg
ICAgIHN0b3BJZk5lY2Vzc2FyeVNsb3coKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
K3ZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICBm
dW5jKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICBmdW5jKCptX211dGF0b3JTbG90Vmlz
aXRvcik7CisgICAgZm9yIChhdXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRv
cnMpCisgICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RC
dWlsZGVyLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcg
QEAgdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjpidWlsZFNuYXBzaG90KAogdm9pZCBIZWFwU25h
cHNob3RCdWlsZGVyOjphcHBlbmROb2RlKEpTQ2VsbCogY2VsbCkKIHsKICAgICBBU1NFUlQobV9w
cm9maWxlci5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtl
ZChjZWxsKSk7CiAKICAgICBpZiAoaGFzRXhpc3RpbmdOb2RlRm9yQ2VsbChjZWxsKSkKICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxv
Y2F0aW9uLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0xhcmdlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1Ymxp
YzoKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2Vk
LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgQUxXQVlT
X0lOTElORSBib29sIGlzTWFya2VkKEhlYXBDZWxsKiwgRGVwZW5kZW5jeSkgeyByZXR1cm4gaXNN
YXJrZWQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShI
ZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CisgICAgQUxXQVlT
X0lOTElORSBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlz
TWFya2VkKCk7IH0KICAgICBib29sIGlzTGl2ZSgpIHsgcmV0dXJuIGlzTWFya2VkKCkgfHwgaXNO
ZXdseUFsbG9jYXRlZCgpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNWYWxpZENlbGwoKSBjb25zdCB7
IHJldHVybiBtX2hhc1ZhbGlkQ2VsbDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTG9ja0R1cmluZ01hcmtpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDE0ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gVXNlIHRoaXMgbG9jayBzY29wZSBsaWtl
IHNvOgogLy8gYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyhoZWFwLCBsb2NrKTsKIHRl
bXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotTG9ja2VyPExvY2tUeXBlPiBsb2NrRHVyaW5nTWFy
a2luZyhIZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFzc2VkTG9jaykKK2F1dG8gbG9ja0R1cmluZ01h
cmtpbmcoSGVhcCYgaGVhcCwgTG9ja1R5cGUmIHBhc3NlZExvY2spCiB7Ci0gICAgTG9ja1R5cGUq
IGxvY2s7Ci0gICAgaWYgKGhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpCi0gICAgICAgIGxv
Y2sgPSAmcGFzc2VkTG9jazsKLSAgICBlbHNlCi0gICAgICAgIGxvY2sgPSBudWxscHRyOwotICAg
IHJldHVybiBMb2NrZXI8TG9ja1R5cGU+KGxvY2spOworICAgIHJldHVybiBob2xkTG9ja0lmKHBh
c3NlZExvY2ssIGhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0LDYgKzQ0NCwzMyBA
QCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0KCkKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSoo
KT4+IE1hcmtlZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCkKK3sKKyAg
ICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikK
KyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHJ1bigpIG92ZXJyaWRl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAgICAgICAgIG1faW5kZXggPSBtX2FsbG9jYXRvci5tX21hcmtpbmdOb3RFbXB0eS5maW5k
Qml0KG1faW5kZXgsIHRydWUpOworICAgICAgICAgICAgaWYgKG1faW5kZXggPj0gbV9hbGxvY2F0
b3IubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBtX2Fs
bG9jYXRvcjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07CisgICAgICAgIExvY2sgbV9s
b2NrOworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzKSk7
Cit9CisKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6IiwgbV9jZWxsU2l6ZSwgIi8i
LCBtX2F0dHJpYnV0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTAzLDYgKzEw
NCw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAgCisgICAgUmVm
UHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlC
bG9ja1NvdXJjZSgpOworICAgIAogICAgIHZvaWQgYWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRs
ZSopOwogICAgIHZvaWQgcmVtb3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1OCw3ICsyNTgsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFya2VkKGNv
bnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
LCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qg
dm9pZCosIERlcGVuZGVuY3kpOwogICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lk
KiwgRGVwZW5kZW5jeSk7CiAgICAgICAgIApAQCAtMjgwLDcgKzI3OSw2IEBAIHB1YmxpYzoKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYXJlTWFya3NTdGFsZSgpOwogICAgIGJvb2wgYXJl
TWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7Ci0gICAgRGVwZW5kZW5jeVdp
dGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uKTsKICAgICAKICAgICBEZXBlbmRlbmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKTsKICAgICAgICAgCkBAIC00OTgsMTggKzQ5NiwxMiBAQCBpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZShICiAgICAgcmV0dXJuIG1hcmtpbmdWZXJzaW9u
ICE9IG1fbWFya2luZ1ZlcnNpb247CiB9CiAKLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeVdpdGg8
Ym9vbD4gTWFya2VkQmxvY2s6OmFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbikKLXsKLSAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5n
VmVyc2lvbjsKLSAgICByZXR1cm4gZGVwZW5kZW5jeVdpdGgoZGVwZW5kZW5jeSh2ZXJzaW9uKSwg
dmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbik7Ci19Ci0KIGlubGluZSBEZXBlbmRlbmN5IE1hcmtl
ZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHJlc3VsdC52YWx1ZSkpCisgICAgSGVhcFZlcnNpb24gdmVyc2lv
biA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2lu
Z1ZlcnNpb24pKQogICAgICAgICBhYm91dFRvTWFya1Nsb3cobWFya2luZ1ZlcnNpb24pOwotICAg
IHJldHVybiByZXN1bHQuZGVwZW5kZW5jeTsKKyAgICByZXR1cm4gZGVwZW5kZW5jeSh2ZXJzaW9u
KTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RT
dGFsZSgpCkBAIC01MjQsMTUgKzUxNiwxMCBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNN
YXJrZWRSYXcoY29uCiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVy
c2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gYXJlTWFy
a3NTdGFsZShtYXJraW5nVmVyc2lvbikgPyBmYWxzZSA6IGlzTWFya2VkUmF3KHApOwotfQotCi1p
bmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCi17Ci0gICAgYXV0byByZXN1bHQgPSBhcmVN
YXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChyZXN1bHQu
dmFsdWUpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAg
aWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIHJlc3VsdC5kZXBl
bmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5j
eSh2ZXJzaW9uKSk7CiB9CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25z
dCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsx
NjUsMTEgQEAgcHVibGljOgogICAgIC8vIFdoZW4gdGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQg
d2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUgbWFyayBiaXRzIGhhdmVuJ3QgY29udmVyZ2VkIHlldC4K
ICAgICBib29sIGlzTWFya2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJraW5nOyB9CiAgICAg
CisgICAgV2Vha1NldCogYWN0aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0dXJuIG1fYWN0aXZlV2Vh
a1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQqIGFjdGl2ZVdlYWtTZXRzRW5kKCkgeyByZXR1
cm4gbV9hY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtT
ZXRzQmVnaW4oKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmJlZ2luKCk7IH0KKyAgICBX
ZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1fbmV3QWN0aXZlV2Vha1Nl
dHMuZW5kKCk7IH0KKyAgICAKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6
ZGF0YUZpbGUoKSk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJy
YXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nlcz4gc19zaXplQ2xhc3NGb3JTaXplU3RlcDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3LDE1IEBACiAjaW5jbHVk
ZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLU1hcmtpbmdDb25zdHJh
aW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0
cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0
aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSkKK01hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludChDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBtX2FiYnJl
dmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkK
LSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAs
IG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQotewotfQotCi1NYXJraW5nQ29uc3RyYWludDo6TWFy
a2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9y
Jik+IHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSkKLSAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKLSAg
ICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92
ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdU
Rk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikpCiAgICAgLCBtX3ZvbGF0aWxpdHkodm9s
YXRpbGl0eSkKKyAgICAsIG1fcGFyYWxsZWxpc20ocGFyYWxsZWxpc20pCiB7CiB9CiAKQEAgLTYz
LDE0ICs0OCw1MSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAgICBt
X2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0
ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJraW5nQ29uc3RyYWludDo6
ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1l
b3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7
Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBt
X2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0g
ICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmco
dmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gcmVzdWx0ID0gZXhlY3V0ZUltcGwodmlzaXRvcik7CisgICAg
bV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgbV9sYXN0
RXhlY3V0ZVBhcmFsbGVsaXNtID0gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Rv
dWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQor
eworICAgIHJldHVybiAwOworfQorCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3Rp
bWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQo
KSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENv
dW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGRvUGFyYWxsZWxXb3JrSW1wbCh2aXNp
dG9yKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAg
ICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAg
IH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRv
cik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNp
dENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7Cit9CisKK3ZvaWQgTWFya2luZ0Nv
bnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlz
aFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDExIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29uc3RyYWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVk
ZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIKLSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIK
ICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQzLDE4ICs0Miw5IEBAIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1l
LCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwot
ICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6
RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHksIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAg
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAgICAgCiAgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCkBAIC02NCwzMyAr
NTQsMzkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRTdGF0cygpOwogICAgIAogICAgIHNpemVf
dCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KKyAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbTsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0
ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRp
bWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7
CiAgICAgCi0gICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5j
dGlvbih2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgp
ICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Ci0gICAgfQorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KTsKKyAgICAKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsK
KyAgICAKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBm
aW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAg
CisgICAgLy8gSWYgdGhpcyBpcyBTZXF1ZW50aWFsLCBpdCBtZWFucyB0aGF0IHRoZSBjb25zdHJh
aW50IGhhcyB0byBiZSBydW4gc2VxdWVudGlhbGx5LCB3aXRoIG5vIGNvbmN1cnJlbnQKKyAgICAv
LyBjb25zdHJhaW50cy4KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20oKSBj
b25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmly
dHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBj
YW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07
CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRp
bWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90Vmlz
aXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVs
aXNtOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20g
eyBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsIH07IC8vIEl0J3MgYSBoZXVyaXN0aWMs
IHdlIGNhbiBiZSB3cm9uZy4gVGhpcyBndWVzcyBvbmx5IGFmZmVjdHMgdGhlIGZpcnN0IHJ1bi4K
ICAgICBzaXplX3QgbV9sYXN0VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2MCArMjYsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCiAjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNv
bnRleHQgewotcHVibGljOgotICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRT
ZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAg
ICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAg
ICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBib29sIGRpZFZp
c2l0U29tZXRoaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29t
ZXRoaW5nOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3Rp
bWVvdXQpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91
dC4KLSAgICBib29sIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKLSAgICB7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgewotICAgICAgICAgICAgZXhlY3V0ZShp
bmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsKLSAgICAgICAgICAg
IGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIGRpZEV4
ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7
IH0KLQotICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCi0gICAgewotICAgICAgICBtX3Nl
dC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBt
X3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7Ci0gICAgfQotICAgIAot
cHJpdmF0ZToKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Ci0gICAgU2xvdFZpc2l0
b3ImIG1fdmlzaXRvcjsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLSAgICBCaXRWZWN0
b3IgbV9leGVjdXRlZDsKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9Owot
fTsKLQotTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KCkKK01hcmtp
bmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldChIZWFwJiBoZWFwKQorICAgIDog
bV9oZWFwKGhlYXApCiB7CiB9CiAKQEAgLTEwNywxOCArNjQsMTkgQEAgdm9pZCBNYXJraW5nQ29u
c3RyYWludFNldDo6ZGlkU3RhcnRNYXJraQogICAgIG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9p
ZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKK3ZvaWQg
TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rpb24sIENvbnN0cmFp
bnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlz
bSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oV1RGTW92
ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgdm9s
YXRpbGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJh
aW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVu
Y3Rpb24pLCB2b2xhdGlsaXR5LCBwYXJhbGxlbGlzbSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25z
dHJhaW50U2V0OjphZGQoCiAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYp
PiBleGVjdXRlRnVuY3Rpb24sCiAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4g
cXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5KQorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksCisgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFt
ZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1
bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSks
IFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0
aW9uKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKApAQCAtMTMxLDkgKzg5LDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6YWRkKAogICAgIG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0
OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCBy
ZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJv
b2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7
CkBAIC0xNDgsOSArMTA2LDkgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJv
bnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1
dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyIHNvbHZlcigqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0g
bV9pdGVyYXRpb24rKzsKICAgICAKQEAgLTE1OSwxNiArMTE3LDE0IEBAIGJvb2wgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKIAogICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29u
c3RyYWludHMgdGhhdCB3ZSBoYXZlIG5vdCBleGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3lj
bGUsIHRoZW4KICAgICAvLyB3ZSBzaG91bGQgZXhlY3V0ZSB0aG9zZSBub3cuCi0gICAgaWYgKCFl
eGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHNvbHZlci5kcmFpbihtX3VuZXhlY3V0ZWRSb290cyk7CiAgICAgCiAgICAg
Ly8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBhbnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQn
cyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25zdHJhaW50cyBvdGhlcgogICAgIC8vIHRoYW4g
cm9vdHMuCiAgICAgaWYgKGl0ZXJhdGlvbiA9PSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0
aHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc29sdmVyLmRyYWluKG1fdW5leGVjdXRl
ZE91dGdyb3d0aHMpOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBwcmVmZXJyaW5nIHRo
ZSBvdXRncm93dGggY29uc3RyYWludHMgLSB0aGUgb25lcyB0aGF0IG5lZWQgdG8gYmUgZml4cG9p
bnRlZAogICAgIC8vIGV2ZW4gaW4gYSBzdG9wLXRoZS13b3JsZCBHQyAtIHVudGlsIHRoZXkgc3Rv
cCBwcm9kdWNpbmcuIFRoZXkgaGF2ZSBhIHRlbmRlbmN5IHRvIGdvIHRvdGFsbHkKQEAgLTIxNSwz
MyArMTcxLDE2IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAg
ICAgICAgICAgIHJldHVybiBhLT52b2xhdGlsaXR5KCkgPiBiLT52b2xhdGlsaXR5KCk7CiAgICAg
ICAgIH0pOwogICAgIAotICAgIGZvciAoTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgOiBt
X29yZGVyZWQpIHsKLSAgICAgICAgc2l6ZV90IGkgPSBjb25zdHJhaW50LT5pbmRleCgpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkRXhlY3V0ZShpKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBleGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoaSk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBPbmNlIHdlJ3JlIGluIGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0
aGUgbW9zdCBzZW5zZSB0byBsZXQgc29tZSBtYXJraW5nIGhhcHBlbiBhbnl0aW1lCi0gICAgICAg
IC8vIHdlIGZpbmQgd29yay4KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGV4
ZWN1dGUgYWxsIGNvbnN0cmFpbnRzIHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBpZiB0aGF0J3MK
LSAgICAgICAgLy8gYmV0dGVyIG9yIHdvcnNlLiBNYXliZSBldmVuIGJldHRlciBpcyB0aGlzOgot
ICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5pbmcuCi0gICAg
ICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdzLCByZXR1cm4u
Ci0gICAgICAgIC8vIC0gRWxzZSBydW4gdW50aWwgdGltZW91dC4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMgotICAgICAgICBpZiAoZXhl
Y3V0aW9uQ29udGV4dC5kaWRWaXNpdFNvbWV0aGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KKyAgICBzb2x2ZXIuY29udmVyZ2UobV9vcmRlcmVkKTsKICAgICAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSd2ZSBjb252ZXJnZWQuIFRoYXQg
aGFwcGVucyBpZiB3ZSBkaWQgbm90IHZpc2l0IGFueXRoaW5nLgorICAgIHJldHVybiAhc29sdmVy
LmRpZFZpc2l0U29tZXRoaW5nKCk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4
ZWN1dGVBbGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCBkaWRWaXNpdFNvbWV0
aGluZyA9IGZhbHNlOwogICAgIGZvciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAg
ICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9u
aWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9y
KTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSGVhcDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyOworCiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldCB7CiBwdWJsaWM6Ci0gICAgTWFy
a2luZ0NvbnN0cmFpbnRTZXQoKTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldChIZWFwJik7CiAg
ICAgfk1hcmtpbmdDb25zdHJhaW50U2V0KCk7CiAgICAgCiAgICAgdm9pZCBkaWRTdGFydE1hcmtp
bmcoKTsKQEAgLTQxLDE1ICs0NCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAg
IENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwK
LSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsK
ICAgICAKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCiAg
ICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
JiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImKT4sCiAgICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxp
c206OlBhcmFsbGVsKTsKICAgICAKICAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2lu
Z0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTYwLDIxICs2NSwxOSBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBu
b25lIG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBhc3N1bWVzIHRoYXQg
eW91J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgotICAg
IGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKAotICAgICAgICBTbG90VmlzaXRvciYsCi0gICAgICAg
IE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAg
IGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgLy8gU2lt
cGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgogICAgIHZv
aWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKLSAgICBjbGFzcyBF
eGVjdXRpb25Db250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRpb25Db250ZXh0OworICAg
IGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKICAgICAKLSAgICBib29sIGV4
ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
OworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYpOwogICAgIAot
ICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lLCBCaXRWZWN0b3ImIHVu
ZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsK
KyAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRW
ZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CiAgICAgCisgICAgSGVh
cCYgbV9oZWFwOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKICAgICBCaXRWZWN0
b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3RoczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1h
cmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIgorCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgCisKK01hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYg
c2V0KQorICAgIDogbV9oZWFwKHNldC5tX2hlYXApCisgICAgLCBtX21haW5WaXNpdG9yKG1faGVh
cC5jb2xsZWN0b3JTbG90VmlzaXRvcigpKQorICAgICwgbV9zZXQoc2V0KQoreworICAgIG1faGVh
cC5mb3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsKKyAgICAgICAgICAgIG1fdmlzaXRDb3VudGVycy5hcHBlbmQoVmlzaXRDb3VudGVyKHZpc2l0
b3IpKTsKKyAgICAgICAgfSk7Cit9CisKK01hcmtpbmdDb25zdHJhaW50U29sdmVyOjp+TWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIoKQoreworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
OjpkaWRWaXNpdFNvbWV0aGluZygpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBWaXNpdENvdW50
ZXImIHZpc2l0Q291bnRlciA6IG1fdmlzaXRDb3VudGVycykgeworICAgICAgICBpZiAodmlzaXRD
b3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1
dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit7CisgICAgbV9oZWFwLnJ1bkZ1bmN0aW9uSW5Q
YXJhbGxlbCgKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeyBydW5FeGVjdXRp
b25UaHJlYWQodmlzaXRvciwgcHJlZmVyZW5jZSwgcGlja05leHQpOyB9KTsKKyAgICAgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV9kaWRFeGVjdXRlSW5QYXJhbGxlbCkKKyAg
ICAgICAgbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0tPmZpbmlzaFBhcmFsbGVsV29yayhtX21haW5W
aXNpdG9yKTsKKyAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsLmNsZWFyKCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseSkKKyAgICAgICAg
ZXhlY3V0ZSgqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0pOworICAgIG1fdG9FeGVjdXRlU2VxdWVu
dGlhbGx5LmNsZWFyKCk7CisgICAgICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fdG9FeGVjdXRl
SW5QYXJhbGxlbC5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3RvRXhlY3V0ZUlu
UGFyYWxsZWxTZXQuYml0Q291bnQoKSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OmRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSB1bmV4
ZWN1dGVkLmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVkLmVuZCgpOworICAgIGlm
IChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGlja05leHQgPSBzY29w
ZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4oCisgICAgICAgIFsmXSAoKSAtPiBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiAq
aXRlcisrOworICAgICAgICB9KTsKKyAgICBleGVjdXRlKE5leHRDb25zdHJhaW50Rmlyc3QsIHBp
Y2tOZXh0KTsKKyAgICB1bmV4ZWN1dGVkLmNsZWFyQWxsKCk7Cit9CisKK3ZvaWQgTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXI6OmNvbnZlcmdlKGNvbnN0IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+
JiBvcmRlcikKK3sKKyAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBpZiAob3JkZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIHNpemVfdCBpbmRleCA9IDA7CisKKyAgICAvLyBXZSB3YW50IHRvIGV4ZWN1
dGUgdGhlIGZpcnN0IGNvbnN0cmFpbnQgc2VxdWVudGlhbGx5IGlmIHdlIHRoaW5rIGl0IHdpbGwg
cXVpY2tseSBnaXZlIHVzIGEKKyAgICAvLyByZXN1bHQuIElmIHdlIHJhbiBpdCBpbiBwYXJhbGxl
bCB0byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3ZSBtaWdodCBlbmQgdXAgaGF2aW5nIHRvIHdh
aXQgZm9yCisgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3RyYWludHMgdG8gZmluaXNoLCB3aGljaCB3
b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVyaW5nIGNvbnZlcmdlbmNlIGl0J3MKKyAg
ICAvLyBlbXBpcmljYWxseSBtb3N0IG9wdGltYWwgdG8gcmV0dXJuIHRvIGRyYWluaW5nIGFzIHNv
b24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBNb3N0CisgICAgLy8gY29uc3RyYWlu
dHMgZG9uJ3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9zdCBvZiB0aGUgdGltZSwgYW5kIHdoZW4gdGhl
eSBkbyBnZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQKKyAgICAvLyB0byBnZW5lcmF0ZSBlbm91Z2gg
b2YgaXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmluZyBjeWNsZS4gVGhlcmVmb3JlLCBwYXVzZSB0
aW1lcyBhcmUgbG93ZXN0IGlmCisgICAgLy8gd2UgZ2V0IHRoZSBoZWNrIG91dCBvZiBoZXJlIGFz
IHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBJIHRoaW5rIHRoYXQgcGFydCBv
ZiB3aGF0CisgICAgLy8gbWFrZXMgdGhpcyBvcHRpbWFsIGlzIHRoYXQgd2UgYWxzbyBuZXZlciBh
Ym9ydCBydW5uaW5nIGEgY29uc3RyYWludCBlYXJseSwgc28gd2hlbiB3ZSBkbyBydW4KKyAgICAv
LyBvbmUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMg
aXQgcG9zc2libHkgY2FuLgorICAgIC8vCisgICAgLy8gU2ltaWxhciByZWFzb25pbmcgYXBwbGll
cyB0byBjb25zdHJhaW50cyB0aGF0IHRlbmQgdG8gcmV0dXJuIENvc250cmFpbnRQYXJhbGxlbGlz
bTo6UGFyYWxsZWwKKyAgICAvLyBmcm9tIGV4ZWN1dGUuIFRob3NlIGNvbnN0cmFpbnRzIHR5cGlj
YWxseSBoYXZlIGEgdmVyeSBmYXN0LXJ1bm5pbmcgZXhlY3V0ZSBmdW5jdGlvbiwgd2hpY2ggdGhl
bgorICAgIC8vIG9mZmxvYWRzIGFsbW9zdCBhbGwgb2YgdGhlIHdvcmsgdG8gYSBwYXJhbGxlbCB3
b3JrZXIuIEluIHRoYXQgY2FzZSwgaXQgbWFrZXMgc2Vuc2UgdG8gcnVuIHRoZQorICAgIC8vIGV4
ZWN1dGUgZnVuY3Rpb24gc2VxdWVudGlhbGx5LgorICAgIGlmIChvcmRlcltpbmRleF0tPndvcmtF
c3RpbWF0ZShtX21haW5WaXNpdG9yKQorICAgICAgICB8fCBvcmRlcltpbmRleF0tPmxhc3RFeGVj
dXRlUGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7Cisg
ICAgICAgIGV4ZWN1dGUoKm9yZGVyW2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgIGlmICht
X3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAob3JkZXIuaXNF
bXB0eSgpIHx8IGRpZFZpc2l0U29tZXRoaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHsKKyAgICAgICAgICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoaW5kZXggPj0gb3JkZXIuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3JkZXJbaW5kZXgr
K10tPmluZGV4KCk7CisgICAgICAgIH0pOworICAgIAorICAgIGV4ZWN1dGUoUGFyYWxsZWxXb3Jr
Rmlyc3QsIHBpY2tOZXh0KTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhl
Y3V0ZShNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKK3sKKyAgICBpZiAobV9leGVjdXRl
ZC5nZXQoY29uc3RyYWludC5pbmRleCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZShtX21h
aW5WaXNpdG9yKTsKKyAgICBkaWRFeGVjdXRlKHBhcmFsbGVsaXNtLCBjb25zdHJhaW50LmluZGV4
KCkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJl
YWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwg
U2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAg
IGZvciAoOzspIHsKKyAgICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4VG9SdW47CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVs
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGluZGV4VG9S
dW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAg
ZG9QYXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBhdXRvIHRyeU5leHRDb25zdHJhaW50ID0gWyZdICgpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwaWNrUmVzdWx0ID0gcGlja05leHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghcGlja1Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldCgqcGlja1Jlc3VsdCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdDb25z
dHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNrUmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0cnlQYXJhbGxlbFdvcmsoKSB8fCB0cnlOZXh0Q29uc3RyYWludCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyeU5leHRDb25zdHJhaW50KCkgfHwgdHJ5UGFyYWxsZWxXb3Jr
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFtX251bUFj
dGl2ZVRocmVhZHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQW55IHdhaXRpbmcgY291
bGQgYmUgcmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5pbmcgdGhlIFNsb3RWaXNpdG9yLgorICAgICAg
ICAgICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQgd291bGQgYmUgcHJvZml0YWJsZS4KKyAgICAg
ICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcysrOwor
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc20gcGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWlu
dCA9ICptX3NldC5tX3NldFtpbmRleFRvUnVuXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUpCisgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFy
YWxsZWxXb3JrKHZpc2l0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJhbGxlbGlz
bSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9k
ZSkgeworICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuZ2V0KGlu
ZGV4VG9SdW4pKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwu
YXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLnRha2VGaXJzdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAodW5zaWduZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09
IGluZGV4VG9SdW47IH0pOworICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWxTZXQuY2xlYXIoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAg
ICAgICAgICAgICAgICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQ
YXJhbGxlbCkgeworICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBw
ZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWxTZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRz
LS07CisgICAgICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZGlkRXhlY3V0ZShDb25zdHJh
aW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20sIHVuc2lnbmVkIGluZGV4KQoreworICAgIG1fZXhl
Y3V0ZWQuc2V0KGluZGV4KTsKKyAgICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFs
bGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5k
KGluZGV4KTsKKyAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleCk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNv
bHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRW
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBI
ZWFwOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNl
dDsKKworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE1hcmtpbmdDb25zdHJhaW50U29sdmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICAKK3B1YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5n
Q29uc3RyYWludFNldCYpOworICAgIH5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpOworICAgIAor
ICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIFNjaGVk
dWxlclByZWZlcmVuY2UgeworICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgTmV4
dENvbnN0cmFpbnRGaXJzdAorICAgIH07CisKKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJl
ZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0
KTsKKyAgICAKKyAgICB2b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCk7CisgICAgCisg
ICAgdm9pZCBjb252ZXJnZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIp
OworICAgIAorICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOworICAgIAorcHJp
dmF0ZToKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxl
clByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNr
TmV4dCk7CisgICAgCisgICAgdm9pZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSwg
dW5zaWduZWQgaW5kZXgpOworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNsb3RWaXNpdG9yJiBt
X21haW5WaXNpdG9yOworICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKKyAgICBCaXRW
ZWN0b3IgbV9leGVjdXRlZDsKKyAgICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbDsKKyAgICBCaXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZl
Y3Rvcjx1bnNpZ25lZCwgMzI+IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgVmVjdG9yPHVu
c2lnbmVkLCAzMj4gbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7Cisg
ICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlVGhyZWFk
cyB7IDAgfTsKKyAgICBWZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL09wYXF1ZVJvb3RTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9PcGFxdWVSb290U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDkxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIE9wYXF1ZVJvb3RTZXQgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZVJvb3RTZXQpOwotcHVibGljOgotICAgIE9wYXF1ZVJv
b3RTZXQoKQotICAgICAgICA6IG1fbGFzdFF1ZXJpZWRSb290KG51bGxwdHIpCi0gICAgICAgICwg
bV9jb250YWluc0xhc3RRdWVyaWVkUm9vdChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9v
bCBjb250YWlucyh2b2lkKiByb290KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHJvb3QgIT0g
bV9sYXN0UXVlcmllZFJvb3QpIHsKLSAgICAgICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gcm9v
dDsKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBtX3Jvb3RzLmNvbnRh
aW5zKHJvb3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2NvbnRhaW5zTGFzdFF1ZXJp
ZWRSb290OwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9yb290cy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0g
ICAgewotICAgICAgICBtX3Jvb3RzLmNsZWFyKCk7Ci0gICAgICAgIG1fbGFzdFF1ZXJpZWRSb290
ID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCi0gICAgewotICAgICAgICBpZiAocm9v
dCA9PSBtX2xhc3RRdWVyaWVkUm9vdCkKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmll
ZFJvb3QgPSB0cnVlOwotICAgICAgICByZXR1cm4gbV9yb290cy5hZGQocm9vdCkuaXNOZXdFbnRy
eTsKLSAgICB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9yb290cy5zaXplKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmJlZ2luKCk7
Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5lbmQoKTsKLSAgICB9Ci0KLQotcHJpdmF0
ZToKLSAgICBIYXNoU2V0PHZvaWQqPiBtX3Jvb3RzOwotICAgIG11dGFibGUgdm9pZCogbV9sYXN0
UXVlcmllZFJvb3Q7Ci0gICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVu
Yz4KK2NsYXNzIFBhcmFsbGVsU291cmNlQWRhcHRlciA6IHB1YmxpYyBTaGFyZWRUYXNrPElubmVy
VHlwZSgpPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFy
ZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3Jh
cEZ1bmMpCisgICAgICAgIDogbV9vdXRlclNvdXJjZShvdXRlclNvdXJjZSkKKyAgICAgICAgLCBt
X3Vud3JhcEZ1bmModW53cmFwRnVuYykKKyAgICB7CisgICAgfQorICAgIAorICAgIElubmVyVHlw
ZSBydW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobV9pbm5lclNvdXJjZSkgewor
ICAgICAgICAgICAgICAgIGlmIChJbm5lclR5cGUgcmVzdWx0ID0gbV9pbm5lclNvdXJjZS0+cnVu
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAg
bV9pbm5lclNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1faW5uZXJTb3VyY2UgPSBtX3Vud3JhcEZ1bmMobV9vdXRlclNvdXJjZS0+cnVu
KCkpOworICAgICAgICB9IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAgICAgICAgcmV0dXJuIElu
bmVyVHlwZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxPdXRl
clR5cGUoKT4+IG1fb3V0ZXJTb3VyY2U7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8SW5uZXJUeXBl
KCk+PiBtX2lubmVyU291cmNlOworICAgIFVud3JhcEZ1bmMgbV91bndyYXBGdW5jOworICAgIExv
Y2sgbV9sb2NrOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJ
bm5lclR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitSZWY8UGFyYWxsZWxTb3VyY2VBZGFwdGVy
PE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPj4gY3JlYXRlUGFyYWxsZWxTb3VyY2VB
ZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0
IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFy
YWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPihvdXRl
clNvdXJjZSwgdW53cmFwRnVuYykpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYp
PiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwg
Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQorICAgIDogTWFya2luZ0NvbnN0cmFp
bnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBw
YXJhbGxlbGlzbSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0
aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1
bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAor
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0
ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgcGFyYWxsZWxpc20pCisgICAgLCBt
X2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCisgICAgLCBtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkK
K3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dCgpCit7Cit9CisKK2RvdWJsZSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0
aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKCFtX3F1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F1aWNrV29ya0Vz
dGltYXRlRnVuY3Rpb24odmlzaXRvcik7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50Lmgi
CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBT
aW1wbGVNYXJraW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CitwdWJs
aWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAg
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHks
CisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWwpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIDo6RnVuY3Rp
b248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwK
KyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQ
YXJhbGxlbCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisKKyAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAgOjpGdW5jdGlv
bjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsOSArOTgsNyBA
QCBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3Rh
cnRNYXJraW5nKCkKIHsKLSAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xs
ZWN0aW9uU2NvcGU6OkZ1bGwpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BhcXVlUm9vdHMu
aXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KLSAgICBlbHNlCisgICAg
aWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKQog
ICAgICAgICByZXNldCgpOwogCiAgICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0g
dm0oKS5oZWFwUHJvZmlsZXIoKSkKQEAgLTExMSw3ICsxMDksNiBAQCB2b2lkIFNsb3RWaXNpdG9y
OjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBtX2J5dGVzVmlzaXRl
ZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIg
PSBudWxscHRyOwpAQCAtMjc3LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRv
TWFya1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUm
IGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAg
ICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFy
a2VkKCk7CkBAIC0zNDYsNyArMzQzLDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50
Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAgLTQzNSw3ICs0MzIsNyBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6dXBk
YXRlTXV0YXRvcklzU3RvcHBlZChjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0gICAgbV9tdXRh
dG9ySXNTdG9wcGVkID0gKG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICBtX211dGF0b3JJ
c1N0b3BwZWQgPSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3Rv
cHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKCkKQEAgLTQ1Miw3ICs0NDksNyBAQCBib29sIFNsb3RWaXNpdG9yOjpoYXNBY2tub3dsZWRn
ZWRUaGF0VGhlCiAKIGJvb2wgU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAuY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JT
dG9wcGVkTXV0YXRvcik7CisgICAgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFw
LndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4
ICs0ODcsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAg
ICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxl
bCgpOwogICAgIH0KLSAgICAKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBT
bG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVz
dGVkKQpAQCAtNTUwLDcgKzU0NSw2IEBAIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3Jl
bWVudE9mRHIKICAgICB9CiAKICAgICBkb25hdGVBbGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5
KCk7CiAKICAgICByZXR1cm4gYnl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1NSwxNiBA
QCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlk
UmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFj
aFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRp
ZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBy
ZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFs
bGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFy
a2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9y
OjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5t
X3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5
KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCk7CiB9CiAKQEAgLTU4MywxMiArNTc2LDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6
U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBi
b251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZl
KQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
LS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMr
KzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1h
c3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYyNCw1NyBAQCBO
RVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAg
ICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5t
X2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3Bh
cmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFw
Lm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAm
JiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rh
c2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZd
IChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwog
ICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAo
Ym9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSB3b3VsZCBub3QgaGF2ZSB0
byBkbyB0aGlzLiBIb3dldmVyLCB0aGUgcGFyYWxsZWwgbWFya2luZyBhbGdvcml0aG0gd2lsbAor
ICAgICAgICAgICAgLy8gZ2V0IGNvbmZ1c2VkIGlmIHdlIGluaXRpYXRlIGl0IHdpdGggdGhlIGhl
bHBlciB2aXNpdG9ycyBoYXZpbmcgYW55dGhpbmcgaW4gdGhlaXIgc3RhY2tzLgorICAgICAgICAg
ICAgLy8gQWxzbywgdGhpcyBwcm90ZWN0cyBidWdzIHRoYXQgaW52b2x2ZSByYWNlcyBiZXR3ZWVu
IHZpc2l0Q2hpbGRyZW4gYW5kIG9uZSBvZiB0aGUKKyAgICAgICAgICAgIC8vIGNvbnN0cmFpbnRz
LgorICAgICAgICAgICAgLy9kb25hdGVBbGwoKTsKKworICAgICAgICAgICAgLy8gVGhlIG1haW4g
dGhyZWFkIGNvdWxkIHN0aWxsIGJlIHJ1bm5pbmcsIGFuZCBtYXkgcnVuIGZvciBhIHdoaWxlLiBV
bmxlc3Mgd2UgY2xlYXIgdGhlIHRhc2sKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcywgd2Ugd2ls
bCBrZWVwIGxvb3BpbmcgYXJvdW5kIHRyeWluZyB0byBydW4gdGhlIHRhc2suCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJr
aW5nTXV0ZXgpOworICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNr
ID09IGJvbnVzVGFzaykKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fYm9udXNWaXNpdG9y
VGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxs
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBpc0FjdGl2ZSA9IHRydWU7CiAgICAgfQogfQpAQCAtNjcw
LDE1ICs2OTQsMTkgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAog
ICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEKICAgICAgICAgfHwgKG1f
aGVhcC5tX3dvcmxkU3RhdGUubG9hZCgpICYgSGVhcDo6bXV0YXRvcldhaXRpbmdCaXQpCiAgICAg
ICAgIHx8ICFtX2hlYXAuaGFzSGVhcEFjY2VzcygpCi0gICAgICAgIHx8IG1faGVhcC5jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIHx8IG1faGVhcC53
b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIG92
ZXIgZHJhaW5JblBhcmFsbGVsKCkgd2hlbiB3ZSBoYXZlIGEgY29uY3VycmVudCBtdXRhdG9yIGJ1
dAogICAgICAgICAvLyBvdGhlcndpc2UgaXQgaXMgbm90IHByb2ZpdGFibGUuCiAgICAgICAgIHJl
dHVybiBkcmFpbkluUGFyYWxsZWwodGltZW91dCk7CiAgICAgfQogCi0gICAgTG9ja0hvbGRlciBs
b2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKLSAgICBkb25hdGVBbGwobG9ja2VyKTsKLSAg
ICAKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KSk7CisgICAg
cmV0dXJuIHdhaXRGb3JUZXJtaW5hdGlvbih0aW1lb3V0KTsKK30KKworU2xvdFZpc2l0b3I6OlNo
YXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24oTW9ub3Rvbmlj
VGltZSB0aW1lb3V0KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFy
a2luZ011dGV4KTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVv
dXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKQEAg
LTcxMSw2MSArNzM5LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQWxsKGNvbnN0IEFic3Ry
YQogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0K
IAotdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQotewotICAgIGlm
ICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChtX2lnbm9yZU5ld09wYXF1
ZVJvb3RzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkgPT0gMSkgewotICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hh
cmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBQdXQgaW50byB0aGUgbG9jYWwgc2V0LCBidXQg
bWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNlIGluCi0gICAgLy8gYSB3aGlsZSB0
byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24ndCBncm93IHRvbyBsYXJnZS4KLSAg
ICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0gICAgbV9vcGFxdWVSb290cy5hZGQo
cm9vdCk7Ci19Ci0KLWJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBy
b290KSBjb25zdAotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICByZXR1cm4gbV9oZWFwLm1f
b3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Ci19Ci0KLVRyaVN0YXRlIFNsb3RWaXNpdG9yOjpj
b250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKiByb290KSBjb25zdAotewotICAgIGlmICgh
cm9vdCkKLSAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7Ci0gICAgCi0gICAgaWYgKG1fb3Bh
cXVlUm9vdHMuY29udGFpbnMocm9vdCkpCi0gICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0g
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7
Ci0gICAgaWYgKG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAgICAgICBy
ZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwotfQotCi12b2lk
IFNsb3RWaXNpdG9yOjptZXJnZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAobV9vcGFxdWVSb290
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19
Ci0KLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQotewot
ICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0
aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
ZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0gICAgCiB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQog
ewogICAgIGlmICghbV9pc0luUGFyYWxsZWxNb2RlKSB7CkBAIC03ODUsMTYgKzc1OCw2IEBAIHZv
aWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKE1vbm90b24KICAgICBkcmFpbih0aW1lb3V0
KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCi17Ci0gICAgewot
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVSb290c011
dGV4KTsKLSAgICAgICAgZm9yIChhdXRvKiByb290IDogbV9vcGFxdWVSb290cykKLSAgICAgICAg
ICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLSAgICB9Ci0gICAgbV9vcGFxdWVS
b290cy5jbGVhcigpOwotfQotCiB2b2lkIFNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCiB7
CiAgICAgbV9oZWFwLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFr
UmVmZXJlbmNlSGFydmVzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1
ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVk
ZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAiT3BhcXVlUm9vdFNldC5oIgogI2luY2x1ZGUgIlZp
c2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTUsMTAgKzk0LDkgQEAgcHVibGljOgogICAgIHZvaWQg
YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CiAgICAgdm9pZCBhcHBlbmRIaWRkZW5V
bmJhcnJpZXJlZChKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3Bh
cXVlUm9vdCh2b2lkKik7CisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwotICAgIFRyaVN0YXRlIGNvbnRh
aW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zT3Bh
cXVlUm9vdCh2b2lkKikgY29uc3Q7CiAKICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2Nv
bGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KIApA
QCAtMTIxLDYgKzExOSw4IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWlu
SW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0
eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgCisg
ICAgU2hhcmVkRHJhaW5SZXN1bHQgd2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGlt
ZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgLy8gQXR0ZW1wdHMgdG8g
cGVyZm9ybSBhbiBpbmNyZW1lbnQgb2YgZHJhaW5pbmcgdGhhdCBpbnZvbHZlcyBvbmx5IHdhbGtp
bmcgYGJ5dGVzYCB3b3J0aCBvZiBkYXRhLiBUaGlzCiAgICAgLy8gaXMgbGlrZWx5IHRvIGFjY2lk
ZW50YWxseSB3YWxrIG1vcmUgb3IgbGVzcyB0aGFuIHRoYXQuIEl0IHdpbGwgdXN1YWxseSBtYXJr
IG1vcmUgdGhhbiBieXRlcy4gSXQgbWF5CkBAIC0xMjgsOCArMTI4LDYgQEAgcHVibGljOgogICAg
IC8vIHJhcmUgY2FzZXMgaGFwcGVuIHRlbXBvcmFyaWx5IGV2ZW4gaWYgd2UncmUgbm90IHJlYWNo
aW5nIHRlcm1pbmF0aW9uKS4KICAgICBzaXplX3QgcGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmco
c2l6ZV90IGJ5dGVzKTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlSWZO
ZWNlc3NhcnkoKTsKLQogICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5
IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8K
ICAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgog
ICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKQEAgLTE5NCwxMCArMTky
LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFw
Q2VsbCopOwogICAgIAotICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwotCi0gICAgdm9pZCBt
ZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0KICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
Y29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CkBA
IC0yMTUsNyArMjA5LDYgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVj
dG9yU3RhY2s7CiAgICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAgT3BhcXVl
Um9vdFNldCBtX29wYXF1ZVJvb3RzOyAvLyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBu
b3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCiAgICAgYm9vbCBtX2lnbm9yZU5l
d09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCiAg
ICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzYsNiArMTM2LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kVmEKICAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAoraW5s
aW5lIGJvb2wgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlm
ICghcHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVl
Um9vdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVS
b290cy5hZGQocHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsr
OworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFp
bnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gaGVhcCgpLT5tX29w
YXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7Cit9CisKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpy
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKG1faXNGaXJz
dFZpc2l0KSB7CkBAIC0xNTksMTIgKzE3NiwxMiBAQCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6
OmhlYXAoKSBjb25zdAogCiBpbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0
dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiBpbmxpbmUg
Y29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAu
bV92bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9j
a0lubGluZXMuaCIKKyNpbmNsdWRlICJQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCIKICNpbmNsdWRl
ICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgi
CiAKQEAgLTg4LDUgKzg5LDQyIEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5k
RW1wdHkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2Vk
QWxsb2NhdG9yKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCkKK3sKKyAg
ICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7Cisg
ICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAg
ICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBydW4oKSBvdmVycmlkZQorICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAgICAgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFs
bG9jYXRvckluU3Vic3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2Fs
bG9jYXRvcjsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRhc2sobV9maXJzdEFsbG9jYXRvcikpOworfQorCitSZWZQdHI8U2hhcmVk
VGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsTm90RW1wdHlN
YXJrZWRCbG9ja1NvdXJjZSgpCit7CisgICAgcmV0dXJuIGNyZWF0ZVBhcmFsbGVsU291cmNlQWRh
cHRlcjxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4oCisgICAgICAgIHBh
cmFsbGVsQWxsb2NhdG9yU291cmNlKCksCisgICAgICAgIFtdIChNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvcikgLT4gUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsK
KyAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+cGFyYWxsZWxOb3RFbXB0eUJsb2Nr
U291cmNlKCk7CisgICAgICAgIH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSwxNyArNjksMjQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAg
dm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hh
cmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+PiBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpOwor
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2Vk
QmxvY2soY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAg
ICAgdm9pZCBmb3JFYWNoTm90RW1wdHlNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAgICAgCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRs
ZSooKT4+IHBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNv
bnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9y
RWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw1MyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JF
YWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtl
ZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgY2xhc3MgVGFzayA6IHB1
YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIHB1YmxpYzoKKyAgICAg
ICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgICAg
ICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCisgICAgICAgICAgICAsIG1fYmxvY2tTb3VyY2Uoc3Vi
c3BhY2UucGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCkpCisgICAgICAgICAgICAs
IG1fZnVuYyhmdW5jKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+
cnVuKCkpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5k
KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZp
c2l0b3IsIGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgIGlmICghbV9uZWVkVG9W
aXNpdExhcmdlQWxsb2NhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3N1YnNwYWNlLmZvckVhY2hMYXJn
ZUFsbG9jYXRpb24oCisgICAgICAgICAgICAgICAgWyZdIChMYXJnZUFsbG9jYXRpb24qIGFsbG9j
YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb24tPmlzTWFya2VkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgYWxsb2NhdGlvbi0+Y2Vs
bCgpLCBtX3N1YnNwYWNlLm1fYXR0cmlidXRlcy5jZWxsS2luZCk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vic3BhY2Um
IG1fc3Vic3BhY2U7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5k
bGUqKCk+PiBtX2Jsb2NrU291cmNlOworICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAgICAgTG9j
ayBtX2xvY2s7CisgICAgICAgIGJvb2wgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgeyB0
cnVlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMs
IGZ1bmMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZv
ckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvckVhY2hNYXJrZWRCbG9j
aygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBW
aXNpdENvdW50ZXIgeworcHVibGljOgorICAgIFZpc2l0Q291bnRlcigpIHsgfQorICAgIAorICAg
IFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgOiBtX3Zpc2l0b3Io
JnZpc2l0b3IpCisgICAgICAgICwgbV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291
bnQoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3Zpc2l0b3ItPnZpc2l0Q291bnQoKSAtIG1faW5pdGlh
bFZpc2l0Q291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTbG90VmlzaXRvciogbV92
aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNsb3RW
aXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoKLSAgICBW
aXNpdGluZ1RpbWVvdXQoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCi0gICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0
aGluZykKLSAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkp
Ci0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBz
aXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKLSAg
ICB9Ci0KLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRD
b3VudCh2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29t
ZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1w
cml2YXRlOgotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6
ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEs
NyBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1
ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1hcmtpbmdW
ZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtl
ZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFs
dWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFw
RHVyaW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAg
IHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1f
Z2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9y
ZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQ
cm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6
OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90
bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQ
cm90b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAg
ICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAgICByZXR1
cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisy
MDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0Mg
Y29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGRvZXMgc29tZSBjaGFu
Z2VzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIHBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZzoK
KyAgICAgICAgCisgICAgICAgIC0gSSBmaW5hbGx5IHJlbW92ZWQgZGVwZW5kZW5jeVdpdGguIFRo
aXMgd2FzIGEgc2lsbHkgY29uc3RydWN0IHdob3NlIG9ubHkgcHVycG9zZSBpcyB0byBjb25mdXNl
CisgICAgICAgICAgcGVvcGxlIGFib3V0IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIGRlcGVuZGVu
Y3kgY2hhaW4uIEkgdG9vayB0aGF0IGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdyZWFseQorICAgICAg
ICAgIHNpbXBsaWZ5IHRoZSBHQydzIHVzZSBvZiBkZXBlbmRlbmN5IGNoYWluaW5nLgorICAgICAg
ICAKKyAgICAgICAgLSBBZGRlZCBtb3JlIGxvZ2ljIHRvIERlcXVlPD4sIHNpbmNlIEkgdXNlIGl0
IGZvciBwYXJ0IG9mIHRoZSBsb2FkIGJhbGFuY2VyLgorICAgICAgICAKKyAgICAgICAgLSBNYWRl
IGl0IHBvc3NpYmxlIHRvIHByb2ZpbGUgbG9jayBjb250ZW50aW9uLiBTZWUKKyAgICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMjUwI2MwIGZvciBzb21l
IHByZWxpbWluYXJ5IG1lYXN1cmVtZW50cy4KKyAgICAgICAgCisgICAgICAgIC0gSW50cm9kdWNl
ZCBob2xkTG9ja0lmLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBlcmZvcm0gcHJlZGljYXRlZCBs
b2NrIGFjcXVpc2l0aW9uLiBXZSB1c2UgdGhhdAorICAgICAgICAgIHRvIHBpY2sgYSBsb2NrIGlu
IFdlYkNvcmUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpkZXBlbmRlbmN5KToKKyAgICAg
ICAgKFdURjo6RGVwZW5kZW5jeVdpdGg6OkRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6ZGVwZW5kZW5jeVdpdGgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9CaXRWZWN0
b3IuaDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6Cisg
ICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRy
SGFzaFNldC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6
Q29uY3VycmVudFB0ckhhc2hTZXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNl
dDo6fkNvbmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhh
c2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNo
U2V0OjpjbGVhcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFs
aXplKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3cpOgorICAg
ICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkpOgorICAg
ICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKToKKyAgICAgICAg
KFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHd0
Zi9Db25jdXJyZW50UHRySGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFB0ckhhc2hTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hT
ZXQ6OmFkZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpzaXplIGNvbnN0
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjptYXhMb2FkIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6Omhhc2gpOgorICAgICAg
ICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Y2FzdCk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRQdHJIYXNoU2V0Ojpjb250YWluc0ltcGwgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50UHRySGFzaFNldDo6YWRkSW1wbCk6CisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAg
ICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KToKKyAgICAgICAgKiB3dGYvRmFz
dE1hbGxvYy5oOgorICAgICAgICAqIHd0Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jh
c2U6OmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChXVEY6Omhv
bGRMb2NrSWYpOgorICAgICAgICAqIHd0Zi9TY29wZWRMYW1iZGEuaDoKKyAgICAgICAgKiB3dGYv
U2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUp
OgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFJlc3VsdFR5cGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9TdGFja1Nob3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6U3Rh
Y2tTaG90KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj0pOgorICAgICAgICAo
V1RGOjpTdGFja1Nob3Q6OmFycmF5IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojpz
aXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvciBib29sIGNvbnN0
KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAg
KFdURjo6U3RhY2tTaG90OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojpp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6
b3BlcmF0b3I+IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpkZWxldGVkVmFsdWVB
cnJheSk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdEhhc2g6Omhhc2gpOgorICAgICAgICAoV1RG
OjpTdGFja1Nob3RIYXNoOjplcXVhbCk6CisgICAgICAgICogd3RmL1N0YWNrU2hvdFByb2ZpbGVy
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6U3RhY2tTaG90UHJv
ZmlsZXIpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cHJvZmlsZSk6CisgICAg
ICAgIChXVEY6OlN0YWNrU2hvdFByb2ZpbGVyOjpydW4pOgorCiAyMDE3LTEyLTAxICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29y
a2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJl
Z2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAv
KiBTdHJpbmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi87
IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcw
OEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKKwkJMEYzMENCNUExRkNERjEz
NDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBD
b25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZC
NiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVh
ZC5jcHAgKi87IH07CiAJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3NDFG
MjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovOyB9OwogCQkwRjYwRjMyRjFERkNCRDFC
MDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tl
ZFByaW50U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4Myw2ICsxODQsOCBAQAogCQkwRjMwQkE4RDFF
Nzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzMEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMzBCQThGMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRy
YWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUz
MjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJF
QjRBIC8qIExvY2tBbGdvcml0aG1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0
aG1JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FB
OUQwMDNDRkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJB
MyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtS
YW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNiw2ICsyMjksOCBAQAog
CQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcg
LyogUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRT
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDQxRkQxQzM3QjAw
NzlDNUIyIC8qIFN0YWNrU2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dGFja1Nob3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDUxRkQxQzM3
QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0
RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFn
VG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgw
MDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN5c3RlbVRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5
NCw2ICs3OTksOCBAQAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlv
blRocmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUxQTgyNUEwMDQxMjNGRiAvKiBDb21waWxlci5o
ICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlBMkJCQyAvKiBDb21wbGV0aW9uSGFuZGxlci5o
ICovLAorCQkJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNl
dC5jcHAgKi8sCisJCQkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJI
YXNoU2V0LmggKi8sCiAJCQkJMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlvbi5o
ICovLAogCQkJCUUzOEM0MTI2MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCAqLywKIAkJ
CQlFMzhDNDEyNzFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5oICovLApAQCAtMTAwNSw2ICsx
MDEyLDggQEAKIAkJCQlBOEE0NzMwRDE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywK
IAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJ
CUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5oICovLAorCQkJCTBGOURB
QTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3QuaCAqLywKKwkJCQkwRjlEQUEwNTFGRDFD
MzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLywKIAkJCQlGRURBQ0QzQjE2MzBG
ODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgKi8sCiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAw
QzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAqLywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMg
LyogU3RhY2tUcmFjZS5jcHAgKi8sCkBAIC0xNDI2LDYgKzE0MzUsNyBAQAogCQkJCTBGODI0QTY4
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
RjE3NTJCMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50Q29kZXJzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxRjE3NTJDMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMwQ0I1QTFGQ0RGMTM0MDA0QjUzMjMgLyogQ29uY3Vy
cmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1MkQxRjNENDg2MDAw
Qzc0OTUwIC8qIFBlcnNpc3RlbnRFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQz
MzYyMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21p
Y3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDExICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBE
ZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5KAogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBl
KiA9IG51bGxwdHI+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5k
ZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCiB7CiAgICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAg
ICB1aW50NjRfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5p
b24geworICAgICAgICB1aW50MzJfdCBjb3B5OworICAgICAgICBUIHZhbHVlOworICAgIH0gdTsK
KyAgICB1LmNvcHkgPSAwOworICAgIHUudmFsdWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAg
ICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5
LCB3aG9zZSBjb21wdXRhdGlvbgogICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXpl
ci4gVGhpcyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICsz
NjgsMjAgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8v
IG9yIGFuIGFjcXVpcmUgbG9hZC4KICAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5d
LCAld1tpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAg
ICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxp
ZiBDUFUoQVJNKQogICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAg
ICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIi
KGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8g
ZGVwZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2Fk
RmVuY2UoKTsKICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHUuY29weSk7CiAjZW5kaWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsK
IH0KIAotLy8gRklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhl
ciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5F
IERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVu
Y3k7Ci0gICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwot
I2lmIENQVShBUk02NCkKLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tp
bl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBb
aW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5j
eV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5
KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgp
OwotICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgot
ICAgIHJldHVybiBkZXBlbmRlbmN5OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdB
WVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBk
ZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBl
KiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVl
KQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1
YmxpYzoKLSAgICBEZXBlbmRlbmN5V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVw
ZW5kZW5jeSgpKQotICAgICAgICAsIHZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERl
cGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAg
ICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7
Ci19OwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxU
PiBkZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQot
ewotICAgIHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0K
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBl
bmRlbmN5IGRlcGVuZGVuY3kpCiB7CkBAIC00NjksMTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUg
VCYgZW5zdXJlUG9pbnRlcihBdG9taWM8VCoKIAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBX
VEY6OkRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpj
b25zdW1lOwogdXNpbmcgV1RGOjpkZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0
aDsKIHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7
CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0
Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6
IAogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0
b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3Vs
dCA9ICp0aGlzOworICAgICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDcgQEAgc2V0KFdU
Rl9IRUFERVJTCiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAg
Q29tcGlsZXIuaAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKICAgICBDb25kaXRpb24uaAog
ICAgIENyb3NzVGhyZWFkQ29waWVyLmgKICAgICBDcm9zc1RocmVhZFRhc2suaApAQCAtMTMyLDYg
KzEzMyw4IEBAIHNldChXVEZfSEVBREVSUwogICAgIFNlZ21lbnRlZFZlY3Rvci5oCiAgICAgU21h
bGxQdHJTZXQuaAogICAgIFN0YWNrQm91bmRzLmgKKyAgICBTdGFja1Nob3QuaAorICAgIFN0YWNr
U2hvdFByb2ZpbGVyLmgKICAgICBTdGFja1N0YXRzLmgKICAgICBTdGFja1RyYWNlLmgKICAgICBT
dGRMaWJFeHRyYXMuaApAQCAtMjE4LDYgKzIyMSw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIENQ
VVRpbWUuY3BwCiAgICAgQ2xvY2tUeXBlLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAor
ICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAog
ICAgIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29uY3VycmVudFB0ckhhc2hTZXQuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCitDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hT
ZXQoKQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5D
b25jdXJyZW50UHRySGFzaFNldCgpCit7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6
OmRlbGV0ZU9sZFRhYmxlcygpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRv
ZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0
IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRo
YXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAor
ICAgIG1fYWxsVGFibGVzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5p
cXVlX3B0cjxUYWJsZT4mIHRhYmxlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiB0YWJs
ZS5nZXQoKSAhPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIH0pOworfQorCit2b2lk
IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcigpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGlu
IGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBh
ZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdl
IGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7IAorICAgIAorICAgIG1fYWxsVGFibGVzLmNsZWFyKCk7CisgICAgaW5pdGlhbGl6ZSgpOwor
fQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKCkKK3sKKyAgICBjb25z
dGV4cHIgdW5zaWduZWQgaW5pdGlhbFNpemUgPSAzMjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFi
bGU+IHRhYmxlID0gVGFibGU6OmNyZWF0ZShpbml0aWFsU2l6ZSk7CisgICAgbV90YWJsZS5zdG9y
ZVJlbGF4ZWQodGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKHRh
YmxlKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3coVGFibGUqIHRh
YmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwg
dm9pZCogcHRyKQoreworICAgIGlmICh0YWJsZS0+bG9hZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJs
ZS0+bWF4TG9hZCgpKQorICAgICAgICByZXR1cm4gcmVzaXplQW5kQWRkKHB0cik7CisgICAgCisg
ICAgZm9yICg7OykgeworICAgICAgICB2b2lkKiBvbGRFbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRl
eF0uY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG51bGxwdHIsIHB0cik7CisgICAgICAgIGlmICghb2xk
RW50cnkpIHsKKyAgICAgICAgICAgIGlmIChtX3RhYmxlLmxvYWQoKSAhPSB0YWJsZSkgeworICAg
ICAgICAgICAgICAgIC8vIFdlIGFkZGVkIGFuIGVudHJ5IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVl
ZCB0byByZWV4ZWN1dGUgdGhlIGFkZCBvbiB0aGUgbmV3IHRhYmxlLgorICAgICAgICAgICAgICAg
IHJldHVybiBhZGQocHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIGlmIChvbGRFbnRyeSA9PSBwdHIpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2Fk
UmVsYXhlZCgpOworICAgIGlmICh0YWJsZS0+bG9hZC5sb2FkUmVsYXhlZCgpIDwgdGFibGUtPm1h
eExvYWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJs
ZT4gbmV3VGFibGUgPSBUYWJsZTo6Y3JlYXRlKHRhYmxlLT5zaXplICogMik7CisgICAgdW5zaWdu
ZWQgbWFzayA9IG5ld1RhYmxlLT5tYXNrOworICAgIHVuc2lnbmVkIGxvYWQgPSAwOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgKytpKSB7CisgICAgICAgIHZvaWQq
IHB0ciA9IHRhYmxlLT5hcnJheVtpXS5sb2FkUmVsYXhlZCgpOworICAgICAgICBpZiAoIXB0cikK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJ
bmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJ
bmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgQXRvbWljPHZvaWQqPiYgZW50
cnlSZWYgPSBuZXdUYWJsZS0+YXJyYXlbaW5kZXhdOworICAgICAgICAgICAgdm9pZCogZW50cnkg
PSBlbnRyeVJlZi5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkgeworICAg
ICAgICAgICAgICAgIGVudHJ5UmVmLnN0b3JlUmVsYXhlZChwdHIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkg
IT0gcHRyKTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGxvYWQrKzsKKyAgICB9CisgICAgCisgICAgbmV3VGFibGUtPmxvYWQu
c3RvcmVSZWxheGVkKGxvYWQpOworICAgIAorICAgIG1fdGFibGUuc3RvcmUobmV3VGFibGUuZ2V0
KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKG5ld1RhYmxlKSk7Cit9CisKK2Jv
b2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAg
cmVzaXplSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0
OjpUYWJsZTo6Y3JlYXRlKHVuc2lnbmVkIHNpemUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENv
bmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gcmVzdWx0KG5ldyAoZmFzdE1hbGxvYyhPQkpFQ1Rf
T0ZGU0VUT0YoVGFibGUsIGFycmF5KSArIHNpemVvZihBdG9taWM8dm9pZCo+KSAqIHNpemUpKSBU
YWJsZSgpKTsKKyAgICByZXN1bHQtPnNpemUgPSBzaXplOworICAgIHJlc3VsdC0+bWFzayA9IHNp
emUgLSAxOworICAgIHJlc3VsdC0+bG9hZC5zdG9yZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9y
ZVJlbGF4ZWQobnVsbHB0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlz
IGEgY29uY3VycmVudCBoYXNoLWJhc2VkIHNldCBmb3IgcG9pbnRlcnMuIEl0J3Mgb3B0aW1pemVk
IGZvcjoKKy8vCisvLyAtIEhpZ2ggcmF0ZSBvZiBjb250YWlucygpIGNhbGxzLgorLy8gLSBIaWdo
IHJhdGUgb2YgYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgbmV3LiBhZGQoKSBj
YWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyAobm9wIGFkZHMpCisvLyAgIGRvbid0IG11dGF0
ZSB0aGUgdGFibGUgYXQgYWxsLgorLy8gLSBOb3QgdG9vIG1hbnkgdGhyZWFkcy4gSSBkb3VidCB0
aGlzIHNjYWxlcyBiZXlvbmQgfjQuIFRob3VnaCwgaXQgbWF5IGFjdHVhbGx5IHNjYWxlIGJldHRl
ciB0aGFuIHRoYXQKKy8vICAgaWYgdGhlIHJhdGUgb2Ygbm9wIGFkZHMgaXMgYWJzdXJkbHkgaGln
aC4KKy8vCisvLyBJZiB3ZSB3YW50ZWQgdGhpcyB0byBzY2FsZSBiZXR0ZXIsIHRoZSBtYWluIGNo
YW5nZSB3ZSdkIGhhdmUgdG8gbWFrZSBpcyBob3cgdGhpcyB0YWJsZSBkZXRlcm1pbmVzIHdoZW4K
Ky8vIHRvIHJlc2l6ZS4gUmlnaHQgbm93IGl0J3MgYSBzaGFyZWQgY291bnRlci4gV2UgbG9jazt4
YWRkIHRoaXMgY291bnRlci4gT25lIGVhc3kgd2F5IHRvIG1ha2UgdGhhdAorLy8gc2NhbGFibGUg
aXMgdG8gcmVxdWlyZSBlYWNoIHRocmVhZCB0aGF0IHdvcmtzIHdpdGggdGhlIENvbmN1cnJlbnRQ
dHJIYXNoU2V0IHRvIHJlZ2lzdGVyIGl0c2VsZiBmaXJzdC4KKy8vIFRoZW4gZWFjaCB0aHJlYWQg
d291bGQgaGF2ZSBzb21lIGRhdGEgc3RydWN0dXJlIHRoYXQgaGFzIGEgY291bnRlci4gV2UgY291
bGQgaW5zdGl0dXRlIHRoZSBwb2xpY3kgdGhhdAorLy8gZWFjaCB0aHJlYWQgc2ltcGx5IGluY3Jl
bWVudHMgaXRzIG93biBsb2FkIGNvdW50ZXIsIGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmUuIFRo
ZW4sIGlmIGFueSBzZWFyY2ggdG8KKy8vIHJlc29sdmUgYSBjb2xsaXNpb24gZG9lcyBtb3JlIHRo
YW4gTiBpdGVyYXRpb25zLCB3ZSBjYW4gY29tcHV0ZSBhIGNvbWJpbmVkIGxvYWQgYnkgc3VtbWlu
ZyB0aGUgbG9hZAorLy8gY291bnRlcnMgb2YgYWxsIG9mIHRoZSB0aHJlYWQgZGF0YSBzdHJ1Y3R1
cmVzLgorLy8KKy8vIENvbmN1cnJlbnRQdHJIYXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNl
ZXMgYSA5OCUgbm9wIGFkZCByYXRlIGluIFNwZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8v
IGZvY3VzZXMgc28gbXVjaCBvbiBjYXNlcyB3aGVyZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdl
LgorY2xhc3MgQ29uY3VycmVudFB0ckhhc2hTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENvbmN1cnJlbnRQdHJIYXNoU2V0KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKwor
cHVibGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBDb25jdXJyZW50UHRySGFzaFNldCgpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB+Q29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb250YWluc0ltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRkSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHNp
emVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxlLmxvYWRSZWxh
eGVkKCktPmxvYWQubG9hZFJlbGF4ZWQoKTsKKyAgICB9CisgICAgCisgICAgLy8gT25seSBjYWxs
IHdoZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMg
ZnJlZXMgdXAgbWVtb3J5IHdpdGhvdXQgY2hhbmdpbmcKKyAgICAvLyB0aGUgY29udGVudHMgb2Yg
dGhlIHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygp
OworICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhy
ZWFkIGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZyZWVzIHVwIGFsbCBtZW1vcnkgZXhjZXB0IGZvcgor
ICAgIC8vIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBoYXNodGFibGUuCisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY2xlYXIoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RydWN0IFRhYmxlIHsK
KyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICAg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOwor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUg
LyAyOyB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0
YWJsZS4KKyAgICAgICAgdW5zaWduZWQgbWFzazsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAg
ICAgIEF0b21pYzx1bnNpZ25lZD4gbG9hZDsKKyAgICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsx
XTsKKyAgICB9OworICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0cikKKyAg
ICB7CisgICAgICAgIHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChwdHIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHZvaWQqIGNhc3QoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKFQpIDw9IHNpemVvZih2b2lkKiksICJ0eXBlIHRvbyBiaWciKTsKKyAgICAgICAgdW5p
b24geworICAgICAgICAgICAgdm9pZCogcHRyOworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAg
ICAgfSB1OworICAgICAgICB1LnB0ciA9IG51bGxwdHI7CisgICAgICAgIHUudmFsdWUgPSB2YWx1
ZTsKKyAgICAgICAgcmV0dXJuIHUucHRyOworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5z
SW1wbCh2b2lkKiBwdHIpIGNvbnN0CisgICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3Rh
YmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsK
KyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAg
ICAgICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7Cisg
ICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQuCisgICAgYm9v
bCBhZGRJbXBsKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFi
bGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOwor
ICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAg
dW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAg
ICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3codGFi
bGUsIG1hc2ssIHN0YXJ0SW5kZXgsIGluZGV4LCBwdHIpOworICAgICAgICAgICAgaWYgKGVudHJ5
ID09IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbmRl
eCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIGFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25l
ZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKTsKKworICAgIHZvaWQgcmVz
aXplSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIHJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpOworICAg
IAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+LCA0PiBtX2FsbFRhYmxlczsKKyAg
ICBBdG9taWM8VGFibGUqPiBtX3RhYmxlOyAvLyBUaGlzIGlzIG5ldmVyIG51bGwuCisgICAgTG9j
ayBtX2xvY2s7IC8vIFdlIGp1c3QgdXNlIHRoaXMgdG8gY29udHJvbCByZXNpemUgcmFjZXMuCit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb25jdXJyZW50UHRySGFzaFNl
dDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvRGVxdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShV
JiYsIGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmly
c3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBh
IG51bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1
cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3Qo
Y29uc3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVu
dCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVy
c2lvbiBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNl
LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGlu
ZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGlu
ZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMp
Cit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5z
aXplKCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9
IHRha2VGaXJzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAg
ICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsr
OworICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJu
IFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0
Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsNyBAQCB1c2luZyBX
VEY6OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5FIGlubGluZQog
I2VuZGlmCiAKLSNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAotcHVibGljOiBcCisj
ZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogICAgIHZvaWQqIG9wZXJhdG9y
IG5ldyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgXApAQCAtMjYzLDcg
KzI2MiwxNSBAQCBwdWJsaWM6IFwKICAgICAgICAgQVNTRVJUKGxvY2F0aW9uKTsgXAogICAgICAg
ICByZXR1cm4gbG9jYXRpb247IFwKICAgICB9IFwKKworI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRCBcCitwdWJsaWM6IFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwK
IHByaXZhdGU6IFwKIHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0
ZXJUaGlzTWFjcm8KIAorI2RlZmluZSBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQgXAor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAordHlwZWRlZiBpbnQgX190aGlzSXNI
ZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybworCiAjZW5kaWYgLyogV1RGX0Zhc3RN
YWxsb2NfaCAqLwpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYv
d3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTYgQEAKICNpbmNsdWRl
ICJMb2NrLmgiCiAKICNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaD4KKyNpbmNs
dWRlIDx3dGYvU3RhY2tTaG90UHJvZmlsZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK3N0YXRp
YyBjb25zdGV4cHIgYm9vbCBwcm9maWxlTG9ja0NvbnRlbnRpb24gPSBmYWxzZTsKKwogdm9pZCBM
b2NrQmFzZTo6bG9ja1Nsb3coKQogeworICAgIGlmIChwcm9maWxlTG9ja0NvbnRlbnRpb24pCisg
ICAgICAgIFNUQUNLX1NIT1RfUFJPRklMRSg0LCAyLCA1KTsKICAgICBEZWZhdWx0TG9ja0FsZ29y
aXRobTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvTG9ja2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja2VyLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEyMiw2ICsxMjIsMTIgQEAgTG9ja2VyPExvY2tUeXBlPiBob2xkTG9jayhMb2NrVHlwZSYgbG9j
awogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK0xvY2tlcjxMb2NrVHlwZT4gaG9s
ZExvY2tJZihMb2NrVHlwZSYgbG9jaywgYm9vbCBwcmVkaWNhdGUpCit7CisgICAgcmV0dXJuIExv
Y2tlcjxMb2NrVHlwZT4ocHJlZGljYXRlID8gJmxvY2sgOiBudWxscHRyKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2NrZXI8TG9ja1R5cGU+IHRyeUhvbGRMb2NrKExvY2tU
eXBlJiBsb2NrKQogewogICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+Ojp0cnlMb2NrKGxvY2sp
OwpAQCAtMTM0LDUgKzE0MCw2IEBAIHVzaW5nIFdURjo6TG9ja2VyOwogdXNpbmcgV1RGOjpOb0xv
Y2tpbmdOZWNlc3NhcnlUYWc7CiB1c2luZyBXVEY6Ok5vTG9ja2luZ05lY2Vzc2FyeTsKIHVzaW5n
IFdURjo6aG9sZExvY2s7Cit1c2luZyBXVEY6OmhvbGRMb2NrSWY7CiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL1Nj
b3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDEzIEBAIHByaXZhdGU6
CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFscmVhZHkgcmVmZXIgdG8gYSBmdW5jdG9yIGJ5
IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBsaWZldGltZSBpcwogLy8gZ29vZC4gVGhpcyBq
dXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhhdCBwb2ludHMgdG8geW91ciBmdW5jdG9yLgor
Ly8KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGFsd2F5cyB3cm9uZzoKKy8vCisvLyBhdXRvIHJlZiA9
IHNjb3BlZExhbWJkYVJlZihbLi4uXSAoLi4uKSB7Li4ufSk7CisvLworLy8gQmVjYXVzZSB0aGUg
c2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIgdG8gdGhlIGxhbWJkYSBieSByZWZlcmVuY2UsIGFu
ZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVyIHRoZQorLy8gc2VtaWNvbG9uLiBVc2Ugc2NvcGVk
TGFtYmRhKCkgaW4gdGhhdCBjYXNlLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0
eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVkTGFtYmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1
bmN0b3I+IHNjb3BlZExhbWJkYVJlZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewpJbmRleDog
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvU2hhcmVk
VGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsK
IC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5
b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJl
ZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUg
KEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRU
YXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUg
UGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJl
ZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5
cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2so
KSB7IH0KIApJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3Rh
Y2tTaG90IHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3QoKSB7IH0KKyAgICAKKyAgICBBTFdBWVNf
SU5MSU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICB7CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgICBtX2FycmF5ID0gc3RkOjptYWtl
X3VuaXF1ZTx2b2lkKltdPihzaXplKTsKKyAgICAgICAgICAgIGludCBpbnRTaXplID0gc2l6ZTsK
KyAgICAgICAgICAgIFdURkdldEJhY2t0cmFjZShtX2FycmF5LmdldCgpLCAmaW50U2l6ZSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGludFNpemUpIDw9
IHNpemUpOworICAgICAgICAgICAgbV9zaXplID0gaW50U2l6ZTsKKyAgICAgICAgICAgIGlmICgh
bV9zaXplKQorICAgICAgICAgICAgICAgIG1fYXJyYXkgPSBudWxscHRyOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIFN0YWNrU2hvdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9hcnJheShkZWxldGVkVmFsdWVBcnJheSgpKQorICAgICAgICAsIG1fc2l6
ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90JiBvcGVyYXRvcj0oY29uc3Qg
U3RhY2tTaG90JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lkKltd
PiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4ob3RoZXIubV9zaXplKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG90aGVyLm1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIG5l
d0FycmF5W2ldID0gb3RoZXIubV9hcnJheVtpXTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIubV9z
aXplOworICAgICAgICBtX2FycmF5ID0gV1RGTW92ZShuZXdBcnJheSk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90KGNvbnN0IFN0YWNrU2hvdCYgb3Ro
ZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2b2lk
KiogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LmdldCgpOyB9CisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2FycmF5OyB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV9zaXplICE9IG90aGVyLm1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3NpemU7IGktLTspIHsKKyAgICAgICAgICAg
IGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1fYXJyYXlbaV0pCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBtX3NpemU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0g
bV9zaXplOyBpLS07KQorICAgICAgICAgICAgcmVzdWx0IF49IFB0ckhhc2g8dm9pZCo+OjpoYXNo
KG1fYXJyYXlbaV0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fc2l6ZSAmJiBtX2FycmF5LmdldCgpID09IGRlbGV0ZWRWYWx1ZUFycmF5
KCk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgU3BlY3RydW08PiBoYXBweS4KKyAgICBib29s
IG9wZXJhdG9yPihjb25zdCBTdGFja1Nob3QmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCoqIGRlbGV0ZWRWYWx1ZUFycmF5KCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KKyAg
ICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbV9hcnJheTsKKyAgICBzaXplX3QgbV9z
aXplIHsgMCB9OworfTsKKworc3RydWN0IFN0YWNrU2hvdEhhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYgc2hvdCkgeyByZXR1cm4gc2hvdC5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdGFja1Nob3QmIGEsIGNvbnN0IFN0YWNrU2hv
dCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0YWNr
U2hvdD4geworICAgIHR5cGVkZWYgU3RhY2tTaG90SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U3RhY2tTaG90PiB7IH07CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9m
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgor
I2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+Cisj
aW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNr
U2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3RQcm9maWxlcih1bnNpZ25lZCBu
dW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCwgdW5zaWduZWQgc3RhY2tzVG9SZXBvcnQp
CisgICAgICAgIDogbV9udW1GcmFtZXMobnVtRnJhbWVzKQorICAgICAgICAsIG1fZnJhbWVzVG9T
a2lwKGZyYW1lc1RvU2tpcCkKKyAgICAgICAgLCBtX3N0YWNrc1RvUmVwb3J0KHN0YWNrc1RvUmVw
b3J0KQorICAgIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIlN0YWNrU2hvdFByb2ZpbGVyIiwg
W3RoaXNdICgpIHsgcnVuKCk7IH0pOworICAgIH0KKworICAgIC8vIE5FVkVSX0lOTElORSBzbyB0
aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0YWJsZS4KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBw
cm9maWxlKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAgICAgbV9wcm9maWxlLmFkZChTdGFja1Nob3QobV9udW1GcmFtZXMgKyBtX2ZyYW1lc1Rv
U2tpcCkpOworICAgICAgICBtX3RvdGFsQ291bnQrKzsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICBzbGVlcCgxX3MpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICAgICAgYXV0byBsaXN0ID0gbV9wcm9maWxlLmJ1aWxkTGlzdCgpOwor
ICAgICAgICAgICAgZGF0YUxvZygiXG5Ib3R0ZXN0IHN0YWNrcyBpbiAiLCBnZXRDdXJyZW50UHJv
Y2Vzc0lEKCksICI6XG4iKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUo
KSwgY291bnQgPSAwOyBpLS0gJiYgY291bnQgPCBtX3N0YWNrc1RvUmVwb3J0OyBjb3VudCsrKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBsaXN0W2ldOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIlxuVG9wICMiLCBjb3VudCArIDEsICIgc3RhY2s6ICIsIGVudHJ5LmNvdW50ICog
MTAwIC8gbV90b3RhbENvdW50LCAiJVxuIik7CisgICAgICAgICAgICAgICAgU3RhY2tUcmFjZSB0
cmFjZShlbnRyeS5rZXkuYXJyYXkoKSArIG1fZnJhbWVzVG9Ta2lwLCBlbnRyeS5rZXkuc2l6ZSgp
IC0gbV9mcmFtZXNUb1NraXApOworICAgICAgICAgICAgICAgIGRhdGFMb2codHJhY2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBXb3JkTG9jayBtX2xvY2s7CisgICAgU3BlY3RydW08U3RhY2tTaG90LCBkb3Vi
bGU+IG1fcHJvZmlsZTsKKyAgICBkb3VibGUgbV90b3RhbENvdW50IHsgMCB9OworICAgIHVuc2ln
bmVkIG1fbnVtRnJhbWVzOworICAgIHVuc2lnbmVkIG1fZnJhbWVzVG9Ta2lwOworICAgIHVuc2ln
bmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9OworCisjZGVmaW5lIFNUQUNLX1NIT1RfUFJPRklMRShu
dW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tzVG9SZXBvcnQpIGRvIHsgXAorICAgIHN0YXRp
YyBTdGFja1Nob3RQcm9maWxlciogc3RhY2tTaG90UHJvZmlsZXI7IFwKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJvZmlsZXJPbmNlRmxhZzsgXAorICAgIHN0ZDo6Y2FsbF9v
bmNlKHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWcsIFtdIHsgc3RhY2tTaG90UHJvZmlsZXIgPSBu
ZXcgU3RhY2tTaG90UHJvZmlsZXIobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVw
b3J0KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQcm9maWxlci0+cHJvZmlsZSgpOyBcCit9IHdoaWxl
IChmYWxzZSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDM0IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlzIGNoYW5nZSBpcyBiZXN0IHRlc3Rl
ZCB1c2luZyBET00tR0MtaW50ZW5zaXZlCisgICAgICAgIGJlbmNobWFya3MgbGlrZSBTcGVlZG9t
ZXRlciBhbmQgRHJvbWFlby4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGFyYWxsZWxpemVzIHRo
ZSBET00ncyBvdXRwdXQgY29uc3RyYWludCwgYW5kIG1ha2VzIHNvbWUgc21hbGwgY2hhbmdlcyB0
byBtYWtlIHRoaXMgbW9yZQorICAgICAgICBzY2FsYWJsZS4KKworICAgICAgICAqIEZvcndhcmRp
bmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OkRPTUdD
T3V0cHV0Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFp
bnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRw
dXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1
dENvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpET01H
Q091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1D
bGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVFdmVudFRhcmdldERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEpOgorCiAyMDE3LTEyLTAxICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29y
a2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw2
ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRMb2FkZXIuY3BwCiBiaW5k
aW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAogYmluZGluZ3MvanMvQ2FsbFRyYWNlci5j
cHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAogYmluZGluZ3MvanMv
R0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KKwpJbmRleDogU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGlt
ZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEsMiArMCwwIEBA
Ci0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WaXNpdGluZ1RpbWVvdXQu
aD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUxLDYgKzM1MSw3IEBA
CiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzE2NkUxQzg2OUQ4MzAwNEZG
MERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAwNDQzQzNGIC8qIEludGVyc2VjdGlvbk9i
c2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRlcnNlY3Rpb25PYnNlcnZlckNh
bGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2Vj
dGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9i
c2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERP
TUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3Ry
YWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXll
clVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjYyNTJGMThE
RTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1MkQxOERFMUIxNTAwQTA3QzA1IC8qIEdl
b21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9sbGluZ1RyZWVTdGlj
a3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTQ0Niw2ICs1
NDQ3LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVy
c2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpTRE9NUXVhZEN1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWRDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyogRGlzcGxh
eVJlZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUdDT3V0cHV0Q29u
c3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTBFMUZEMUM2
NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEwMDk3NUZERCAvKiBDU1NQcm9wZXJ0aWVzLmpz
b24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpzb247IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0xheWVyVXBk
YXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc4MTYyREY5MTkw
MEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI5ODAsNiArMjI5ODMsOCBAQAogCQkJCTk1MjA3NjAyMUYyNjc1RjkwMDdEMkFB
QiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJCQkwRjYwRjMyOTFERkJCMTA0MDA0MTZENkMg
LyogQ29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21t
b25WTS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2NjMwMDc5QzVCMiAvKiBET01HQ091dHB1dENv
bnN0cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091
dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUxNkFEMjFGMzUyNTIwMDAzNEI2QkYgLyogRE9N
UHJvbWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdy
YXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIxRTAwMEQ4MTdFIC8qIERPTVdy
YXBwZXJXb3JsZC5oICovLApAQCAtMjc1NDcsNiArMjc1NTIsNyBAQAogCQkJCTUxOEY1MDA0MTk0
Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
ODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3Ry
YWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQTdDMUYxODgzMjJGQzAwQzk1NEI1IC8qIEpT
R2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgyQjc1MjExOThDQjZCMDBCRkIw
MDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTREMTRGMEMy
NzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0
Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJXZWJDb3Jl
SlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgorI2luY2x1ZGUg
PGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxv
Y2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQoVk0m
IHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50
KCJEb21vdXQiLCAiRE9NIE91dHB1dCBDb25zdHJhaW50IiwgQ29uc3RyYWludFZvbGF0aWxpdHk6
OlNlbGRvbUdyZXllZCkKKyAgICAsIG1fdm0odm0pCisgICAgLCBtX2NsaWVudERhdGEoY2xpZW50
RGF0YSkKKyAgICAsIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24odm0uaGVhcC5tdXRhdG9yRXhlY3V0
aW9uVmVyc2lvbigpKQoreworfQorCitET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1
dENvbnN0cmFpbnQoKQoreworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gRE9NR0NPdXRwdXRD
b25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgSGVhcCYgaGVhcCA9
IG1fdm0uaGVhcDsKKyAgICAgICAgICAgIAorICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25W
ZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgIAorICAgIG1fbGFzdEV4
ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3Rhc2tzLmlzRW1wdHkoKSk7CisgICAgbV9jbGllbnREYXRhLmZvckVh
Y2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCisgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNl
KSB7CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhl
YXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAgICBKU0Nl
bGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAgICAgICAg
ICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50
cyhjZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV90YXNrcy5hcHBlbmQoc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBh
cmFsbGVsKGZ1bmMpKTsKKyAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICByZXR1cm4gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0
cHV0Q29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIGZvciAoYXV0byYgdGFzayA6IG1fdGFza3MpCisgICAgICAgIHRhc2stPnJ1bih2aXNp
dG9yKTsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZmluaXNoUGFy
YWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgbV90YXNrcy5jbGVhcigpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25z
dHJhaW50Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNWTUNsaWVudERhdGE7CisK
K2NsYXNzIERPTUdDT3V0cHV0Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25zdHJh
aW50IHsKK3B1YmxpYzoKKyAgICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTVk1D
bGllbnREYXRhJik7CisgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOworICAgIAorcHJvdGVj
dGVkOgorICAgIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKEpTQzo6U2xv
dFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKEpT
Qzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3Zt
OworICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7CisgICAgdWludDY0X3QgbV9sYXN0
RXhlY3V0aW9uVmVyc2lvbjsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4+IG1fdGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxMiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAor
I2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgPGhlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4K
ICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29u
c3RyYWludC5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgotI2lu
Y2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFj
ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRl
IDxydW50aW1lL1ZNLmg+CkBAIC03NCw0MyArNzIsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjpp
bml0Tm9ybWFsV29ybGQoVk0qCiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcg
SlNWTUNsaWVudERhdGEoKnZtKTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8v
IH5WTSBkZWxldGVzIHRoaXMgcG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAiV2Vi
Q29yZSBPdXRwdXQgQ29uc3RyYWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RF
eGVjdXRpb25WZXJzaW9uID0gdm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAg
ICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFz
dEV4ZWN1dGlvblZlcnNpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlv
blZlcnNpb24oKTsKLQotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0
IGNvdW50IGhlcmUgb3Vyc2VsdmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMK
LSAgICAgICAgICAgIC8vIG9wYXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1p
bmF0aW9uIHlldC4gVGhlIHdheSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAgICAgIC8v
IGNvbnN0cmFpbnQgc29sdmVyIGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCi0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAu
bnVtT3BhcXVlUm9vdHMoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJh
bGxlbCEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAg
ICBjbGllbnREYXRhLT5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAgICAgICAg
ICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNw
YWNlLmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFw
Q2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0
cHV0Q29uc3RyYWludHMoY2VsbCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bVJldmlzaXRlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzbG90VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1
ZVJvb3RzKCkgLSBudW1PcGFxdWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtp
bmdDb25zdHJhaW50KFdURk1vdmUoY29uc3RyYWludCkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtp
bmdDb25zdHJhaW50KHN0ZDo6bWFrZV91bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0s
ICpjbGllbnREYXRhKSk7CiAgICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQg
PSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJy
YXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDaGls
ZExpc3RNdXRhdGlvblNjb3BlLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJD
b21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFs
Z29yaXRobXMuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIs
NyArMjE2MywxNCBAQCBFdmVudFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAK
IEV2ZW50VGFyZ2V0RGF0YSogTm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCkKIHsK
LSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7Cisg
ICAgLy8gTm90IGhvbGRpbmcgdGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBlZCBhY2Nl
bGVyYXRlcyBwYXJhbGxlbCBjb25zdHJhaW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8gY2FsbHMg
dGhpcyBmdW5jdGlvbiBmcm9tIG1hbnkgdGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWludCBzb2x2
aW5nIGNhbiBoYXBwZW4gd2l0aCB0aGUgd29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0b3BwZWQs
IGJ1dCBpZiB3ZSBkbyBpdCB3aXRoIGEgcnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5
IG1peGluZyBjb25zdHJhaW50CisgICAgLy8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJl
Zm9yZSwgdGhlIG1vc3QgbGlrZWx5IHRpbWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBsb2NrIGlz
IHdoZW4gdGhlCisgICAgLy8gd29ybGQgaXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xk
IHRoZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdv
cmxkCisgICAgLy8gbWVhbnMgdGhhdCB3ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFy
Z2V0IGRhdGEgbWFwLgorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrSWYoc19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2bSAmJiB2
bS0+aGVhcC53b3JsZElzUnVubmluZygpKTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRh
KCkgPyBldmVudFRhcmdldERhdGFNYXAoKS5nZXQodGhpcykgOiBudWxscHRyOwogfQogCkBAIC0y
MTcxLDYgKzIxNzksOSBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0
CiAgICAgaWYgKGhhc0V2ZW50VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2ZW50VGFy
Z2V0RGF0YU1hcCgpLmdldCh0aGlzKTsKIAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51
bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmco
KSk7CisKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9j
ayk7CiAgICAgc2V0SGFzRXZlbnRUYXJnZXREYXRhKHRydWUpOwogICAgIHJldHVybiAqZXZlbnRU
YXJnZXREYXRhTWFwKCkuYWRkKHRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJnZXREYXRh
PigpKS5pdGVyYXRvci0+dmFsdWU7CkBAIC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRhcmdldERh
dGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdl
dERhdGEoKQogeworICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2ZW50VGFy
Z2V0RGF0YU1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEyLTAxICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2
aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzOiBBZGQg
c3BsYXktbGF0ZW5jeSB0ZXN0LCBzaW5jZSB0aGlzIGNoYW5nZSBuZWVkZWQgdG8gYmUgY2FyZWZ1
bGx5IHZhbGlkYXRlZCB3aXRoIHRoYXQgYmVuY2htYXJrLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOiBBZGRlZC4gVGhpcyBoYXMgdW5pdCB0ZXN0
cyBvZiB0aGUgbmV3IGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmUuIFRoZSB0ZXN0cyBmb2N1cyBv
biBjb3JyZWN0bmVzcyB1bmRlciBzZXJpYWwgZXhlY3V0aW9uLCB3aGljaCBhcHBlYXJzIHRvIGJl
IGVub3VnaCBmb3Igbm93IChpdCdzIHNvIGVhc3kgdG8gY2F0Y2ggYSBjb25jdXJyZW5jeSBidWcg
YnkganVzdCBydW5uaW5nIHRoZSBHQykuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KwogMjAxNy0xMi0wMSAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS10gQWRkIFNhbXBsZU1hcC5jcHAgQVBJIHRlc3RzIHRvIENNYWtlCkluZGV4
OiBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkocmV2aXNpb24gMjI1NDAzKQorKysgVG9vbHMvU2Ny
aXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAg
TE9OR1NQSURFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhfUEFUSCA9IFBFUkZP
Uk1BTkNFVEVTVFNfUEFUSCArICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2OC12NiIKIFRBSUxC
RU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5jaDkwMDAiCiBNSUNS
T0JFTkNITUFSS1NfUEFUSCA9IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3RzIiArICJtaWNyb2Jl
bmNobWFya3MiCi1PQ1RBTkVfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsg
Ik9jdGFuZSIgKyAid3JhcHBlcnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRIID0gUEVSRk9STUFO
Q0VURVNUU19QQVRIICsgIk9jdGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEggPSBPUEVOU09VUkNF
X09DVEFORV9QQVRIICsgIndyYXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNU
U19QQVRIICsgIkpTQmVuY2giCiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRI
ICsgIlNpeFNwZWVkIiArICJ0ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1B
TkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04NDEsNiArODQyLDIw
IEBAIGNsYXNzIFNpbmdsZUZpbGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKICAgZW5kCiBlbmQK
IAorIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0IGJl
IGxvYWRlZCBpbiBpdHMgb3duIGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1bigp
KSwgYnV0IHJldHVybnMgaXRzIHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitjbGFzcyBTaW5nbGVG
aWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5jaFBh
dGgKKyAgCisgIGRlZiBpbml0aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVuY2hQYXRoID0gYmVu
Y2hQYXRoCisgIGVuZAorICAKKyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmlsZUN1c3RvbVRpbWVk
QmVuY2htYXJrCisgIGVuZAorZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2Ygb25l
IG9yIG1vcmUgZGF0YSBmaWxlcyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZvbGxv
d2VkCiAjIGJ5IGEgY29tbWFuZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNsYXNzIE11bHRpRmls
ZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1pdEJl
bmNoUnVuQ29kZUZpbGUobmFtZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCIgICAgaWYgKF9fYmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0pIHByaW50KFwiI3tu
YW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hlcl9pbmRl
eCAtICN7d2FybXVwfSkgKyBcIjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1bnMp
KTsiKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAgICAgICAgIGRvdWJs
ZVB1dHMoJHN0ZGVycixmaWxlLCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29tbWFuZC5qc30iKQor
ICAgICAgZWxzaWYgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVu
Y2htYXJrCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNo
ZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZp
bGUsIiAgIHZhciBfX2JlbmNoZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsiKQorICAgICAgICAk
cmVydW4udGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBydW4o
X19iZW5jaGVyX3doYXQsIF9fYmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAgIH0KKyAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVzdWx0LnZhbHVlID09
IG51bGwpIikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICAgIHRocm93IG5l
dyBFcnJvcihcIk51bGwgcmVzdWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCIgICByZXR1cm4gX19iZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAgICAgICBkb3VibGVQ
dXRzKCRzdGRlcnIsZmlsZSwifSIpCisgICAgICAgICR3YXJtdXAudGltZXMgeworICAgICAgICAg
IGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVu
Y2hQYXRoLmluc3BlY3R9KSIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdj
KCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KKyAgICAgICAg
JGlubmVyLnRpbWVzIHsKKyAgICAgICAgICB8IGlubmVySW5kZXggfAorICAgICAgICAgIGRvdWJs
ZVB1dHMoJHN0ZGVycixmaWxlLCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5p
dGVyYXRpb259OiAje2lubmVySW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7YmVuY2hQ
YXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSk7IikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRl
cnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAg
fQogICAgICAgZWxzZQogICAgICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9PSA6
c2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxl
LCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKQEAgLTE1OTQsNiAr
MTYyOCwxOSBAQCBjbGFzcyBPY3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQKIAorY2xhc3MgQ3Vz
dG9tVGltZWRCZW5jaG1hcmsKKyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0aWFs
aXplKG5hbWUsIGZ1bGxQYXRoKQorICAgIEBuYW1lID0gbmFtZQorICAgIEBmdWxsUGF0aCA9IGZ1
bGxQYXRoCisgIGVuZAorICAKKyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisgICAgZW1pdEJlbmNo
UnVuQ29kZShmdWxsbmFtZSwgcGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFy
YW1ldGVycy5uZXcoZW5zdXJlRmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0iLCBAZnVsbFBhdGgp
KSkKKyAgZW5kCitlbmQKKwogY2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGluY2x1ZGUgQmVuY2ht
YXJrCiAgIApAQCAtMzAxMCw2ICszMDU3LDcgQEAgYmVnaW4KICAgICB8IGFyZ3MgfAogICAgIE9D
VEFORS5hZGQgT2N0YW5lQmVuY2htYXJrLm5ldygqYXJncykKICAgfQorICBPQ1RBTkUuYWRkIEN1
c3RvbVRpbWVkQmVuY2htYXJrLm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVOU09VUkNFX09DVEFO
RV9QQVRIICsgInNwbGF5LmpzIikudG9fcykKIAogICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0ZS5u
ZXcoIktyYWtlbiIsIDphcml0aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0YXIiLCAiYXVkaW8t
YmVhdC1kZXRlY3Rpb24iLCAiYXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgc2V0
KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9CbG9v
bUZpbHRlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ1N0cmluZy5j
cHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNP
cGVyYXRpb25zLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25jdXJy
ZW50UHRySGFzaFNldC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29u
ZGl0aW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVh
ZFRhc2suY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRoLmNw
cApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBG
NSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3Jt
VXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQ
bGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0
aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMkMyMEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3
MURDRDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNwcCAqLzsgfTsKKwkJMEYzMENCNUMxRkNFMTc5NjAw
NEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAv
KiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJW
aWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovOyB9OwogCQkwRjRGRkE5RTFFRDNBQTg1MDBGNzEx
MUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25h
cHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gKi87IH07CiAJCTBGNTY1MUY3MUZDRTREREMwMDMx
MEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTY1MUY2MUZDRTREREIwMDMxMEZCQyAv
KiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5tbSAqLzsgfTsKQEAgLTEwNzIsNiArMTA3
Myw3IEBACiAJCTBGMTM5RTc1MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRyLm1tOyBwYXRo
ID0gY29jb2EvV2Vha09iakNQdHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTdCQkQ0MTVBRjZDNEQwMDdBQjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nl
c3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRp
c3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3
MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAvKiBTbmFw
c2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjRGRkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJTy5mcmFtZXdv
cmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFw
cGVyLmZyYW1ld29yazsgbmFtZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7
IH07CkBAIC0yNTkzLDYgKzI1OTUsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAv
KiBBdG9taWNTdHJpbmcuY3BwICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBC
bG9vbUZpbHRlci5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNr
ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNC
MDBDRTE3RjIgLyogQ29uZGl0aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIz
QzQgLyogQ3Jvc3NUaHJlYWRUYXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFB
MTQgLyogQ1N0cmluZy5jcHAgKi8sCkBAIC0zMTc5LDYgKzMxODIsNyBAQAogCQkJCTdDODNERUY2
MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAv
KiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1
NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMw
MEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5j
cHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3Vy
cmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRy
SGFzaFNldC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CisKK25hbWVzcGFjZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJpbmcgdGhhdCB0
ZWxscyB0aGlzIHRoaW5nIHdoYXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVy
IG9mIGNoYXJhY3RlcnMuCisvLyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21tYW5kcy4gQ29t
bWFuZHM6CisvLworLy8gK3ggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3RzICd4JyB0byBh
IHZvaWQqKSBhbmQgYXNzZXJ0cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFkZHMgJ3gnIHRv
IHRoZSBzZXQgYW5kIGFzc2VydHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4KKy8vID14ICAg
ICBBc3NlcnRzIHRoYXQgJ3gnIGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3NlcnRzIHRoYXQg
J3gnIGlzIG5vdCBpbiB0aGUgc2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBjb21tYW5kcykK
K3sKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25zdCBjaGFyKiBj
b21tYW5kID0gY29tbWFuZHM7IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29tbWFuZCArPSAy
KSB7CisgICAgICAgIHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
dWludHB0cl90Pihjb21tYW5kWzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZFswXSkgewor
ICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5hZGQocHRyKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICBFWFBF
Q1RfRkFMU0Uoc2V0LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICc9JzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVDVF9GQUxT
RShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAgICBkb1Rlc3Qo
IiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudCkK
K3sKKyAgICBkb1Rlc3QoIit4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJI
YXNoU2V0LCBBZGRPbmVFbGVtZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgh
eCF4IXgheCF4IXgheCF4IXg9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhh
c2hTZXQsIEFkZE9uZUVsZW1lbnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4
IXgheCF4IXgheCF4PXgteS0wIXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgiKTsKK30K
KworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzKQorewor
ICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3Mr
ZCtmK2craCtqK2srbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitH
K0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9
aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1Q
PUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25j
dXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7CisgICAgZG9U
ZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZyto
K2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0sr
TCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1h
PXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9
Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0
IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUh
SSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVch
RSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1
ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYh
YiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFN
ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWsh
bCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFY
IUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQh
ZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFI
IUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkh
byFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFB
IVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUh
ciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZ
IVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITgh
OSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFR
IVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMh
NCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFj
IXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIh
TiFNIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVt
ZW50c0FuZFF1ZXJ5U29tZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsy
KzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9
Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14
LWMtdi1iLW4tbS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYt
Qi1OLU0rbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitL
K0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9
YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1E
PUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50
UHRySGFzaFNldCwgQWRkU29tZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRUaGVSZXN0QW5k
UXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUr
Nis3KzgrOSswK3ErdytlK3IrdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0
ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIh
MyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCEx
ITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitnK2graitrPTE9
Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16
LXgtYy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMt
Vi1CLU4tTStsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtK
K0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89
cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1T
PUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328158</attachid>
            <date>2017-12-01 14:34:49 -0800</date>
            <delta_ts>2017-12-01 22:25:26 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>238109</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIEl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgYSBzbWFs
bAorICAgICAgICBTcGVlZG9tZXRlciBzcGVlZC11cCAoMC42OCUgZmFzdGVyIHdpdGggcCA9IDAu
MDM2KS4KKyAgICAgICAgCisgICAgICAgIFRoZSBjb25zdHJhaW50IHNvbHZlciBzdXBwb3J0cyBy
dW5uaW5nIGNvbnN0cmFpbnRzIGluIHBhcmFsbGVsIGluIHR3byBkaWZmZXJlbnQgd2F5czoKKyAg
ICAgICAgCisgICAgICAgIC4gQ29uc3RyYWludHMgdGhhdCBjYW4gdG9sZXJhdGUgb3RoZXIgY29u
c3RyYWludHMgcnVubmluZworICAgICAgICBjb25jdXJyZW50bHkgdG8gdGhlbSAoCisgICAgICAg
IAorICAgICAgICAtIFJ1biBtdWx0aXBsZSBjb25zdHJhaW50cyBpbiBwYXJhbGxlbCB0byBlYWNo
IG90aGVyLiBUaGlzIG9ubHkgd29ya3MgZm9yIGNvbnN0cmFpbnRzIHRoYXQgY2FuCisgICAgICAg
ICAgdG9sZXJhdGUgb3RoZXIgY29uc3RyYWludHMgcnVubmluZyBjb25jdXJyZW50bHkgdG8gdGhl
bSAoY29uc3RyYWludC5jb25jdXJyZW5jeSgpID09CisgICAgICAgICAgQ29uc3RyYWludENvbmN1
cnJlbmN5OjpDb25jdXJyZW50KS4gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBraW5kIG9mIHBhcmFs
bGVsaXNtIHRoYXQgdGhlCisgICAgICAgICAgY29uc3RyYWludCBzb2x2ZXIgc3VwcG9ydHMuIEFs
bCBjb25zdHJhaW50cyBleGNlcHQgdGhlIEpTQyBTUEkgY29uc3RyYWludHMgYXJlIGNvbmN1cnJl
bnQuIFdlCisgICAgICAgICAgY291bGQgcHJvYmFibHkgbWFrZSB0aGVtIGNvbmN1cnJlbnQsIGJ1
dCBJJ20gcGxheWluZyBpdCBzYWZlIGZvciBub3cuCisgICAgICAgIAorICAgICAgICAtIEEgY29u
c3RyYWludCBjYW4gY3JlYXRlIHBhcmFsbGVsIHdvcmsgZm9yIGl0c2VsZiwgd2hpY2ggdGhlIGNv
bnN0cmFpbnQgc29sdmVyIHdpbGwgaW50ZXJsZWF2ZQorICAgICAgICAgIHdpdGggb3RoZXIgcGFy
YWxsZWwgd29yayBmcm9tIG90aGVyIGNvbnN0cmFpbnRzLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9y
dCB0aGF0IGl0IGhhcyBwYXJhbGxlbAorICAgICAgICAgIHdvcmsgYnkgcmV0dXJuaW5nIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlv
bi4gVGhlbiB0aGUKKyAgICAgICAgICBzb2x2ZXIgd2lsbCBhbGxvdyB0aGF0IGNvbnN0cmFpbnQn
cyBkb1BhcmFsbGVsV29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJr
ZXIKKyAgICAgICAgICB0aHJlYWRzIGFzIGFyZSBhdmFpbGFibGUsIGZvciBhcyBsb25nIGFzIHRo
YXQgZnVuY3Rpb24gd2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9z
c2libGUgdG8gaGF2ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBh
cmFsbGVsIHdvcmsuCisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVt
ZW50ZWQgaW4gdGVybXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1
cm5zIG91dCB0byBiZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAg
ICAgICAKKyAgICAgICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAg
ICAgICAKKyAgICAgICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEg
U2xvdFZpc2l0b3IuIFRoZSBhd2Vzb21lIHRoaW5nIGFib3V0IHRoaXMgZGVzaWduIGlzIHRoYXQK
KyAgICAgICAgICB3ZSBkb24ndCBoYXZlIHRvIGVhZ2VybHkgbG9hZC1iYWxhbmNlIHRoZSB3b3Jr
IGNyZWF0ZWQgYnkgdGhlIHNvbHZlci4gVGhlIHNvbHZlciB3aWxsIGNyZWF0ZQorICAgICAgICAg
IHdvcmsgb24gdGhlIGxvY2FsIHRocmVhZCdzIFNsb3RWaXNpdG9yLiBXaGVuIHRoZSBzb2x2ZXIg
aXMgZG9uZSAic3RlYWxpbmciIHRoZSBtYXJrZXIgdGhyZWFkLAorICAgICAgICAgIHRoYXQgdGhy
ZWFkIHdpbGwgaGF2ZSB3b3JrIGl0IGNhbiBzdGFydCBkb2luZyBhcyBzb29uIGFzIHdlIHN0YXJ0
IGRyYWluaW5nLiBCZWZvcmUgdGhpcyBjaGFuZ2UsCisgICAgICAgICAgd2UgaGFkIHRvIGNvbnRy
aWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkgdGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9i
YWwgd29ya2xpc3Qgc28gdGhhdCBpdAorICAgICAgICAgIGNvdWxkIGJlIGRpc3RyaWJ1dGVkIHRv
IHRoZSBtYXJrZXIgdGhyZWFkcyBieSBsb2FkIGJhbGFuY2luZy4gSXQncyBsaWtlbHkgdGhhdCB0
aGUgZ2xvYmFsLQorICAgICAgICAgIHdvcmtsaXN0LWJhc2VkIGxvYWQgYmFsYW5jZXIgd2lsbCBo
YXZlIHRvIGtpY2sgaW4gc2hvcnRseSBhZnRlciBjb25zdHJhaW50IHNvbHZpbmcgc2luY2UgdGhl
CisgICAgICAgICAgc29sdmVyJ3MgbG9hZCBiYWxhbmNlciBtYWtlcyBubyBhdHRlbXB0IHRvIGJh
bGFuY2Ugd29yayBwcm9kdWNlZCAoaXQncyBvbmx5IGJhbGFuY2luZyB0aW1lCisgICAgICAgICAg
c3BlbnQpLiBCdXQgdGhpcyBzbWFsbCBvcHBvcnR1bml0eSB0byBhdm9pZCBsb2FkIGJhbGFuY2lu
ZyBtaWdodCBiZSBjb250cmlidXRpbmcgYSBiaXQgdG8gdGhlCisgICAgICAgICAgc3BlZWQtdXAu
CisgICAgICAgIAorICAgICAgICBBIGxvdCBvZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcg
aXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEgc3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcwor
ICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFi
bGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0
aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQgY29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2Vk
IGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRoaXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZl
cnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVsIGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxs
b2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMuCisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJh
bGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBvdXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0
aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAgICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0
b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5leHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0
IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4u
IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9u
ZQorICAgICAgICB3aGVuIGl0IHJldHVybnMgYSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0
aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAg
ICBkb25lIGlzIGluZGljYXRlZCBieSBudWxsKS4KKworICAgICAgICAqIEFQSS9KU01hcmtpbmdD
b25zdHJhaW50UHJpdmF0ZS5jcHA6CisgICAgICAgIChKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdD
b25zdHJhaW50KToKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbToKKyAgICAgICAg
KHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKToKKyAgICAgICAgKHNjYW5FeHRlcm5hbFJlbWVtYmVy
ZWRTZXQpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnZpc2l0V2Vha2x5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKToKKyAgICAgICAgKEpTQzo6c2hvdWxkTWFya1RyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RG
R1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20u
aDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5GaXhwb2ludFBo
YXNlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcFRoZVBlcmlwaGVyeSk6CisgICAgICAgIChK
U0M6OkhlYXA6OnJlc3VtZVRoZVBlcmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENv
cmVDb25zdHJhaW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnNldEJvbnVzVmlzaXRvclRhc2sp
OgorICAgICAgICAoSlNDOjpIZWFwOjpydW5UYXNrSW5QYXJhbGxlbCk6CisgICAgICAgIChKU0M6
OkhlYXA6OmZvckVhY2hTbG90VmlzaXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFw
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndvcmxkSXNSdW5uaW5nIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6cnVuRnVuY3Rpb25JblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL0hlYXBJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndvcmxkSXNTdG9wcGVkIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjppbmNyZW1l
bnREZWZlcnJhbERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lm
TmVlZGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZSk6CisgICAgICAgICogaGVh
cC9MYXJnZUFsbG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01h
cmtlZCk6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6aXNNYXJrZWRDb25jdXJyZW50
bHkpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTG9ja0R1cmluZ01hcmtpbmcuaDoKKyAgICAg
ICAgKEpTQzo6bG9ja0R1cmluZ01hcmtpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5
QmxvY2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAg
ICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRU
b01hcmspOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWQpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjphY3RpdmVXZWFrU2V0c0JlZ2luKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFj
dGl2ZVdlYWtTZXRzRW5kKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Om5ld0FjdGl2ZVdl
YWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50Ojp3b3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9Q
YXJhbGxlbFdvcmspOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFy
YWxsZWxXb3JrKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxX
b3JrSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxl
bFdvcmtJbXBsKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpsYXN0RXhlY3V0ZVBhcmFsbGVsaXNtIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnBhcmFsbGVsaXNtIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHA6CisgICAgICAgIChK
U0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCk6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwpOgorICAgICAgICAoSlNDOjpN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpFeGVjdXRpb25Db250ZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OnNob3VsZFRpbWVPdXQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29u
dGV4dDo6ZHJhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNl
dDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkRXhlY3V0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpleGVjdXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29u
c3RyYWludFNldC5oOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6Ok1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
On5NYXJraW5nQ29uc3RyYWludFNvbHZlcik6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpkaWRWaXNpdFNvbWV0aGluZyBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OmRyYWluKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OmNvbnZlcmdlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1
bkV4ZWN1dGlvblRocmVhZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVy
OjpkaWRFeGVjdXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmg6
IEFkZGVkLgorICAgICAgICAqIGhlYXAvT3BhcXVlUm9vdFNldC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGhlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQ
YXJhbGxlbFNvdXJjZUFkYXB0ZXI6OlBhcmFsbGVsU291cmNlQWRhcHRlcik6CisgICAgICAgIChK
U0M6OmNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcik6CisgICAgICAgICogaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5n
Q29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAg
KEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToKKyAgICAg
ICAgKEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKToKKyAgICAgICAg
KiBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAv
U2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJr
aW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dXBkYXRlTXV0
YXRvcklzU3RvcHBlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9w
cGVkSXNVcFRvRGF0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluSW5Q
YXJhbGxlbFBhc3NpdmVseSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVy
bWluYXRpb24pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVS
b290VHJpU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpt
ZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xv
dFZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29uc3QpOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6dm0pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0gY29uc3QpOgorICAgICAg
ICAqIGhlYXAvU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxB
bGxvY2F0b3JTb3VyY2UpOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0
eU1hcmtlZEJsb2NrU291cmNlKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAg
ICogaGVhcC9TdWJzcGFjZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbCk6CisgICAgICAgICogaGVhcC9WaXNpdENvdW50ZXIuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OlZpc2l0Q291bnRlcjo6VmlzaXRDb3VudGVyKToKKyAgICAg
ICAgKEpTQzo6VmlzaXRDb3VudGVyOjp2aXNpdENvdW50IGNvbnN0KToKKyAgICAgICAgKiBoZWFw
L1Zpc2l0aW5nVGltZW91dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6V2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNDaGVh
cER1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXJrSWZDaGVhcCk6CisKIDIw
MTctMTEtMzAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAg
ICAgW0pTQ10gVXNlIEpTRml4ZWRBcnJheSBmb3Igb3BfbmV3X2FycmF5X2J1ZmZlcgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDUsOCArNTA1LDEw
IEBAIGhlYXAvTWFya2VkQmxvY2suY3BwCiBoZWFwL01hcmtlZFNwYWNlLmNwcAogaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5jcHAKIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCitoZWFwL01h
cmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAogaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAogaGVh
cC9NdXRhdG9yU3RhdGUuY3BwCitoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAogaGVh
cC9TbG90VmlzaXRvci5jcHAKIGhlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKIGhl
YXAvU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2
YXRlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDcgQEAKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKLSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQu
aCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCkBAIC03MiwxMSArNzEsMTEgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtp
bmdDb25zdHJhaW50KAogICAgIC8vIGVsc2UgZ2V0cyBtYXJrZWQuCiAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSA9IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtp
bmc7CiAgICAgCi0gICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5n
Q29uc3RyYWludD4oCisgICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxTaW1w
bGVNYXJraW5nQ29uc3RyYWludD4oCiAgICAgICAgIHRvQ1N0cmluZygiQW1jIiwgY29uc3RyYWlu
dEluZGV4LCAiKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2Fs
bGJhY2spKSwgIikiKSwKICAgICAgICAgdG9DU3RyaW5nKCJBUEkgTWFya2luZyBDb25zdHJhaW50
ICMiLCBjb25zdHJhaW50SW5kZXgsICIgKCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQq
Pihjb25zdHJhaW50Q2FsbGJhY2spKSwgIiwgIiwgUmF3UG9pbnRlcih1c2VyRGF0YSksICIpIiks
CiAgICAgICAgIFtjb25zdHJhaW50Q2FsbGJhY2ssIHVzZXJEYXRhXQotICAgICAgICAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIE1hcmtlciBtYXJrZXI7CiAg
ICAgICAgICAgICBtYXJrZXIuSXNNYXJrZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAgIG1hcmtl
ci5NYXJrID0gbWFyazsKQEAgLTg0LDcgKzgzLDggQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1h
cmtpbmdDb25zdHJhaW50KAogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2Fs
bGJhY2soJm1hcmtlciwgdXNlckRhdGEpOwogICAgICAgICB9LAotICAgICAgICB2b2xhdGlsaXR5
KTsKKyAgICAgICAgdm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5OjpT
ZXF1ZW50aWFsKTsKICAgICAKICAgICB2bS5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdURk1v
dmUoY29uc3RyYWludCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zp
cnR1YWxNYWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsOSAr
MjgzLDggQEAgc3RhdGljIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOgogICAgICAg
ICB3aGlsZSAoIXN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgdm9pZCogbmV4dFJvb3Qg
PSBzdGFjay5sYXN0KCk7CiAgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
ICAgICBpZiAodmlzaXRvci5jb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZShuZXh0Um9vdCkgPT0g
VHJ1ZVRyaVN0YXRlKQorICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4
dFJvb3QpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KG5leHRSb290KTsKIAogICAgICAgICAgICAgYXV0byBhcHBlbmRPd25lZE9i
amVjdHMgPSBbJl0gewogICAgICAgICAgICAgICAgIE5TTWFwVGFibGUgKm93bmVkT2JqZWN0cyA9
IFtleHRlcm5hbE9iamVjdEdyYXBoIG9iamVjdEZvcktleTpzdGF0aWNfY2FzdDxpZD4obmV4dFJv
b3QpXTsKQEAgLTMyNyw4ICszMjYsNiBAQCB2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQo
SlNDOjpWTSYgCiAgICAgICAgIH0KICAgICAgICAgW2V4dGVybmFsUmVtZW1iZXJlZFNldCByZW1v
dmVBbGxPYmplY3RzXTsKICAgICB9Ci0KLSAgICB2aXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsK
IH0KIAogI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTEyOCw3ICsxMjgsNiBAQAogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91
YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5o
ICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJT
YXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAq
LzsgfTsKIAkJMEYxRkIzOEYxRTE3M0E2NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdv
cmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwotCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJF
NTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYx
RkIzOTYxRTFBRjdFMTAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAg
LyogREZHUGxhbklubGluZXMuaCAqLzsgfTsKIAkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8q
IERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxRkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5l
cy5oICovOyB9OwogCQkwRjFGQjM5OTFFMUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIz
OTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKQEAgLTI5MSw2
ICsyOTAsNyBAQAogCQkwRjQwRTRBNzFDNDk3Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzMjFDNDVG
MzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MEU0QTgxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29k
ZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDBFNEE5MUM0
OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9w
Y29kZVV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY0MTU0NUIxRkQyMEIyMjAwMUI1OEY2IC8qIENvbnN0cmFpbnRDb25jdXJyZW5jeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MTU0NUEx
RkQyMEIxRjAwMUI1OEY2IC8qIENvbnN0cmFpbnRDb25jdXJyZW5jeS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEz
MUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2
QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAv
KiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNEExNDYw
Q0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzEyLDYgKzMxMiw5IEBACiAJCTBGNEEzOEZBMUM4RTEz
REYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBs
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMERE
MDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdp
bkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhD
NzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZp
c2l0Q291bnRlci5oICovOyB9OworCQkwRjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3Ry
YWludFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0
RDhDNzgxRkNBM0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0Yz
MDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEg
LyogQWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNT
cGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRF
MDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUyRkZE
REIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0Niw2ICs0
NDksOCBAQAogCQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFB
RTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi87IH07CiAJCTBGOUQ0QzBEMUMz
RTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBG
VExFeGNlcHRpb25UYXJnZXQuaCAqLzsgfTsKIAkJMEY5RDRDMTExQzNFMkM3NDAwNkNEOTg0IC8q
IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi87IH07CisJCTBGOURBQTA5MUZEMUMzQ0YwMDc5QzVC
MiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyLmggKi87IH07CisJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQ
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFk
YXB0ZXIuaCAqLzsgfTsKIAkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFy
cmllckluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0
YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmgg
Ki87IH07CiAJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBE
NTJBRTAgLyogUHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xNDk5LDcgKzE1MDQsNiBAQAogCQlBRDlFODUyRjFFOEEwQzdDMDA4REUz
OUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBREJDNTRENTFERjhFQTJCMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2Fs
bGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREJD
NTREMzFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi87IH07CiAJ
CUFERDhGQTQ2MUVCMzA3OTcwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDhGQTQzMUVCMzA3
NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLzsgfTsKLQkJQUREQjFGNjMx
OEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFx
dWVSb290U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk0
MUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUExRTA4RjFERTAw
NThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk1MUUwOEYxQzkwMDU4REU3
OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUMxRTA4RjFERTAwNThERTc4
IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5NzFFMDhGMUM5MDA1OERFNzggLyogV2Vi
QXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk4MSw3ICsxOTg1LDYgQEAKIAkJMEYxRkIzOEExRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BU
aGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9u
b3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUw
IC8qIFZpc2l0aW5nVGltZW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
aXNpdGluZ1RpbWVvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTQx
RTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHUGxhbklubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTUxRTFBRjdERjAwQTlCRTUw
IC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8q
IE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0
YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIzNCw2ICsy
MjM3LDcgQEAKIAkJMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQu
Y3BwOyBwYXRoID0gZGZnL0RGR0luc2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xv
YmJlcnNFeGl0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xv
YmJlcnNFeGl0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29u
c3RyYWludENvbmN1cnJlbmN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bnN0cmFpbnRDb25jdXJyZW5jeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQy
NkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9y
bWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNzAsNiArMjI3NCwxMCBAQAogCQkwRjRBMzhG
ODFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN1cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2lu
RHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsg
cGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMy
QUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0Mx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5jcHA7IHBhdGggPSBi
My9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuaDsgcGF0
aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBCM09yaWdpbkR1bXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW5EdW1wLmNwcDsgcGF0aCA9
IGIzL0IzT3JpZ2luRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTAz
LDYgKzI1MTEsOSBAQAogCQkwRjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9u
VGFyZ2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4Y2VwdGlvblRh
cmdldC5oOyBwYXRoID0gZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjlENEMwRTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcDsgcGF0aCA9IGZ0bC9GVExQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDRD
MEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZS5oOyBwYXRoID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U29sdmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVC
MiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOUUzMjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlFMzI2MjFCMDVB
QjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsg
cGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGFj
a0xheW91dFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNjcsNyArNDI3OCw2IEBACiAJCUFERDA5QUYz
MUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2Vi
QXNzZW1ibHkuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25Q
YXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDQxRUIzMDc3MTAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjkzMUUwOEYxQzkwMDU4REU3OCAvKiBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJs
eUxpbmtFcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk0MUUw
OEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaDsgcGF0aCA9IGpzL0pT
V2ViQXNzZW1ibHlMaW5rRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURF
ODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JD
b25zdHJ1Y3Rvci5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUxNyw2ICs1NTI3LDggQEAKIAkJCQkw
RkRDRTEyODFGQUZBODU5MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oICovLAogCQkJCTE0
NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJ
MTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCisJCQkJ
MEY0MTU0NUExRkQyMEIxRjAwMUI1OEY2IC8qIENvbnN0cmFpbnRDb25jdXJyZW5jeS5oICovLAor
CQkJCTBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAq
LywKIAkJCQkwRjdERjEyRjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHku
aCAqLywKIAkJCQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJ
CQkJMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU2MTEsMTcg
KzU2MjMsMjEgQEAKIAkJCQkwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0
cmFpbnQuaCAqLywKIAkJCQkwRjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0
cmFpbnRTZXQuY3BwICovLAogCQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5n
Q29uc3RyYWludFNldC5oICovLAorCQkJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5jcHAgKi8sCisJCQkJMEY5REFBMDcxRkQxQzNDODAwNzlDNUIy
IC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggKi8sCiAJCQkJMTQyRDZGMEUxMzUzOUE0MTAw
QjAyRTg2IC8qIE1hcmtTdGFjay5jcHAgKi8sCiAJCQkJMTQyRDZGMEYxMzUzOUE0MTAwQjAyRTg2
IC8qIE1hcmtTdGFjay5oICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5QkU1MCAvKiBNdXRh
dG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0
YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRh
dG9yU3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9y
U3RhdGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNl
dC5oICovLAorCQkJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFk
YXB0ZXIuaCAqLywKIAkJCQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyogUHJldmVudENvbGxl
Y3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIwOCAvKiBSZWdpc3Rl
clN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFw
QWNjZXNzU2NvcGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyogUnVubmlu
Z1Njb3BlLmggKi8sCisJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTgg
LyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBT
bG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90Vmlz
aXRvcklubGluZXMuaCAqLywKQEAgLTU2NDMsNyArNTY1OSw3IEBACiAJCQkJMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAq
LywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXpl
ci5oICovLAotCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQu
aCAqLywKKwkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8s
CiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8sCiAJ
CQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovLAogCQkJCTFB
Q0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgwMDAsNiArODAxNiw3
IEBACiAJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNUNGOTg5MUU5RUQ2NTIwMEMxODY5MiAvKiBBaXJTdGFja0FsbG9jYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
dGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDE1NDVCMUZEMjBCMjIwMDFCNThGNiAv
KiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJCRDlFMUM1
RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC04MjAwLDYgKzgyMTcsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBC
eXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAv
KiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzUxRkM3QTk3
RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBp
biBIZWFkZXJzICovLApAQCAtODc2OCw2ICs4Nzg2LDcgQEAKIAkJCQkwRjJCNjZFNTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEQUEwOTFGRDFDM0NGMDA3OUM1QjIgLyog
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTE2LDYgKzg5MzUsNyBAQAogCQkJCUE3NDgyRTkzMTE2
QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBK
U1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMy
QUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2
MDAzOUQwNjkgLyogSlNXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFQjFGNzVB
RDczMDAwQkNBQUYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1
MkYxRThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJz
ICovLApAQCAtOTAzNSw5ICs5MDU1LDkgQEAKIAkJCQlFM0MyOTVERDFFRDJDQkRBMDBEMzAxNkYg
LyogT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRDNFNDBBMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjREOEM3ODFGQ0Ez
Q0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDQ2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPYmplY3RQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJv
b3RTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBP
cGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBP
cGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8q
IE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjQzLDYgKzkyNjMsNyBAQAog
CQkJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFw
dG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEQUEwQTFGRDFDM0Qz
MDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBl
LmggaW4gSGVhZGVycyAqLywKQEAgLTkyODMsNyArOTMwNCw2IEBACiAJCQkJMEY2QzczNTExQUM5
Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkUwNTAyRDFBQTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1l
b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlz
aXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAg
LyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBW
TUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIwLDcgKzMyMCw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2wKIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAg
ICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSkpCisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
KSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAy
MjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTcyLDcgKzk3Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdl
YWtseShTbG90VmlzaXRvciYKICAgICAKICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9
IHRydWU7CiAKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAg
aWYgKEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hv
dWxkVmlzaXRTdHJvbmdseShsb2NrZXIpKSB7CkBAIC0xMTI0LDcgKzExMjQsNyBAQCBzdGF0aWMg
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lVG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91
bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAg
aWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01h
cmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEzOSwx
MCArMTEzOSwxMCBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAj
aWYgRU5BQkxFKERGR19KSVQpCiBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6
OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0
aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlv
bi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAm
JiAhSGVhcDo6aXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFu
c2l0aW9uLm1fZnJvbS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTExNzIsNyArMTE3Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAg
aWYgKEhlYXA6OmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0x
MjQ2LDE0ICsxMjQ2LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25z
dCAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNl
cy5zaXplKCk7ICsraSkgewogICAgICAgICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+
d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxD
b2RlQmxvY2sqPigqcmVmZXJlbmNlLT52bSgpLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghSGVh
cDo6aXNNYXJrZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYWxs
QXJlTGl2ZVNvRmFyKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21t
b24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJl
ZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRm
Z0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMyArMTA0LDEzIEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgICAgIGRhdGFMb2cobV93b3JrbGlzdCwgIjogQ29tcGlsaW5nICIsIG1fcGxh
bi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gVGhl
cmUncyBubyB3YXkgZm9yIHRoZSBHQyB0byBiZSBzYWZlcG9pbnRpbmcgc2luY2Ugd2Ugb3duIHJp
Z2h0VG9SdW4uCi0gICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVz
VGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAu
d29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiSGVhcCBpcyBzdG9wZWQg
YnV0IGhlcmUgd2UgYXJlISAoMSlcbiIpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZCgm
bV9kYXRhKTsKICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UgIT0gUGxhbjo6Q2FuY2VsbGVkKSB7
Ci0gICAgICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC53
b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGVhcCBpcyBzdG9w
cGVkIGJ1dCBoZXJlIHdlIGFyZSEgKDIpXG4iKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQpAQCAtMTMwLDcgKzEzMCw3IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3JlYWR5UGxh
bnMuYXBwZW5kKG1fcGxhbik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9w
cGVkKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAud29y
bGRJc1N0b3BwZWQoKSk7CiAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcGxhbkNvbXBpbGVkLm5v
dGlmeUFsbCgpOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3
IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmIChz
YWZlcG9pbnRSZXN1bHQuZGlkR2V0Q2FuY2VsbGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBS
RUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgubV92bS5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5t
X3ZtLmhlYXAud29ybGRJc1N0b3BwZWQoKSk7CiAgICAgCiAgICAgaWYgKHN0YXRlLmFsbG9jYXRp
b25GYWlsZWQpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvbnN0cmFpbnRDb25jdXJyZW5jeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRDb25jdXJyZW5jeS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRDb25jdXJyZW5jeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFz
cyBDb25zdHJhaW50Q29uY3VycmVuY3kgOiB1aW50OF90IHsKKyAgICBTZXF1ZW50aWFsLAorICAg
IENvbmN1cnJlbnQKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpD
b25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3kpCit7CisgICAgc3dpdGNoIChjb25jdXJy
ZW5jeSkgeworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50Q29uY3VycmVuY3k6OlNlcXVlbnRpYWw6
CisgICAgICAgIG91dC5wcmludCgiU2VxdWVudGlhbCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBKU0M6OkNvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudDoKKyAgICAgICAgb3V0
LnByaW50KCJDb25jdXJyZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFp
bnRQYXJhbGxlbGlzbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBDb25zdHJhaW50UGFyYWxsZWxpc20gOiB1aW50OF90
IHsKKyAgICBTZXF1ZW50aWFsLAorICAgIFBhcmFsbGVsCit9OworICAgIAorfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQor
eworICAgIHN3aXRjaCAocGFyYWxsZWxpc20pIHsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBh
cmFsbGVsaXNtOjpTZXF1ZW50aWFsOgorICAgICAgICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206OlBh
cmFsbGVsOgorICAgICAgICBvdXQucHJpbnQoIlBhcmFsbGVsIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgxLDcgKzI4MSw3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBo
ZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xv
dFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0YWNrKHN0ZDo6bWFr
ZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJrU3RhY2soc3RkOjpt
YWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3RyYWludFNldChzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwgbV9jb25zdHJhaW50
U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0aGlzKSkKICAgICAs
IG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29k
ZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxK
SVRTdHViUm91dGluZVNldD4oKSkKQEAgLTkxMSw3ICs5MTEsNyBAQCB2b2lkIEhlYXA6OmFkZFRv
UmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkKys7CiAgICAg
aWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAg
IGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8vIER1cmluZyBhIGZ1bGwgY29s
bGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2aXZl
ZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3Rv
cmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmplY3QuIElmIHRoZQogICAgICAgICAg
ICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQg
d2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0LDE1ICs5MjQsMTUgQEAgdm9p
ZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgICAgICAgICAgICAgIC8v
IE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAgICAgICAgICAgICAgIC8vCiAg
ICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMgb3V0IGJsYWNrICsgdW5tYXJr
ZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZENvbmN1cnJlbnRs
eSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWQgaGVyZS4K
ICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1hcmtlZCBhbmQgZ3JleWVkLgog
ICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nhbm5lZCBhbmQgYmxhY2tlZC4K
ICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNl
bGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAg
Ly8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUgb2JqZWN0IHdoaXRlIGFnYWlu
LCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAgICAgICAvLyBiZSBibGFjay4gVGhp
cyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRoaXMgcmVsaWVzIG9uIHRoZSBm
YWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtlZENvbmN1cnJlbnRseSBjb252ZXJn
ZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZENv
bmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkIGNvbnZlcmdl
cyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNl
bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlmZmljdWx0IHRvIHdvcmsgb3V0
IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBibGFjayBhdAogICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sgY29uc2VydmF0aXZlbHkuCiAg
ICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5
QmxhY2spOwpAQCAtOTQ4LDcgKzk0OCw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0
KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZQot
ICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgICAg
ICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQg
dGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0
b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0ZWx5R3JleSBhbmQgdGhlbiB0
byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvCiAgICAg
Ly8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBpcyBh
Y2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0xMjY1LDYgKzEyNjUsOCBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgCiAgICAgU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yID0gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgCisgICAg
bV9vcGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAKICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSkgewogICAgICAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBzaXplX3Q+IHZpc2l0TWFw
OwogICAgICAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCkBAIC0xMjg3LDEwICsxMjg5LDYgQEAgTkVW
RVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAgICAgCiAgICAg
ICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgCi0gICAgICAg
IHNsb3RWaXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgZm9yIChhdXRvJiBwYXJh
bGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICAgICAgcGFyYWxs
ZWxWaXNpdG9yLT5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKICAgICAgICAgLy8g
RklYTUU6IFRha2UgbV9tdXRhdG9yRGlkUnVuIGludG8gYWNjb3VudCB3aGVuIHNjaGVkdWxpbmcg
Y29uc3RyYWludHMuIE1vc3QgbGlrZWx5LAogICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIGV4
ZWN1dGUgcm9vdCBjb25zdHJhaW50cyBhZ2FpbiB1bmxlc3MgdGhlIG11dGF0b3IgZGlkIHJ1bi4g
QXQgYQogICAgICAgICAvLyBtaW5pbXVtLCB3ZSBjb3VsZCB1c2UgdGhpcyBmb3Igd29yayBlc3Rp
bWF0ZXMgLSBidXQgaXQncyBwcm9iYWJseSBtb3JlIHRoYW4ganVzdCBhbgpAQCAtMTMwNSw3ICsx
MzAzLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAg
ICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVhcDo6YWRkQ29yZUNvbnN0
cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAgICAgICAvLyBhZGQgdGhl
aXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCkuCiAgICAgICAgIGJvb2wg
Y29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdl
bmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgICAg
IG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yKTsKICAgICAg
ICAgaWYgKGNvbnZlcmdlZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5n
ZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNlOjpFbmQpOwpAQCAtMTUyNiw3ICsxNTI0LDcgQEAg
TkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogCiB2b2lkIEhlYXA6OnN0
b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgY29ubikKIHsKLSAgICBpZiAobV9jb2xsZWN0b3JC
ZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmIChtX3dvcmxkSXNTdG9wcGVk
KSB7CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiB3b3JsZCBhbHJlYWR5IHN0b3BwZWQuXG4iKTsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNTM3LDcg
KzE1MzUsNyBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgCiAgICAg
bV9tdXRhdG9yRGlkUnVuID0gZmFsc2U7CiAKICAgICBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7
Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IHRydWU7Cisg
ICAgbV93b3JsZElzU3RvcHBlZCA9IHRydWU7CiAKICAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCiAg
ICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CkBAIC0xNTc0LDExICsxNTcy
LDExIEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OnJlc3VtZVRoZVBlcmlwaGUKICAgICAKICAg
ICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAwOwogICAgIAotICAgIGlmICghbV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmICghbV93b3JsZElzU3RvcHBlZCkg
ewogICAgICAgICBkYXRhTG9nKCJGYXRhbDogY29sbGVjdG9yIGRvZXMgbm90IGJlbGlldmUgdGhh
dCB0aGUgd29ybGQgaXMgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNT
dG9wcGVkID0gZmFsc2U7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIAogICAg
IC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZDogd2Ugd2FudCB0byBncmFi
IHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQogICAgIC8vIGJlY29tZSBhdmFp
bGFibGUuIFdlIGJhc2ljYWxseSB3YW50IGEgbG9ja0FueSgpIG1ldGhvZCB0aGF0IHdpbGwgbG9j
ayB3aGF0ZXZlciBsb2NrIGlzIGF2YWlsYWJsZQpAQCAtMjU3OCw3ICsyNTc2LDcgQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAog
ICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgVGltaW5nU2Nv
cGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZh
dGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2
YXRpdmVTY2FuKCk7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVS
b290cygqdGhpcyk7CkBAIC0yNTkyLDcgKzI1OTAsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3Ii
LCAiTWlzYyBTbWFsbCBSb290cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAg
ICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRp
ZgpAQCAtMjYxMyw3ICsyNjExLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhh
bmRsZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikgewogICAgICAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RW
aXNpdG9yKTsKICAgICAgICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwog
ICAgICAgICB9LApAQCAtMjYyMSw3ICsyNjE5LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJE
ZWJ1Z2dlciIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yKSB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYg
KFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2Zp
bGVyKCkpIHsKICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2Zp
bGVyLT5nZXRMb2NrKCkpOwpAQCAtMjY0MSwyMSArMjYzOSwyMSBAQCB2b2lkIEhlYXA6OmFkZENv
cmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJKc3IiLCAiSklUIFN0dWIgUm91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGlu
ZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAg
ICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAg
ICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVy
ZW5jZSBIYXJ2ZXN0ZXJzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ciogY3VycmVudCA9IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0
V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjYy
LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCiAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgo
aSkudmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2
ODQsNyArMjY4Miw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAg
ICAgICAgICAgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9s
ZGluZ0xvY2tzKAogICAgICAgICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFp
bnQgb25seSBpZiBpdCdzIGJsYWNrLgpAQCAtMjY5Nyw3ICsyNjk1LDEwIEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIk1ybXMiLCAiTXV0YXRvcitSYWNlIE1hcmsgU3RhY2siLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgeworICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgbmVlZHMgdG8gZ3JhYiBsb2NrcyB0byBmaWRkbGUgd2l0aCB0aGUgbXV0YXRv
ciBtYXJrIHN0YWNrIGFuZCB0aGUgcmFjZSBzdGFjay4KKyAgICAgICAgICAgIC8vIFRoZSBjaGFu
Y2VzIG9mIGNvbnRlbnRpb24gb24gdGhvc2UgbG9ja3MgYXJlIHNsaW0sIGJ1dCB3ZSBzaG91bGQg
ZG8gaXQgYW55d2F5LgorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0
aGUgZml4cG9pbnQgdGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCiAgICAgICAgICAgICBzaXplX3Qg
c2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXpl
KCk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CkBAIC0y
Nzk0LDE2ICsyNzk1LDYgQEAgdm9pZCBIZWFwOjphbGxvd0NvbGxlY3Rpb24oKQogICAgIG1fY29s
bGVjdENvbnRpbnVvdXNseUxvY2sudW5sb2NrKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Ci12b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQotewot
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0g
ICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xv
dFZpc2l0b3IpOwotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzKQotICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0
TXV0YXRvclNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9tdXRhdG9yU2hvdWxk
QmVGZW5jZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCArMjgzOCwyNCBAQCB2b2lkIEhlYXA6OnJlbW92
ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJl
bW92ZUZpcnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBIZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgbV9ib251c1Zpc2l0b3JU
YXNrID0gdGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsK
K30KKwordm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KFNsb3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxSZWZDb3VudCA9
IHRhc2stPnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayh0YXNrKTsKKyAgICB0
YXNrLT5ydW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIHNldEJvbnVzVmlzaXRvclRh
c2sobnVsbHB0cik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFy
a2luZ011dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2stPnJlZkNvdW50KCkgPiBpbml0aWFsUmVm
Q291bnQpCisgICAgICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KG1fbWFy
a2luZ011dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5j
bHVkZSAiV2Vha0hhbmRsZU93bmVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ci5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQ29u
Y3VycmVudFB0ckhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMTE0LDcg
KzExNSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc190aW1lQ2hlY2tS
ZXNvbHV0aW9uID0gMTY7CiAKICAgICBzdGF0aWMgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKik7
Ci0gICAgc3RhdGljIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCopOwogICAg
IHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24sIGNvbnN0IHZvaWQqKTsK
ICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0IHZvaWQqKTsKQEAgLTE1NCw3
ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAgTXV0YXRvclN0YXRlIG11dGF0b3JTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbXV0YXRvclN0YXRlOyB9CiAgICAgc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9u
U2NvcGU+IGNvbGxlY3Rpb25TY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdGlvblNjb3Bl
OyB9CiAgICAgYm9vbCBoYXNIZWFwQWNjZXNzKCkgY29uc3Q7Ci0gICAgYm9vbCBjb2xsZWN0b3JC
ZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpIGNvbnN0OworICAgIGJvb2wgd29ybGRJc1N0
b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNSdW5uaW5nKCkgY29uc3QgeyByZXR1cm4g
IXdvcmxkSXNTdG9wcGVkKCk7IH0KIAogICAgIC8vIFdlJ3JlIGFsd2F5cyBidXN5IG9uIHRoZSBj
b2xsZWN0aW9uIHRocmVhZHMuIE9uIHRoZSBtYWluIHRocmVhZCwgdGhpcyByZXR1cm5zIHRydWUg
aWYgd2UncmUKICAgICAvLyBoZWxwaW5nIGhlYXAuCkBAIC0zNTgsNiArMzU5LDE3IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmlu
YWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhj
b25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBh
cmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVs
KGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVh
dGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3Qg
RnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBA
IC01MjcsNiArNTM5LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFzc2VydFNoYXJlZE1h
cmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBjb25zdCBIZWFwVHlw
ZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAgICAgY29uc3Qgc2l6
ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTMsNiBAQCBwcml2YXRlOgogICAg
IFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnM7CiAg
ICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwot
CiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3Rh
Y2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9jb2RlQmxvY2tzOwpAQCAt
NjMzLDggKzY0NCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4
aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0ZXg7Ci0gICAgSGFzaFNl
dDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBt
X29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRM
ZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1Miw3IEBAIHByaXZhdGU6CiAgICAgTGlzdGFibGVI
YW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFs
aXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsKKyAgICBS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlzaXRvclRhc2s7
CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxvY2tCeXRlc0Fs
bG9jYXRlZCB7IDAgfTsKQEAgLTY1Nyw3ICs2NjgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBuZWVkRmluYWxpemVCaXQgPSAxdSA8PCA0dTsKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBt
dXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxlLgogICAgIEF0b21pYzx1
bnNpZ25lZD4gbV93b3JsZFN0YXRlOwotICAgIGJvb2wgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dvcmxkSXNTdG9wcGVkIHsg
ZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1fYmVmb3JlR0M7CiAgICAgTW9ub3RvbmljVGlt
ZSBtX2FmdGVyR0M7CiAgICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MywzMCArNjMsMjAgQEAgaW5saW5lIGJvb2wgSGVhcDo6aGFzSGVhcEFjY2VzcygpIGNvbnN0
CiAgICAgcmV0dXJuIG1fd29ybGRTdGF0ZS5sb2FkKCkgJiBoYXNBY2Nlc3NCaXQ7CiB9CiAKLWlu
bGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkg
Y29uc3QKK2lubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKKyAgICByZXR1
cm4gbV93b3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGlu
c3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1
aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkK
IHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsK
ICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwog
ICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+
bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBj
ZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZCgKLSAgICAgICAg
YmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwot
fQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qg
dm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAg
ICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJr
ZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5p
c01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFj
ZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9jay5pc01hcmtlZChi
bG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAtMTc5LDE5ICsxNjksMTkg
QEAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPAogCiBpbmxpbmUgdm9p
ZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2Rl
ZmVycmFsRGVwdGgrKzsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkg
fHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiB9CiAKIGlubGlu
ZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKIHsKLSAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNT
dG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKICAgICAKICAgICBpZiAoVU5MSUtFTFko
bV9kaWREZWZlckdDV29yaykpIHsKQEAgLTI2OSw0ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVh
cDo6c3RvcElmTmVjZXNzYXJ5KCkKICAgICAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3Io
Y29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxs
ZWxTbG90VmlzaXRvckxvY2spOworICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwor
ICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNp
dG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3Ip
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1
aWxkU25hcHNob3QoCiB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxs
KiBjZWxsKQogewogICAgIEFTU0VSVChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigp
ID09IHRoaXMpOwotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7
CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGlu
Z05vZGVGb3JDZWxsKGNlbGwpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01h
cmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCopIHsgcmV0dXJu
IGlzTWFya2VkKCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwq
LCBEZXBlbmRlbmN5KSB7IHJldHVybiBpc01hcmtlZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBi
b29sIGlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJu
IGlzTWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNp
b24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkg
eyByZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBi
b29sIGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdN
YXJraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQgKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAv
LyBVc2UgdGhpcyBsb2NrIHNjb3BlIGxpa2Ugc286CiAvLyBhdXRvIGxvY2tlciA9IGxvY2tEdXJp
bmdNYXJraW5nKGhlYXAsIGxvY2spOwogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci1Mb2Nr
ZXI8TG9ja1R5cGU+IGxvY2tEdXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNz
ZWRMb2NrKQorYXV0byBsb2NrRHVyaW5nTWFya2luZyhIZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFz
c2VkTG9jaykKIHsKLSAgICBMb2NrVHlwZSogbG9jazsKLSAgICBpZiAoaGVhcC5tdXRhdG9yU2hv
dWxkQmVGZW5jZWQoKSkKLSAgICAgICAgbG9jayA9ICZwYXNzZWRMb2NrOwotICAgIGVsc2UKLSAg
ICAgICAgbG9jayA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4obG9jayk7
CisgICAgcmV0dXJuIGhvbGRMb2NrSWYocGFzc2VkTG9jaywgaGVhcC5tdXRhdG9yU2hvdWxkQmVG
ZW5jZWQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NDQsNiArNDQ0LDMzIEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphc3NlcnRO
b1Vuc3dlcHQoKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitSZWZQdHI8U2hhcmVk
VGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gTWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5v
dEVtcHR5QmxvY2tTb3VyY2UoKQoreworICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFz
azxNYXJrZWRCbG9jazo6SGFuZGxlKigpPiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKE1h
cmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxv
Y2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2VkQmxv
Y2s6OkhhbmRsZSogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgbV9pbmRleCA9IG1fYWxsb2Nh
dG9yLm1fbWFya2luZ05vdEVtcHR5LmZpbmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAg
ICBpZiAobV9pbmRleCA+PSBtX2FsbG9jYXRvci5tX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9i
bG9ja3NbbV9pbmRleCsrXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBNYXJrZWRBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOworICAgICAgICBzaXplX3QgbV9pbmRl
eCB7IDAgfTsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRhc2soKnRoaXMpKTsKK30KKwogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0
aGlzKSwgIjoiLCBtX2NlbGxTaXplLCAiLyIsIG1fYXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC0xMDMsNiArMTA0LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0
IEZ1bmN0b3ImKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFu
ZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAgCiAgICAgdm9pZCBh
ZGRCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJr
ZWRCbG9jazo6SGFuZGxlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw2IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFy
a2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7
CiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgYm9vbCB0
ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICAgICAgCkBAIC0y
ODAsNyArMjc5LDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBhcmVN
YXJrc1N0YWxlKCk7CiAgICAgYm9vbCBhcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uKTsKLSAgICBEZXBlbmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERlcGVu
ZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIAogICAgIERlcGVuZGVuY3kg
YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKQEAgLTQ5
OCwxOCArNDk2LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKEgK
ICAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAotQUxX
QVlTX0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFs
ZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQotewotICAgIEhlYXBW
ZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwotICAgIHJldHVybiBkZXBlbmRlbmN5
V2l0aChkZXBlbmRlbmN5KHZlcnNpb24pLCB2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKTsKLX0K
LQogaW5saW5lIERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkocmVzdWx0LnZhbHVl
KSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAo
VU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFib3V0VG9NYXJr
U2xvdyhtYXJraW5nVmVyc2lvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRlbmN5OworICAg
IHJldHVybiBkZXBlbmRlbmN5KHZlcnNpb24pOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjphc3NlcnRNYXJrc05vdFN0YWxlKCkKQEAgLTUyNCwxNSArNTE2LDEwIEBAIGlu
bGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyhjb24KIAogaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lk
KiBwKQogewotICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSA/IGZhbHNl
IDogaXNNYXJrZWRSYXcocCk7Ci19Ci0KLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtl
ZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkK
LXsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5n
VmVyc2lvbik7Ci0gICAgaWYgKHJlc3VsdC52YWx1ZSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9u
ID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5n
VmVyc2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9tYXJrcy5nZXQo
YXRvbU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworICAgIHJldHVybiBtX21hcmtzLmdl
dChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KHZlcnNpb24pKTsKIH0KIAogaW5saW5lIGJvb2wg
TWFya2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVwZW5kZW5j
eSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY1LDYgKzE2NSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gV2hlbiB0
aGlzIGlzIHRydWUgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQgYnV0IHRoZSBtYXJrIGJp
dHMgaGF2ZW4ndCBjb252ZXJnZWQgeWV0LgogICAgIGJvb2wgaXNNYXJraW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc01hcmtpbmc7IH0KICAgICAKKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0Jl
Z2luKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCog
YWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9Cisg
ICAgV2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0dXJuIG1fbmV3QWN0aXZl
V2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzRW5kKCkg
eyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQorICAgIAogICAgIHZvaWQgZHVt
cEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgc3RkOjphcnJheTxzaXplX3QsIG51bVNpemVDbGFzc2VzPiBzX3Np
emVDbGFzc0ZvclNpemVTdGVwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywzMCArMjcsMTUgQEAKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lk
KFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwK
LSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorTWFya2luZ0NvbnN0cmFpbnQ6
Ok1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
IENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBj
b25jdXJyZW5jeSkKICAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKICAg
ICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92
ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCi17Ci19
Ci0KLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgOjpG
dW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwK
LSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQotICAgIDogbV9hYmJyZXZpYXRl
ZE5hbWUoYWJicmV2aWF0ZWROYW1lKQotICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAg
LCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3F1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
KSkKICAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorICAgICwgbV9jb25jdXJyZW5jeShj
b25jdXJyZW5jeSkKIHsKIH0KIApAQCAtNjMsMTQgKzQ4LDUxIEBAIHZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOwogfQogCi12b2lk
IE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBk
aWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorQ29uc3RyYWludFBhcmFs
bGVsaXNtIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKGFiYnJldmlhdGVk
TmFtZSgpKTsKLSAgICBWaXNpdGluZ1RpbWVvdXQgdmlzaXRpbmdUaW1lb3V0KHZpc2l0b3IsIGRp
ZFZpc2l0U29tZXRoaW5nLCB0aW1lb3V0KTsKLSAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9y
LCB2aXNpdGluZ1RpbWVvdXQpOwotICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNpdGluZ1RpbWVv
dXQudmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICBkaWRWaXNpdFNvbWV0aGluZyA9IHZpc2l0aW5n
VGltZW91dC5kaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKTsKKyAgICBWaXNpdENvdW50ZXIgdmlz
aXRDb3VudGVyKHZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSByZXN1bHQgPSBl
eGVjdXRlSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRDb3VudGVy
LnZpc2l0Q291bnQoKTsKKyAgICBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc20gPSByZXN1bHQ7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dv
cmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBN
YXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7Cisg
ICAgZG9QYXJhbGxlbFdvcmtJbXBsKHZpc2l0b3IpOworICAgIHsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0
Q291bnRlci52aXNpdENvdW50KCk7CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRD
b3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBmaW5pc2hQYXJhbGxlbFdvcmtJbXBs
KHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291
bnQoKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNs
b3RWaXNpdG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwordm9p
ZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYp
Cit7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwxMiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb25zdHJh
aW50Q29uY3VycmVuY3kuaCIKKyNpbmNsdWRlICJDb25zdHJhaW50UGFyYWxsZWxpc20uaCIKICNp
bmNsdWRlICJDb25zdHJhaW50Vm9sYXRpbGl0eS5oIgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91
dC5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0j
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDMsMTggKzQzLDkgQEAgY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJh
aW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
JiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAg
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAg
ICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCi0gICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludChDU3Ry
aW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSwg
Q29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50
KTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB+TWFya2luZ0NvbnN0cmFpbnQoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5NYXJraW5nQ29uc3RyYWludCgpOwogICAgIAog
ICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIApAQCAt
NjQsMzMgKzU1LDM3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0U3RhdHMoKTsKICAgICAKICAg
ICBzaXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50
OyB9CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGxhc3RFeGVjdXRlUGFyYWxsZWxpc20oKSBj
b25zdCB7IHJldHVybiBtX2xhc3RFeGVjdXRlUGFyYWxsZWxpc207IH0KICAgICAKLSAgICB2b2lk
IGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZShTbG90Vmlz
aXRvciYpOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdFZpc2l0
Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0KKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYg
dmlzaXRvcik7CisgICAgCisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlz
aXRvcik7CisgICAgCisgICAgdm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOworICAg
IHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsg
fQogICAgIAorICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uY3VycmVuY3k7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7IC8vIFNvIGl0IGNhbiBzZXQg
bV9pbmRleC4KICAgICAKICAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKICAgICBD
U3RyaW5nIG1fYWJicmV2aWF0ZWROYW1lOwogICAgIENTdHJpbmcgbV9uYW1lOwotICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYgdGltZW91dCk+
IG1fZXhlY3V0ZUZ1bmN0aW9uOwotICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+
IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSBt
X3ZvbGF0aWxpdHk7CisgICAgQ29uc3RyYWludENvbmN1cnJlbmN5IG1fY29uY3VycmVuY3k7Cisg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIG1fbGFzdEV4ZWN1dGVQYXJhbGxlbGlzbSB7IENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwgfTsgLy8gSXQncyBhIGhldXJpc3RpYywgd2UgY2Fu
IGJlIHdyb25nLiBUaGlzIGd1ZXNzIG9ubHkgYWZmZWN0cyB0aGUgZmlyc3QgcnVuLgogICAgIHNp
emVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9sb2NrOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYwICsyNiwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50U2V0LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5j
bHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KICNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7
Ci1wdWJsaWM6Ci0gICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0
LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6
IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3Rp
bWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkVmlzaXRTb21l
dGhpbmcoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7
Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0LgotICAg
IGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQotICAgIHsKLSAgICAgICAgZm9yIChz
aXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsK
LSAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNo
b3VsZFRpbWVPdXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkRXhlY3V0ZShz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQotCi0g
ICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0
W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91
dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKLSAgICB9Ci0gICAgCi1wcml2YXRl
OgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKLSAgICBTbG90VmlzaXRvciYgbV92
aXNpdG9yOwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwotICAgIEJpdFZlY3RvciBtX2V4
ZWN1dGVkOwotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci19OwotCi1N
YXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0
cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAo
aGVhcCkKIHsKIH0KIApAQCAtMTA3LDE4ICs2NCwxOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+
IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBNYXJraW5n
Q29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0
aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQogewot
ICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJl
dmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5
KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdU
Rk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiks
IHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5KSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmFkZCgKICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBl
eGVjdXRlRnVuY3Rpb24sCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1
dGVGdW5jdGlvbiwKICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dv
cmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkp
CisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwKKyAgICBDb25zdHJhaW50Q29u
Y3VycmVuY3kgY29uY3VycmVuY3kpCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2lu
Z0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24p
LCB2b2xhdGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92
ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2
b2xhdGlsaXR5LCBjb25jdXJyZW5jeSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0
OjphZGQoCkBAIC0xMzEsOSArODksOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQo
CiAgICAgbV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtp
bmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IE1vbm90b25pY1RpbWUgdGltZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1
dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIHJlc3VsdCA9
IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvciwgdGltZW91dCk7CisgICAgYm9vbCByZXN1
bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjps
b2dHQygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0
OCw5ICsxMDYsOSBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRl
Q29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29u
dGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIgc29sdmVyKCp0aGlzKTsKICAgICAKICAgICB1bnNpZ25lZCBpdGVyYXRpb24gPSBtX2l0ZXJh
dGlvbisrOwogICAgIApAQCAtMTU5LDE2ICsxMTcsMTQgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcgogCiAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50
cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhl
bgogICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlv
bkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgc29sdmVyLmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKICAgICAKICAgICAvLyBGaXJz
dCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlr
ZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzIG90aGVyCiAgICAgLy8gdGhhbiByb290cy4K
ICAgICBpZiAoaXRlcmF0aW9uID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3RocykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzb2x2ZXIuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jv
d3Rocyk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdy
b3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRoYXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCiAg
ICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxkIEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1
Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gZ28gdG90YWxseQpAQCAtMjE1LDMzICsxNzEs
MTYgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgICAgICAg
ICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGItPnZvbGF0aWxpdHkoKTsKICAgICAgICAgfSk7
CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCA6IG1fb3JkZXJl
ZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0cmFpbnQtPmluZGV4KCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRFeGVjdXRlKGkpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShpKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29udmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0
IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFwcGVuIGFueXRpbWUKLSAgICAgICAgLy8gd2Ug
ZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBh
bGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8gTm90IGNsZWFyIGlmIHRoYXQncwotICAgICAg
ICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2ZW4gYmV0dGVyIGlzIHRoaXM6Ci0gICAgICAg
IC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHksIGtlZXAgcnVubmluZy4KLSAgICAgICAgLy8g
LSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVhc3QgTiB0aGluZ3MsIHJldHVybi4KLSAgICAg
ICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMyCi0gICAgICAgIGlmIChleGVjdXRpb25D
b250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorICAgIHNvbHZlci5jb252ZXJnZShtX29yZGVyZWQpOwogICAgIAotICAgIHJldHVybiB0
cnVlOworICAgIC8vIFJldHVybiB0cnVlIGlmIHdlJ3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5z
IGlmIHdlIGRpZCBub3QgdmlzaXQgYW55dGhpbmcuCisgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlz
aXRTb21ldGhpbmcoKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFs
bChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0g
ZmFsc2U7CiAgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0
cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOworICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAg
IGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdD
b25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDEyIEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCitjbGFzcyBIZWFwOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7
CisKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0IHsKIHB1YmxpYzoKLSAgICBNYXJraW5nQ29u
c3RyYWludFNldCgpOworICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmKTsKICAgICB+TWFy
a2luZ0NvbnN0cmFpbnRTZXQoKTsKICAgICAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwpA
QCAtNDEsMTUgKzQ0LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmlu
ZyBhYmJyZXZpYXRlZE5hbWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFp
bnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCk7CiAgICAg
CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAg
ICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpPiwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJik+LAogICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwK
KyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpD
b25jdXJyZW50KTsKICAgICAKICAgICB2b2lkIGFkZChzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0Nv
bnN0cmFpbnQ+KTsKICAgICAKQEAgLTYwLDIxICs2NSwxOSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0cmFpbnRzIGFuZCBub25l
IG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBhc3N1bWVzIHRoYXQgeW91
J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9tIHRoZXJlLgotICAgIGJv
b2wgZXhlY3V0ZUNvbnZlcmdlbmNlKAotICAgICAgICBTbG90VmlzaXRvciYsCi0gICAgICAgIE1v
bm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIGJv
b2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgLy8gU2ltcGx5
IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmlnYW5zLgogICAgIHZvaWQg
ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKLSAgICBjbGFzcyBFeGVj
dXRpb25Db250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRpb25Db250ZXh0OworICAgIGZy
aWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKICAgICAKLSAgICBib29sIGV4ZWN1
dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOwor
ICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYpOwogICAgIAotICAg
IGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lLCBCaXRWZWN0b3ImIHVuZXhl
Y3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKKyAg
ICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0
b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CiAgICAgCisgICAgSGVhcCYg
bV9oZWFwOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsKICAgICBCaXRWZWN0b3Ig
bV91bmV4ZWN1dGVkT3V0Z3Jvd3RoczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtp
bmdDb25zdHJhaW50Pj4gbV9zZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIgorCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgCisKK01hcmtpbmdDb25zdHJhaW50
U29sdmVyOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYgc2V0
KQorICAgIDogbV9oZWFwKHNldC5tX2hlYXApCisgICAgLCBtX21haW5WaXNpdG9yKG1faGVhcC5j
b2xsZWN0b3JTbG90VmlzaXRvcigpKQorICAgICwgbV9zZXQoc2V0KQoreworICAgIG1faGVhcC5m
b3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsK
KyAgICAgICAgICAgIG1fdmlzaXRDb3VudGVycy5hcHBlbmQoVmlzaXRDb3VudGVyKHZpc2l0b3Ip
KTsKKyAgICAgICAgfSk7Cit9CisKK01hcmtpbmdDb25zdHJhaW50U29sdmVyOjp+TWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXIoKQoreworfQorCitib29sIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpk
aWRWaXNpdFNvbWV0aGluZygpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBWaXNpdENvdW50ZXIm
IHZpc2l0Q291bnRlciA6IG1fdmlzaXRDb3VudGVycykgeworICAgICAgICBpZiAodmlzaXRDb3Vu
dGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUo
U2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit7CisgICAgbV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJh
bGxlbCgKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeyBydW5FeGVjdXRpb25U
aHJlYWQodmlzaXRvciwgcHJlZmVyZW5jZSwgcGlja05leHQpOyB9KTsKKyAgICAgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV9kaWRFeGVjdXRlSW5QYXJhbGxlbCkKKyAgICAg
ICAgbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0tPmZpbmlzaFBhcmFsbGVsV29yayhtX21haW5WaXNp
dG9yKTsKKyAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsLmNsZWFyKCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGluZGV4VG9SdW4gOiBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseSkKKyAgICAgICAgZXhl
Y3V0ZSgqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0pOworICAgIG1fdG9FeGVjdXRlU2VxdWVudGlh
bGx5LmNsZWFyKCk7CisgICAgICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbC5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3RvRXhlY3V0ZUluUGFy
YWxsZWxTZXQuYml0Q291bnQoKSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSB1bmV4ZWN1
dGVkLmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVkLmVuZCgpOworICAgIGlmIChp
dGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGlja05leHQgPSBzY29wZWRM
YW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4oCisgICAgICAgIFsmXSAoKSAtPiBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiAqaXRl
cisrOworICAgICAgICB9KTsKKyAgICBleGVjdXRlKE5leHRDb25zdHJhaW50Rmlyc3QsIHBpY2tO
ZXh0KTsKKyAgICB1bmV4ZWN1dGVkLmNsZWFyQWxsKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OmNvbnZlcmdlKGNvbnN0IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBv
cmRlcikKK3sKKyAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBpZiAob3JkZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIHNpemVfdCBpbmRleCA9IDA7CisKKyAgICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUg
dGhlIGZpcnN0IGNvbnN0cmFpbnQgc2VxdWVudGlhbGx5IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVp
Y2tseSBnaXZlIHVzIGEKKyAgICAvLyByZXN1bHQuIElmIHdlIHJhbiBpdCBpbiBwYXJhbGxlbCB0
byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3ZSBtaWdodCBlbmQgdXAgaGF2aW5nIHRvIHdhaXQg
Zm9yCisgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3RyYWludHMgdG8gZmluaXNoLCB3aGljaCB3b3Vs
ZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVyaW5nIGNvbnZlcmdlbmNlIGl0J3MKKyAgICAv
LyBlbXBpcmljYWxseSBtb3N0IG9wdGltYWwgdG8gcmV0dXJuIHRvIGRyYWluaW5nIGFzIHNvb24g
YXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBNb3N0CisgICAgLy8gY29uc3RyYWludHMg
ZG9uJ3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9zdCBvZiB0aGUgdGltZSwgYW5kIHdoZW4gdGhleSBk
byBnZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQKKyAgICAvLyB0byBnZW5lcmF0ZSBlbm91Z2ggb2Yg
aXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmluZyBjeWNsZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1l
cyBhcmUgbG93ZXN0IGlmCisgICAgLy8gd2UgZ2V0IHRoZSBoZWNrIG91dCBvZiBoZXJlIGFzIHNv
b24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBJIHRoaW5rIHRoYXQgcGFydCBvZiB3
aGF0CisgICAgLy8gbWFrZXMgdGhpcyBvcHRpbWFsIGlzIHRoYXQgd2UgYWxzbyBuZXZlciBhYm9y
dCBydW5uaW5nIGEgY29uc3RyYWludCBlYXJseSwgc28gd2hlbiB3ZSBkbyBydW4KKyAgICAvLyBv
bmUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQg
cG9zc2libHkgY2FuLgorICAgIC8vCisgICAgLy8gU2ltaWxhciByZWFzb25pbmcgYXBwbGllcyB0
byBjb25zdHJhaW50cyB0aGF0IHRlbmQgdG8gcmV0dXJuIENvc250cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWwKKyAgICAvLyBmcm9tIGV4ZWN1dGUuIFRob3NlIGNvbnN0cmFpbnRzIHR5cGljYWxs
eSBoYXZlIGEgdmVyeSBmYXN0LXJ1bm5pbmcgZXhlY3V0ZSBmdW5jdGlvbiwgd2hpY2ggdGhlbgor
ICAgIC8vIG9mZmxvYWRzIGFsbW9zdCBhbGwgb2YgdGhlIHdvcmsgdG8gYSBwYXJhbGxlbCB3b3Jr
ZXIuIEluIHRoYXQgY2FzZSwgaXQgbWFrZXMgc2Vuc2UgdG8gcnVuIHRoZQorICAgIC8vIGV4ZWN1
dGUgZnVuY3Rpb24gc2VxdWVudGlhbGx5LgorICAgIGlmIChvcmRlcltpbmRleF0tPndvcmtFc3Rp
bWF0ZShtX21haW5WaXNpdG9yKQorICAgICAgICB8fCBvcmRlcltpbmRleF0tPmxhc3RFeGVjdXRl
UGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAg
ICAgIGV4ZWN1dGUoKm9yZGVyW2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3Rv
RXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAob3JkZXIuaXNFbXB0
eSgpIHx8IGRpZFZpc2l0U29tZXRoaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAgICAgCisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHsKKyAgICAgICAgICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
aW5kZXggPj0gb3JkZXIuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3JkZXJbaW5kZXgrK10t
PmluZGV4KCk7CisgICAgICAgIH0pOworICAgIAorICAgIGV4ZWN1dGUoUGFyYWxsZWxXb3JrRmly
c3QsIHBpY2tOZXh0KTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0
ZShNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKK3sKKyAgICBpZiAobV9leGVjdXRlZC5n
ZXQoY29uc3RyYWludC5pbmRleCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZShtX21haW5W
aXNpdG9yKTsKKyAgICBkaWRFeGVjdXRlKHBhcmFsbGVsaXNtLCBjb25zdHJhaW50LmluZGV4KCkp
OworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2Nv
cGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIGZv
ciAoOzspIHsKKyAgICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgIHVuc2ln
bmVkIGluZGV4VG9SdW47CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
ICg7OykgeworICAgICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4g
PSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZG9Q
YXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBhdXRvIHRyeU5leHRDb25zdHJhaW50ID0gWyZdICgpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBwaWNrUmVzdWx0ID0gcGlja05leHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghcGlja1Jlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldCgqcGlja1Jlc3VsdCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJh
aW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LmNvbmN1cnJlbmN5KCkgPT0gQ29uc3RyYWludENv
bmN1cnJlbmN5OjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90
b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0cnlQYXJhbGxlbFdvcmsoKSB8fCB0cnlOZXh0Q29uc3RyYWludCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRyeU5leHRDb25zdHJhaW50KCkgfHwgdHJ5UGFyYWxsZWxXb3JrKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFtX251bUFjdGl2
ZVRocmVhZHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQW55IHdhaXRpbmcgY291bGQg
YmUgcmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5pbmcgdGhlIFNsb3RWaXNpdG9yLgorICAgICAgICAg
ICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQgd291bGQgYmUgcHJvZml0YWJsZS4KKyAgICAgICAg
ICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fbnVtQWN0aXZlVGhyZWFkcysrOworICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gcGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9
ICptX3NldC5tX3NldFtpbmRleFRvUnVuXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
IGlmIChkb1BhcmFsbGVsV29ya01vZGUpCisgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxs
ZWxXb3JrKHZpc2l0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJhbGxlbGlzbSA9
IGNvbnN0cmFpbnQuZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkg
eworICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuZ2V0KGluZGV4
VG9SdW4pKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwuYXBw
ZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLnRha2VGaXJzdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAodW5zaWduZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGlu
ZGV4VG9SdW47IH0pOworICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxT
ZXQuY2xlYXIoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAg
ICAgICAgICAgICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCkgeworICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5k
KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxT
ZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9udW1BY3RpdmVUaHJlYWRzLS07
CisgICAgICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZGlkRXhlY3V0ZShDb25zdHJhaW50
UGFyYWxsZWxpc20gcGFyYWxsZWxpc20sIHVuc2lnbmVkIGluZGV4KQoreworICAgIG1fZXhlY3V0
ZWQuc2V0KGluZGV4KTsKKyAgICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpQYXJhbGxlbCkgeworICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGlu
ZGV4KTsKKyAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleCk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFw
OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsK
KworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE1hcmtpbmdDb25zdHJhaW50U29sdmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICAKK3B1YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5nQ29u
c3RyYWludFNldCYpOworICAgIH5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpOworICAgIAorICAg
IGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIFNjaGVkdWxl
clByZWZlcmVuY2UgeworICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgTmV4dENv
bnN0cmFpbnRGaXJzdAorICAgIH07CisKKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVy
ZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsK
KyAgICAKKyAgICB2b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCk7CisgICAgCisgICAg
dm9pZCBjb252ZXJnZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpOwor
ICAgIAorICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOworICAgIAorcHJpdmF0
ZToKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclBy
ZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4
dCk7CisgICAgCisgICAgdm9pZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSwgdW5z
aWduZWQgaW5kZXgpOworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNsb3RWaXNpdG9yJiBtX21h
aW5WaXNpdG9yOworICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKKyAgICBCaXRWZWN0
b3IgbV9leGVjdXRlZDsKKyAgICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJh
bGxlbDsKKyAgICBCaXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rv
cjx1bnNpZ25lZCwgMzI+IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgVmVjdG9yPHVuc2ln
bmVkLCAzMj4gbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAg
Q29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlVGhyZWFkcyB7
IDAgfTsKKyAgICBWZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L09wYXF1ZVJvb3RTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9PcGFxdWVSb290U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDkxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIE9wYXF1ZVJvb3RTZXQgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKE9wYXF1ZVJvb3RTZXQpOwotcHVibGljOgotICAgIE9wYXF1ZVJvb3RT
ZXQoKQotICAgICAgICA6IG1fbGFzdFF1ZXJpZWRSb290KG51bGxwdHIpCi0gICAgICAgICwgbV9j
b250YWluc0xhc3RRdWVyaWVkUm9vdChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBj
b250YWlucyh2b2lkKiByb290KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHJvb3QgIT0gbV9s
YXN0UXVlcmllZFJvb3QpIHsKLSAgICAgICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gcm9vdDsK
LSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBtX3Jvb3RzLmNvbnRhaW5z
KHJvb3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRS
b290OwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9yb290cy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAg
ewotICAgICAgICBtX3Jvb3RzLmNsZWFyKCk7Ci0gICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0g
bnVsbHB0cjsKLSAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IGZhbHNlOwotICAg
IH0KLQotICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCi0gICAgewotICAgICAgICBpZiAocm9vdCA9
PSBtX2xhc3RRdWVyaWVkUm9vdCkKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJv
b3QgPSB0cnVlOwotICAgICAgICByZXR1cm4gbV9yb290cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsK
LSAgICB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9y
b290cy5zaXplKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmJlZ2luKCk7Ci0g
ICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5lbmQoKTsKLSAgICB9Ci0KLQotcHJpdmF0ZToK
LSAgICBIYXNoU2V0PHZvaWQqPiBtX3Jvb3RzOwotICAgIG11dGFibGUgdm9pZCogbV9sYXN0UXVl
cmllZFJvb3Q7Ci0gICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1BhcmFsbGVsU291cmNlQWRhcHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1
ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4K
K2NsYXNzIFBhcmFsbGVsU291cmNlQWRhcHRlciA6IHB1YmxpYyBTaGFyZWRUYXNrPElubmVyVHlw
ZSgpPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRU
YXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1
bmMpCisgICAgICAgIDogbV9vdXRlclNvdXJjZShvdXRlclNvdXJjZSkKKyAgICAgICAgLCBtX3Vu
d3JhcEZ1bmModW53cmFwRnVuYykKKyAgICB7CisgICAgfQorICAgIAorICAgIElubmVyVHlwZSBy
dW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobV9pbm5lclNvdXJjZSkgeworICAg
ICAgICAgICAgICAgIGlmIChJbm5lclR5cGUgcmVzdWx0ID0gbV9pbm5lclNvdXJjZS0+cnVuKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgbV9p
bm5lclNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW5uZXJTb3VyY2UgPSBtX3Vud3JhcEZ1bmMobV9vdXRlclNvdXJjZS0+cnVuKCkp
OworICAgICAgICB9IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAgICAgICAgcmV0dXJuIElubmVy
VHlwZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5
cGUoKT4+IG1fb3V0ZXJTb3VyY2U7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+
PiBtX2lubmVyU291cmNlOworICAgIFVud3JhcEZ1bmMgbV91bndyYXBGdW5jOworICAgIExvY2sg
bV9sb2NrOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5l
clR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitSZWY8UGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91
dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPj4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFw
dGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVu
d3JhcEZ1bmMmIHVud3JhcEZ1bmMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFyYWxs
ZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPihvdXRlclNv
dXJjZSwgdW53cmFwRnVuYykpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29u
c3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBl
eGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29u
c3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQo
V1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBjb25j
dXJyZW5jeSkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9u
KSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJh
aW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICA6OkZ1bmN0
aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAorICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBj
b25jdXJyZW5jeSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0ZWRO
YW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3kpCisgICAgLCBtX2V4
ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCisgICAgLCBtX3F1aWNrV29y
a0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkKK3sK
K30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgp
Cit7Cit9CisKK2RvdWJsZSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRl
RnVuY3Rpb24pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb24odmlzaXRvcik7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBTaW1wbGVN
YXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGFs
bG93cyBmb3IgYW4gaW5mb3JtYWwgd2F5IHRvIGRlZmluZSBjb25zdHJhaW50cy4gSnVzdCBwYXNz
IGxhbWJkYXMgdG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgb25seQorLy8gZG93bnNpZGUgaXMgdGhh
dCB0aGlzIG1ha2VzIGl0IGhhcmQgZm9yIGNvbnN0cmFpbnRzIHRvIGJlIHN0YXRlZnVsLCB3aGlj
aCBpcyBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gYmUKKy8vIHBhcmFsbGVsLiBJbiB0aG9zZSBjYXNl
cywgaXQncyBlYXNpZXIgdG8ganVzdCBzdWJjbGFzcyBNYXJraW5nQ29uc3RyYWludC4KK2NsYXNz
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsKK3B1
YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAg
ICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eSwKKyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5
OjpDb25jdXJyZW50KTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5n
Q29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICA6OkZ1
bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5j
eTo6Q29uY3VycmVudCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1hcmtp
bmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisKKyAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247CisgICAgOjpG
dW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsOSAr
OTgsNyBAQCBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6
ZGlkU3RhcnRNYXJraW5nKCkKIHsKLSAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9
PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BhcXVl
Um9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KLSAgICBlbHNl
CisgICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpF
ZGVuKQogICAgICAgICByZXNldCgpOwogCiAgICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2Zp
bGVyID0gdm0oKS5oZWFwUHJvZmlsZXIoKSkKQEAgLTExMSw3ICsxMDksNiBAQCB2b2lkIFNsb3RW
aXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBtX2J5dGVz
VmlzaXRlZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1
aWxkZXIgPSBudWxscHRyOwpAQCAtMjc3LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFw
cGVuZFRvTWFya1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBB
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5l
clR5cGUmIGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01h
cmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwp
KTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5u
b3RlTWFya2VkKCk7CkBAIC0zNDYsNyArMzQzLDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsK
LSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VS
VChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBj
dXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAgLTQzNSw3ICs0MzIsNyBAQCB2
b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKIAogdm9pZCBTbG90VmlzaXRv
cjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZChjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0gICAg
bV9tdXRhdG9ySXNTdG9wcGVkID0gKG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3Js
ZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICBtX211
dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXpl
Rm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9y
SXNTdG9wcGVkKCkKQEAgLTQ1Miw3ICs0NDksNyBAQCBib29sIFNsb3RWaXNpdG9yOjpoYXNBY2tu
b3dsZWRnZWRUaGF0VGhlCiAKIGJvb2wgU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1Vw
VG9EYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hl
YXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1p
emVGb3JTdG9wcGVkTXV0YXRvcik7CisgICAgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZCA9PSAo
bV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3Ip
OwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCkKQEAg
LTQ5MCw4ICs0ODcsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9u
CiAgICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25Q
YXJhbGxlbCgpOwogICAgIH0KLSAgICAKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNp
emVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVz
UmVxdWVzdGVkKQpAQCAtNTUwLDcgKzU0NSw2IEBAIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9y
bUluY3JlbWVudE9mRHIKICAgICB9CiAKICAgICBkb25hdGVBbGwoKTsKLSAgICBtZXJnZUlmTmVj
ZXNzYXJ5KCk7CiAKICAgICByZXR1cm4gYnl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1
NSwxNiBAQCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1
cm4gZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpk
aWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0
b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsK
LSAgICByZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2
ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJr
U3RhY2stPmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0
YWNrLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFs
bGVsTWFya2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RW
aXNpdG9yOjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1f
aGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFp
c0VtcHR5KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+
aXNFbXB0eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCk7CiB9CiAKQEAgLTU4MywxMiArNTc2LDE0IEBAIE5FVkVSX0lOTElORSBTbG90Vmlz
aXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+PiBib251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlz
QWN0aXZlKQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxN
YXJrZXJzLS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1h
cmtlcnMrKzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2Rl
ID09IE1hc3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYyNCw1
NyBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAg
ICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1f
aGVhcC5tX2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVh
cC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAg
ICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwo
bV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAg
ICAgICAmJiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBi
b251c1Rhc2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAg
ICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sg
JiYgaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0
YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20o
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0
YWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRp
bmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vy
cysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJz
LS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAg
ICBpZiAoYm9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSB3b3VsZCBub3Qg
aGF2ZSB0byBkbyB0aGlzLiBIb3dldmVyLCB0aGUgcGFyYWxsZWwgbWFya2luZyBhbGdvcml0aG0g
d2lsbAorICAgICAgICAgICAgLy8gZ2V0IGNvbmZ1c2VkIGlmIHdlIGluaXRpYXRlIGl0IHdpdGgg
dGhlIGhlbHBlciB2aXNpdG9ycyBoYXZpbmcgYW55dGhpbmcgaW4gdGhlaXIgc3RhY2tzLgorICAg
ICAgICAgICAgLy8gQWxzbywgdGhpcyBwcm90ZWN0cyBidWdzIHRoYXQgaW52b2x2ZSByYWNlcyBi
ZXR3ZWVuIHZpc2l0Q2hpbGRyZW4gYW5kIG9uZSBvZiB0aGUKKyAgICAgICAgICAgIC8vIGNvbnN0
cmFpbnRzLgorICAgICAgICAgICAgLy9kb25hdGVBbGwoKTsKKworICAgICAgICAgICAgLy8gVGhl
IG1haW4gdGhyZWFkIGNvdWxkIHN0aWxsIGJlIHJ1bm5pbmcsIGFuZCBtYXkgcnVuIGZvciBhIHdo
aWxlLiBVbmxlc3Mgd2UgY2xlYXIgdGhlIHRhc2sKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcywg
d2Ugd2lsbCBrZWVwIGxvb3BpbmcgYXJvdW5kIHRyeWluZyB0byBydW4gdGhlIHRhc2suCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAu
bV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9ib251c1Zpc2l0
b3JUYXNrID09IGJvbnVzVGFzaykKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fYm9udXNW
aXNpdG9yVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90
aWZ5QWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGRyYWluKHRpbWVvdXQpOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpc0FjdGl2ZSA9IHRydWU7CiAgICAgfQogfQpA
QCAtNjcwLDE1ICs2OTQsMTkgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RW
aXNpdAogICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEKICAgICAgICAg
fHwgKG1faGVhcC5tX3dvcmxkU3RhdGUubG9hZCgpICYgSGVhcDo6bXV0YXRvcldhaXRpbmdCaXQp
CiAgICAgICAgIHx8ICFtX2hlYXAuaGFzSGVhcEFjY2VzcygpCi0gICAgICAgIHx8IG1faGVhcC5j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIHx8IG1f
aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0
aW9uIG92ZXIgZHJhaW5JblBhcmFsbGVsKCkgd2hlbiB3ZSBoYXZlIGEgY29uY3VycmVudCBtdXRh
dG9yIGJ1dAogICAgICAgICAvLyBvdGhlcndpc2UgaXQgaXMgbm90IHByb2ZpdGFibGUuCiAgICAg
ICAgIHJldHVybiBkcmFpbkluUGFyYWxsZWwodGltZW91dCk7CiAgICAgfQogCi0gICAgTG9ja0hv
bGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKLSAgICBkb25hdGVBbGwobG9ja2Vy
KTsKLSAgICAKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KSk7
CisgICAgcmV0dXJuIHdhaXRGb3JUZXJtaW5hdGlvbih0aW1lb3V0KTsKK30KKworU2xvdFZpc2l0
b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24oTW9u
b3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFw
Lm1fbWFya2luZ011dGV4KTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmIChoYXNFbGFwc2Vk
KHRpbWVvdXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91
dDsKQEAgLTcxMSw2MSArNzM5LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQWxsKGNvbnN0
IEFic3RyYQogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwo
KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQotewot
ICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChtX2lnbm9yZU5l
d09wYXF1ZVJvb3RzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6Om51
bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewotICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0
aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBQdXQgaW50byB0aGUgbG9jYWwgc2V0
LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNlIGluCi0gICAgLy8gYSB3
aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24ndCBncm93IHRvbyBsYXJn
ZS4KLSAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0gICAgbV9vcGFxdWVSb290
cy5hZGQocm9vdCk7Ci19Ci0KLWJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2
b2lkKiByb290KSBjb25zdAotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICByZXR1cm4gbV9o
ZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Ci19Ci0KLVRyaVN0YXRlIFNsb3RWaXNp
dG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKiByb290KSBjb25zdAotewotICAg
IGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7Ci0gICAgCi0gICAgaWYg
KG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCkpCi0gICAgICAgIHJldHVybiBUcnVlVHJpU3Rh
dGU7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNN
dXRleCk7Ci0gICAgaWYgKG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwotfQot
Ci12b2lkIFNsb3RWaXNpdG9yOjptZXJnZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAobV9vcGFx
dWVSb290cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3Rz
KCk7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUo
KQotewotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkp
IDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0gICAgCiB2b2lkIFNsb3RWaXNpdG9yOjpkb25h
dGUoKQogewogICAgIGlmICghbV9pc0luUGFyYWxsZWxNb2RlKSB7CkBAIC03ODUsMTYgKzc1OCw2
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKE1vbm90b24KICAgICBkcmFpbih0
aW1lb3V0KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCi17Ci0g
ICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVS
b290c011dGV4KTsKLSAgICAgICAgZm9yIChhdXRvKiByb290IDogbV9vcGFxdWVSb290cykKLSAg
ICAgICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLSAgICB9Ci0gICAgbV9v
cGFxdWVSb290cy5jbGVhcigpOwotfQotCiB2b2lkIFNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJl
bmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIpCiB7CiAgICAgbV9oZWFwLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2Fm
ZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
I2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAj
aW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAiT3BhcXVlUm9vdFNldC5oIgogI2luY2x1
ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTUsMTAgKzk0LDkgQEAgcHVibGljOgogICAg
IHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1ZSk7CiAgICAgdm9pZCBhcHBlbmRI
aWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
YWRkT3BhcXVlUm9vdCh2b2lkKik7CisgICAgYm9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCiAgICAgCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwotICAgIFRyaVN0YXRl
IGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKKyAgICBib29sIGNvbnRh
aW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAKICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVy
biBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7
IH0KIApAQCAtMTIxLDYgKzExOSw4IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZERyYWluUmVzdWx0
IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWxQYXNzaXZl
bHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7Cisg
ICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQgd2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgLy8gQXR0ZW1w
dHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQgb2YgZHJhaW5pbmcgdGhhdCBpbnZvbHZlcyBvbmx5
IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBkYXRhLiBUaGlzCiAgICAgLy8gaXMgbGlrZWx5IHRv
IGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3IgbGVzcyB0aGFuIHRoYXQuIEl0IHdpbGwgdXN1YWxs
eSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQgbWF5CkBAIC0xMjgsOCArMTI4LDYgQEAgcHVibGlj
OgogICAgIC8vIHJhcmUgY2FzZXMgaGFwcGVuIHRlbXBvcmFyaWx5IGV2ZW4gaWYgd2UncmUgbm90
IHJlYWNoaW5nIHRlcm1pbmF0aW9uKS4KICAgICBzaXplX3QgcGVyZm9ybUluY3JlbWVudE9mRHJh
aW5pbmcoc2l6ZV90IGJ5dGVzKTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1l
cmdlSWZOZWNlc3NhcnkoKTsKLQogICAgIC8vIFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4
aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9u
J3QgZG8KICAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9m
IEdDLgogICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKTsKQEAgLTE5NCwx
MCArMTkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2Vs
bChIZWFwQ2VsbCopOwogICAgIAotICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwotCi0gICAg
dm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0KICAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oY29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVs
KCk7CkBAIC0yMTUsNyArMjA5LDYgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5IG1f
Y29sbGVjdG9yU3RhY2s7CiAgICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAg
T3BhcXVlUm9vdFNldCBtX29wYXF1ZVJvb3RzOyAvLyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0
dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCiAgICAgYm9vbCBtX2ln
bm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1v
ZGUuCiAgICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kVmEKICAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0K
IAoraW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQorewor
ICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3
T3BhcXVlUm9vdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhlYXAoKS0+bV9v
cGFxdWVSb290cy5hZGQocHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRD
b3VudCsrOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gaGVhcCgp
LT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7Cit9CisKIGlubGluZSB2b2lkIFNsb3RWaXNp
dG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKG1f
aXNGaXJzdFZpc2l0KSB7CkBAIC0xNTksMTIgKzE3NiwxMiBAQCBpbmxpbmUgSGVhcCogU2xvdFZp
c2l0b3I6OmhlYXAoKSBjb25zdAogCiBpbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCiB7Ci0g
ICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiBp
bmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICpt
X2hlYXAubV92bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAko
cmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJr
ZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCIKICNp
bmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VJbmxp
bmVzLmgiCiAKQEAgLTg4LDUgKzg5LDQyIEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNl
OjpmaW5kRW1wdHkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8
TWFya2VkQWxsb2NhdG9yKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCkK
K3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigp
PiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
KQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBydW4oKSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAg
ICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+
bmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9y
KiBtX2FsbG9jYXRvcjsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sobV9maXJzdEFsbG9jYXRvcikpOworfQorCitSZWZQdHI8
U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsTm90
RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpCit7CisgICAgcmV0dXJuIGNyZWF0ZVBhcmFsbGVsU291
cmNlQWRhcHRlcjxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4oCisgICAg
ICAgIHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCksCisgICAgICAgIFtdIChNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvcikgLT4gUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSoo
KT4+IHsKKyAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+cGFyYWxsZWxOb3RFbXB0
eUJsb2NrU291cmNlKCk7CisgICAgICAgIH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OSwxNyArNjksMjQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CiAgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQ
dHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+PiBwYXJhbGxlbEFsbG9jYXRvclNvdXJj
ZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNo
TWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiAgICAgdm9pZCBmb3JFYWNoTm90RW1wdHlNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAg
ICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6
OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpOworICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0
aW9uKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAg
IHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOworICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
Pj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw1MyBAQCB2b2lkIFN1YnNwYWNl
Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFj
aE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgY2xhc3MgVGFz
ayA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAg
ICAgICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCisgICAgICAgICAgICAsIG1fYmxvY2tTb3Vy
Y2Uoc3Vic3BhY2UucGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCkpCisgICAgICAg
ICAgICAsIG1fZnVuYyhmdW5jKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7Cisg
ICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1Nv
dXJjZS0+cnVuKCkpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxs
KAorICAgICAgICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2lu
ZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9m
dW5jKHZpc2l0b3IsIGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgIGlmICghbV9u
ZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3N1YnNwYWNlLmZvckVh
Y2hMYXJnZUFsbG9jYXRpb24oCisgICAgICAgICAgICAgICAgWyZdIChMYXJnZUFsbG9jYXRpb24q
IGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb24tPmlzTWFy
a2VkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgYWxsb2NhdGlv
bi0+Y2VsbCgpLCBtX3N1YnNwYWNlLm1fYXR0cmlidXRlcy5jZWxsS2luZCk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vi
c3BhY2UmIG1fc3Vic3BhY2U7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKCk+PiBtX2Jsb2NrU291cmNlOworICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAg
ICAgTG9jayBtX2xvY2s7CisgICAgICAgIGJvb2wgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlv
bnMgeyB0cnVlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2so
KnRoaXMsIGZ1bmMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3Bh
Y2U6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvckVhY2hNYXJr
ZWRCbG9jaygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBWaXNpdENvdW50ZXIgeworcHVibGljOgorICAgIFZpc2l0Q291bnRlcigpIHsgfQorICAg
IAorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgOiBtX3Zp
c2l0b3IoJnZpc2l0b3IpCisgICAgICAgICwgbV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZp
c2l0Q291bnQoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVfdCB2aXNpdENvdW50KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zpc2l0b3ItPnZpc2l0Q291bnQoKSAtIG1f
aW5pdGlhbFZpc2l0Q291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTbG90VmlzaXRv
ciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50
IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoK
LSAgICBWaXNpdGluZ1RpbWVvdXQoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdU
aW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNp
dFNvbWV0aGluZykKLSAgICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENv
dW50KCkpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBzaXplX3QgdmlzaXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9y
ZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwg
dmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZp
c2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0g
ICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1f
dGltZW91dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3
ICsxMTEsNyBAQCB2b2lkIFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+
anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1h
cmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5p
c01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0
PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjpp
c0NoZWFwRHVyaW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAg
IAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8
ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShz
dG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8
IEhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1Bv
bHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChz
dG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hl
YXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkK
LSAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAg
ICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgw
IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGRvZXMgc29t
ZSBjaGFuZ2VzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIHBhcmFsbGVsIGNvbnN0cmFpbnQgc29s
dmluZzoKKyAgICAgICAgCisgICAgICAgIC0gSSBmaW5hbGx5IHJlbW92ZWQgZGVwZW5kZW5jeVdp
dGguIFRoaXMgd2FzIGEgc2lsbHkgY29uc3RydWN0IHdob3NlIG9ubHkgcHVycG9zZSBpcyB0byBj
b25mdXNlCisgICAgICAgICAgcGVvcGxlIGFib3V0IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIGRl
cGVuZGVuY3kgY2hhaW4uIEkgdG9vayB0aGF0IGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdyZWFseQor
ICAgICAgICAgIHNpbXBsaWZ5IHRoZSBHQydzIHVzZSBvZiBkZXBlbmRlbmN5IGNoYWluaW5nLgor
ICAgICAgICAKKyAgICAgICAgLSBBZGRlZCBtb3JlIGxvZ2ljIHRvIERlcXVlPD4sIHNpbmNlIEkg
dXNlIGl0IGZvciBwYXJ0IG9mIHRoZSBsb2FkIGJhbGFuY2VyLgorICAgICAgICAKKyAgICAgICAg
LSBNYWRlIGl0IHBvc3NpYmxlIHRvIHByb2ZpbGUgbG9jayBjb250ZW50aW9uLiBTZWUKKyAgICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMjUwI2MwIGZv
ciBzb21lIHByZWxpbWluYXJ5IG1lYXN1cmVtZW50cy4KKyAgICAgICAgCisgICAgICAgIC0gSW50
cm9kdWNlZCBob2xkTG9ja0lmLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBlcmZvcm0gcHJlZGlj
YXRlZCBsb2NrIGFjcXVpc2l0aW9uLiBXZSB1c2UgdGhhdAorICAgICAgICAgIHRvIHBpY2sgYSBs
b2NrIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpkZXBlbmRlbmN5KToK
KyAgICAgICAgKFdURjo6RGVwZW5kZW5jeVdpdGg6OkRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6ZGVwZW5kZW5jeVdpdGgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9C
aXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjppdGVyYXRvcjo6b3BlcmF0b3Ir
Kyk6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db25jdXJy
ZW50UHRySGFzaFNldC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFz
aFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRy
SGFzaFNldDo6fkNvbmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFB0ckhhc2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQ
dHJIYXNoU2V0OjpjbGVhcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3cp
OgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKToKKyAg
ICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUpOgorICAgICAg
ICAqIHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29u
Y3VycmVudFB0ckhhc2hTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0
ckhhc2hTZXQ6OmFkZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpzaXpl
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjptYXhM
b2FkIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6Omhhc2gpOgor
ICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Y2FzdCk6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpjb250YWluc0ltcGwgY29uc3QpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50UHRySGFzaFNldDo6YWRkSW1wbCk6CisgICAgICAgICogd3RmL0RlcXVlLmg6
CisgICAgICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KToKKyAgICAgICAgKiB3
dGYvRmFzdE1hbGxvYy5oOgorICAgICAgICAqIHd0Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6
TG9ja0Jhc2U6OmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChX
VEY6OmhvbGRMb2NrSWYpOgorICAgICAgICAqIHd0Zi9TY29wZWRMYW1iZGEuaDoKKyAgICAgICAg
KiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFBhc3NlZFJlc3Vs
dFR5cGUpOgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFJlc3VsdFR5cGUpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi9TdGFja1Nob3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hv
dDo6U3RhY2tTaG90KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj0pOgorICAg
ICAgICAoV1RGOjpTdGFja1Nob3Q6OmFycmF5IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tT
aG90OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvciBib29s
IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj09IGNvbnN0KToKKyAg
ICAgICAgKFdURjo6U3RhY2tTaG90OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tT
aG90Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNr
U2hvdDo6b3BlcmF0b3I+IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpkZWxldGVk
VmFsdWVBcnJheSk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdEhhc2g6Omhhc2gpOgorICAgICAg
ICAoV1RGOjpTdGFja1Nob3RIYXNoOjplcXVhbCk6CisgICAgICAgICogd3RmL1N0YWNrU2hvdFBy
b2ZpbGVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6U3RhY2tT
aG90UHJvZmlsZXIpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cHJvZmlsZSk6
CisgICAgICAgIChXVEY6OlN0YWNrU2hvdFByb2ZpbGVyOjpydW4pOgorCiAyMDE3LTEyLTAxICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxz
LnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZp
Y2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAK
IC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEY1MjZCMUY0MjFGRjgwMDRB
NDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5j
cHAgKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThB
MUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKKwkJMEYzMENCNUEx
RkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRCNTMy
MyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNEOEYxMURCNUFEREMw
MDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRp
Y1RocmVhZC5jcHAgKi87IH07CiAJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2Fn
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVC
RjE3NDFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovOyB9OwogCQkwRjYwRjMyRjFE
RkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8q
IExvY2tlZFByaW50U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4Myw2ICsxODQsOCBAQAogCQkwRjMw
QkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzMEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBCQThGMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5n
SGFzaFRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFz
aFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RGMTMz
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0
ckhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFB0
ckhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMURENzAxRjEzMDhC
QzAwNzJFQjRBIC8qIExvY2tBbGdvcml0aG1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tB
bGdvcml0aG1JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4QzdE
MUY0N0FBOUQwMDNDRkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5n
VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4Qzgw
MEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNiw2ICsyMjks
OCBAQAogCQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRT
dHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJl
YW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RTE2NURCQTczMDA1
QUQzODcgLyogUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDQxRkQx
QzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdGFja1Nob3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDUx
RkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0Mz
MUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN5c3RlbVRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc5NCw2ICs3OTksOCBAQAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUxQTgyNUEwMDQxMjNGRiAvKiBDb21w
aWxlci5oICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlBMkJCQyAvKiBDb21wbGV0aW9uSGFu
ZGxlci5oICovLAorCQkJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAgKi8sCisJCQkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmggKi8sCiAJCQkJMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRp
dGlvbi5oICovLAogCQkJCUUzOEM0MTI2MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCAq
LywKIAkJCQlFMzhDNDEyNzFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5oICovLApAQCAtMTAw
NSw2ICsxMDEyLDggQEAKIAkJCQlBOEE0NzMwRDE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0u
aCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICov
LAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5oICovLAorCQkJ
CTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3QuaCAqLywKKwkJCQkwRjlEQUEw
NTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLywKIAkJCQlGRURBQ0Qz
QjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgKi8sCiAJCQkJRkVEQUNEM0MxNjMw
RjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAqLywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVB
OTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8sCkBAIC0xNDI2LDYgKzE0MzUsNyBAQAogCQkJCTBG
ODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxRjE3NTJCMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50Q29kZXJzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxRjE3NTJDMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RGVj
b2Rlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMwQ0I1QTFGQ0RGMTM0MDA0QjUzMjMgLyog
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1MkQxRjNE
NDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOUQzMzYyMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3Rm
L0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDExICszNDYsMTYgQEAgQUxXQVlTX0lO
TElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5KAogICAgIHJldHVybiAwOwogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+
Ojp0eXBlKiA9IG51bGxwdHI+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCiB7CiAgICAgdW5zaWduZWQgZGVwZW5kZW5j
eTsKLSAgICB1aW50NjRfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7Cisg
ICAgdW5pb24geworICAgICAgICB1aW50MzJfdCBjb3B5OworICAgICAgICBUIHZhbHVlOworICAg
IH0gdTsKKyAgICB1LmNvcHkgPSAwOworICAgIHUudmFsdWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJN
NjQpCiAgICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFz
c2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgogICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9w
dGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgpAQCAtMzYz
LDgwICszNjgsMjAgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YQog
ICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4KICAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwg
JXdbaW5dLCAld1tpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkK
LSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7
CiAjZWxpZiBDUFUoQVJNKQogICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2lu
XSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtp
bl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbHNlCiAgICAg
Ly8gTm8gZGVwZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxv
YWRMb2FkRmVuY2UoKTsKICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29w
eSk7CisgICAgVU5VU0VEX1BBUkFNKHUuY29weSk7CiAjZW5kaWYKICAgICByZXR1cm4gZGVwZW5k
ZW5jeTsKIH0KIAotLy8gRklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRo
ZSBvdGhlciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNf
SU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRl
cGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFs
dWUpOwotI2lmIENQVShBUk02NCkKLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5d
LCAld1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAg
ICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVw
ZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBl
bmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgbG9hZExvYWRG
ZW5jZSgpOwotICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKLSNl
bmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+
Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJl
dHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+
Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShU
IHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2
YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRo
IHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShu
dWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAsIHZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUp
Ci0gICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQotICAgICAgICAsIHZhbHVlKHZhbHVl
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwotICAgIFQg
dmFsdWU7Ci19OwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5
V2l0aDxUPiBkZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZh
bHVlKQotewotICAgIHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7
Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVy
LCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CkBAIC00NjksMTAgKzQxNCw4IEBAIEFMV0FZU19J
TkxJTkUgVCYgZW5zdXJlUG9pbnRlcihBdG9taWM8VCoKIAogdXNpbmcgV1RGOjpBdG9taWM7CiB1
c2luZyBXVEY6OkRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcg
V1RGOjpjb25zdW1lOwogdXNpbmcgV1RGOjpkZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpkZXBlbmRl
bmN5V2l0aDsKIHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsKIHVzaW5nIFdURjo6bnVsbERlcGVu
ZGVuY3k7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBw
dWJsaWM6IAogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAg
aXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9y
IHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXpl
KCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDcgQEAg
c2V0KFdURl9IRUFERVJTCiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5o
CiAgICAgQ29tcGlsZXIuaAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKICAgICBDb25kaXRp
b24uaAogICAgIENyb3NzVGhyZWFkQ29waWVyLmgKICAgICBDcm9zc1RocmVhZFRhc2suaApAQCAt
MTMyLDYgKzEzMyw4IEBAIHNldChXVEZfSEVBREVSUwogICAgIFNlZ21lbnRlZFZlY3Rvci5oCiAg
ICAgU21hbGxQdHJTZXQuaAogICAgIFN0YWNrQm91bmRzLmgKKyAgICBTdGFja1Nob3QuaAorICAg
IFN0YWNrU2hvdFByb2ZpbGVyLmgKICAgICBTdGFja1N0YXRzLmgKICAgICBTdGFja1RyYWNlLmgK
ICAgICBTdGRMaWJFeHRyYXMuaApAQCAtMjE4LDYgKzIyMSw3IEBAIHNldChXVEZfU09VUkNFUwog
ICAgIENQVVRpbWUuY3BwCiAgICAgQ2xvY2tUeXBlLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFk
LmNwcAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVy
LmNwcAogICAgIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFz
aFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNo
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ29uY3VycmVudFB0ckhhc2hTZXQuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0
ckhhc2hTZXQoKQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworQ29uY3VycmVudFB0ckhhc2hT
ZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCgpCit7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhh
c2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcygpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2Uu
IEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4g
QnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBt
YWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAor
ICAgIAorICAgIG1fYWxsVGFibGVzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0
ZDo6dW5pcXVlX3B0cjxUYWJsZT4mIHRhYmxlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biB0YWJsZS5nZXQoKSAhPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIH0pOworfQor
Cit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcigpCit7CisgICAgLy8gVGhpcyBpcyBq
dXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8g
Y2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVz
IGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFibGVzLmNsZWFyKCk7CisgICAgaW5pdGlhbGl6
ZSgpOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKCkKK3sKKyAg
ICBjb25zdGV4cHIgdW5zaWduZWQgaW5pdGlhbFNpemUgPSAzMjsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VGFibGU+IHRhYmxlID0gVGFibGU6OmNyZWF0ZShpbml0aWFsU2l6ZSk7CisgICAgbV90YWJs
ZS5zdG9yZVJlbGF4ZWQodGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZN
b3ZlKHRhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3coVGFi
bGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBp
bmRleCwgdm9pZCogcHRyKQoreworICAgIGlmICh0YWJsZS0+bG9hZC5leGNoYW5nZUFkZCgxKSA+
PSB0YWJsZS0+bWF4TG9hZCgpKQorICAgICAgICByZXR1cm4gcmVzaXplQW5kQWRkKHB0cik7Cisg
ICAgCisgICAgZm9yICg7OykgeworICAgICAgICB2b2lkKiBvbGRFbnRyeSA9IHRhYmxlLT5hcnJh
eVtpbmRleF0uY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG51bGxwdHIsIHB0cik7CisgICAgICAgIGlm
ICghb2xkRW50cnkpIHsKKyAgICAgICAgICAgIGlmIChtX3RhYmxlLmxvYWQoKSAhPSB0YWJsZSkg
eworICAgICAgICAgICAgICAgIC8vIFdlIGFkZGVkIGFuIGVudHJ5IHRvIGFuIG9sZCB0YWJsZSEg
V2UgbmVlZCB0byByZWV4ZWN1dGUgdGhlIGFkZCBvbiB0aGUgbmV3IHRhYmxlLgorICAgICAgICAg
ICAgICAgIHJldHVybiBhZGQocHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChvbGRFbnRyeSA9PSBwdHIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgVGFibGUqIHRhYmxlID0gbV90YWJs
ZS5sb2FkUmVsYXhlZCgpOworICAgIGlmICh0YWJsZS0+bG9hZC5sb2FkUmVsYXhlZCgpIDwgdGFi
bGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxUYWJsZT4gbmV3VGFibGUgPSBUYWJsZTo6Y3JlYXRlKHRhYmxlLT5zaXplICogMik7CisgICAg
dW5zaWduZWQgbWFzayA9IG5ld1RhYmxlLT5tYXNrOworICAgIHVuc2lnbmVkIGxvYWQgPSAwOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgKytpKSB7CisgICAgICAg
IHZvaWQqIHB0ciA9IHRhYmxlLT5hcnJheVtpXS5sb2FkUmVsYXhlZCgpOworICAgICAgICBpZiAo
IXB0cikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
c3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
c3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgQXRvbWljPHZvaWQq
PiYgZW50cnlSZWYgPSBuZXdUYWJsZS0+YXJyYXlbaW5kZXhdOworICAgICAgICAgICAgdm9pZCog
ZW50cnkgPSBlbnRyeVJlZi5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkg
eworICAgICAgICAgICAgICAgIGVudHJ5UmVmLnN0b3JlUmVsYXhlZChwdHIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZW50cnkgIT0gcHRyKTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGxvYWQrKzsKKyAgICB9CisgICAgCisgICAgbmV3VGFibGUt
PmxvYWQuc3RvcmVSZWxheGVkKGxvYWQpOworICAgIAorICAgIG1fdGFibGUuc3RvcmUobmV3VGFi
bGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKG5ld1RhYmxlKSk7Cit9
CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7
CisgICAgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IENvbmN1cnJlbnRQdHJI
YXNoU2V0OjpUYWJsZTo6Y3JlYXRlKHVuc2lnbmVkIHNpemUpCit7CisgICAgc3RkOjp1bmlxdWVf
cHRyPENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gcmVzdWx0KG5ldyAoZmFzdE1hbGxvYyhP
QkpFQ1RfT0ZGU0VUT0YoVGFibGUsIGFycmF5KSArIHNpemVvZihBdG9taWM8dm9pZCo+KSAqIHNp
emUpKSBUYWJsZSgpKTsKKyAgICByZXN1bHQtPnNpemUgPSBzaXplOworICAgIHJlc3VsdC0+bWFz
ayA9IHNpemUgLSAxOworICAgIHJlc3VsdC0+bG9hZC5zdG9yZVJlbGF4ZWQoMCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcmVzdWx0LT5hcnJheVtp
XS5zdG9yZVJlbGF4ZWQobnVsbHB0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21p
Y3MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVu
Y3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBU
aGlzIGlzIGEgY29uY3VycmVudCBoYXNoLWJhc2VkIHNldCBmb3IgcG9pbnRlcnMuIEl0J3Mgb3B0
aW1pemVkIGZvcjoKKy8vCisvLyAtIEhpZ2ggcmF0ZSBvZiBjb250YWlucygpIGNhbGxzLgorLy8g
LSBIaWdoIHJhdGUgb2YgYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgbmV3LiBh
ZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyAobm9wIGFkZHMpCisvLyAgIGRvbid0
IG11dGF0ZSB0aGUgdGFibGUgYXQgYWxsLgorLy8gLSBOb3QgdG9vIG1hbnkgdGhyZWFkcy4gSSBk
b3VidCB0aGlzIHNjYWxlcyBiZXlvbmQgfjQuIFRob3VnaCwgaXQgbWF5IGFjdHVhbGx5IHNjYWxl
IGJldHRlciB0aGFuIHRoYXQKKy8vICAgaWYgdGhlIHJhdGUgb2Ygbm9wIGFkZHMgaXMgYWJzdXJk
bHkgaGlnaC4KKy8vCisvLyBJZiB3ZSB3YW50ZWQgdGhpcyB0byBzY2FsZSBiZXR0ZXIsIHRoZSBt
YWluIGNoYW5nZSB3ZSdkIGhhdmUgdG8gbWFrZSBpcyBob3cgdGhpcyB0YWJsZSBkZXRlcm1pbmVz
IHdoZW4KKy8vIHRvIHJlc2l6ZS4gUmlnaHQgbm93IGl0J3MgYSBzaGFyZWQgY291bnRlci4gV2Ug
bG9jazt4YWRkIHRoaXMgY291bnRlci4gT25lIGVhc3kgd2F5IHRvIG1ha2UgdGhhdAorLy8gc2Nh
bGFibGUgaXMgdG8gcmVxdWlyZSBlYWNoIHRocmVhZCB0aGF0IHdvcmtzIHdpdGggdGhlIENvbmN1
cnJlbnRQdHJIYXNoU2V0IHRvIHJlZ2lzdGVyIGl0c2VsZiBmaXJzdC4KKy8vIFRoZW4gZWFjaCB0
aHJlYWQgd291bGQgaGF2ZSBzb21lIGRhdGEgc3RydWN0dXJlIHRoYXQgaGFzIGEgY291bnRlci4g
V2UgY291bGQgaW5zdGl0dXRlIHRoZSBwb2xpY3kgdGhhdAorLy8gZWFjaCB0aHJlYWQgc2ltcGx5
IGluY3JlbWVudHMgaXRzIG93biBsb2FkIGNvdW50ZXIsIGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1
cmUuIFRoZW4sIGlmIGFueSBzZWFyY2ggdG8KKy8vIHJlc29sdmUgYSBjb2xsaXNpb24gZG9lcyBt
b3JlIHRoYW4gTiBpdGVyYXRpb25zLCB3ZSBjYW4gY29tcHV0ZSBhIGNvbWJpbmVkIGxvYWQgYnkg
c3VtbWluZyB0aGUgbG9hZAorLy8gY291bnRlcnMgb2YgYWxsIG9mIHRoZSB0aHJlYWQgZGF0YSBz
dHJ1Y3R1cmVzLgorLy8KKy8vIENvbmN1cnJlbnRQdHJIYXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUg
R0MsIHNlZXMgYSA5OCUgbm9wIGFkZCByYXRlIGluIFNwZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRo
aXMKKy8vIGZvY3VzZXMgc28gbXVjaCBvbiBjYXNlcyB3aGVyZSB0aGUgdGFibGUgZG9lcyBub3Qg
Y2hhbmdlLgorY2xhc3MgQ29uY3VycmVudFB0ckhhc2hTZXQgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENvbmN1cnJlbnRQdHJIYXNoU2V0KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKworcHVibGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBDb25jdXJyZW50UHRySGFzaFNl
dCgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+Q29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb250YWluc0ltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRkSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxlLmxv
YWRSZWxheGVkKCktPmxvYWQubG9hZFJlbGF4ZWQoKTsKKyAgICB9CisgICAgCisgICAgLy8gT25s
eSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCku
IFRoaXMgZnJlZXMgdXAgbWVtb3J5IHdpdGhvdXQgY2hhbmdpbmcKKyAgICAvLyB0aGUgY29udGVu
dHMgb2YgdGhlIHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRh
YmxlcygpOworICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3Ro
ZXIgdGhyZWFkIGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZyZWVzIHVwIGFsbCBtZW1vcnkgZXhjZXB0
IGZvcgorICAgIC8vIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBoYXNodGFibGUuCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgY2xlYXIoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RydWN0IFRh
YmxlIHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAK
KyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNp
emUpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJu
IHNpemUgLyAyOyB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlz
IGltbXV0YWJsZS4KKyAgICAgICAgdW5zaWduZWQgbWFzazsgLy8gVGhpcyBpcyBpbW11dGFibGUu
CisgICAgICAgIEF0b21pYzx1bnNpZ25lZD4gbG9hZDsKKyAgICAgICAgQXRvbWljPHZvaWQqPiBh
cnJheVsxXTsKKyAgICB9OworICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0
cikKKyAgICB7CisgICAgICAgIHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChwdHIpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHZvaWQqIGNhc3QoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKFQpIDw9IHNpemVvZih2b2lkKiksICJ0eXBlIHRvbyBiaWciKTsKKyAgICAg
ICAgdW5pb24geworICAgICAgICAgICAgdm9pZCogcHRyOworICAgICAgICAgICAgVCB2YWx1ZTsK
KyAgICAgICAgfSB1OworICAgICAgICB1LnB0ciA9IG51bGxwdHI7CisgICAgICAgIHUudmFsdWUg
PSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHUucHRyOworICAgIH0KKyAgICAKKyAgICBib29sIGNv
bnRhaW5zSW1wbCh2b2lkKiBwdHIpIGNvbnN0CisgICAgeworICAgICAgICBUYWJsZSogdGFibGUg
PSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+
bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7Oykgewor
ICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVk
KCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQuCisg
ICAgYm9vbCBhZGRJbXBsKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9
IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5t
YXNrOworICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQo
KTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZFNs
b3codGFibGUsIG1hc2ssIHN0YXJ0SW5kZXgsIGluZGV4LCBwdHIpOworICAgICAgICAgICAgaWYg
KGVudHJ5ID09IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1
bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKTsKKworICAgIHZv
aWQgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIHJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIp
OworICAgIAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+LCA0PiBtX2FsbFRhYmxl
czsKKyAgICBBdG9taWM8VGFibGUqPiBtX3RhYmxlOyAvLyBUaGlzIGlzIG5ldmVyIG51bGwuCisg
ICAgTG9jayBtX2xvY2s7IC8vIFdlIGp1c3QgdXNlIHRoaXMgdG8gY29udHJvbCByZXNpemUgcmFj
ZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb25jdXJyZW50UHRy
SGFzaFNldDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYv
RGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1
YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0
aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0
dXJucyBhIG51bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5
cyByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtl
Rmlyc3QoY29uc3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3Qg
ZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51
bGwgdmVyc2lvbiBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5z
IGZhbHNlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1IEBA
IGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
K2lubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMm
IGZ1bmMpCit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0
aGlzLT5zaXplKCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRp
ZGF0ZSA9IHRha2VGaXJzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAg
ICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBwcmVwZW5kKHRha2VMYXN0
KCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBj
b3VudCsrOworICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAg
cmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBUIERlcXVlPFQsIGlubGluZUNh
cGFjaXR5Pjo6dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICB1bnNpZ25lZCBjb3Vu
dCA9IDA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsNyBAQCB1
c2luZyBXVEY6OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5FIGlu
bGluZQogI2VuZGlmCiAKLSNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAotcHVibGlj
OiBcCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogICAgIHZvaWQqIG9w
ZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIHZvaWQqIG9w
ZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgXApAQCAt
MjYzLDcgKzI2MiwxNSBAQCBwdWJsaWM6IFwKICAgICAgICAgQVNTRVJUKGxvY2F0aW9uKTsgXAog
ICAgICAgICByZXR1cm4gbG9jYXRpb247IFwKICAgICB9IFwKKworI2RlZmluZSBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRCBcCitwdWJsaWM6IFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9J
TVBMIFwKIHByaXZhdGU6IFwKIHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNv
bG9uQWZ0ZXJUaGlzTWFjcm8KIAorI2RlZmluZSBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQgXAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAordHlwZWRlZiBpbnQgX190
aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybworCiAjZW5kaWYgLyogV1RG
X0Zhc3RNYWxsb2NfaCAqLwpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJj
ZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTYgQEAKICNp
bmNsdWRlICJMb2NrLmgiCiAKICNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaD4K
KyNpbmNsdWRlIDx3dGYvU3RhY2tTaG90UHJvZmlsZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAK
K3N0YXRpYyBjb25zdGV4cHIgYm9vbCBwcm9maWxlTG9ja0NvbnRlbnRpb24gPSBmYWxzZTsKKwog
dm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogeworICAgIGlmIChwcm9maWxlTG9ja0NvbnRlbnRp
b24pCisgICAgICAgIFNUQUNLX1NIT1RfUFJPRklMRSg0LCAyLCA1KTsKICAgICBEZWZhdWx0TG9j
a0FsZ29yaXRobTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYv
TG9ja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja2VyLmgJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEyMiw2ICsxMjIsMTIgQEAgTG9ja2VyPExvY2tUeXBlPiBob2xkTG9jayhMb2NrVHlw
ZSYgbG9jawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK0xvY2tlcjxMb2NrVHlw
ZT4gaG9sZExvY2tJZihMb2NrVHlwZSYgbG9jaywgYm9vbCBwcmVkaWNhdGUpCit7CisgICAgcmV0
dXJuIExvY2tlcjxMb2NrVHlwZT4ocHJlZGljYXRlID8gJmxvY2sgOiBudWxscHRyKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2NrZXI8TG9ja1R5cGU+IHRyeUhvbGRMb2Nr
KExvY2tUeXBlJiBsb2NrKQogewogICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+Ojp0cnlMb2Nr
KGxvY2spOwpAQCAtMTM0LDUgKzE0MCw2IEBAIHVzaW5nIFdURjo6TG9ja2VyOwogdXNpbmcgV1RG
OjpOb0xvY2tpbmdOZWNlc3NhcnlUYWc7CiB1c2luZyBXVEY6Ok5vTG9ja2luZ05lY2Vzc2FyeTsK
IHVzaW5nIFdURjo6aG9sZExvY2s7Cit1c2luZyBXVEY6OmhvbGRMb2NrSWY7CiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYv
d3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDEzIEBAIHBy
aXZhdGU6CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFscmVhZHkgcmVmZXIgdG8gYSBmdW5j
dG9yIGJ5IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBsaWZldGltZSBpcwogLy8gZ29vZC4g
VGhpcyBqdXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhhdCBwb2ludHMgdG8geW91ciBmdW5j
dG9yLgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGFsd2F5cyB3cm9uZzoKKy8vCisvLyBhdXRv
IHJlZiA9IHNjb3BlZExhbWJkYVJlZihbLi4uXSAoLi4uKSB7Li4ufSk7CisvLworLy8gQmVjYXVz
ZSB0aGUgc2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIgdG8gdGhlIGxhbWJkYSBieSByZWZlcmVu
Y2UsIGFuZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVyIHRoZQorLy8gc2VtaWNvbG9uLiBVc2Ug
c2NvcGVkTGFtYmRhKCkgaW4gdGhhdCBjYXNlLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25U
eXBlLCB0eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVkTGFtYmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5
cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYVJlZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewpJ
bmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYv
U2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2Ug
V1RGIHsKIC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJh
bCBpZiB5b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlz
IHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3Vs
dFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3Vs
dFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxT
aGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewordGVtcGxhdGU8dHlw
ZW5hbWUgUGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNz
IFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1l
bnRUeXBlcy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJl
c3VsdFR5cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJl
ZFRhc2soKSB7IH0KIApJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xh
c3MgU3RhY2tTaG90IHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3QoKSB7IH0KKyAgICAKKyAgICBB
TFdBWVNfSU5MSU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6
ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgICBtX2FycmF5ID0gc3Rk
OjptYWtlX3VuaXF1ZTx2b2lkKltdPihzaXplKTsKKyAgICAgICAgICAgIGludCBpbnRTaXplID0g
c2l6ZTsKKyAgICAgICAgICAgIFdURkdldEJhY2t0cmFjZShtX2FycmF5LmdldCgpLCAmaW50U2l6
ZSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGludFNp
emUpIDw9IHNpemUpOworICAgICAgICAgICAgbV9zaXplID0gaW50U2l6ZTsKKyAgICAgICAgICAg
IGlmICghbV9zaXplKQorICAgICAgICAgICAgICAgIG1fYXJyYXkgPSBudWxscHRyOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCisgICAgICAgIDogbV9hcnJheShkZWxldGVkVmFsdWVBcnJheSgpKQorICAgICAgICAs
IG1fc2l6ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90JiBvcGVyYXRvcj0o
Y29uc3QgU3RhY2tTaG90JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx2
b2lkKltdPiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4ob3RoZXIubV9zaXpl
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG90aGVyLm1fc2l6ZTsgaS0tOykKKyAgICAgICAg
ICAgIG5ld0FycmF5W2ldID0gb3RoZXIubV9hcnJheVtpXTsKKyAgICAgICAgbV9zaXplID0gb3Ro
ZXIubV9zaXplOworICAgICAgICBtX2FycmF5ID0gV1RGTW92ZShuZXdBcnJheSk7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90KGNvbnN0IFN0YWNrU2hv
dCYgb3RoZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgIH0KKyAgICAKKyAg
ICB2b2lkKiogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LmdldCgpOyB9CisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2FycmF5OyB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAobV9zaXplICE9IG90aGVyLm1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3NpemU7IGktLTspIHsKKyAgICAg
ICAgICAgIGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1fYXJyYXlbaV0pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBtX3NpemU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVf
dCBpID0gbV9zaXplOyBpLS07KQorICAgICAgICAgICAgcmVzdWx0IF49IFB0ckhhc2g8dm9pZCo+
OjpoYXNoKG1fYXJyYXlbaV0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gIW1fc2l6ZSAmJiBtX2FycmF5LmdldCgpID09IGRlbGV0ZWRWYWx1
ZUFycmF5KCk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgU3BlY3RydW08PiBoYXBweS4KKyAg
ICBib29sIG9wZXJhdG9yPihjb25zdCBTdGFja1Nob3QmKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCoqIGRlbGV0ZWRWYWx1ZUFycmF5KCkg
eyByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7
IH0KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbV9hcnJheTsKKyAgICBzaXpl
X3QgbV9zaXplIHsgMCB9OworfTsKKworc3RydWN0IFN0YWNrU2hvdEhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYgc2hvdCkgeyByZXR1cm4gc2hvdC5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdGFja1Nob3QmIGEsIGNvbnN0IFN0
YWNrU2hvdCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Fm
ZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNo
PFN0YWNrU2hvdD4geworICAgIHR5cGVkZWYgU3RhY2tTaG90SGFzaCBIYXNoOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U3RhY2tTaG90PiB7
IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1No
b3RQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2Zp
bGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Rh
dGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJ
RC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNl
Lmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFN0YWNrU2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3RQcm9maWxlcih1bnNp
Z25lZCBudW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCwgdW5zaWduZWQgc3RhY2tzVG9S
ZXBvcnQpCisgICAgICAgIDogbV9udW1GcmFtZXMobnVtRnJhbWVzKQorICAgICAgICAsIG1fZnJh
bWVzVG9Ta2lwKGZyYW1lc1RvU2tpcCkKKyAgICAgICAgLCBtX3N0YWNrc1RvUmVwb3J0KHN0YWNr
c1RvUmVwb3J0KQorICAgIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIlN0YWNrU2hvdFByb2Zp
bGVyIiwgW3RoaXNdICgpIHsgcnVuKCk7IH0pOworICAgIH0KKworICAgIC8vIE5FVkVSX0lOTElO
RSBzbyB0aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0YWJsZS4KKyAgICBORVZFUl9JTkxJTkUg
dm9pZCBwcm9maWxlKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKyAgICAgICAgbV9wcm9maWxlLmFkZChTdGFja1Nob3QobV9udW1GcmFtZXMgKyBtX2Zy
YW1lc1RvU2tpcCkpOworICAgICAgICBtX3RvdGFsQ291bnQrKzsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICBzbGVlcCgxX3MpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworICAgICAgICAgICAgYXV0byBsaXN0ID0gbV9wcm9maWxlLmJ1aWxkTGlz
dCgpOworICAgICAgICAgICAgZGF0YUxvZygiXG5Ib3R0ZXN0IHN0YWNrcyBpbiAiLCBnZXRDdXJy
ZW50UHJvY2Vzc0lEKCksICI6XG4iKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0
LnNpemUoKSwgY291bnQgPSAwOyBpLS0gJiYgY291bnQgPCBtX3N0YWNrc1RvUmVwb3J0OyBjb3Vu
dCsrKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBsaXN0W2ldOworICAgICAgICAg
ICAgICAgIGRhdGFMb2coIlxuVG9wICMiLCBjb3VudCArIDEsICIgc3RhY2s6ICIsIGVudHJ5LmNv
dW50ICogMTAwIC8gbV90b3RhbENvdW50LCAiJVxuIik7CisgICAgICAgICAgICAgICAgU3RhY2tU
cmFjZSB0cmFjZShlbnRyeS5rZXkuYXJyYXkoKSArIG1fZnJhbWVzVG9Ta2lwLCBlbnRyeS5rZXku
c2l6ZSgpIC0gbV9mcmFtZXNUb1NraXApOworICAgICAgICAgICAgICAgIGRhdGFMb2codHJhY2Up
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBXb3JkTG9jayBtX2xvY2s7CisgICAgU3BlY3RydW08U3RhY2tTaG90
LCBkb3VibGU+IG1fcHJvZmlsZTsKKyAgICBkb3VibGUgbV90b3RhbENvdW50IHsgMCB9OworICAg
IHVuc2lnbmVkIG1fbnVtRnJhbWVzOworICAgIHVuc2lnbmVkIG1fZnJhbWVzVG9Ta2lwOworICAg
IHVuc2lnbmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9OworCisjZGVmaW5lIFNUQUNLX1NIT1RfUFJP
RklMRShudW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tzVG9SZXBvcnQpIGRvIHsgXAorICAg
IHN0YXRpYyBTdGFja1Nob3RQcm9maWxlciogc3RhY2tTaG90UHJvZmlsZXI7IFwKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJvZmlsZXJPbmNlRmxhZzsgXAorICAgIHN0ZDo6
Y2FsbF9vbmNlKHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWcsIFtdIHsgc3RhY2tTaG90UHJvZmls
ZXIgPSBuZXcgU3RhY2tTaG90UHJvZmlsZXIobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNr
c1RvUmVwb3J0KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQcm9maWxlci0+cHJvZmlsZSgpOyBcCit9
IHdoaWxlIChmYWxzZSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxl
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlzIGNoYW5nZSBpcyBiZXN0
IHRlc3RlZCB1c2luZyBET00tR0MtaW50ZW5zaXZlCisgICAgICAgIGJlbmNobWFya3MgbGlrZSBT
cGVlZG9tZXRlciBhbmQgRHJvbWFlby4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGFyYWxsZWxp
emVzIHRoZSBET00ncyBvdXRwdXQgY29uc3RyYWludCwgYW5kIG1ha2VzIHNvbWUgc21hbGwgY2hh
bmdlcyB0byBtYWtlIHRoaXMgbW9yZQorICAgICAgICBzY2FsYWJsZS4KKworICAgICAgICAqIEZv
cndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisg
ICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJh
aW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6
OkRPTUdDT3V0cHV0Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENv
bnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
R0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpET01H
Q091dHB1dENvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVFdmVudFRhcmdldERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEpOgorCiAyMDE3LTEyLTAxICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxz
LnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZp
Y2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRMb2FkZXIuY3Bw
CiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAogYmluZGluZ3MvanMvQ2FsbFRy
YWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmluZGluZ3MvanMvRE9NR0NPdXRw
dXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAogYmluZGlu
Z3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdtYSBvbmNlCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KKwpJbmRleDog
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0
aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEsMiAr
MCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WaXNpdGluZ1Rp
bWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUxLDYgKzM1
MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzE2NkUxQzg2OUQ4
MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAwNDQzQzNGIC8qIEludGVyc2Vj
dGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRlcnNlY3Rpb25PYnNl
cnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2Vj
dGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIy
IC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIyIC8qIERPTUdDT3V0cHV0
Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhp
Y3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjYy
NTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1MkQxOERFMUIxNTAwQTA3QzA1
IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9sbGluZ1Ry
ZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTQ0
Niw2ICs1NDQ3LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpTRE9NUXVhZEN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWRDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25z
dHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUdDT3V0
cHV0Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTBF
MUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEwMDk3NUZERCAvKiBDU1NQcm9wZXJ0
aWVzLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpzb247IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBk
YXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0xh
eWVyVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc4MTYy
REY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjI5ODAsNiArMjI5ODMsOCBAQAogCQkJCTk1MjA3NjAyMUYyNjc1Rjkw
MDdEMkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJCQkwRjYwRjMyOTFERkJCMTA0MDA0
MTZENkMgLyogQ29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAv
KiBDb21tb25WTS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2NjMwMDc5QzVCMiAvKiBET01HQ091
dHB1dENvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBE
T01HQ091dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUxNkFEMjFGMzUyNTIwMDAzNEI2QkYg
LyogRE9NUHJvbWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0RDAwMEQ4MTdFIC8q
IERPTVdyYXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIxRTAwMEQ4MTdFIC8q
IERPTVdyYXBwZXJXb3JsZC5oICovLApAQCAtMjc1NDcsNiArMjc1NTIsNyBAQAogCQkJCTUxOEY1
MDA0MTk0Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0b24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0
Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQTdDMUYxODgzMjJGQzAwQzk1NEI1
IC8qIEpTR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgyQjc1MjExOThDQjZC
MDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTRE
MTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFp
bnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJX
ZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvTWFy
a2VkQmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0cmFp
bnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKKyAgICA6IE1hcmtpbmdDb25z
dHJhaW50KCJEb21vdXQiLCAiRE9NIE91dHB1dCBDb25zdHJhaW50IiwgQ29uc3RyYWludFZvbGF0
aWxpdHk6OlNlbGRvbUdyZXllZCkKKyAgICAsIG1fdm0odm0pCisgICAgLCBtX2NsaWVudERhdGEo
Y2xpZW50RGF0YSkKKyAgICAsIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24odm0uaGVhcC5tdXRhdG9y
RXhlY3V0aW9uVmVyc2lvbigpKQoreworfQorCitET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01H
Q091dHB1dENvbnN0cmFpbnQoKQoreworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gRE9NR0NP
dXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgSGVhcCYg
aGVhcCA9IG1fdm0uaGVhcDsKKyAgICAgICAgICAgIAorICAgIGlmIChoZWFwLm11dGF0b3JFeGVj
dXRpb25WZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVyc2lvbikKKyAgICAgICAgcmV0dXJu
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgIAorICAgIG1f
bGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisK
KyAgICBSRUxFQVNFX0FTU0VSVChtX3Rhc2tzLmlzRW1wdHkoKSk7CisgICAgbV9jbGllbnREYXRh
LmZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCisgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1
YnNwYWNlKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAg
ICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAg
ICAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlzaXRPdXRwdXRDb25z
dHJhaW50cyhjZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV90YXNrcy5hcHBlbmQoc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKGZ1bmMpKTsKKyAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICByZXR1
cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDsKK30KKyAgICAgICAgCit2b2lkIERP
TUdDT3V0cHV0Q29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIGZvciAoYXV0byYgdGFzayA6IG1fdGFza3MpCisgICAgICAgIHRhc2stPnJ1
bih2aXNpdG9yKTsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6Zmlu
aXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgbV90YXNrcy5jbGVhcigp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxoZWFwL01hcmtp
bmdDb25zdHJhaW50Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNWTUNsaWVudERh
dGE7CisKK2NsYXNzIERPTUdDT3V0cHV0Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdD
b25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYs
IEpTVk1DbGllbnREYXRhJik7CisgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOworICAgIAor
cHJvdGVjdGVkOgorICAgIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKEpT
Qzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChK
U0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJ
bXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZN
JiBtX3ZtOworICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7CisgICAgdWludDY0X3Qg
bV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChTbG90VmlzaXRvciYpPj4+IG1fdGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGll
bnREYXRhLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwx
MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEu
aCIKIAorI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgPGhlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IuaD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJr
aW5nQ29uc3RyYWludC5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5o
PgotI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9T
dWJzcGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNp
bmNsdWRlIDxydW50aW1lL1ZNLmg+CkBAIC03NCw0MyArNzIsNyBAQCB2b2lkIEpTVk1DbGllbnRE
YXRhOjppbml0Tm9ybWFsV29ybGQoVk0qCiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEg
PSBuZXcgSlNWTUNsaWVudERhdGEoKnZtKTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERh
dGE7IC8vIH5WTSBkZWxldGVzIHRoaXMgcG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFp
bnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2Mi
LCAiV2ViQ29yZSBPdXRwdXQgQ29uc3RyYWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEs
IGxhc3RFeGVjdXRpb25WZXJzaW9uID0gdm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24o
KV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0JikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkg
PT0gbGFzdEV4ZWN1dGlvblZlcnNpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4
ZWN1dGlvblZlcnNpb24oKTsKLQotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhl
IHZpc2l0IGNvdW50IGhlcmUgb3Vyc2VsdmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlz
IGFkZHMKLSAgICAgICAgICAgIC8vIG9wYXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJl
IHRlcm1pbmF0aW9uIHlldC4gVGhlIHdheSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAg
ICAgIC8vIGNvbnN0cmFpbnQgc29sdmVyIGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQu
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9
IGhlYXAubnVtT3BhcXVlUm9vdHMoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhp
cyBwYXJhbGxlbCEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAg
ICAgICAgICBjbGllbnREYXRhLT5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAg
ICAgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZd
IChIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bVJldmlzaXRlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nKCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzbG90VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51
bU9wYXF1ZVJvb3RzKCkgLSBudW1PcGFxdWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFk
ZE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoY29uc3RyYWludCkpOworICAgIHZtLT5oZWFwLmFk
ZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6bWFrZV91bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50
Pigqdm0sICpjbGllbnREYXRhKSk7CiAgICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFs
V29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5
cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRl
ICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNs
dWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVy
Tm9kZUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAg
LTIxNjIsNyArMjE2MywxNCBAQCBFdmVudFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0
YSgpCiAKIEV2ZW50VGFyZ2V0RGF0YSogTm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5
KCkKIHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9j
ayk7CisgICAgLy8gTm90IGhvbGRpbmcgdGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBl
ZCBhY2NlbGVyYXRlcyBwYXJhbGxlbCBjb25zdHJhaW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8g
Y2FsbHMgdGhpcyBmdW5jdGlvbiBmcm9tIG1hbnkgdGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWlu
dCBzb2x2aW5nIGNhbiBoYXBwZW4gd2l0aCB0aGUgd29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0
b3BwZWQsIGJ1dCBpZiB3ZSBkbyBpdCB3aXRoIGEgcnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1
c3VhbGx5IG1peGluZyBjb25zdHJhaW50CisgICAgLy8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsu
IFRoZXJlZm9yZSwgdGhlIG1vc3QgbGlrZWx5IHRpbWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBs
b2NrIGlzIHdoZW4gdGhlCisgICAgLy8gd29ybGQgaXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0
byBob2xkIHRoZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9w
cGVkIHdvcmxkCisgICAgLy8gbWVhbnMgdGhhdCB3ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZl
bnQgdGFyZ2V0IGRhdGEgbWFwLgorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYoc19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2
bSAmJiB2bS0+aGVhcC53b3JsZElzUnVubmluZygpKTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJn
ZXREYXRhKCkgPyBldmVudFRhcmdldERhdGFNYXAoKS5nZXQodGhpcykgOiBudWxscHRyOwogfQog
CkBAIC0yMTcxLDYgKzIxNzksOSBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50
VGFyZ2V0CiAgICAgaWYgKGhhc0V2ZW50VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2
ZW50VGFyZ2V0RGF0YU1hcCgpLmdldCh0aGlzKTsKIAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9u
Vk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1
bm5pbmcoKSk7CisKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRh
TWFwTG9jayk7CiAgICAgc2V0SGFzRXZlbnRUYXJnZXREYXRhKHRydWUpOwogICAgIHJldHVybiAq
ZXZlbnRUYXJnZXREYXRhTWFwKCkuYWRkKHRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJn
ZXREYXRhPigpKS5pdGVyYXRvci0+dmFsdWU7CkBAIC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRh
cmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVu
dFRhcmdldERhdGEoKQogeworICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2
ZW50VGFyZ2V0RGF0YU1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEyLTAx
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWlu
dCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtz
OiBBZGQgc3BsYXktbGF0ZW5jeSB0ZXN0LCBzaW5jZSB0aGlzIGNoYW5nZSBuZWVkZWQgdG8gYmUg
Y2FyZWZ1bGx5IHZhbGlkYXRlZCB3aXRoIHRoYXQgYmVuY2htYXJrLgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOiBBZGRlZC4gVGhpcyBoYXMgdW5p
dCB0ZXN0cyBvZiB0aGUgbmV3IGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmUuIFRoZSB0ZXN0cyBm
b2N1cyBvbiBjb3JyZWN0bmVzcyB1bmRlciBzZXJpYWwgZXhlY3V0aW9uLCB3aGljaCBhcHBlYXJz
IHRvIGJlIGVub3VnaCBmb3Igbm93IChpdCdzIHNvIGVhc3kgdG8gY2F0Y2ggYSBjb25jdXJyZW5j
eSBidWcgYnkganVzdCBydW5uaW5nIHRoZSBHQykuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKToKKwogMjAxNy0xMi0wMSAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gQWRkIFNhbXBsZU1hcC5jcHAgQVBJIHRlc3RzIHRvIENNYWtl
CkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkocmV2aXNpb24gMjI1NDAzKQorKysgVG9v
bHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUw
LDggQEAgTE9OR1NQSURFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhfUEFUSCA9
IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2OC12NiIK
IFRBSUxCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5jaDkwMDAi
CiBNSUNST0JFTkNITUFSS1NfUEFUSCA9IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3RzIiArICJt
aWNyb2JlbmNobWFya3MiCi1PQ1RBTkVfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19Q
QVRIICsgIk9jdGFuZSIgKyAid3JhcHBlcnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRIID0gUEVS
Rk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEggPSBPUEVO
U09VUkNFX09DVEFORV9QQVRIICsgIndyYXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVSRk9STUFO
Q0VURVNUU19QQVRIICsgIkpTQmVuY2giCiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFOQ0VURVNU
U19QQVRIICsgIlNpeFNwZWVkIiArICJ0ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBF
UkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04NDEsNiAr
ODQyLDIwIEBAIGNsYXNzIFNpbmdsZUZpbGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKICAgZW5k
CiBlbmQKIAorIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBt
dXN0IGJlIGxvYWRlZCBpbiBpdHMgb3duIGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1lIChpLmUu
IHJ1bigpKSwgYnV0IHJldHVybnMgaXRzIHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitjbGFzcyBT
aW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpi
ZW5jaFBhdGgKKyAgCisgIGRlZiBpbml0aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVuY2hQYXRo
ID0gYmVuY2hQYXRoCisgIGVuZAorICAKKyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmlsZUN1c3Rv
bVRpbWVkQmVuY2htYXJrCisgIGVuZAorZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMg
b2Ygb25lIG9yIG1vcmUgZGF0YSBmaWxlcyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHks
IGZvbGxvd2VkCiAjIGJ5IGEgY29tbWFuZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNsYXNzIE11
bHRpRmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYg
ZW1pdEJlbmNoUnVuQ29kZUZpbGUobmFtZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJsZVB1dHMo
JHN0ZGVycixmaWxlLCIgICAgaWYgKF9fYmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0pIHByaW50
KFwiI3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hl
cl9pbmRleCAtICN7d2FybXVwfSkgKyBcIjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVmb3JlKS9f
X3J1bnMpKTsiKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAgICAgICAg
IGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29tbWFuZC5q
c30iKQorICAgICAgZWxzaWYgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRp
bWVkQmVuY2htYXJrCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBf
X2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3Rk
ZXJyLGZpbGUsIiAgIHZhciBfX2JlbmNoZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsiKQorICAg
ICAgICAkcmVydW4udGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIg
ICBydW4oX19iZW5jaGVyX3doYXQsIF9fYmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAgIH0KKyAg
ICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVzdWx0LnZh
bHVlID09IG51bGwpIikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICAgIHRo
cm93IG5ldyBFcnJvcihcIk51bGwgcmVzdWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0
ZGVycixmaWxlLCIgICByZXR1cm4gX19iZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAgICAgICBk
b3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCisgICAgICAgICR3YXJtdXAudGltZXMgeworICAg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJh
bXMuYmVuY2hQYXRoLmluc3BlY3R9KSIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZp
bGUsImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KKyAg
ICAgICAgJGlubmVyLnRpbWVzIHsKKyAgICAgICAgICB8IGlubmVySW5kZXggfAorICAgICAgICAg
IGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7
cGxhbi5pdGVyYXRpb259OiAje2lubmVySW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7
YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSk7IikKKyAgICAgICAgICBkb3VibGVQdXRz
KCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAg
ICAgICAgfQogICAgICAgZWxzZQogICAgICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJhbXMua2lu
ZCA9PSA6c2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKQEAgLTE1
OTQsNiArMTYyOCwxOSBAQCBjbGFzcyBPY3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQKIAorY2xh
c3MgQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBp
bml0aWFsaXplKG5hbWUsIGZ1bGxQYXRoKQorICAgIEBuYW1lID0gbmFtZQorICAgIEBmdWxsUGF0
aCA9IGZ1bGxQYXRoCisgIGVuZAorICAKKyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisgICAgZW1p
dEJlbmNoUnVuQ29kZShmdWxsbmFtZSwgcGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2ht
YXJrUGFyYW1ldGVycy5uZXcoZW5zdXJlRmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0iLCBAZnVs
bFBhdGgpKSkKKyAgZW5kCitlbmQKKwogY2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGluY2x1ZGUg
QmVuY2htYXJrCiAgIApAQCAtMzAxMCw2ICszMDU3LDcgQEAgYmVnaW4KICAgICB8IGFyZ3MgfAog
ICAgIE9DVEFORS5hZGQgT2N0YW5lQmVuY2htYXJrLm5ldygqYXJncykKICAgfQorICBPQ1RBTkUu
YWRkIEN1c3RvbVRpbWVkQmVuY2htYXJrLm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVOU09VUkNF
X09DVEFORV9QQVRIICsgInNwbGF5LmpzIikudG9fcykKIAogICBLUkFLRU4gPSBCZW5jaG1hcmtT
dWl0ZS5uZXcoIktyYWtlbiIsIDphcml0aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0YXIiLCAi
YXVkaW8tYmVhdC1kZXRlY3Rpb24iLCAiYXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcg
QEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dU
Ri9CbG9vbUZpbHRlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ1N0
cmluZy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ2hlY2tlZEFyaXRo
bWV0aWNPcGVyYXRpb25zLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9D
b25jdXJyZW50UHRySGFzaFNldC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvQ29uZGl0aW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Dcm9z
c1RocmVhZFRhc2suY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVN
YXRoLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIw
MEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBs
YXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBG
NSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3Jt
VXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMkMyMEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBU
aW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNwcCAqLzsgfTsKKwkJMEYzMENCNUMxRkNF
MTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAv
KiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERF
MzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyog
V0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovOyB9OwogCQkwRjRGRkE5RTFFRDNBQTg1
MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYg
LyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gKi87IH07CiAJCTBGNTY1MUY3MUZDRTRE
REMwMDMxMEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTY1MUY2MUZDRTREREIwMDMx
MEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5tbSAqLzsgfTsKQEAgLTEwNzIs
NiArMTA3Myw3IEBACiAJCTBGMTM5RTc1MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRyLm1t
OyBwYXRoID0gY29jb2EvV2Vha09iakNQdHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTdCQkQ0MTVBRjZDNEQwMDdBQjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dl
YlByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29y
ZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFz
aFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2NkMw
MERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAv
KiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRGRkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJTy5m
cmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lz
dGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNE
S1JPT1Q7IH07CkBAIC0yNTkzLDYgKzI1OTUsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQx
RTRCRiAvKiBBdG9taWNTdHJpbmcuY3BwICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEy
QSAvKiBCbG9vbUZpbHRlci5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8q
IENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNFMTc5
MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFC
N0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2
MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRUYXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzND
MDA1QjFBMTQgLyogQ1N0cmluZy5jcHAgKi8sCkBAIC0zMTc5LDYgKzMxODIsNyBAQAogCQkJCTdD
ODNERUY2MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZF
QkNGMyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZD
MDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQw
QTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFz
aFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJy
ZW50UHRySGFzaFNldC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CisKK25hbWVzcGFjZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJpbmcg
dGhhdCB0ZWxscyB0aGlzIHRoaW5nIHdoYXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2ZW4g
bnVtYmVyIG9mIGNoYXJhY3RlcnMuCisvLyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21tYW5k
cy4gQ29tbWFuZHM6CisvLworLy8gK3ggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3RzICd4
JyB0byBhIHZvaWQqKSBhbmQgYXNzZXJ0cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFkZHMg
J3gnIHRvIHRoZSBzZXQgYW5kIGFzc2VydHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4KKy8v
ID14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3NlcnRz
IHRoYXQgJ3gnIGlzIG5vdCBpbiB0aGUgc2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBjb21t
YW5kcykKK3sKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25zdCBj
aGFyKiBjb21tYW5kID0gY29tbWFuZHM7IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29tbWFu
ZCArPSAyKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pihjb21tYW5kWzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZFsw
XSkgeworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5hZGQo
cHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAg
ICBFWFBFQ1RfRkFMU0Uoc2V0LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICc9JzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVD
VF9GQUxTRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAgICBk
b1Rlc3QoIiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxl
bWVudCkKK3sKKyAgICBkb1Rlc3QoIit4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJl
bnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rlc3Qo
Iit4IXgheCF4IXgheCF4IXgheCF4IXg9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVu
dFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4
IXgheCF4IXgheCF4IXgheCF4PXgteS0wIXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgi
KTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRz
KQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28r
cCthK3MrZCtmK2craCtqK2srbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStT
K0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9
dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1V
PUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdU
Rl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7Cisg
ICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2Ercytk
K2YrZytoK2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0cr
SCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1p
PW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9
QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAhcSF3
IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIh
VCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3
ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4h
bSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEy
ITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoh
eCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFW
IUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWch
aCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFL
IUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAh
YSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFE
IUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQh
eSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJ
IU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAh
cSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFF
IVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUh
NiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFi
IW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0h
MSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFs
IXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVgh
QyFWIUIhTiFNIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3Rz
T2ZFbGVtZW50c0FuZFF1ZXJ5U29tZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0
KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2or
az0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1r
LWwtei14LWMtdi1iLW4tbS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVot
WC1DLVYtQi1OLU0rbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitH
K0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9
aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1Q
PUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25j
dXJyZW50UHRySGFzaFNldCwgQWRkU29tZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRUaGVS
ZXN0QW5kUXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIr
Mys0KzUrNis3KzgrOSswK3ErdytlK3IrdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCEx
ITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIh
dCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFl
IXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitnK2gr
aitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1q
PWstbC16LXgtYy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwt
Wi1YLUMtVi1CLU4tTStsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtG
K0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9
dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1P
PVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328213</attachid>
            <date>2017-12-01 22:25:26 -0800</date>
            <delta_ts>2017-12-01 23:53:34 -0800</delta_ts>
            <desc>latest</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>250817</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIEl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgYSBzbWFs
bAorICAgICAgICBTcGVlZG9tZXRlciBzcGVlZC11cCAoMC42OCUgZmFzdGVyIHdpdGggcCA9IDAu
MDM2KS4KKyAgICAgICAgCisgICAgICAgIFRoZSBjb25zdHJhaW50IHNvbHZlciBzdXBwb3J0cyBy
dW5uaW5nIGNvbnN0cmFpbnRzIGluIHBhcmFsbGVsIGluIHR3byBkaWZmZXJlbnQgd2F5czoKKyAg
ICAgICAgCisgICAgICAgIC4gQ29uc3RyYWludHMgdGhhdCBjYW4gdG9sZXJhdGUgb3RoZXIgY29u
c3RyYWludHMgcnVubmluZworICAgICAgICBjb25jdXJyZW50bHkgdG8gdGhlbSAoCisgICAgICAg
IAorICAgICAgICAtIFJ1biBtdWx0aXBsZSBjb25zdHJhaW50cyBpbiBwYXJhbGxlbCB0byBlYWNo
IG90aGVyLiBUaGlzIG9ubHkgd29ya3MgZm9yIGNvbnN0cmFpbnRzIHRoYXQgY2FuCisgICAgICAg
ICAgdG9sZXJhdGUgb3RoZXIgY29uc3RyYWludHMgcnVubmluZyBjb25jdXJyZW50bHkgdG8gdGhl
bSAoY29uc3RyYWludC5jb25jdXJyZW5jeSgpID09CisgICAgICAgICAgQ29uc3RyYWludENvbmN1
cnJlbmN5OjpDb25jdXJyZW50KS4gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBraW5kIG9mIHBhcmFs
bGVsaXNtIHRoYXQgdGhlCisgICAgICAgICAgY29uc3RyYWludCBzb2x2ZXIgc3VwcG9ydHMuIEFs
bCBjb25zdHJhaW50cyBleGNlcHQgdGhlIEpTQyBTUEkgY29uc3RyYWludHMgYXJlIGNvbmN1cnJl
bnQuIFdlCisgICAgICAgICAgY291bGQgcHJvYmFibHkgbWFrZSB0aGVtIGNvbmN1cnJlbnQsIGJ1
dCBJJ20gcGxheWluZyBpdCBzYWZlIGZvciBub3cuCisgICAgICAgIAorICAgICAgICAtIEEgY29u
c3RyYWludCBjYW4gY3JlYXRlIHBhcmFsbGVsIHdvcmsgZm9yIGl0c2VsZiwgd2hpY2ggdGhlIGNv
bnN0cmFpbnQgc29sdmVyIHdpbGwgaW50ZXJsZWF2ZQorICAgICAgICAgIHdpdGggb3RoZXIgcGFy
YWxsZWwgd29yayBmcm9tIG90aGVyIGNvbnN0cmFpbnRzLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9y
dCB0aGF0IGl0IGhhcyBwYXJhbGxlbAorICAgICAgICAgIHdvcmsgYnkgcmV0dXJuaW5nIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlv
bi4gVGhlbiB0aGUKKyAgICAgICAgICBzb2x2ZXIgd2lsbCBhbGxvdyB0aGF0IGNvbnN0cmFpbnQn
cyBkb1BhcmFsbGVsV29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJr
ZXIKKyAgICAgICAgICB0aHJlYWRzIGFzIGFyZSBhdmFpbGFibGUsIGZvciBhcyBsb25nIGFzIHRo
YXQgZnVuY3Rpb24gd2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9z
c2libGUgdG8gaGF2ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBh
cmFsbGVsIHdvcmsuCisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVt
ZW50ZWQgaW4gdGVybXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1
cm5zIG91dCB0byBiZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAg
ICAgICAKKyAgICAgICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAg
ICAgICAKKyAgICAgICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEg
U2xvdFZpc2l0b3IuIFRoZSBhd2Vzb21lIHRoaW5nIGFib3V0IHRoaXMgZGVzaWduIGlzIHRoYXQK
KyAgICAgICAgICB3ZSBkb24ndCBoYXZlIHRvIGVhZ2VybHkgbG9hZC1iYWxhbmNlIHRoZSB3b3Jr
IGNyZWF0ZWQgYnkgdGhlIHNvbHZlci4gVGhlIHNvbHZlciB3aWxsIGNyZWF0ZQorICAgICAgICAg
IHdvcmsgb24gdGhlIGxvY2FsIHRocmVhZCdzIFNsb3RWaXNpdG9yLiBXaGVuIHRoZSBzb2x2ZXIg
aXMgZG9uZSAic3RlYWxpbmciIHRoZSBtYXJrZXIgdGhyZWFkLAorICAgICAgICAgIHRoYXQgdGhy
ZWFkIHdpbGwgaGF2ZSB3b3JrIGl0IGNhbiBzdGFydCBkb2luZyBhcyBzb29uIGFzIHdlIHN0YXJ0
IGRyYWluaW5nLiBCZWZvcmUgdGhpcyBjaGFuZ2UsCisgICAgICAgICAgd2UgaGFkIHRvIGNvbnRy
aWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkgdGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9i
YWwgd29ya2xpc3Qgc28gdGhhdCBpdAorICAgICAgICAgIGNvdWxkIGJlIGRpc3RyaWJ1dGVkIHRv
IHRoZSBtYXJrZXIgdGhyZWFkcyBieSBsb2FkIGJhbGFuY2luZy4gSXQncyBsaWtlbHkgdGhhdCB0
aGUgZ2xvYmFsLQorICAgICAgICAgIHdvcmtsaXN0LWJhc2VkIGxvYWQgYmFsYW5jZXIgd2lsbCBo
YXZlIHRvIGtpY2sgaW4gc2hvcnRseSBhZnRlciBjb25zdHJhaW50IHNvbHZpbmcgc2luY2UgdGhl
CisgICAgICAgICAgc29sdmVyJ3MgbG9hZCBiYWxhbmNlciBtYWtlcyBubyBhdHRlbXB0IHRvIGJh
bGFuY2Ugd29yayBwcm9kdWNlZCAoaXQncyBvbmx5IGJhbGFuY2luZyB0aW1lCisgICAgICAgICAg
c3BlbnQpLiBCdXQgdGhpcyBzbWFsbCBvcHBvcnR1bml0eSB0byBhdm9pZCBsb2FkIGJhbGFuY2lu
ZyBtaWdodCBiZSBjb250cmlidXRpbmcgYSBiaXQgdG8gdGhlCisgICAgICAgICAgc3BlZWQtdXAu
CisgICAgICAgIAorICAgICAgICBBIGxvdCBvZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcg
aXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEgc3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcwor
ICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFi
bGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0
aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQgY29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2Vk
IGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRoaXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZl
cnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVsIGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxs
b2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMuCisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJh
bGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBvdXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0
aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAgICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0
b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5leHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0
IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4u
IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9u
ZQorICAgICAgICB3aGVuIGl0IHJldHVybnMgYSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0
aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAg
ICBkb25lIGlzIGluZGljYXRlZCBieSBudWxsKS4KKworICAgICAgICAqIEFQSS9KU01hcmtpbmdD
b25zdHJhaW50UHJpdmF0ZS5jcHA6CisgICAgICAgIChKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdD
b25zdHJhaW50KToKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbToKKyAgICAgICAg
KHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKToKKyAgICAgICAgKHNjYW5FeHRlcm5hbFJlbWVtYmVy
ZWRTZXQpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnZpc2l0V2Vha2x5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKToKKyAgICAgICAgKEpTQzo6c2hvdWxkTWFya1RyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RG
R1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20u
aDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5GaXhwb2ludFBo
YXNlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcFRoZVBlcmlwaGVyeSk6CisgICAgICAgIChK
U0M6OkhlYXA6OnJlc3VtZVRoZVBlcmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENv
cmVDb25zdHJhaW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnNldEJvbnVzVmlzaXRvclRhc2sp
OgorICAgICAgICAoSlNDOjpIZWFwOjpydW5UYXNrSW5QYXJhbGxlbCk6CisgICAgICAgIChKU0M6
OkhlYXA6OmZvckVhY2hTbG90VmlzaXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFw
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndvcmxkSXNSdW5uaW5nIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6cnVuRnVuY3Rpb25JblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL0hlYXBJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndvcmxkSXNTdG9wcGVkIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjppbmNyZW1l
bnREZWZlcnJhbERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lm
TmVlZGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZSk6CisgICAgICAgICogaGVh
cC9MYXJnZUFsbG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01h
cmtlZCk6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6aXNNYXJrZWRDb25jdXJyZW50
bHkpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTG9ja0R1cmluZ01hcmtpbmcuaDoKKyAgICAg
ICAgKEpTQzo6bG9ja0R1cmluZ01hcmtpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5
QmxvY2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAg
ICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRU
b01hcmspOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWQpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjphY3RpdmVXZWFrU2V0c0JlZ2luKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFj
dGl2ZVdlYWtTZXRzRW5kKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Om5ld0FjdGl2ZVdl
YWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50Ojp3b3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9Q
YXJhbGxlbFdvcmspOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFy
YWxsZWxXb3JrKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxX
b3JrSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxl
bFdvcmtJbXBsKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpsYXN0RXhlY3V0ZVBhcmFsbGVsaXNtIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnBhcmFsbGVsaXNtIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHA6CisgICAgICAgIChK
U0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCk6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwpOgorICAgICAgICAoSlNDOjpN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpFeGVjdXRpb25Db250ZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OnNob3VsZFRpbWVPdXQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29u
dGV4dDo6ZHJhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNl
dDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkRXhlY3V0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpleGVjdXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29u
c3RyYWludFNldC5oOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6Ok1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
On5NYXJraW5nQ29uc3RyYWludFNvbHZlcik6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpkaWRWaXNpdFNvbWV0aGluZyBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OmRyYWluKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OmNvbnZlcmdlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1
bkV4ZWN1dGlvblRocmVhZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVy
OjpkaWRFeGVjdXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmg6
IEFkZGVkLgorICAgICAgICAqIGhlYXAvT3BhcXVlUm9vdFNldC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGhlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQ
YXJhbGxlbFNvdXJjZUFkYXB0ZXI6OlBhcmFsbGVsU291cmNlQWRhcHRlcik6CisgICAgICAgIChK
U0M6OmNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcik6CisgICAgICAgICogaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5n
Q29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAg
KEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToKKyAgICAg
ICAgKEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKToKKyAgICAgICAg
KiBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAv
U2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJr
aW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dXBkYXRlTXV0
YXRvcklzU3RvcHBlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9w
cGVkSXNVcFRvRGF0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluSW5Q
YXJhbGxlbFBhc3NpdmVseSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVy
bWluYXRpb24pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVS
b290VHJpU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpt
ZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xv
dFZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29uc3QpOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6dm0pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0gY29uc3QpOgorICAgICAg
ICAqIGhlYXAvU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxB
bGxvY2F0b3JTb3VyY2UpOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0
eU1hcmtlZEJsb2NrU291cmNlKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAg
ICogaGVhcC9TdWJzcGFjZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbCk6CisgICAgICAgICogaGVhcC9WaXNpdENvdW50ZXIuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OlZpc2l0Q291bnRlcjo6VmlzaXRDb3VudGVyKToKKyAgICAg
ICAgKEpTQzo6VmlzaXRDb3VudGVyOjp2aXNpdENvdW50IGNvbnN0KToKKyAgICAgICAgKiBoZWFw
L1Zpc2l0aW5nVGltZW91dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6V2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNDaGVh
cER1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXJrSWZDaGVhcCk6CisKIDIw
MTctMTEtMzAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAg
ICAgW0pTQ10gVXNlIEpTRml4ZWRBcnJheSBmb3Igb3BfbmV3X2FycmF5X2J1ZmZlcgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDAsMTMgKzUwMCwx
NiBAQCBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3Bw
CiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKIGhlYXAvTWFya1N0YWNrLmNwcAoraGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAog
aGVhcC9NYXJrZWRCbG9jay5jcHAKIGhlYXAvTWFya2VkU3BhY2UuY3BwCiBoZWFwL01hcmtpbmdD
b25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKK2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL011
dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCiBoZWFwL1Ns
b3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAogaGVhcC9T
dG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUu
Y3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFy
a2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBA
QAogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludC5oIgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgor
I2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKQEAgLTcyLDExICs3MSwxMSBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0Nv
bnN0cmFpbnQoCiAgICAgLy8gZWxzZSBnZXRzIG1hcmtlZC4KICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5ID0gQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZzsK
ICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25z
dHJhaW50PigKKyAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50PigKICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5k
ZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFj
aykpLCAiKSIpLAogICAgICAgICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIs
IGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNv
bnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAg
ICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsKICAgICAg
ICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAgICAgbWFya2VyLk1h
cmsgPSBtYXJrOwpAQCAtODQsNyArODMsOCBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2lu
Z0NvbnN0cmFpbnQoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbnN0cmFpbnRDYWxsYmFj
aygmbWFya2VyLCB1c2VyRGF0YSk7CiAgICAgICAgIH0sCi0gICAgICAgIHZvbGF0aWxpdHkpOwor
ICAgICAgICB2b2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3k6OlNlcXVl
bnRpYWwpOwogICAgIAogICAgIHZtLmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShj
b25zdHJhaW50KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zp
cnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4Myw5ICsyODMs
OCBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6CiAgICAgICAgIHdo
aWxlICghc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB2b2lkKiBuZXh0Um9vdCA9IHN0
YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAg
IGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKG5leHRSb290KSA9PSBUcnVl
VHJpU3RhdGUpCisgICAgICAgICAgICBpZiAoIXZpc2l0b3IuYWRkT3BhcXVlUm9vdChuZXh0Um9v
dCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QobmV4dFJvb3QpOwogCiAgICAgICAgICAgICBhdXRvIGFwcGVuZE93bmVkT2JqZWN0
cyA9IFsmXSB7CiAgICAgICAgICAgICAgICAgTlNNYXBUYWJsZSAqb3duZWRPYmplY3RzID0gW2V4
dGVybmFsT2JqZWN0R3JhcGggb2JqZWN0Rm9yS2V5OnN0YXRpY19jYXN0PGlkPihuZXh0Um9vdCld
OwpAQCAtMzI3LDggKzMyNiw2IEBAIHZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6
OlZNJiAKICAgICAgICAgfQogICAgICAgICBbZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHJlbW92ZUFs
bE9iamVjdHNdOwogICAgIH0KLQotICAgIHZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwogfQog
CiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVG
b3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87
IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFF
M0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9
OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29y
bGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5
NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBE
RkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZH
V29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmgg
Ki87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFF
MUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwpAQCAtMjkxLDYgKzI5
MCw3IEBACiAJCTBGNDBFNEE3MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzMyMUM0NUYzNUMw
MDcyNDUwQiAvKiBBaXJPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBODFDNDk3Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlR2Vu
ZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MEU0QTkxQzQ5N0Y3
NDAwQTU3N0ZBIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2Rl
VXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjQxNTQ1QjFGRDIwQjIyMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQxNTQ1QTFGRDIw
QjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhG
IC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkx
NDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZp
cnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZC
MDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0zMTIsNiArMzEyLDkgQEAKIAkJMEY0QTM4RkExQzhFMTNERjAw
MTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEI5
NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0
IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVt
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qzkx
NjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovOyB9OworCQkwRjREOEM3NDFG
QzdBOTdBMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi87IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50
UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjREOEM3
ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzc3MUZDQTNDRjMwMDFE
MzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBB
aXJGaXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxs
cy5oICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9OwogCQkwRjRGODI4ODFFMkZGREUwMDA3
NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAw
NzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzU0LDYgKzM1Nyw3
IEBACiAJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDUyMTVEMDcwNTEw
MDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaCAqLzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0
ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyB9OworCQkwRjY0NTMxODFG
RDI0NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjQ1MzE1MUZEMjQ2QTAwMDI0
MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovOyB9OwogCQkwRjY0QjI3MjFB
Nzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5
U3dpdGNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYg
LyogQ2FsbEVkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY0RUFGMzFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NEVBRjIxQzRFQ0Qw
NjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLzsgfTsKQEAgLTQ0Niw2ICs0NTAsOCBAQAog
CQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFBRTlDQzMzMDAw
RDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi87IH07CiAJCTBGOUQ0QzBEMUMzRTFDMTEwMDZD
RDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRp
b25UYXJnZXQuaCAqLzsgfTsKIAkJMEY5RDRDMTExQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlLmggKi87IH07CisJCTBGOURBQTA5MUZEMUMzQ0YwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyLmggKi87IH07CisJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNv
dXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCAq
LzsgfTsKIAkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuaCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi87IH07CiAJ
CTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyog
UHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xNDk5LDcgKzE1MDUsNiBAQAogCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBREJDNTRENTFERjhFQTJCMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREJDNTREMzFERjhF
QTAwMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi87IH07CiAJCUFERDhGQTQ2
MUVCMzA3OTcwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDhGQTQzMUVCMzA3NzEwMERGNTQy
RiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLzsgfTsKLQkJQUREQjFGNjMxOEQ3N0RCRTAw
OUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURF
ODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk0MUUwOEYxQzkw
MDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUExRTA4RjFERTAwNThERTc4IC8q
IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk1MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJB
c3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUMxRTA4RjFERTAwNThERTc4IC8qIFdlYkFz
c2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5NzFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlM
aW5rRXJyb3JQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTk4MSw3ICsxOTg2LDYgQEAKIAkJMEYxRkIzOEExRTE3M0E2MjAwQTlC
RTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4
QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0
aW5nVGltZW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdGluZ1Rp
bWVvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTQxRTFBRjdERjAw
QTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHUGxhbklubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dv
cmtsaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3Jr
bGlzdElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JT
Y2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YXRvclNjaGVk
dWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIzNCw2ICsyMjM4LDcgQEAK
IAkJMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuY3BwOyBwYXRo
ID0gZGZnL0RGR0luc2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0
U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0
U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENv
bmN1cnJlbmN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRD
b25jdXJyZW5jeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBD
QkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNzAsNiArMjI3NSwxMCBAQAogCQkwRjRBMzhGODFDOEUxM0RG
MDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN1cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTRE
QjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsgcGF0aCA9IGIz
L0IzT3JpZ2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MjFG
QzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0MxQzRDMUI1NDAw
NEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5jcHA7IHBhdGggPSBiMy9haXIvQWly
Rml4T2J2aW91c1NwaWxscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERF
MUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBCM09yaWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3Jp
Z2luRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzQxLDYgKzIzNTAs
OCBAQAogCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZH
QXJyYXlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fy
cmF5TW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheU1vZGUuaDsgcGF0aCA9
IGRmZy9ERkdBcnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUz
MTUxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjQ1MzE2MUZEMjQ2QTAwMDI0MzJBMSAv
KiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0
Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmluYXJ5U3dpdGNo
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0
RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
aW5hcnlTd2l0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzcxQTc5
NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbGxFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1
MDMsNiArMjUxNCw5IEBACiAJCTBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRp
b25UYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhjZXB0aW9u
VGFyZ2V0Lmg7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBFMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBwYXRoID0gZnRsL0ZUTFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlE
NEMwRjFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlLmg7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDgxRkQxQzNDODAwNzlD
NUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNl
cnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUUzMjYyMUIw
NUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xh
eW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI2Nyw3ICs0MjgxLDYgQEAKIAkJQUREMDlB
RjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNX
ZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9u
UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlv
blBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcx
MDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTMxRTA4RjFDOTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJvci5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTQx
RTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBwYXRoID0ganMv
SlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJv
ckNvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTE3LDYgKzU1MzAsOCBAQAogCQkJ
CTBGRENFMTI4MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8sCiAJCQkJ
MTQ2QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJ
CQkxNDlEQUFGMjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKKwkJ
CQkwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggKi8s
CisJCQkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5o
ICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAvKiBDb25zdHJhaW50Vm9sYXRpbGl0
eS5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLywK
IAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLApAQCAtNTYxMSwx
NyArNTYyNiwyMyBAQAogCQkJCTBGNjYwRTM0MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5oICovLAogCQkJCTBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludFNldC5jcHAgKi8sCiAJCQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50U2V0LmggKi8sCisJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyLmNwcCAqLywKKwkJCQkwRjlEQUEwNzFGRDFDM0M4MDA3OUM1
QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAqLywKIAkJCQkxNDJENkYwRTEzNTM5QTQx
MDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCAqLywKIAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJF
ODYgLyogTWFya1N0YWNrLmggKi8sCisJCQkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjY0NTMxNTFGRDI0NkEwMDAy
NDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQkwRjFGQjM4QzFF
MTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOTgx
RTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkwRkE3NjIwMjFE
QjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJCQkwRkE3NjIwMzFEQjky
NDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCi0JCQkJQUREQjFGNjIxOEQ3N0RCNzAw
OUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKKwkJCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1
QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggKi8sCiAJCQkJMEZCQjczQjYxREVGM0FBQzAw
MkMwMDlFIC8qIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCAqLywKIAkJCQkwRkQwRTVFRjFFNDZC
RjIzMDAwNkFCMDggLyogUmVnaXN0ZXJTdGF0ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYw
MDk4Q0MxMiAvKiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRG
QTQyQzAwQzEzODM5IC8qIFJ1bm5pbmdTY29wZS5oICovLAorCQkJCTBGNEQ4Qzc2MUZDQTNDRjIw
MDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCisJCQkJMEY0RDhDNzcx
RkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIy
NTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhG
MDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBB
M0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC01NjQzLDcgKzU2NjQs
NyBAQAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEg
LyogVGlueUJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJF
NTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFD
IC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBW
aXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNp
dFJhY2VLZXkuaCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAg
Ki8sCkBAIC04MDAwLDYgKzgwMjEsNyBAQAogCQkJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVDRjk4OTFFOUVENjUyMDBDMTg2
OTIgLyogQWlyU3RhY2tBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU4QzFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQx
NTQ1QjFGRDIwQjIyMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCQkQ5RTFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1OEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElu
bGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODIwMCw2ICs4MjIyLDcgQEAKIAkJCQk2NTE0RjIx
OTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4
NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20u
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8q
IENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAw
QjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTgyOTMsNiArODMxNiw3IEBA
CiAJCQkJQTc3QTQyM0UxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50
ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0MTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2
NDUzMTgxRkQyNDZBNzAwMjQzMkExIC8qIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzY4LDYgKzg3OTIsNyBAQAogCQkJCTBGMkI2
NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURBQTA5MUZEMUMzQ0Yw
MDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNB
c3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MTYsNiArODk0MSw3IEBACiAJCQkJ
QTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2Jq
ZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4RTZDRjAw
MEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc0MUZD
N0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZC
ODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
NUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
IGluIEhlYWRlcnMgKi8sCkBAIC05MDM1LDkgKzkwNjEsOSBAQAogCQkJCUUzQzI5NUREMUVEMkNC
REEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8qIE9iamVjdFByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1
ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTgg
LyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNBRTAw
RjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAw
Q0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NDdFQTE3QTBCRDQ2
MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTkyNDMsNiAr
OTI2OSw3IEBACiAJCQkJMEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVu
Y2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwODE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURB
QTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI4Myw3ICs5MzEwLDYgQEAKIAkJCQkw
RjZDNzM1MTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVn
aXN0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBW
aXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUExMURGNzg2MDkwMEUw
NkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNBNTYxOTYzODI2ODAw
M0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRp
b246Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX3N0cnVjdHVyZS0+
cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5w
cmV2aW91c0lEKCkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0
cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzIsNyArOTcyLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIAogICAgIG1fdmlzaXRXZWFrbHlIYXNC
ZWVuQ2FsbGVkID0gdHJ1ZTsKIAotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0
aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpIHsKQEAgLTExMjQsNyArMTEyNCw3
IEBAIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0wKIAogYm9vbCBDb2Rl
QmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JikKIHsKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYg
KEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2UoKSkp
CkBAIC0xMTM5LDEwICsxMTM5LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1
ZVRvT2xkQWcKICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFu
c2l0aW9uKERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCiB7Ci0gICAg
aWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eSh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9j
b2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICBpZiAoIUhlYXA6Omlz
TWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAgbV92bS0+
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0dXJlKSkKKyAgICAg
ICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJlKSkKICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBm
YWxzZTsKQEAgLTEyNDYsMTQgKzEyNDYsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndl
YWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0g
ZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5
bmFtaWNDYXN0PENvZGVCbG9jayo+KCpyZWZlcmVuY2UtPnZtKCksIHJlZmVyZW5jZSkpOwotICAg
ICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHJlZmVyZW5jZSkpIHsKKyAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVM
aXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQog
ICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFr
U3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6
aXNNYXJrZWQoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsK
ICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMTMg
QEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0LCAiOiBDb21waWxp
bmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CiAgICAgICAgIAogICAg
ICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNhZmVwb2ludGluZyBzaW5j
ZSB3ZSBvd24gcmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICBpZiAobV9wbGFu
LT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJIZWFw
IGlzIHN0b3BlZCBidXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1fcGxhbi0+Y29tcGls
ZUluVGhyZWFkKCZtX2RhdGEpOwogICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSAhPSBQbGFuOjpD
YW5jZWxsZWQpIHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BsYW4t
PnZtLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJI
ZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMilcbiIpOwogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB9CkBAIC0xMzAsNyAr
MTMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3dvcmtsaXN0
Lm1fcmVhZHlQbGFucy5hcHBlbmQobV9wbGFuKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhl
V29ybGRJc1N0b3BwZWQoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wbGFuLT52
bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9wbGFu
Q29tcGlsZWQubm90aWZ5QWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDcgKzcxLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQog
CiAgICAgaWYgKHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhlYXAuY29sbGVjdG9y
QmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXN0
YXRlLmdyYXBoLm1fdm0uaGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAKICAgICBpZiAoc3Rh
dGUuYWxsb2NhdGlvbkZhaWxlZCkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitlbnVtIGNsYXNzIENvbnN0cmFpbnRDb25jdXJyZW5jeSA6IHVpbnQ4X3QgeworICAgIFNlcXVl
bnRpYWwsCisgICAgQ29uY3VycmVudAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCitu
YW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBKU0M6OkNvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSkKK3sKKyAgICBzd2l0
Y2ggKGNvbmN1cnJlbmN5KSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRDb25jdXJyZW5jeTo6
U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50Ogor
ICAgICAgICBvdXQucHJpbnQoIkNvbmN1cnJlbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVs
aXNtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSA6IHVpbnQ4X3QgeworICAgIFNlcXVlbnRpYWwsCisgICAgUGFyYWxsZWwKK307CisgICAgCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc20gcGFy
YWxsZWxpc20pCit7CisgICAgc3dpdGNoIChwYXJhbGxlbGlzbSkgeworICAgIGNhc2UgSlNDOjpD
b25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw6CisgICAgICAgIG91dC5wcmludCgiU2Vx
dWVudGlhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWw6CisgICAgICAgIG91dC5wcmludCgiUGFyYWxsZWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NTZWdtZW50ZWRBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDksMTIgKzIwOSwxMSBAQCBpbmxpbmUgY29uc3QgVCBHQ1NlZ21l
bnRlZEFycmF5PFQ+OjpyZW1vCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGlubGluZSBib29sIEdD
U2VnbWVudGVkQXJyYXk8VD46OmlzRW1wdHkoKQogeworICAgIC8vIFRoaXMgaGFwcGVucyB0byBi
ZSBzYWZlIHRvIGNhbGwgY29uY3VycmVudGx5LiBJdCdzIGltcG9ydGFudCB0byBwcmVzZXJ2ZSB0
aGF0IGNhcGFiaWxpdHkuCiAgICAgaWYgKG1fdG9wKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG1fc2VnbWVudHMuaGVhZCgpLT5uZXh0KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc2Vn
bWVudHMuaGVhZCgpLT5uZXh0KCktPm1fdG9wID09IHNfc2VnbWVudENhcGFjaXR5KTsKKyAgICBp
ZiAobV9zZWdtZW50cy5oZWFkKCktPm5leHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiSlNWaXJ0
dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgorI2luY2x1ZGUgIk1hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgog
I2luY2x1ZGUgIk1hcmtlZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJh
aW50U2V0LmgiCkBAIC0yODEsNyArMjgyLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgICwgbV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxT
bG90VmlzaXRvcj4oKnRoaXMsICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjpt
YWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0
ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFp
bnRTZXQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAg
ICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxD
b2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVl
PEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAtNTk0LDcgKzU5NSw3IEBAIHZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0MKICAgICAgICAgZnVuYyhjb2RlQmxvY2spOwogfQog
Ci12b2lkIEhlYXA6OmFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpCit2b2lkIEhlYXA6OmFz
c2VydE1hcmtTdGFja3NFbXB0eSgpCiB7CiAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgCkBAIC02
MDgsNiArNjA5LDE1IEBAIHZvaWQgSGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkK
ICAgICAgICAgb2sgPSBmYWxzZTsKICAgICB9CiAgICAgCisgICAgZm9yRWFjaFNsb3RWaXNpdG9y
KAorICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBpZiAo
dmlzaXRvci5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgICAgICBkYXRhTG9nKCJGQVRBTDogVmlzaXRvciAiLCBSYXdQb2ludGVyKCZ2aXNp
dG9yKSwgIiBpcyBub3QgZW1wdHkhXG4iKTsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAg
ICAgIH0pOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG9rKTsKIH0KIApAQCAtNzMwLDcgKzc0
MCw3IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiAgICAgICAgICAgICB2aXNpdG9yLnJlc2V0
KCk7CiAgICAgICAgIH0pOwogCi0gICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7Cisg
ICAgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVy
cy5yZW1vdmVBbGwoKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNF
bXB0eSgpKTsKQEAgLTkxMSw3ICs5MjEsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNl
dChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRv
clNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAg
ICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJr
ZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8vIER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0
b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAg
ICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5t
YXJrZWQgUG9zc2libHlCbGFjayBvYmplY3QuIElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0
IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3du
IHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0LDE1ICs5MzQsMTUgQEAgdm9pZCBIZWFwOjphZGRU
b1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90
ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAg
ICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMgb3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAg
ICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAg
ICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAg
ICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1hcmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAg
ICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nhbm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAg
ICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9u
ZyBoZXJlLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBj
YXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUgb2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3Vn
aCBpdCBzaG91bGQKICAgICAgICAgICAgICAgICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRz
IHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAg
ICAgICAgICAgICAgICAvLyBpc01hcmtlZENvbmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3Rvbmlj
YWxseSB0byB0cnVlLgotICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShj
ZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNh
bGx5IHRvIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlmZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhl
IG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBibGFjayBhdAogICAgICAgICAgICAgICAgICAgICAv
LyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sgY29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAg
ICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAt
OTQ4LDcgKzk1OCw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NF
UlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3
YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0
aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9s
ZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRo
IHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNh
dXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0xMjY1LDYgKzEyNzUsOCBAQCBORVZFUl9JTkxJTkUg
Ym9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgCiAgICAgU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yID0gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgCisgICAgbV9vcGFxdWVSb290
cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewog
ICAgICAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBzaXplX3Q+IHZpc2l0TWFwOwogICAgICAgICBm
b3JFYWNoU2xvdFZpc2l0b3IoCkBAIC0xMjg1LDExICsxMjk3LDcgQEAgTkVWRVJfSU5MSU5FIGJv
b2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgIGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRl
cm1pbmF0aW9uKCkpIHsKICAgICAgICAgbV9zY2hlZHVsZXItPmRpZFJlYWNoVGVybWluYXRpb24o
KTsKICAgICAgICAgICAgIAotICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsK
LSAgICAgICAgICAgIAotICAgICAgICBzbG90VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9y
cykKLSAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VJZk5lY2Vzc2FyeSgpOworICAg
ICAgICBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBG
SVhNRTogVGFrZSBtX211dGF0b3JEaWRSdW4gaW50byBhY2NvdW50IHdoZW4gc2NoZWR1bGluZyBj
b25zdHJhaW50cy4gTW9zdCBsaWtlbHksCiAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gZXhl
Y3V0ZSByb290IGNvbnN0cmFpbnRzIGFnYWluIHVubGVzcyB0aGUgbXV0YXRvciBkaWQgcnVuLiBB
dCBhCkBAIC0xMzA1LDkgKzEzMTMsOSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhw
b2ludFBoYXNlCiAgICAgICAgIC8vIFdvbmRlcmluZyB3aGF0IHRoaXMgZG9lcz8gTG9vayBhdCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKS4gVGhlIERPTSBhbmQgb3RoZXJzIGNhbiBhbHNvCiAg
ICAgICAgIC8vIGFkZCB0aGVpciBvd24gdXNpbmcgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQo
KS4KICAgICAgICAgYm9vbCBjb252ZXJnZWQgPQotICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0
LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOworICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xv
dFZpc2l0b3IpOwogICAgICAgICBpZiAoY29udmVyZ2VkICYmIHNsb3RWaXNpdG9yLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CisgICAgICAg
ICAgICBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VQ
aGFzZShjb25uLCBDb2xsZWN0b3JQaGFzZTo6RW5kKTsKICAgICAgICAgfQogICAgICAgICAgICAg
CkBAIC0xNTI2LDcgKzE1MzQsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpmaW5pc2hDaGFu
Z2luZ1BoCiAKIHZvaWQgSGVhcDo6c3RvcFRoZVBlcmlwaGVyeShHQ0NvbmR1Y3RvciBjb25uKQog
ewotICAgIGlmIChtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKSB7Cisg
ICAgaWYgKG1fd29ybGRJc1N0b3BwZWQpIHsKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IHdvcmxk
IGFscmVhZHkgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KQEAgLTE1MzcsNyArMTU0NSw3IEBAIHZvaWQgSGVhcDo6c3RvcFRoZVBlcmlw
aGVyeShHQ0NvbmR1Y3RvciAKICAgICBtX211dGF0b3JEaWRSdW4gPSBmYWxzZTsKIAogICAgIHN1
c3BlbmRDb21waWxlclRocmVhZHMoKTsKLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkID0gdHJ1ZTsKKyAgICBtX3dvcmxkSXNTdG9wcGVkID0gdHJ1ZTsKIAogICAg
IGZvckVhY2hTbG90VmlzaXRvcigKICAgICAgICAgWyZdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IpIHsKQEAgLTE1NzQsMTEgKzE1ODIsMTEgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6cmVz
dW1lVGhlUGVyaXBoZQogICAgIAogICAgIG1fYmFycmllcnNFeGVjdXRlZCA9IDA7CiAgICAgCi0g
ICAgaWYgKCFtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKSB7CisgICAg
aWYgKCFtX3dvcmxkSXNTdG9wcGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZhdGFsOiBjb2xsZWN0
b3IgZG9lcyBub3QgYmVsaWV2ZSB0aGF0IHRoZSB3b3JsZCBpcyBzdG9wcGVkLlxuIik7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotICAgIG1fY29sbGVjdG9y
QmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKKyAgICBtX3dvcmxkSXNTdG9w
cGVkID0gZmFsc2U7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgdmFzdGx5IGlt
cHJvdmVkOiB3ZSB3YW50IHRvIGdyYWIgdGhlIGxvY2tzIGluIHRoZSBvcmRlciBpbiB3aGljaCB0
aGV5CiAgICAgLy8gYmVjb21lIGF2YWlsYWJsZS4gV2UgYmFzaWNhbGx5IHdhbnQgYSBsb2NrQW55
KCkgbWV0aG9kIHRoYXQgd2lsbCBsb2NrIHdoYXRldmVyIGxvY2sgaXMgYXZhaWxhYmxlCkBAIC0y
NTc4LDcgKzI1ODYsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7
CiAgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlz
LCAiQ29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKICAgICAgICAgICAgIG1fb2JqZWN0
U3BhY2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKICAgICAgICAgICAgIENvbnNlcnZh
dGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKQEAgLTI1OTIsNyArMjYwMCw3IEBA
IHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsK
KyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92
bSwgc2xvdFZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNjEzLDcgKzI2MjEsNyBAQCB2b2lkIEhlYXA6
OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAg
ICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgbV9oYW5kbGVTdGFj
ay52aXNpdChzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCkBAIC0yNjIxLDcgKzI2MjksNyBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0
LT5hZGQoCiAgICAgICAgICJEIiwgIkRlYnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCiAgICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxl
ciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CkBAIC0yNjQxLDIxICsyNjQ5
LDIxIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkpzciIsICJKSVQgU3R1YiBSb3V0aW5lcyIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAg
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoc2xvdFZp
c2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVk
QnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
V3MiLCAiV2VhayBTZXRzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0
cyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpHcmV5ZWRCeU1hcmtpbmcpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiV3JoIiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9y
IChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNlSGFydmVz
dGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCiAgICAgICAg
ICAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7CiAgICAg
ICAgIH0sCkBAIC0yNjY0LDcgKzI2NzIsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAg
ICAgICJEdyIsICJERkcgV29ya2xpc3RzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKICAgICAgICAgICAgICAgICBERkc6OmV4
aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9y
KTsKICAgICAgICAgICAgIApAQCAtMjY4NCw3ICsyNjkyLDcgQEAgdm9pZCBIZWFwOjphZGRDb3Jl
Q29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAi
Q2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGls
aW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoCiAgICAgICAgICAgICAgICAgWyZdIChD
b2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdCB0aGUg
Q29kZUJsb2NrIGFzIGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCkBAIC0yNjk1LDIz
ICsyNzAzLDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICB9LAog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKICAgICAKLSAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKLSAgICAgICAgIk1ybXMiLCAiTXV0YXRvcitSYWNlIE1hcmsg
U3RhY2siLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0JikgewotICAgICAgICAgICAgLy8gSW5kaWNhdGUgdG8gdGhlIGZpeHBv
aW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQotICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBt
X211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwotICAg
ICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCIoIiwgc2l6ZSwgIikiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9tdXRhdG9y
TWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0g
ICAgICAgICAgICBtX3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRv
ck1hcmtTdGFjaygpKTsKLSAgICAgICAgfSwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYp
IC0+IGRvdWJsZSB7Ci0gICAgICAgICAgICByZXR1cm4gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXpl
KCkgKyBtX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKLSAgICAgICAgfSwKLSAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50PigqdGhpcykp
OwogfQogCiB2b2lkIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxN
YXJraW5nQ29uc3RyYWludD4gY29uc3RyYWludCkKQEAgLTI3OTQsMTYgKzI3ODYsNiBAQCB2b2lk
IEhlYXA6OmFsbG93Q29sbGVjdGlvbigpCiAgICAgbV9jb2xsZWN0Q29udGludW91c2x5TG9jay51
bmxvY2soKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6Zm9yRWFj
aFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKLSAgICBmdW5jKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKLSAgICBmdW5jKCptX211dGF0b3JTbG90VmlzaXRvcik7Ci0gICAgZm9yIChh
dXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgIGZ1bmMo
KnNsb3RWaXNpdG9yKTsKLX0KLQogdm9pZCBIZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQo
Ym9vbCB2YWx1ZSkKIHsKICAgICBtX211dGF0b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVlOwpAQCAt
Mjg0Nyw0ICsyODI5LDI0IEBAIHZvaWQgSGVhcDo6cmVtb3ZlSGVhcEZpbmFsaXplckNhbGxiYWNr
KGMKICAgICBtX2hlYXBGaW5hbGl6ZXJDYWxsYmFja3MucmVtb3ZlRmlyc3QoY2FsbGJhY2spOwog
fQogCit2b2lkIEhlYXA6OnNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bWFya2luZ011dGV4KTsKKyAgICBtX2JvbnVzVmlzaXRvclRhc2sgPSB0YXNrOworICAgIG1fbWFy
a2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworfQorCit2b2lkIEhlYXA6OnJ1blRh
c2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2sp
Cit7CisgICAgdW5zaWduZWQgaW5pdGlhbFJlZkNvdW50ID0gdGFzay0+cmVmQ291bnQoKTsKKyAg
ICBzZXRCb251c1Zpc2l0b3JUYXNrKHRhc2spOworICAgIHRhc2stPnJ1bigqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayhudWxscHRyKTsKKyAgICB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0ZXgpOworICAgICAgICB3
aGlsZSAodGFzay0+cmVmQ291bnQoKSA+IGluaXRpYWxSZWZDb3VudCkKKyAgICAgICAgICAgIG1f
bWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQobV9tYXJraW5nTXV0ZXgpOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIu
aCIKICNpbmNsdWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0F1
dG9tYXRpY1RocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC03Myw2ICs3NCw3IEBAIGNsYXNzIEpTVmFsdWU7
CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBNYWNoaW5lVGhyZWFkczsKIGNs
YXNzIE1hcmtTdGFja0FycmF5OworY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ7CiBj
bGFzcyBNYXJrZWRBbGxvY2F0b3I7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50OwpAQCAtMTE0LDcgKzExNiw2IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgc190aW1lQ2hlY2tSZXNvbHV0aW9uID0gMTY7CiAKICAgICBzdGF0
aWMgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNNYXJrZWRD
b25jdXJyZW50bHkoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJr
ZWQoSGVhcFZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNl
bGxTaXplKGNvbnN0IHZvaWQqKTsKQEAgLTE1NCw3ICsxNTUsOCBAQCBwdWJsaWM6CiAgICAgTXV0
YXRvclN0YXRlIG11dGF0b3JTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YXRlOyB9
CiAgICAgc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IGNvbGxlY3Rpb25TY29wZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sbGVjdGlvblNjb3BlOyB9CiAgICAgYm9vbCBoYXNIZWFwQWNjZXNz
KCkgY29uc3Q7Ci0gICAgYm9vbCBjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCgpIGNvbnN0OworICAgIGJvb2wgd29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdv
cmxkSXNSdW5uaW5nKCkgY29uc3QgeyByZXR1cm4gIXdvcmxkSXNTdG9wcGVkKCk7IH0KIAogICAg
IC8vIFdlJ3JlIGFsd2F5cyBidXN5IG9uIHRoZSBjb2xsZWN0aW9uIHRocmVhZHMuIE9uIHRoZSBt
YWluIHRocmVhZCwgdGhpcyByZXR1cm5zIHRydWUgaWYgd2UncmUKICAgICAvLyBoZWxwaW5nIGhl
YXAuCkBAIC0zNTgsNiArMzYwLDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZEhlYXBG
aW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsKICAgICB2b2lk
IHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2sm
KTsKKyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgewor
ICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4oZnVuYykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
dm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC0zNzMsNiArMzg2LDcgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogICAgIGZyaWVuZCBjbGFzcyBKSVRTdHVi
Um91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworICAgIGZy
aWVuZCBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKICAgICBmcmllbmQgY2xhc3Mg
TWFya2VkU3BhY2U7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKICAgICBmcmll
bmQgY2xhc3MgTWFya2VkQmxvY2s7CkBAIC01MjUsOCArNTM5LDEwIEBAIHByaXZhdGU6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21w
aWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJik7CiAgICAgCi0g
ICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICB2b2lkIGFzc2VydE1h
cmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBjb25zdCBIZWFwVHlw
ZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAgICAgY29uc3Qgc2l6
ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTUsNiBAQCBwcml2YXRlOgogICAg
IFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnM7CiAg
ICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwot
CiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3Rh
Y2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9jb2RlQmxvY2tzOwpAQCAt
NjMzLDggKzY0Niw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4
aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0ZXg7Ci0gICAgSGFzaFNl
dDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBt
X29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRM
ZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1NCw3IEBAIHByaXZhdGU6CiAgICAgTGlzdGFibGVI
YW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFs
aXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsKKyAgICBS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlzaXRvclRhc2s7
CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxvY2tCeXRlc0Fs
bG9jYXRlZCB7IDAgfTsKQEAgLTY1Nyw3ICs2NzAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBuZWVkRmluYWxpemVCaXQgPSAxdSA8PCA0dTsKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBt
dXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxlLgogICAgIEF0b21pYzx1
bnNpZ25lZD4gbV93b3JsZFN0YXRlOwotICAgIGJvb2wgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dvcmxkSXNTdG9wcGVkIHsg
ZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1fYmVmb3JlR0M7CiAgICAgTW9ub3RvbmljVGlt
ZSBtX2FmdGVyR0M7CiAgICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MywzMCArNjMsMjAgQEAgaW5saW5lIGJvb2wgSGVhcDo6aGFzSGVhcEFjY2VzcygpIGNvbnN0
CiAgICAgcmV0dXJuIG1fd29ybGRTdGF0ZS5sb2FkKCkgJiBoYXNBY2Nlc3NCaXQ7CiB9CiAKLWlu
bGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkg
Y29uc3QKK2lubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKKyAgICByZXR1
cm4gbV93b3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGlu
c3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1
aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkK
IHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsK
ICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwog
ICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+
bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBj
ZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZCgKLSAgICAgICAg
YmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwot
fQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qg
dm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAg
ICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJr
ZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5p
c01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFj
ZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9jay5pc01hcmtlZChi
bG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAtMTc5LDE5ICsxNjksMTkg
QEAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPAogCiBpbmxpbmUgdm9p
ZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2Rl
ZmVycmFsRGVwdGgrKzsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkg
fHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiB9CiAKIGlubGlu
ZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKIHsKLSAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNT
dG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKICAgICAKICAgICBpZiAoVU5MSUtFTFko
bV9kaWREZWZlckdDV29yaykpIHsKQEAgLTI2OSw0ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVh
cDo6c3RvcElmTmVjZXNzYXJ5KCkKICAgICAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3Io
Y29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxs
ZWxTbG90VmlzaXRvckxvY2spOworICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwor
ICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNp
dG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3Ip
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1
aWxkU25hcHNob3QoCiB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxs
KiBjZWxsKQogewogICAgIEFTU0VSVChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigp
ID09IHRoaXMpOwotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7
CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGlu
Z05vZGVGb3JDZWxsKGNlbGwpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01h
cmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCopIHsgcmV0dXJu
IGlzTWFya2VkKCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwq
LCBEZXBlbmRlbmN5KSB7IHJldHVybiBpc01hcmtlZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBi
b29sIGlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJu
IGlzTWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNp
b24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkg
eyByZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBi
b29sIGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdN
YXJraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQgKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAv
LyBVc2UgdGhpcyBsb2NrIHNjb3BlIGxpa2Ugc286CiAvLyBhdXRvIGxvY2tlciA9IGxvY2tEdXJp
bmdNYXJraW5nKGhlYXAsIGxvY2spOwogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci1Mb2Nr
ZXI8TG9ja1R5cGU+IGxvY2tEdXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNz
ZWRMb2NrKQorYXV0byBsb2NrRHVyaW5nTWFya2luZyhIZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFz
c2VkTG9jaykKIHsKLSAgICBMb2NrVHlwZSogbG9jazsKLSAgICBpZiAoaGVhcC5tdXRhdG9yU2hv
dWxkQmVGZW5jZWQoKSkKLSAgICAgICAgbG9jayA9ICZwYXNzZWRMb2NrOwotICAgIGVsc2UKLSAg
ICAgICAgbG9jayA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4obG9jayk7
CisgICAgcmV0dXJuIGhvbGRMb2NrSWYocGFzc2VkTG9jaywgaGVhcC5tdXRhdG9yU2hvdWxkQmVG
ZW5jZWQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQ6Ok1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCisgICAgOiBNYXJr
aW5nQ29uc3RyYWludCgiTXNtIiwgIk1hcmsgU3RhY2sgTWVyZ2luZyIsIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbikKKyAgICAsIG1faGVhcChoZWFwKQoreworfQorCitN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCkK
K3sKK30KKworZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3Rp
bWF0ZShTbG90VmlzaXRvciYpCit7CisgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3Rh
Y2stPnNpemUoKSArIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKK30KKwordm9pZCBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBMb2dnaW5nIHRo
ZSB3b3JrIGhlcmUgZW5zdXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0
IGl0IGRvZXNuJ3QgbmVlZCB0byBwcm9kdWNlCisgICAgLy8gYW55bW9yZSB3b3JrLgorICAgIHNp
emVfdCBzaXplID0gbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1f
cmFjZU1hcmtTdGFjay0+c2l6ZSgpOworICAgIHZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUp
OworICAgIAorICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCIoIiwg
c2l6ZSwgIikiKTsKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2hl
YXAubV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFj
aygpKTsKKyAgICBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0
YXRvck1hcmtTdGFjaygpKTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1
ZW50aWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGlj
IE1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludChIZWFwJik7CisgICAgfk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCk7CisgICAgCisg
ICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFj
dExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NCw2ICs0NDQs
MzMgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFzc2VydE5vVW5zd2VwdCgpCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5k
bGUqKCk+PiBNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7
CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUq
KCk+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0
b3IpCisgICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVy
cmlkZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHku
ZmluZEJpdChtX2luZGV4LCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxs
b2NhdG9yLm1fYmxvY2tzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5tX2Jsb2Nrc1ttX2luZGV4KytdOworICAg
ICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYg
bV9hbGxvY2F0b3I7CisgICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OworICAgICAgICBMb2Nr
IG1fbG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhp
cykpOworfQorCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUs
ICIvIiwgbV9hdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
ICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwMyw2
ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBm
b3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAg
IFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVt
cHR5QmxvY2tTb3VyY2UoKTsKKyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpI
YW5kbGUqKTsKICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAy
MjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtl
ZChjb25zdCB2b2lkKik7CiAgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgY29uc3Qgdm9pZCopOwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKGNv
bnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qg
dm9pZCosIERlcGVuZGVuY3kpOwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29s
IGFyZU1hcmtzU3RhbGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVu
Y3lXaXRoPGJvb2w+IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbik7CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbik7CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVy
c2lvbiAhPSBtX21hcmtpbmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lX
aXRoPGJvb2w+IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFy
a2luZ1ZlcnNpb247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lv
biksIHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBN
YXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0g
ICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNp
b24pOwotICAgIGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZl
cnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1h
cmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsK
LSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVy
c2lvbik7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtz
Tm90U3RhbGUoKQpAQCAtNTI0LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6
OmlzTWFya2VkUmF3KGNvbgogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFy
ZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0K
LQotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJz
aW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0g
YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVz
dWx0LnZhbHVlKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwor
ICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQu
ZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVu
ZGVuY3kodmVyc2lvbikpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQo
Y29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUs
NiArMTY1LDExIEBAIHB1YmxpYzoKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0
aGF0IHdlIGhhdmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5
ZXQuCiAgICAgYm9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQog
ICAgIAorICAgIFdlYWtTZXQqIGFjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX2FjdGl2
ZVdlYWtTZXRzLmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0VuZCgpIHsg
cmV0dXJuIG1fYWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVX
ZWFrU2V0c0JlZ2luKCkgeyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9Cisg
ICAgV2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX25ld0FjdGl2ZVdl
YWtTZXRzLmVuZCgpOyB9CisgICAgCiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBX
VEY6OmRhdGFGaWxlKCkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6
OmFycmF5PHNpemVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsyNywxNiBAQAogI2lu
Y2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1NYXJraW5nQ29u
c3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5IHZvbGF0aWxpdHkpCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHkg
dm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50
UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZp
YXRlZE5hbWUpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1
bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2b2xh
dGlsaXR5KQotewotfQotCi1NYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0g
ICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0
aW9uLAotICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKLSAgICA6
IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKLSAgICAsIG1fbmFtZShXVEZNb3Zl
KG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24p
KQotICAgICwgbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKFdURk1vdmUocXVpY2tXb3JrRXN0
aW1hdGVGdW5jdGlvbikpCiAgICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKKyAgICAsIG1f
Y29uY3VycmVuY3koY29uY3VycmVuY3kpCisgICAgLCBtX3BhcmFsbGVsaXNtKHBhcmFsbGVsaXNt
KQogewogfQogCkBAIC02MywxNCArNDksNzQgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludDo6cmVz
ZXRTdGF0cygpCiAgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7CiB9CiAKLXZvaWQgTWFya2luZ0Nv
bnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wmIGRpZFZpc2l0U29t
ZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitDb25zdHJhaW50UGFyYWxsZWxpc20gTWFy
a2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlz
aXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxp
c20gcmVzdWx0ID0gZXhlY3V0ZUltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCAr
PSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIGlmICh2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpKQorICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRl
ZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CisgICAgaWYg
KHJlc3VsdCA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIC8v
IEl0J3MgaWxsZWdhbCB0byBwcm9kdWNlIHBhcmFsbGVsIHdvcmsgaWYgeW91IGhhdmVuJ3QgYWR2
ZXJ0aXNlZCBpdCB1cGZyb250IGJlY2F1c2UgdGhlIHNvbHZlcgorICAgICAgICAvLyBoYXMgb3B0
aW1pemF0aW9ucyBmb3IgY29uc3RyYWludHMgdGhhdCBwcm9taXNlIHRvIG5ldmVyIHByb2R1Y2Ug
cGFyYWxsZWwgd29yay4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wYXJhbGxlbGlzbSA9PSBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90
VmlzaXRvciYpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWlu
dDo6d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHJldHVybiBsYXN0
VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Cit9CisKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNv
bnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7Ci0g
ICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0
aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdU
aW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0Q291
bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQuZGlk
VmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2
aXNpdG9yKTsKKyAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdHJhaW50U29sdmluZ0xvY2tl
ciwgdmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNpdENv
dW50KCk7CisgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgIGRhdGFM
b2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNp
dENvdW50KCksICIgaW4gcHJlcGFyZVRvRXhlY3V0ZSkiKTsKK30KKwordm9pZCBNYXJraW5nQ29u
c3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlz
aXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwo
dmlzaXRvcik7CisgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgIGRh
dGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52
aXNpdENvdW50KCksICIgaW4gZG9QYXJhbGxlbFdvcmspIik7CisgICAgeworICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIG1fbGFzdFZpc2l0Q291bnQgKz0g
dmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBW
aXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGZpbmlzaFBhcmFsbGVsV29y
a0ltcGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlz
aXRDb3VudCgpOworICAgIGlmICh2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBk
YXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIu
dmlzaXRDb3VudCgpLCAiIGluIGZpbmlzaFBhcmFsbGVsV29yaykiKTsKK30KKwordm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxs
ZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JN
KCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwo
U2xvdFZpc2l0b3ImKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQ29uc3RyYWludENvbmN1cnJlbmN5LmgiCisjaW5jbHVkZSAiQ29uc3RyYWludFBhcmFs
bGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIKLSNpbmNsdWRlICJW
aXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Nb25v
dG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQ0LDE3ICs0NCwx
MSBAQCBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0g
ICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAg
ICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3Ry
YWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVl
bnRpYWwpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAot
ICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0g
ICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1hcmtpbmdDb25z
dHJhaW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWFya2luZ0NvbnN0cmFp
bnQoKTsKICAgICAKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7
IH0KICAgICAKQEAgLTY1LDMyICs1OSwzOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxh
c3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAot
ICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRl
KFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3Vi
bGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIAorICAgIGRv
dWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIGRvdWJs
ZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAg
IGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Ci0g
ICAgfQotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci0gICAgewotICAgICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGlt
YXRlKHZpc2l0b3IpOwotICAgIH0KKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJz
dHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOworICAg
IAorICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGZpbmlz
aFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOwogICAgIAogICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KICAgICAKKyAg
ICBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3koKSBjb25zdCB7IHJldHVybiBtX2Nv
bmN1cnJlbmN5OyB9CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBD
b25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAg
dmlydHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBp
dCBjYW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFY
IH07CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsK
LSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
IHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90
VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSBtX2NvbmN1
cnJlbmN5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVsaXNtOwogICAgIHNp
emVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9sb2NrOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYwICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50U2V0LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5j
bHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJTdXBlclNhbXBsZXIu
aCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYXJraW5nQ29uc3Ry
YWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgRXhlY3V0aW9uQ29udGV4
dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0
b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxk
VGltZU91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmco
KSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybnMg
ZmFsc2UgaWYgaXQgdGltZXMgb3V0LgotICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1
dGVkKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7Ci0g
ICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIo
aW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIAotICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQotCi0gICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkK
LSAgICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1f
ZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGlu
ZGV4KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBt
X3NldDsKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIE1vbm90b25pY1RpbWUgbV90
aW1lb3V0OwotICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOwotICAgIGJvb2wgbV9kaWRWaXNpdFNv
bWV0aGluZyB7IGZhbHNlIH07Ci19OwotCi1NYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0Nv
bnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0
KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsKIH0KIApAQCAtMTA3LDE4ICs2NSw5
IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJh
dGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHkpCi17Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFp
bnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5j
dGlvbiksIHZvbGF0aWxpdHkpKTsKLX0KLQotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRk
KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVG
dW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENT
dHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3Vy
cmVuY3kpCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdU
Rk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVu
Y3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7
CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1v
dmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZv
bGF0aWxpdHksIGNvbmN1cnJlbmN5KSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmFkZCgKQEAgLTEzMSw5ICs4MCw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgK
ICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvciwg
TW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0
ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgcmVzdWx0ID0g
ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBib29sIHJlc3Vs
dCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4
LDI3ICs5NywyNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRl
Q29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29u
dGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHNvbHZl
cigqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRpb24rKzsK
ICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiaSMiLCBp
dGVyYXRpb24sICI6Iik7CiAKLSAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFpbnRzIHRo
YXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0aGVuCi0g
ICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlmICghZXhlY3V0aW9uQ29u
dGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWluaW5n
LCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzIG90aGVyCi0gICAg
Ly8gdGhhbiByb290cy4KLSAgICBpZiAoaXRlcmF0aW9uID09IDEpCisgICAgaWYgKGl0ZXJhdGlv
biA9PSAxKSB7CisgICAgICAgIC8vIEZpcnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0
b3IgZHJhaW5pbmcsIHNvIGl0J3MgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMK
KyAgICAgICAgLy8gb3RoZXIgdGhhbiByb290cy4KKyAgICAgICAgc29sdmVyLmRyYWluKG1fdW5l
eGVjdXRlZFJvb3RzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKLSAgICBp
ZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3RocykpCisgICAg
aWYgKGl0ZXJhdGlvbiA9PSAyKSB7CisgICAgICAgIHNvbHZlci5kcmFpbihtX3VuZXhlY3V0ZWRP
dXRncm93dGhzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKICAgICAvLyBX
ZSB3YW50IHRvIGtlZXAgcHJlZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhl
IG9uZXMgdGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50ZWQKICAgICAvLyBldmVuIGluIGEgc3RvcC10
aGUtd29ybGQgR0MgLSB1bnRpbCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5k
ZW5jeSB0byBnbyB0b3RhbGx5CkBAIC0yMTUsMzMgKzE2NCwxOCBAQCBib29sIE1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0
eSgpID4gYi0+dm9sYXRpbGl0eSgpOwogICAgICAgICB9KTsKICAgICAKLSAgICBmb3IgKE1hcmtp
bmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRlcmVkKSB7Ci0gICAgICAgIHNpemVfdCBp
ID0gY29uc3RyYWludC0+aW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChleGVjdXRpb25D
b250ZXh0LmRpZEV4ZWN1dGUoaSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZXhl
Y3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOwotICAgICAgICAKLSAgICAgICAgLy8gT25jZSB3ZSdy
ZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFy
a2luZyBoYXBwZW4gYW55dGltZQotICAgICAgICAvLyB3ZSBmaW5kIHdvcmsuCi0gICAgICAgIC8v
IEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25zdHJhaW50cyB1bnRpbCB0
aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCi0gICAgICAgIC8vIGJldHRlciBvciB3b3JzZS4g
TWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBp
cyBlbXB0eSwga2VlcCBydW5uaW5nLgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGhh
cyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgotICAgICAgICAvLyAtIEVsc2UgcnVuIHVudGls
IHRpbWVvdXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjY4MzIKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhp
bmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgc29sdmVyLmNvbnZl
cmdlKG1fb3JkZXJlZCk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgZGF0YUxvZygiKGR2
cz0iLCBzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKSwgIikiKTsKKworICAgIC8vIFJldHVybiB0
cnVlIGlmIHdlJ3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlmIHdlIGRpZCBub3QgdmlzaXQg
YW55dGhpbmcuCisgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAog
dm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChhdXRv
JiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRv
ciwgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAg
ICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygp
KQogICAgICAgICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDkgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBI
ZWFwOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CisKIGNsYXNzIE1hcmtpbmdDb25z
dHJhaW50U2V0IHsKIHB1YmxpYzoKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIE1h
cmtpbmdDb25zdHJhaW50U2V0KEhlYXAmKTsKICAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsK
ICAgICAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwpAQCAtNDEsMTUgKzQ0LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAg
ICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
KTsKLSAgICAKLSAgICB2b2lkIGFkZCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
Ci0gICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRvdWJs
ZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5LAorICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3Vy
cmVuY3k6OkNvbmN1cnJlbnQpOwogICAgIAogICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxN
YXJraW5nQ29uc3RyYWludD4pOwogICAgIApAQCAtNjAsMjEgKzU3LDE5IEBAIHB1YmxpYzoKICAg
ICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMg
YW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMg
dGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUu
Ci0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RWaXNpdG9yJiwKLSAg
ICAgICAgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7
CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAv
LyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAg
ICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgotICAgIGNs
YXNzIEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7
CisgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogICAgIAotICAgIGJv
b2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGlt
ZW91dCk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJik7CiAg
ICAgCi0gICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3Rv
ciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhp
bmcpOworICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQs
IEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAKKyAg
ICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOwogICAgIEJp
dFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCisK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyAKKworTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50
U2V0JiBzZXQpCisgICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKKyAgICAsIG1fbWFpblZpc2l0b3Io
bV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX3NldChzZXQpCit7CisgICAg
bV9oZWFwLmZvckVhY2hTbG90VmlzaXRvcigKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlz
aXRvcikgeworICAgICAgICAgICAgbV92aXNpdENvdW50ZXJzLmFwcGVuZChWaXNpdENvdW50ZXIo
dmlzaXRvcikpOworICAgICAgICB9KTsKK30KKworTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6On5N
YXJraW5nQ29uc3RyYWludFNvbHZlcigpCit7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXI6OmRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IFZpc2l0
Q291bnRlciYgdmlzaXRDb3VudGVyIDogbV92aXNpdENvdW50ZXJzKSB7CisgICAgICAgIGlmICh2
aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCIodmlzaXRv
cigiLCBSYXdQb2ludGVyKCZ2aXNpdENvdW50ZXIudmlzaXRvcigpKSwgIikgKyIsIHZpc2l0Q291
bnRlci52aXNpdENvdW50KCksICIgPSAiLCB2aXNpdENvdW50ZXIudmlzaXRvcigpLnZpc2l0Q291
bnQoKSwgIikiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhl
Y3V0ZShTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3sKKyAgICBtX3BpY2tOZXh0SXNTdGlsbEFj
dGl2ZSA9IHRydWU7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbnVtVGhyZWFkc1RoYXRNYXlQcm9k
dWNlV29yayk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFM
b2cocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCA/ICJQIiA6ICJOIiwgIjwiKTsKKwor
ICAgIG1faGVhcC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsgcnVuRXhlY3V0aW9uVGhyZWFkKHZpc2l0b3IsIHByZWZlcmVuY2UsIHBp
Y2tOZXh0KTsgfSk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRh
dGFMb2coIj4iKTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9waWNrTmV4dElzU3RpbGxB
Y3RpdmUpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdv
cmspOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX2RpZEV4ZWN1
dGVJblBhcmFsbGVsKQorICAgICAgICBtX3NldC5tX3NldFtpbmRleFRvUnVuXS0+ZmluaXNoUGFy
YWxsZWxXb3JrKG1fbWFpblZpc2l0b3IpOworICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwuY2xl
YXIoKTsKKyAgICAKKyAgICBpZiAoIW1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmlzRW1wdHkoKSkg
eworICAgICAgICBkYXRhTG9nKCIoZHZzPSIsIGRpZFZpc2l0U29tZXRoaW5nKCksICIpIik7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5
KQorICAgICAgICAgICAgZXhlY3V0ZSgqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0pOworICAgICAg
ICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5jbGVhcigpOworICAgIH0KKyAgICAgICAgCisgICAg
UkVMRUFTRV9BU1NFUlQobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIW1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5iaXRDb3VudCgpKTsKK30KKwor
dm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVk
KQoreworICAgIGF1dG8gaXRlciA9IHVuZXhlY3V0ZWQuYmVnaW4oKTsKKyAgICBhdXRvIGVuZCA9
IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm47
CisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAg
ICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgICAgICAgICAgcmV0dXJuICppdGVyKys7CisgICAgICAgIH0pOworICAgIGV4ZWN1
dGUoTmV4dENvbnN0cmFpbnRGaXJzdCwgcGlja05leHQpOworICAgIHVuZXhlY3V0ZWQuY2xlYXJB
bGwoKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVyZ2UoY29uc3Qg
VmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4mIG9yZGVyKQoreworICAgIGlmIChkaWRWaXNpdFNv
bWV0aGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG9yZGVyLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBzaXplX3QgaW5kZXggPSAwOworCisg
ICAgLy8gV2Ugd2FudCB0byBleGVjdXRlIHRoZSBmaXJzdCBjb25zdHJhaW50IHNlcXVlbnRpYWxs
eSBpZiB3ZSB0aGluayBpdCB3aWxsIHF1aWNrbHkgZ2l2ZSB1cyBhCisgICAgLy8gcmVzdWx0LiBJ
ZiB3ZSByYW4gaXQgaW4gcGFyYWxsZWwgdG8gb3RoZXIgY29uc3RyYWludHMsIHRoZW4gd2UgbWln
aHQgZW5kIHVwIGhhdmluZyB0byB3YWl0IGZvcgorICAgIC8vIHRob3NlIG90aGVyIGNvbnN0cmFp
bnRzIHRvIGZpbmlzaCwgd2hpY2ggd291bGQgYmUgYSB3YXN0ZSBvZiB0aW1lIHNpbmNlIGR1cmlu
ZyBjb252ZXJnZW5jZSBpdCdzCisgICAgLy8gZW1waXJpY2FsbHkgbW9zdCBvcHRpbWFsIHRvIHJl
dHVybiB0byBkcmFpbmluZyBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29yay4g
TW9zdAorICAgIC8vIGNvbnN0cmFpbnRzIGRvbid0IGdlbmVyYXRlIGFueSB3b3JrIG1vc3Qgb2Yg
dGhlIHRpbWUsIGFuZCB3aGVuIHRoZXkgZG8gZ2VuZXJhdGUgd29yaywgdGhleSB0ZW5kCisgICAg
Ly8gdG8gZ2VuZXJhdGUgZW5vdWdoIG9mIGl0IHRvIGZlZWQgYSBkZWNlbnQgZHJhaW5pbmcgY3lj
bGUuIFRoZXJlZm9yZSwgcGF1c2UgdGltZXMgYXJlIGxvd2VzdCBpZgorICAgIC8vIHdlIGdldCB0
aGUgaGVjayBvdXQgb2YgaGVyZSBhcyBzb29uIGFzIGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29y
ay4gSSB0aGluayB0aGF0IHBhcnQgb2Ygd2hhdAorICAgIC8vIG1ha2VzIHRoaXMgb3B0aW1hbCBp
cyB0aGF0IHdlIGFsc28gbmV2ZXIgYWJvcnQgcnVubmluZyBhIGNvbnN0cmFpbnQgZWFybHksIHNv
IHdoZW4gd2UgZG8gcnVuCisgICAgLy8gb25lLCBpdCBoYXMgYW4gb3Bwb3J0dW5pdHkgdG8gZ2Vu
ZXJhdGUgYXMgbXVjaCB3b3JrIGFzIGl0IHBvc3NpYmx5IGNhbi4KKyAgICBpZiAob3JkZXJbaW5k
ZXhdLT5xdWlja1dvcmtFc3RpbWF0ZShtX21haW5WaXNpdG9yKSkgeworICAgICAgICBleGVjdXRl
KCpvcmRlcltpbmRleCsrXSk7CisgICAgICAgIAorICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBh
cmFsbGVsLmlzRW1wdHkoKQorICAgICAgICAgICAgJiYgKG9yZGVyLmlzRW1wdHkoKSB8fCBkaWRW
aXNpdFNvbWV0aGluZygpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
YXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPigK
KyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAg
IGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBvcmRlci5zaXpl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqb3JkZXJbaW5kZXgr
K107CisgICAgICAgICAgICByZXR1cm4gY29uc3RyYWludC5pbmRleCgpOworICAgICAgICB9KTsK
KyAgICAKKyAgICBleGVjdXRlKFBhcmFsbGVsV29ya0ZpcnN0LCBwaWNrTmV4dCk7Cit9CisKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmIGNv
bnN0cmFpbnQpCit7CisgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KGNvbnN0cmFpbnQuaW5kZXgoKSkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjb25zdHJhaW50LnByZXBhcmVUb0V4ZWN1dGUo
Tm9Mb2NraW5nTmVjZXNzYXJ5LCBtX21haW5WaXNpdG9yKTsKKyAgICBDb25zdHJhaW50UGFyYWxs
ZWxpc20gcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUobV9tYWluVmlzaXRvcik7Cisg
ICAgZGlkRXhlY3V0ZShwYXJhbGxlbGlzbSwgY29uc3RyYWludC5pbmRleCgpKTsKK30KKwordm9p
ZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3sKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOworICAgICAgICB1bnNpZ25lZCBpbmRleFRv
UnVuOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHRyeVBhcmFsbGVsV29yayA9IFsmXSAoKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gbV90b0V4ZWN1dGVJblBhcmFsbGVs
LmZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byB0cnlOZXh0
Q29uc3RyYWludCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBpY2tS
ZXN1bHQgPSBwaWNrTmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaWNrUmVz
dWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9waWNrTmV4dElzU3RpbGxBY3Rp
dmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldCgqcGlja1Jlc3VsdCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50
JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb25zdHJhaW50LmNvbmN1cnJlbmN5KCkgPT0gQ29uc3RyYWludENvbmN1
cnJlbmN5OjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4
ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX251
bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmsrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxs
ZWxXb3JrTW9kZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludC5w
cmVwYXJlVG9FeGVjdXRlKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHByZWZlcmVuY2UgPT0gUGFy
YWxsZWxXb3JrRmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcmFsbGVsV29y
aygpIHx8IHRyeU5leHRDb25zdHJhaW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJ5
TmV4dENvbnN0cmFpbnQoKSB8fCB0cnlQYXJhbGxlbFdvcmsoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSBub3RoaW5nIGxlZnQgdG8gcnVu
LiBUaGUgb25seSB3YXkgZm9yIHVzIHRvIGhhdmUgbW9yZSB3b3JrIGlzCisgICAgICAgICAgICAg
ICAgLy8gaWYgc29tZW9uZSBpcyBydW5uaW5nIGEgY29uc3RyYWludCB0aGF0IG1heSBwcm9kdWNl
IHBhcmFsbGVsIHdvcmsuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFt
X251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmspCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQW55IHdhaXRp
bmcgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5pbmcgdGhlIFNsb3RWaXNpdG9yLgor
ICAgICAgICAgICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQgd291bGQgYmUgcHJvZml0YWJsZS4K
KyAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJh
aW50ID0gKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuZG9Q
YXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcmFsbGVs
aXNtID0gY29uc3RyYWludC5leGVjdXRlKHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZG9QYXJhbGxlbFdvcmtN
b2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5nZXQo
aW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kaWRFeGVjdXRlSW5QYXJhbGxl
bC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwudGFrZUZpcnN0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PT0gaW5kZXhUb1J1bjsgfSk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJh
bGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNtKCkg
PT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKKyAgICAgICAgICAgICAgICAgICAg
bV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrLS07CisgICAgICAgICAgICAgICAgbV9leGVj
dXRlZC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFsbGVsaXNtID09
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleFRvUnVuKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBwYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgbV9leGVjdXRlZC5zZXQo
aW5kZXgpOworICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBh
cmFsbGVsKSB7CisgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXgpOwor
ICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4KTsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJWaXNpdENvdW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcDsKK2NsYXNzIE1h
cmtpbmdDb25zdHJhaW50OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7CisKK2NsYXNzIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5n
Q29uc3RyYWludFNvbHZlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCitw
dWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoTWFya2luZ0NvbnN0cmFpbnRTZXQm
KTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoKTsKKyAgICAKKyAgICBib29sIGRpZFZp
c2l0U29tZXRoaW5nKCkgY29uc3Q7CisgICAgCisgICAgZW51bSBTY2hlZHVsZXJQcmVmZXJlbmNl
IHsKKyAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisgICAgICAgIE5leHRDb25zdHJhaW50Rmly
c3QKKyAgICB9OworCisgICAgdm9pZCBleGVjdXRlKFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3Bl
ZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgCisgICAg
dm9pZCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpOworICAgIAorICAgIHZvaWQgY29udmVy
Z2UoY29uc3QgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4mIG9yZGVyKTsKKyAgICAKKyAgICB2
b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9p
ZCBydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBT
Y29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOworICAgIAor
ICAgIHZvaWQgZGlkRXhlY3V0ZShDb25zdHJhaW50UGFyYWxsZWxpc20sIHVuc2lnbmVkIGluZGV4
KTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAgICBTbG90VmlzaXRvciYgbV9tYWluVmlzaXRvcjsK
KyAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CisgICAgQml0VmVjdG9yIG1fZXhlY3V0
ZWQ7CisgICAgRGVxdWU8dW5zaWduZWQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CisgICAg
Qml0VmVjdG9yIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldDsKKyAgICBWZWN0b3I8dW5zaWduZWQs
IDMyPiBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsOworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IG1f
dG9FeGVjdXRlU2VxdWVudGlhbGx5OworICAgIExvY2sgbV9sb2NrOworICAgIENvbmRpdGlvbiBt
X2NvbmRpdGlvbjsKKyAgICB1bnNpZ25lZCBtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmsg
eyAwIH07CisgICAgYm9vbCBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSB7IHRydWUgfTsKKyAgICBW
ZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290
U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09w
YXF1ZVJvb3RTZXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIE9wYXF1ZVJvb3RTZXQgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE9wYXF1ZVJvb3RTZXQpOwotcHVibGljOgotICAgIE9wYXF1ZVJvb3RTZXQoKQotICAgICAg
ICA6IG1fbGFzdFF1ZXJpZWRSb290KG51bGxwdHIpCi0gICAgICAgICwgbV9jb250YWluc0xhc3RR
dWVyaWVkUm9vdChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjb250YWlucyh2b2lk
KiByb290KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHJvb3QgIT0gbV9sYXN0UXVlcmllZFJv
b3QpIHsKLSAgICAgICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gcm9vdDsKLSAgICAgICAgICAg
IG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBtX3Jvb3RzLmNvbnRhaW5zKHJvb3QpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290OwotICAgIH0K
LQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290
cy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBt
X3Jvb3RzLmNsZWFyKCk7Ci0gICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gbnVsbHB0cjsKLSAg
ICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJv
b2wgYWRkKHZvaWQqIHJvb3QpCi0gICAgewotICAgICAgICBpZiAocm9vdCA9PSBtX2xhc3RRdWVy
aWVkUm9vdCkKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSB0cnVlOwot
ICAgICAgICByZXR1cm4gbV9yb290cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsKLSAgICB9Ci0KLSAg
ICBpbnQgc2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5zaXplKCk7
Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmJlZ2luKCk7Ci0gICAgfQotCi0gICAg
SGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9yb290cy5lbmQoKTsKLSAgICB9Ci0KLQotcHJpdmF0ZToKLSAgICBIYXNoU2V0
PHZvaWQqPiBtX3Jvb3RzOwotICAgIG11dGFibGUgdm9pZCogbV9sYXN0UXVlcmllZFJvb3Q7Ci0g
ICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291
cmNlQWRhcHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bh
cmFsbGVsU291cmNlQWRhcHRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TaGFy
ZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5
cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4KK2NsYXNzIFBhcmFs
bGVsU291cmNlQWRhcHRlciA6IHB1YmxpYyBTaGFyZWRUYXNrPElubmVyVHlwZSgpPiB7CitwdWJs
aWM6CisgICAgUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlw
ZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMpCisgICAgICAg
IDogbV9vdXRlclNvdXJjZShvdXRlclNvdXJjZSkKKyAgICAgICAgLCBtX3Vud3JhcEZ1bmModW53
cmFwRnVuYykKKyAgICB7CisgICAgfQorICAgIAorICAgIElubmVyVHlwZSBydW4oKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBpZiAobV9pbm5lclNvdXJjZSkgeworICAgICAgICAgICAgICAg
IGlmIChJbm5lclR5cGUgcmVzdWx0ID0gbV9pbm5lclNvdXJjZS0+cnVuKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9
IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5u
ZXJTb3VyY2UgPSBtX3Vud3JhcEZ1bmMobV9vdXRlclNvdXJjZS0+cnVuKCkpOworICAgICAgICB9
IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAgICAgICAgcmV0dXJuIElubmVyVHlwZSgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG1fb3V0
ZXJTb3VyY2U7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+PiBtX2lubmVyU291
cmNlOworICAgIFVud3JhcEZ1bmMgbV91bndyYXBGdW5jOworICAgIExvY2sgbV9sb2NrOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5lclR5cGUsIHR5cGVu
YW1lIFVud3JhcEZ1bmM+CitSZWY8UGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5u
ZXJUeXBlLCBVbndyYXBGdW5jPj4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxT
aGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVu
d3JhcEZ1bmMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFyYWxsZWxTb3VyY2VBZGFw
dGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPihvdXRlclNvdXJjZSwgdW53cmFw
RnVuYykpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmlu
ZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rp
b24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1
cnJlbmN5IGNvbmN1cnJlbmN5KQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJy
ZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKQorICAgICwgbV9leGVjdXRlRnVuY3Rpb24o
V1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQoreworfQorCitTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKworQ29uc3RyYWludFBhcmFsbGVs
aXNtIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICByZXR1cm4gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0
cmFpbnQuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vIFRoaXMgYWxsb3dzIGZvciBhbiBpbmZvcm1hbCB3YXkgdG8gZGVmaW5lIGNvbnN0cmFpbnRz
LiBKdXN0IHBhc3MgYSBsYW1iZGEgdG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgb25seQorLy8gZG93
bnNpZGUgaXMgdGhhdCB0aGlzIG1ha2VzIGl0IGhhcmQgZm9yIGNvbnN0cmFpbnRzIHRvIGJlIHN0
YXRlZnVsLCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gYmUKKy8vIHBhcmFsbGVsLiBJ
biB0aG9zZSBjYXNlcywgaXQncyBlYXNpZXIgdG8ganVzdCBzdWJjbGFzcyBNYXJraW5nQ29uc3Ry
YWludC4KK2NsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25z
dHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29u
c3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
KyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWlu
dENvbmN1cnJlbmN5OjpDb25jdXJyZW50KTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisKKyAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw5ICs5OCw3IEBAIFNs
b3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1h
cmtpbmcoKQogewotICAgIGlmIChoZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rp
b25TY29wZTo6RnVsbCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGFxdWVSb290cy5pc0Vt
cHR5KCkpOyAvLyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkgbm93LgotICAgIGVsc2UKKyAgICBpZiAo
aGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pCiAgICAg
ICAgIHJlc2V0KCk7CiAKICAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSB2bSgp
LmhlYXBQcm9maWxlcigpKQpAQCAtMTExLDcgKzEwOSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRp
ZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKLSAgICBSRUxF
QVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5zaXplKCkpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0g
MDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51
bGxwdHI7CkBAIC0yNzcsNyArMjc0LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJr
U3RhY2soSlNDZQogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29u
dGFpbmVyLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIEFT
U0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAgICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQo
KTsKQEAgLTM0Niw3ICszNDMsNyBAQCBwcml2YXRlOgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VS
VChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6Omlz
TWFya2VkKGNlbGwpKTsKICAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxs
U2NvcGUoKnRoaXMsIGNlbGwpOwogICAgIApAQCAtNDM1LDcgKzQzMiw3IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVN
dXRhdG9ySXNTdG9wcGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICBtX211dGF0b3JJ
c1N0b3BwZWQgPSAobV9oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVk
KCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOworICAgIG1fbXV0YXRvcklzU3Rv
cHBlZCA9IChtX2hlYXAud29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVk
TXV0YXRvcik7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OnVwZGF0ZU11dGF0b3JJc1N0b3BwZWQo
KQpAQCAtNDUyLDcgKzQ0OSw3IEBAIGJvb2wgU2xvdFZpc2l0b3I6Omhhc0Fja25vd2xlZGdlZFRo
YXRUaGUKIAogYm9vbCBTbG90VmlzaXRvcjo6bXV0YXRvcklzU3RvcHBlZElzVXBUb0RhdGUoKSBj
b25zdAogewotICAgIHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQgPT0gKG1faGVhcC5jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3Bw
ZWRNdXRhdG9yKTsKKyAgICByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAud29y
bGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7CiB9CiAKIHZv
aWQgU2xvdFZpc2l0b3I6Om9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IoKQpAQCAtNDkwLDggKzQ4
Nyw2IEBAIE5FVkVSX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb24KICAgICAgICAg
bV9yaWdodFRvUnVuLnNhZmVwb2ludCgpOwogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7
CiAgICAgfQotICAgIAotICAgIG1lcmdlSWZOZWNlc3NhcnkoKTsKIH0KIAogc2l6ZV90IFNsb3RW
aXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyhzaXplX3QgYnl0ZXNSZXF1ZXN0ZWQp
CkBAIC01NTAsNyArNTQ1LDYgQEAgc2l6ZV90IFNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50
T2ZEcgogICAgIH0KIAogICAgIGRvbmF0ZUFsbCgpOwotICAgIG1lcmdlSWZOZWNlc3NhcnkoKTsK
IAogICAgIHJldHVybiBieXRlc1Zpc2l0ZWQoKTsKIH0KQEAgLTU2MSwxNyArNTU1LDE2IEBAIGJv
b2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oKQogICAgIHJldHVybiBkaWRSZWFj
aFRlcm1pbmF0aW9uKGxvY2tlcik7CiB9CiAKLWJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVy
bWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImKQorYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVh
Y2hUZXJtaW5hdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIHJldHVy
biBpc0VtcHR5KCkKLSAgICAgICAgJiYgIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxN
YXJrZXJzCi0gICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNF
bXB0eSgpCi0gICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1w
dHkoKTsKKyAgICByZXR1cm4gIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
CisgICAgICAgICYmICFoYXNXb3JrKGxvY2tlcik7CiB9CiAKIGJvb2wgU2xvdFZpc2l0b3I6Omhh
c1dvcmsoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewotICAgIHJldHVybiAhbV9oZWFwLm1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICByZXR1cm4gIWlzRW1wdHkoKQor
ICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkK
ICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsK
IH0KIApAQCAtNTgzLDEyICs1NzYsMTQgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFy
ZWREcmFpblJlcwogCiAgICAgYm9vbCBpc0FjdGl2ZSA9IGZhbHNlOwogICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGJvbnVz
VGFzazsKKyAgICAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgICAgICAgICBpZiAoaXNBY3RpdmUpCiAg
ICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsK
ICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycysrOwot
CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVy
RHJhaW4pIHsKICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKQEAgLTYyOSwyOCArNjI0LDUxIEBAIE5FVkVS
X0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgICAgICAgICAgICAgIGF1
dG8gaXNSZWFkeSA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fYm9u
dXNWaXNpdG9yVGFzawogICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFyYWxs
ZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAg
ICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChtX2hlYXAubV9t
YXJraW5nTXV0ZXgsIHRpbWVvdXQsIGlzUmVhZHkpOwogICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmICghaGFzV29yayhsb2NrZXIpCisgICAgICAgICAgICAgICAgICAgICYmIG1f
aGVhcC5tX2JvbnVzVmlzaXRvclRhc2spCisgICAgICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9
IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2s7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKLSAgICAgICAgICAgICAgICBbJl0gKE1h
cmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWJvbnVzVGFzayAmJiBpc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBmb3JFYWNoTWFya1N0YWNrKAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2spLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVs
TWFya2Vycyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAg
ICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIGlmIChib251
c1Rhc2spIHsKKyAgICAgICAgICAgIGJvbnVzVGFzay0+cnVuKCp0aGlzKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gVGhlIG1haW4gdGhyZWFkIGNvdWxkIHN0aWxsIGJlIHJ1bm5pbmcs
IGFuZCBtYXkgcnVuIGZvciBhIHdoaWxlLiBVbmxlc3Mgd2UgY2xlYXIgdGhlIHRhc2sKKyAgICAg
ICAgICAgIC8vIG91cnNlbHZlcywgd2Ugd2lsbCBrZWVwIGxvb3BpbmcgYXJvdW5kIHRyeWluZyB0
byBydW4gdGhlIHRhc2suCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgICAgIGlm
IChtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID09IGJvbnVzVGFzaykKKyAgICAgICAgICAgICAg
ICAgICAgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgYm9udXNUYXNrID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAg
ICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpc0FjdGl2
ZSA9IHRydWU7CiAgICAgfQogfQpAQCAtNjcwLDE1ICs2ODgsMTkgQEAgU2xvdFZpc2l0b3I6OlNo
YXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFy
a2VycygpID09IDEKICAgICAgICAgfHwgKG1faGVhcC5tX3dvcmxkU3RhdGUubG9hZCgpICYgSGVh
cDo6bXV0YXRvcldhaXRpbmdCaXQpCiAgICAgICAgIHx8ICFtX2hlYXAuaGFzSGVhcEFjY2Vzcygp
Ci0gICAgICAgIHx8IG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCgpKSB7CisgICAgICAgIHx8IG1faGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgIC8v
IFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIG92ZXIgZHJhaW5JblBhcmFsbGVsKCkgd2hlbiB3ZSBo
YXZlIGEgY29uY3VycmVudCBtdXRhdG9yIGJ1dAogICAgICAgICAvLyBvdGhlcndpc2UgaXQgaXMg
bm90IHByb2ZpdGFibGUuCiAgICAgICAgIHJldHVybiBkcmFpbkluUGFyYWxsZWwodGltZW91dCk7
CiAgICAgfQogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsK
LSAgICBkb25hdGVBbGwobG9ja2VyKTsKLSAgICAKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9o
ZWFwLm1fbWFya2luZ011dGV4KSk7CisgICAgcmV0dXJuIHdhaXRGb3JUZXJtaW5hdGlvbih0aW1l
b3V0KTsKK30KKworU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjp3
YWl0Rm9yVGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKICAgICBmb3IgKDs7KSB7CiAg
ICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgcmV0dXJuIFNoYXJl
ZERyYWluUmVzdWx0OjpUaW1lZE91dDsKQEAgLTcxMSw2MSArNzMzLDYgQEAgdm9pZCBTbG90Vmlz
aXRvcjo6ZG9uYXRlQWxsKGNvbnN0IEFic3RyYQogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVl
Um9vdCh2b2lkKiByb290KQotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewotICAgICAgICAv
LyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAgICAgIG1faGVhcC5t
X29wYXF1ZVJvb3RzLmFkZChyb290KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBQ
dXQgaW50byB0aGUgbG9jYWwgc2V0LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVy
eSBvbmNlIGluCi0gICAgLy8gYSB3aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0
cyBkb24ndCBncm93IHRvbyBsYXJnZS4KLSAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxl
KCk7Ci0gICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci19Ci0KLWJvb2wgU2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25zdAotewotICAgIGlmICghcm9vdCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxN
b2RlKTsKLSAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Ci19
Ci0KLVRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lk
KiByb290KSBjb25zdAotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIEZhbHNlVHJp
U3RhdGU7Ci0gICAgCi0gICAgaWYgKG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCkpCi0gICAg
ICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgaWYgKG1faGVhcC5tX29wYXF1ZVJvb3Rz
LmNvbnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHJldHVy
biBNaXhlZFRyaVN0YXRlOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZUlmTmVjZXNzYXJ5
KCkKLXsKLSAgICBpZiAobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3Bh
cXVlUm9vdHNJZlByb2ZpdGFibGUoKQotewotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0gICAgCiB2
b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQogewogICAgIGlmICghbV9pc0luUGFyYWxsZWxNb2Rl
KSB7CkBAIC03ODUsMTYgKzc1Miw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWlu
KE1vbm90b24KICAgICBkcmFpbih0aW1lb3V0KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6bWVy
Z2VPcGFxdWVSb290cygpCi17Ci0gICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4KTsKLSAgICAgICAgZm9yIChhdXRvKiByb290
IDogbV9vcGFxdWVSb290cykKLSAgICAgICAgICAgIG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChy
b290KTsKLSAgICB9Ci0gICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotfQotCiB2b2lkIFNsb3RW
aXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIq
IHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCiB7CiAgICAgbV9oZWFwLm1fd2Vha1JlZmVyZW5jZUhh
cnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjI1NDAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAi
SXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAiT3Bh
cXVlUm9vdFNldC5oIgogI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1ZGUgPHd0Zi9N
b25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTUsMTAg
Kzk0LDkgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNWYWx1
ZSk7CiAgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CisgICAgYm9vbCBhZGRP
cGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdhcyBuZXcuCiAg
ICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCop
IGNvbnN0OwotICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBj
b25zdDsKKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAKICAgICBi
b29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211
dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KIApAQCAtMTIxLDYgKzExOSw4IEBAIHB1YmxpYzoKIAog
ICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVv
dXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBk
cmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3Rvbmlj
VGltZTo6aW5maW5pdHkoKSk7CisgICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQgd2FpdEZvclRl
cm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOwogCiAgICAgLy8gQXR0ZW1wdHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQgb2YgZHJhaW5p
bmcgdGhhdCBpbnZvbHZlcyBvbmx5IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBkYXRhLiBUaGlz
CiAgICAgLy8gaXMgbGlrZWx5IHRvIGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3IgbGVzcyB0aGFu
IHRoYXQuIEl0IHdpbGwgdXN1YWxseSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQgbWF5CkBAIC0x
MjgsOCArMTI4LDYgQEAgcHVibGljOgogICAgIC8vIHJhcmUgY2FzZXMgaGFwcGVuIHRlbXBvcmFy
aWx5IGV2ZW4gaWYgd2UncmUgbm90IHJlYWNoaW5nIHRlcm1pbmF0aW9uKS4KICAgICBzaXplX3Qg
cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzKTsKICAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlSWZOZWNlc3NhcnkoKTsKLQogICAgIC8vIFRoaXMgaW5m
b3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdlIGFyZSBrZWVw
aW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KICAgICAvLyB0aGlzIHRoZW4gdGhlIHNwYWNlIHdp
bGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgogICAgIHZvaWQgbWFya0F1eGlsaWFyeShjb25zdCB2
b2lkKiBiYXNlKTsKQEAgLTE5NCwxMCArMTkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAgIAotICAgIHZvaWQgbWVyZ2VP
cGFxdWVSb290cygpOwotCi0gICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7
Ci0KICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9p
ZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CkBAIC0yMTUsNyArMjA5LDYgQEAgcHJpdmF0ZToKIAog
ICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CiAgICAgTWFya1N0YWNrQXJyYXkg
bV9tdXRhdG9yU3RhY2s7Ci0gICAgT3BhcXVlUm9vdFNldCBtX29wYXF1ZVJvb3RzOyAvLyBIYW5k
bGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFnZSBjb2xs
ZWN0b3IuCiAgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2UgfTsgLy8gVXNl
ZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCiAgICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVk
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxp
bmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDIzIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAgICAgICAgYXBwZW5kSGlk
ZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmFkZE9wYXF1
ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQocHRyKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikgY29uc3QK
K3sKKyAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7Cit9CisK
IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
IHNpemUpCiB7CiAgICAgaWYgKG1faXNGaXJzdFZpc2l0KSB7CkBAIC0xNTksMTIgKzE3NiwxMiBA
QCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAogCiBpbmxpbmUgVk0mIFNs
b3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4g
Km1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2bSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJQYXJhbGxl
bFNvdXJjZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAj
aW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKQEAgLTg4LDUgKzg5LDQyIEBAIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gU3Vic3BhY2U6OnBhcmFs
bGVsQWxsb2NhdG9yU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRh
c2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0
b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2VkQWxsb2Nh
dG9yKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9
IG1fYWxsb2NhdG9yOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBt
X2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICAgICAgTG9jayBtX2xvY2s7
CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sobV9maXJzdEFsbG9j
YXRvcikpOworfQorCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4g
U3Vic3BhY2U6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpCit7CisgICAgcmV0
dXJuIGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRC
bG9jazo6SGFuZGxlKj4oCisgICAgICAgIHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCksCisgICAg
ICAgIFtdIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVmUHRyPFNoYXJlZFRhc2s8
TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIGFsbG9j
YXRvci0+cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAgICAgIH0pOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNyArNjksMjQgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNvbnN0IEZ1
bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+PiBw
YXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTm90RW1wdHlNYXJrZWRC
bG9jayhjb25zdCBGdW5jJik7CiAgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPFNo
YXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlNYXJrZWRC
bG9ja1NvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9p
ZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYp
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUmVmUHRyPFNoYXJlZFRh
c2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0
IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNo
TGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4
NCw1MyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1
bmMpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0
b3ImKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3BhY2UsIGNv
bnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCisgICAg
ICAgICAgICAsIG1fYmxvY2tTb3VyY2Uoc3Vic3BhY2UucGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJs
b2NrU291cmNlKCkpCisgICAgICAgICAgICAsIG1fZnVuYyhmdW5jKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBv
dmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRs
ZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKKyAgICAgICAgICAgICAgICBoYW5k
bGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxs
KiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGNlbGwsIGtpbmQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
ICAgICAgICAgICAgIGlmICghbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBtX25lZWRUb1Zpc2l0TGFyZ2VB
bGxvY2F0aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX3N1YnNwYWNlLmZvckVhY2hMYXJnZUFsbG9jYXRpb24oCisgICAgICAgICAgICAgICAg
WyZdIChMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFsbG9jYXRpb24tPmlzTWFya2VkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1
bmModmlzaXRvciwgYWxsb2NhdGlvbi0+Y2VsbCgpLCBtX3N1YnNwYWNlLm1fYXR0cmlidXRlcy5j
ZWxsS2luZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgU3Vic3BhY2UmIG1fc3Vic3BhY2U7CisgICAgICAgIFJlZlB0cjxT
aGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBtX2Jsb2NrU291cmNlOworICAgICAg
ICBGdW5jIG1fZnVuYzsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgICAgIGJvb2wgbV9uZWVk
VG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgeyB0cnVlIH07CisgICAgfTsKKyAgICAKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMsIGZ1bmMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJiBmdW5j
KQogewogICAgIGZvckVhY2hNYXJrZWRCbG9jaygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgeworcHVibGljOgorICAgIFZp
c2l0Q291bnRlcigpIHsgfQorICAgIAorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRvciYgdmlz
aXRvcikKKyAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCisgICAgICAgICwgbV9pbml0aWFs
VmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsgfQorICAg
IAorICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3Zpc2l0b3ItPnZpc2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291bnQ7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9OworICAg
IHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91
dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNp
dGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3Rm
L1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
VmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoKLSAgICBWaXNpdGluZ1RpbWVvdXQoKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBi
b29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAgIDog
bV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKLSAgICAgICAgLCBtX3Zpc2l0
Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCi0gICAgICAgICwgbV90aW1lb3V0KHRp
bWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgdmlzaXRDb3VudChTbG90Vmlz
aXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0
Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFZpc2l0
U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpICYmIGhhc0Vs
YXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIGJvb2wgbV9kaWRW
aXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3VudEJlZm9yZSB7
IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFdlYWtCbG9jazo6c3Bl
Y2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAoY29udGFp
bmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgp
KSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwganNWYWx1
ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlm
ICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5r
bm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdlYWtJbXBs
LT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsx
MTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoKQogICAgIC8vIGhhcyBh
bnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0
IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAg
ICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAg
IHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0
LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVP
YmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQog
CiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KHRoaXMpOworICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7
CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3Vs
ZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBUaGlzIGRvZXMgc29tZSBjaGFuZ2VzIHRvIG1ha2UgaXQgZWFzaWVyIHRv
IGRvIHBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZzoKKyAgICAgICAgCisgICAgICAgIC0gSSBm
aW5hbGx5IHJlbW92ZWQgZGVwZW5kZW5jeVdpdGguIFRoaXMgd2FzIGEgc2lsbHkgY29uc3RydWN0
IHdob3NlIG9ubHkgcHVycG9zZSBpcyB0byBjb25mdXNlCisgICAgICAgICAgcGVvcGxlIGFib3V0
IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIGRlcGVuZGVuY3kgY2hhaW4uIEkgdG9vayB0aGF0IGFz
IGFuIG9wcG9ydHVuaXR5IHRvIGdyZWFseQorICAgICAgICAgIHNpbXBsaWZ5IHRoZSBHQydzIHVz
ZSBvZiBkZXBlbmRlbmN5IGNoYWluaW5nLgorICAgICAgICAKKyAgICAgICAgLSBBZGRlZCBtb3Jl
IGxvZ2ljIHRvIERlcXVlPD4sIHNpbmNlIEkgdXNlIGl0IGZvciBwYXJ0IG9mIHRoZSBsb2FkIGJh
bGFuY2VyLgorICAgICAgICAKKyAgICAgICAgLSBNYWRlIGl0IHBvc3NpYmxlIHRvIHByb2ZpbGUg
bG9jayBjb250ZW50aW9uLiBTZWUKKyAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgwMjUwI2MwIGZvciBzb21lIHByZWxpbWluYXJ5IG1lYXN1cmVtZW50
cy4KKyAgICAgICAgCisgICAgICAgIC0gSW50cm9kdWNlZCBob2xkTG9ja0lmLCB3aGljaCBtYWtl
cyBpdCBlYXN5IHRvIHBlcmZvcm0gcHJlZGljYXRlZCBsb2NrIGFjcXVpc2l0aW9uLiBXZSB1c2Ug
dGhhdAorICAgICAgICAgIHRvIHBpY2sgYSBsb2NrIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgor
ICAgICAgICAoV1RGOjpkZXBlbmRlbmN5KToKKyAgICAgICAgKFdURjo6RGVwZW5kZW5jeVdpdGg6
OkRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGVwZW5kZW5jeVdpdGgp
OiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Qml0
VmVjdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQpOgor
ICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6fkNvbmN1cnJlbnRQdHJIYXNoU2V0
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcyk6
CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcik6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdURjo6Q29u
Y3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3cpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRy
SGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRy
SGFzaFNldDo6cmVzaXplQW5kQWRkKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hT
ZXQ6OlRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmNvbnRhaW5zKToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZCk6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFB0ckhhc2hTZXQ6OlRhYmxlOjptYXhMb2FkIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29u
Y3VycmVudFB0ckhhc2hTZXQ6Omhhc2gpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFz
aFNldDo6Y2FzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpjb250YWlu
c0ltcGwgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6YWRkSW1w
bCk6CisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIChXVEY6OmlubGluZUNhcGFjaXR5
Pjo6dGFrZUZpcnN0KToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5oOgorICAgICAgICAqIHd0
Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OmxvY2tTbG93KToKKyAgICAgICAg
KiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChXVEY6OmhvbGRMb2NrSWYpOgorICAgICAgICAqIHd0
Zi9TY29wZWRMYW1iZGEuaDoKKyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAo
V1RGOjpTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUpOgorICAgICAgICAoV1RGOjpTaGFyZWRU
YXNrPFJlc3VsdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TdGFja1Nob3QuaDogQWRk
ZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6U3RhY2tTaG90KToKKyAgICAgICAgKFdURjo6
U3RhY2tTaG90OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6OmFycmF5IGNv
bnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6U3RhY2tTaG90OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tT
aG90OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpoYXNoIGNv
bnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBj
b25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I+IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6U3RhY2tTaG90OjpkZWxldGVkVmFsdWVBcnJheSk6CisgICAgICAgIChXVEY6OlN0
YWNrU2hvdEhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RIYXNoOjplcXVhbCk6
CisgICAgICAgICogd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg6IEFkZGVkLgorICAgICAgICAoV1RG
OjpTdGFja1Nob3RQcm9maWxlcjo6U3RhY2tTaG90UHJvZmlsZXIpOgorICAgICAgICAoV1RGOjpT
dGFja1Nob3RQcm9maWxlcjo6cHJvZmlsZSk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdFByb2Zp
bGVyOjpydW4pOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0
aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIy
NTQwMykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9u
ICovCiAJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRjUyNjkxRjQyMUZG
ODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUw
MDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJz
aW9uLmNwcCAqLzsgfTsKKwkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQ
dHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAg
Ki87IH07CiAJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RUYx
REI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi87IH07CiAJCTBGNUJGMTc2
MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3NDFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNh
Z2UuY3BwICovOyB9OwogCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRT
dHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAqLzsgfTsK
QEAgLTE4Myw2ICsxODQsOCBAQAogCQkwRjMwQkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2lu
Z0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hN
YXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMEJBOEUxRTc4NzA4RTAwMkNB
ODQ3IC8qIExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBCQThG
MUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0
ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1OTFGQ0RG
MTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJFQjRBIC8qIExvY2tBbGdvcml0aG1Jbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG1JbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQwMDNDRkVGMiAvKiBTdHJpbmdWZWN0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIyNiw2ICsyMjksOCBAQAogCQkwRjlEMzM1QzE2NURCQTczMDA1QUQz
ODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1
RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDQxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1Nob3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDUxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFBy
b2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrU2hvdFByb2Zp
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlC
NkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBC
YWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFj
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVRyYWNpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5NCw2ICs3OTksOCBAQAogCQkJCTBGOEYy
QjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovLAogCQkJCUE4QTQ3
MjcwMTUxQTgyNUEwMDQxMjNGRiAvKiBDb21waWxlci5oICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2
MUUwMDlBMkJCQyAvKiBDb21wbGV0aW9uSGFuZGxlci5oICovLAorCQkJCTBGMzBDQjU4MUZDREYx
MzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCisJCQkJMEYzMENCNTkx
RkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8sCiAJCQkJMEZEQjY5
OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlvbi5oICovLAogCQkJCUUzOEM0MTI2MUVCNEUw
NjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCAqLywKIAkJCQlFMzhDNDEyNzFFQjRFMDY4MDA0Mjk1
N0QgLyogQ1BVVGltZS5oICovLApAQCAtMTAwNSw2ICsxMDEyLDggQEAKIAkJCQlBOEE0NzMwRDE1
MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0
MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdGFja0JvdW5kcy5oICovLAorCQkJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBT
dGFja1Nob3QuaCAqLywKKwkJCQkwRjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90
UHJvZmlsZXIuaCAqLywKIAkJCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0
cy5jcHAgKi8sCiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAq
LywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8sCkBA
IC0xNDI2LDYgKzE0MzUsNyBAQAogCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJCMUYzRDQ4NjAwMEM3NDk1MCAv
KiBQZXJzaXN0ZW50Q29kZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJDMUYzRDQ4
NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjMwQ0I1QTFGQ0RGMTM0MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTFGMTc1MkQxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRFbmNv
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzYyMTY1REJBNzMwMDVBRDM4NyAvKiBQ
cmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUx
NEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0
b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQ2LDExICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5
KAogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9IG51bGxwdHI+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
CiB7CiAgICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50NjRfdCBjb3B5ID0gYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5pb24geworICAgICAgICB1aW50MzJfdCBj
b3B5OworICAgICAgICBUIHZhbHVlOworICAgIH0gdTsKKyAgICB1LmNvcHkgPSAwOworICAgIHUu
dmFsdWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAgICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6
ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgogICAg
IC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4gdXNh
YmxlIGFzIGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICszNjgsMjAgQEAgQUxXQVlTX0lOTElORSBE
ZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4KICAg
ICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCiAgICAgICAgIDogW2Rl
cGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Cisg
ICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxpZiBDUFUoQVJNKQogICAgIGFzbSgiZW9y
ICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1y
IihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5d
ICJyIih1LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVwZW5kZW5jeSBpcyBuZWVkZWQgZm9y
IHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVuY2UoKTsKICAgICBkZXBlbmRlbmN5
ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgVU5VU0VEX1BBUkFNKHUuY29weSk7
CiAjZW5kaWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0KIAotLy8gRklYTUU6IFRoaXMgY29k
ZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQu
Ci0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+
Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShU
IHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29weSA9
IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lmIENQVShBUk02NCkKLSAgICBhc20o
ImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVu
Y3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBD
UFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAg
ICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNv
cHkpKTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwotICAgIGRlcGVuZGVuY3kgPSAwOwot
ICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5Owot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9m
KFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVw
ZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVp
bnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5M
SU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRl
bmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5V2l0
aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAsIHZh
bHVlKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kg
ZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRl
bmN5KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19OwotICAgIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRlbmN5V2l0aChEZXBlbmRl
bmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBEZXBlbmRlbmN5
V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBp
bmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CkBA
IC00NjksMTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUgVCYgZW5zdXJlUG9pbnRlcihBdG9taWM8
VCoKIAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6OkRlcGVuZGVuY3k7Ci11c2luZyBX
VEY6OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpjb25zdW1lOwogdXNpbmcgV1RGOjpkZXBl
bmRlbmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKIHVzaW5nIFdURjo6ZW5zdXJlUG9p
bnRlcjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAg
KysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCiAgICAg
ICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTE4LDYgKzE4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQ2xvY2tUeXBl
LmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaAorICAgIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmgKICAgICBDb25kaXRpb24uaAogICAgIENyb3NzVGhyZWFkQ29waWVyLmgK
ICAgICBDcm9zc1RocmVhZFRhc2suaApAQCAtMTMyLDYgKzEzMyw4IEBAIHNldChXVEZfSEVBREVS
UwogICAgIFNlZ21lbnRlZFZlY3Rvci5oCiAgICAgU21hbGxQdHJTZXQuaAogICAgIFN0YWNrQm91
bmRzLmgKKyAgICBTdGFja1Nob3QuaAorICAgIFN0YWNrU2hvdFByb2ZpbGVyLmgKICAgICBTdGFj
a1N0YXRzLmgKICAgICBTdGFja1RyYWNlLmgKICAgICBTdGRMaWJFeHRyYXMuaApAQCAtMjE4LDYg
KzIyMSw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIENQVVRpbWUuY3BwCiAgICAgQ2xvY2tUeXBl
LmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0
LmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENyeXB0b2dyYXBoaWNVdGlsaXRp
ZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudFB0ckhhc2hTZXQuaCIK
KworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitDb25jdXJy
ZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworICAgIGluaXRpYWxpemUo
KTsKK30KKworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCgpCit7
Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcygpCit7Cisg
ICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90
aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBz
b21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFibGVzLnJlbW92ZUFs
bE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4mIHRhYmxlKSAt
PiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS5nZXQoKSAhPSBtX3RhYmxlLmxvYWRS
ZWxheGVkKCk7CisgICAgICAgIH0pOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0Ojpj
bGVhcigpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2Ug
aXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZl
bnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4K
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFi
bGVzLmNsZWFyKCk7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJI
YXNoU2V0Ojppbml0aWFsaXplKCkKK3sKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgaW5pdGlhbFNp
emUgPSAzMjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IHRhYmxlID0gVGFibGU6OmNyZWF0
ZShpbml0aWFsU2l6ZSk7CisgICAgbV90YWJsZS5zdG9yZVJlbGF4ZWQodGFibGUuZ2V0KCkpOwor
ICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKHRhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3Vy
cmVudFB0ckhhc2hTZXQ6OmFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKQoreworICAgIGlmICh0
YWJsZS0+bG9hZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJsZS0+bWF4TG9hZCgpKQorICAgICAgICBy
ZXR1cm4gcmVzaXplQW5kQWRkKHB0cik7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICB2
b2lkKiBvbGRFbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0uY29tcGFyZUV4Y2hhbmdlU3Ryb25n
KG51bGxwdHIsIHB0cik7CisgICAgICAgIGlmICghb2xkRW50cnkpIHsKKyAgICAgICAgICAgIGlm
IChtX3RhYmxlLmxvYWQoKSAhPSB0YWJsZSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGFkZGVk
IGFuIGVudHJ5IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVlZCB0byByZWV4ZWN1dGUgdGhlIGFkZCBv
biB0aGUgbmV3IHRhYmxlLgorICAgICAgICAgICAgICAgIHJldHVybiBhZGQocHRyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChvbGRFbnRyeSA9PSBwdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAh
PSBzdGFydEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJl
c2l6ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CisgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgIGlmICh0YWJs
ZS0+bG9hZC5sb2FkUmVsYXhlZCgpIDwgdGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gbmV3VGFibGUgPSBUYWJsZTo6Y3Jl
YXRlKHRhYmxlLT5zaXplICogMik7CisgICAgdW5zaWduZWQgbWFzayA9IG5ld1RhYmxlLT5tYXNr
OworICAgIHVuc2lnbmVkIGxvYWQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
YWJsZS0+c2l6ZTsgKytpKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IHRhYmxlLT5hcnJheVtpXS5s
b2FkUmVsYXhlZCgpOworICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7
CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgQXRvbWljPHZvaWQqPiYgZW50cnlSZWYgPSBuZXdUYWJsZS0+YXJyYXlb
aW5kZXhdOworICAgICAgICAgICAgdm9pZCogZW50cnkgPSBlbnRyeVJlZi5sb2FkUmVsYXhlZCgp
OworICAgICAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgICAgIGVudHJ5UmVmLnN0
b3JlUmVsYXhlZChwdHIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkgIT0gcHRyKTsKKyAgICAgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5k
ZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvYWQrKzsK
KyAgICB9CisgICAgCisgICAgbmV3VGFibGUtPmxvYWQuc3RvcmVSZWxheGVkKGxvYWQpOworICAg
IAorICAgIG1fdGFibGUuc3RvcmUobmV3VGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFw
cGVuZChXVEZNb3ZlKG5ld1RhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6
OnJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAg
ICByZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFz
aFNldDo6VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6Y3JlYXRlKHVuc2lnbmVk
IHNpemUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJs
ZT4gcmVzdWx0KG5ldyAoZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIGFycmF5KSAr
IHNpemVvZihBdG9taWM8dm9pZCo+KSAqIHNpemUpKSBUYWJsZSgpKTsKKyAgICByZXN1bHQtPnNp
emUgPSBzaXplOworICAgIHJlc3VsdC0+bWFzayA9IHNpemUgLSAxOworICAgIHJlc3VsdC0+bG9h
ZC5zdG9yZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9yZVJlbGF4ZWQobnVsbHB0cik7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0
Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEgY29uY3VycmVudCBoYXNoLWJhc2Vk
IHNldCBmb3IgcG9pbnRlcnMuIEl0J3Mgb3B0aW1pemVkIGZvcjoKKy8vCisvLyAtIEhpZ2ggcmF0
ZSBvZiBjb250YWlucygpIGNhbGxzLgorLy8gLSBIaWdoIHJhdGUgb2YgYWRkKCkgY2FsbHMgdGhh
dCBkb24ndCBhZGQgYW55dGhpbmcgbmV3LiBhZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0
aGluZyAobm9wIGFkZHMpCisvLyAgIGRvbid0IG11dGF0ZSB0aGUgdGFibGUgYXQgYWxsLgorLy8g
LSBOb3QgdG9vIG1hbnkgdGhyZWFkcy4gSSBkb3VidCB0aGlzIHNjYWxlcyBiZXlvbmQgfjQuIFRo
b3VnaCwgaXQgbWF5IGFjdHVhbGx5IHNjYWxlIGJldHRlciB0aGFuIHRoYXQKKy8vICAgaWYgdGhl
IHJhdGUgb2Ygbm9wIGFkZHMgaXMgYWJzdXJkbHkgaGlnaC4KKy8vCisvLyBJZiB3ZSB3YW50ZWQg
dGhpcyB0byBzY2FsZSBiZXR0ZXIsIHRoZSBtYWluIGNoYW5nZSB3ZSdkIGhhdmUgdG8gbWFrZSBp
cyBob3cgdGhpcyB0YWJsZSBkZXRlcm1pbmVzIHdoZW4KKy8vIHRvIHJlc2l6ZS4gUmlnaHQgbm93
IGl0J3MgYSBzaGFyZWQgY291bnRlci4gV2UgbG9jazt4YWRkIHRoaXMgY291bnRlci4gT25lIGVh
c3kgd2F5IHRvIG1ha2UgdGhhdAorLy8gc2NhbGFibGUgaXMgdG8gcmVxdWlyZSBlYWNoIHRocmVh
ZCB0aGF0IHdvcmtzIHdpdGggdGhlIENvbmN1cnJlbnRQdHJIYXNoU2V0IHRvIHJlZ2lzdGVyIGl0
c2VsZiBmaXJzdC4KKy8vIFRoZW4gZWFjaCB0aHJlYWQgd291bGQgaGF2ZSBzb21lIGRhdGEgc3Ry
dWN0dXJlIHRoYXQgaGFzIGEgY291bnRlci4gV2UgY291bGQgaW5zdGl0dXRlIHRoZSBwb2xpY3kg
dGhhdAorLy8gZWFjaCB0aHJlYWQgc2ltcGx5IGluY3JlbWVudHMgaXRzIG93biBsb2FkIGNvdW50
ZXIsIGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmUuIFRoZW4sIGlmIGFueSBzZWFyY2ggdG8KKy8v
IHJlc29sdmUgYSBjb2xsaXNpb24gZG9lcyBtb3JlIHRoYW4gTiBpdGVyYXRpb25zLCB3ZSBjYW4g
Y29tcHV0ZSBhIGNvbWJpbmVkIGxvYWQgYnkgc3VtbWluZyB0aGUgbG9hZAorLy8gY291bnRlcnMg
b2YgYWxsIG9mIHRoZSB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzLgorLy8KKy8vIENvbmN1cnJlbnRQ
dHJIYXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNlZXMgYSA5OCUgbm9wIGFkZCByYXRlIGlu
IFNwZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIGZvY3VzZXMgc28gbXVjaCBvbiBjYXNl
cyB3aGVyZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdlLgorY2xhc3MgQ29uY3VycmVudFB0ckhh
c2hTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1cnJlbnRQdHJIYXNoU2V0KTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBDb25jdXJyZW50UHRySGFzaFNldCgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+
Q29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb250YWlu
c0ltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkSW1wbChj
YXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3RhYmxlLmxvYWRSZWxheGVkKCktPmxvYWQubG9hZFJlbGF4ZWQo
KTsKKyAgICB9CisgICAgCisgICAgLy8gT25seSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBv
dGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJlZXMgdXAgbWVtb3J5IHdpdGhvdXQg
Y2hhbmdpbmcKKyAgICAvLyB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlLgorICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygpOworICAgIAorICAgIC8vIE9ubHkgY2Fs
bCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBjYWxsIGFkZCgpLiBUaGlz
IGZyZWVzIHVwIGFsbCBtZW1vcnkgZXhjZXB0IGZvcgorICAgIC8vIHRoZSBzbWFsbGVzdCBwb3Nz
aWJsZSBoYXNodGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXIoKTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RydWN0IFRhYmxlIHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxUYWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOworICAgICAgICAKKyAgICAgICAgdW5zaWdu
ZWQgbWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLyAyOyB9CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4KKyAgICAgICAgdW5zaWduZWQg
bWFzazsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAgIEF0b21pYzx1bnNpZ25lZD4gbG9h
ZDsKKyAgICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsxXTsKKyAgICB9OworICAgIAorICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBQdHJI
YXNoPHZvaWQqPjo6aGFzaChwdHIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUo
KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQqIGNhc3QoVCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IHNpemVvZih2b2lk
KiksICJ0eXBlIHRvbyBiaWciKTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgdm9pZCog
cHRyOworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAgfSB1OworICAgICAgICB1LnB0ciA9
IG51bGxwdHI7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHUucHRy
OworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zSW1wbCh2b2lkKiBwdHIpIGNvbnN0Cisg
ICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAg
ICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJ
bmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJ
bmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJs
ZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChlbnRyeSA9PSBw
dHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0
YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQuCisgICAgYm9vbCBhZGRJbXBsKHZvaWQqIHB0cikKKyAg
ICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAg
ICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAgICAgICB1bnNpZ25lZCBzdGFydElu
ZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydElu
ZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IHRhYmxl
LT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3codGFibGUsIG1hc2ssIHN0YXJ0SW5kZXgsIGlu
ZGV4LCBwdHIpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09IHB0cikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGFkZFNsb3coVGFi
bGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBp
bmRleCwgdm9pZCogcHRyKTsKKworICAgIHZvaWQgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAgICBi
b29sIHJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpOworICAgIAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8VGFibGU+LCA0PiBtX2FsbFRhYmxlczsKKyAgICBBdG9taWM8VGFibGUqPiBtX3RhYmxl
OyAvLyBUaGlzIGlzIG5ldmVyIG51bGwuCisgICAgTG9jayBtX2xvY2s7IC8vIFdlIGp1c3QgdXNl
IHRoaXMgdG8gY29udHJvbCByZXNpemUgcmFjZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwordXNpbmcgV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUg
RnVuYz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKICAgICAK
KyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhl
IGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgorICAgIC8v
IFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3QoY29uc3QgRnVuYyYpOworCiAgICAgLy8g
UmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNr
IHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgogICAgIC8vIFQgaWYgaXQg
dGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNh
cGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQgY291bnQg
PSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUgKGNvdW50
IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VGaXJzdCgpOworICAgICAgICBp
ZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAg
ICAgICAgICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbmRp
ZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOworICAgICAgICBhcHBlbmQoV1RGTW92
ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
IGlubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUxhc3QoY29uc3QgRnVuYyYg
ZnVuYykKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9G
YXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzNCw4ICsyMzQsNyBAQCB1c2luZyBXVEY6OmZhc3RBbGlnbmVkRnJlZTsKICNk
ZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5FIGlubGluZQogI2VuZGlmCiAKLSNkZWZpbmUgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQgXAotcHVibGljOiBcCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEX0lNUEwgXAogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHApIHsg
cmV0dXJuIHA7IH0gXAogICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCogcCkg
eyByZXR1cm4gcDsgfSBcCiAgICAgXApAQCAtMjYzLDcgKzI2MiwxNSBAQCBwdWJsaWM6IFwKICAg
ICAgICAgQVNTRVJUKGxvY2F0aW9uKTsgXAogICAgICAgICByZXR1cm4gbG9jYXRpb247IFwKICAg
ICB9IFwKKworI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBcCitwdWJsaWM6IFwKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKIHByaXZhdGU6IFwKIHR5cGVkZWYgaW50
IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KIAorI2RlZmluZSBX
VEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQgXAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEX0lNUEwgXAordHlwZWRlZiBpbnQgX190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRl
clRoaXNNYWNybworCiAjZW5kaWYgLyogV1RGX0Zhc3RNYWxsb2NfaCAqLwpJbmRleDogU291cmNl
L1dURi93dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxMSArMjcsMTYgQEAKICNpbmNsdWRlICJMb2NrLmgiCiAKICNpbmNsdWRlIDx3
dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTaG90UHJvZmls
ZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBwcm9maWxl
TG9ja0NvbnRlbnRpb24gPSBmYWxzZTsKKwogdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogewor
ICAgIGlmIChwcm9maWxlTG9ja0NvbnRlbnRpb24pCisgICAgICAgIFNUQUNLX1NIT1RfUFJPRklM
RSg0LCAyLCA1KTsKICAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja1Nsb3cobV9ieXRlKTsK
IH0KIApJbmRleDogU291cmNlL1dURi93dGYvTG9ja2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvTG9ja2VyLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xv
Y2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMiw2ICsxMjIsMTIgQEAgTG9ja2Vy
PExvY2tUeXBlPiBob2xkTG9jayhMb2NrVHlwZSYgbG9jawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMb2NrVHlwZT4KK0xvY2tlcjxMb2NrVHlwZT4gaG9sZExvY2tJZihMb2NrVHlwZSYgbG9jaywg
Ym9vbCBwcmVkaWNhdGUpCit7CisgICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4ocHJlZGljYXRl
ID8gJmxvY2sgOiBudWxscHRyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBM
b2NrZXI8TG9ja1R5cGU+IHRyeUhvbGRMb2NrKExvY2tUeXBlJiBsb2NrKQogewogICAgIHJldHVy
biBMb2NrZXI8TG9ja1R5cGU+Ojp0cnlMb2NrKGxvY2spOwpAQCAtMTM0LDUgKzE0MCw2IEBAIHVz
aW5nIFdURjo6TG9ja2VyOwogdXNpbmcgV1RGOjpOb0xvY2tpbmdOZWNlc3NhcnlUYWc7CiB1c2lu
ZyBXVEY6Ok5vTG9ja2luZ05lY2Vzc2FyeTsKIHVzaW5nIFdURjo6aG9sZExvY2s7Cit1c2luZyBX
VEY6OmhvbGRMb2NrSWY7CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFt
YmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzQsNiArMTc0LDEzIEBAIHByaXZhdGU6CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4g
eW91IGFscmVhZHkgcmVmZXIgdG8gYSBmdW5jdG9yIGJ5IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93
IGl0cyBsaWZldGltZSBpcwogLy8gZ29vZC4gVGhpcyBqdXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1i
ZGEgdGhhdCBwb2ludHMgdG8geW91ciBmdW5jdG9yLgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGlz
IGFsd2F5cyB3cm9uZzoKKy8vCisvLyBhdXRvIHJlZiA9IHNjb3BlZExhbWJkYVJlZihbLi4uXSAo
Li4uKSB7Li4ufSk7CisvLworLy8gQmVjYXVzZSB0aGUgc2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVm
ZXIgdG8gdGhlIGxhbWJkYSBieSByZWZlcmVuY2UsIGFuZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFm
dGVyIHRoZQorLy8gc2VtaWNvbG9uLiBVc2Ugc2NvcGVkTGFtYmRhKCkgaW4gdGhhdCBjYXNlLgog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVk
TGFtYmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYVJlZihj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFz
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIHN0YXRlIGluIG1lbWJlciBmaWVs
ZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5b3Ugd2FudCBmaW5lLWdyYWluZWQgY29u
dHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0
aGUgdGFzay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFz
azsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlw
ZXM+Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50
VHlwZXMuLi4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5h
bWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAo
QXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRh
c2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7CiBwdWJsaWM6CisgICAg
dHlwZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5cGU7CisgICAgCiAgICAgU2hhcmVkVGFz
aygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2soKSB7IH0KIApJbmRleDogU291cmNlL1dU
Ri93dGYvU3RhY2tTaG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tTaG90
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3RhY2tTaG90IHsKK3B1YmxpYzoKKyAgICBT
dGFja1Nob3QoKSB7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFN0YWNrU2hvdChzaXplX3Qg
c2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplKSB7
CisgICAgICAgICAgICBtX2FycmF5ID0gc3RkOjptYWtlX3VuaXF1ZTx2b2lkKltdPihzaXplKTsK
KyAgICAgICAgICAgIGludCBpbnRTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIFdURkdldEJhY2t0
cmFjZShtX2FycmF5LmdldCgpLCAmaW50U2l6ZSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KGludFNpemUpIDw9IHNpemUpOworICAgICAgICAgICAgbV9z
aXplID0gaW50U2l6ZTsKKyAgICAgICAgICAgIGlmICghbV9zaXplKQorICAgICAgICAgICAgICAg
IG1fYXJyYXkgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFN0YWNrU2hv
dChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9hcnJheShkZWxl
dGVkVmFsdWVBcnJheSgpKQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgU3RhY2tTaG90JiBvcGVyYXRvcj0oY29uc3QgU3RhY2tTaG90JiBvdGhlcikKKyAgICB7
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lkKltdPiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91
bmlxdWU8dm9pZCpbXT4ob3RoZXIubV9zaXplKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG90
aGVyLm1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIG5ld0FycmF5W2ldID0gb3RoZXIubV9hcnJh
eVtpXTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgICAgICBtX2FycmF5ID0g
V1RGTW92ZShuZXdBcnJheSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisg
ICAgU3RhY2tTaG90KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpCisgICAgeworICAgICAgICAqdGhp
cyA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2b2lkKiogYXJyYXkoKSBjb25zdCB7IHJldHVy
biBtX2FycmF5LmdldCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX2FycmF5OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0YWNrU2hvdCYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zaXplICE9IG90aGVyLm1fc2l6ZSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBtX3NpemU7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX2FycmF5W2ldICE9IG90aGVy
Lm1fYXJyYXlbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3NpemU7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9zaXplOyBpLS07KQorICAgICAgICAg
ICAgcmVzdWx0IF49IFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fYXJyYXlbaV0pOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc2l6ZSAmJiBt
X2FycmF5LmdldCgpID09IGRlbGV0ZWRWYWx1ZUFycmF5KCk7CisgICAgfQorICAgIAorICAgIC8v
IE1ha2UgU3BlY3RydW08PiBoYXBweS4KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBTdGFja1No
b3QmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMg
dm9pZCoqIGRlbGV0ZWRWYWx1ZUFycmF5KCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
dm9pZCpbXT4gbV9hcnJheTsKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworfTsKKworc3RydWN0
IFN0YWNrU2hvdEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0YWNrU2hv
dCYgc2hvdCkgeyByZXR1cm4gc2hvdC5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBTdGFja1Nob3QmIGEsIGNvbnN0IFN0YWNrU2hvdCYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBm
YWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3Rl
bXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0YWNrU2hvdD4geworICAgIHR5cGVkZWYgU3Rh
Y2tTaG90SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hU
cmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVD
bGFzc0hhc2hUcmFpdHM8U3RhY2tTaG90PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9maWxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2Vy
Lmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5o
PgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4K
KworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNrU2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoK
KyAgICBTdGFja1Nob3RQcm9maWxlcih1bnNpZ25lZCBudW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1l
c1RvU2tpcCwgdW5zaWduZWQgc3RhY2tzVG9SZXBvcnQpCisgICAgICAgIDogbV9udW1GcmFtZXMo
bnVtRnJhbWVzKQorICAgICAgICAsIG1fZnJhbWVzVG9Ta2lwKGZyYW1lc1RvU2tpcCkKKyAgICAg
ICAgLCBtX3N0YWNrc1RvUmVwb3J0KHN0YWNrc1RvUmVwb3J0KQorICAgIHsKKyAgICAgICAgVGhy
ZWFkOjpjcmVhdGUoIlN0YWNrU2hvdFByb2ZpbGVyIiwgW3RoaXNdICgpIHsgcnVuKCk7IH0pOwor
ICAgIH0KKworICAgIC8vIE5FVkVSX0lOTElORSBzbyB0aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVk
aWN0YWJsZS4KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBwcm9maWxlKCkKKyAgICB7CisgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9wcm9maWxlLmFkZChT
dGFja1Nob3QobV9udW1GcmFtZXMgKyBtX2ZyYW1lc1RvU2tpcCkpOworICAgICAgICBtX3RvdGFs
Q291bnQrKzsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigp
CisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBzbGVlcCgxX3MpOworICAg
ICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgYXV0
byBsaXN0ID0gbV9wcm9maWxlLmJ1aWxkTGlzdCgpOworICAgICAgICAgICAgZGF0YUxvZygiXG5I
b3R0ZXN0IHN0YWNrcyBpbiAiLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCksICI6XG4iKTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUoKSwgY291bnQgPSAwOyBpLS0gJiYgY291
bnQgPCBtX3N0YWNrc1RvUmVwb3J0OyBjb3VudCsrKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZW50cnkgPSBsaXN0W2ldOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuVG9wICMiLCBjb3Vu
dCArIDEsICIgc3RhY2s6ICIsIGVudHJ5LmNvdW50ICogMTAwIC8gbV90b3RhbENvdW50LCAiJVxu
Iik7CisgICAgICAgICAgICAgICAgU3RhY2tUcmFjZSB0cmFjZShlbnRyeS5rZXkuYXJyYXkoKSAr
IG1fZnJhbWVzVG9Ta2lwLCBlbnRyeS5rZXkuc2l6ZSgpIC0gbV9mcmFtZXNUb1NraXApOworICAg
ICAgICAgICAgICAgIGRhdGFMb2codHJhY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGF0YUxvZygiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBXb3JkTG9jayBtX2xv
Y2s7CisgICAgU3BlY3RydW08U3RhY2tTaG90LCBkb3VibGU+IG1fcHJvZmlsZTsKKyAgICBkb3Vi
bGUgbV90b3RhbENvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRnJhbWVzOworICAgIHVu
c2lnbmVkIG1fZnJhbWVzVG9Ta2lwOworICAgIHVuc2lnbmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9
OworCisjZGVmaW5lIFNUQUNLX1NIT1RfUFJPRklMRShudW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwg
c3RhY2tzVG9SZXBvcnQpIGRvIHsgXAorICAgIHN0YXRpYyBTdGFja1Nob3RQcm9maWxlciogc3Rh
Y2tTaG90UHJvZmlsZXI7IFwKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJv
ZmlsZXJPbmNlRmxhZzsgXAorICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YWNrU2hvdFByb2ZpbGVyT25j
ZUZsYWcsIFtdIHsgc3RhY2tTaG90UHJvZmlsZXIgPSBuZXcgU3RhY2tTaG90UHJvZmlsZXIobnVt
RnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVwb3J0KTsgfSk7IFwKKyAgICBzdGFja1No
b3RQcm9maWxlci0+cHJvZmlsZSgpOyBcCit9IHdoaWxlIChmYWxzZSkKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEyLTAx
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWlu
dCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJl
aGF2aW9yLiBUaGlzIGNoYW5nZSBpcyBiZXN0IHRlc3RlZCB1c2luZyBET00tR0MtaW50ZW5zaXZl
CisgICAgICAgIGJlbmNobWFya3MgbGlrZSBTcGVlZG9tZXRlciBhbmQgRHJvbWFlby4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgcGFyYWxsZWxpemVzIHRoZSBET00ncyBvdXRwdXQgY29uc3RyYWlu
dCwgYW5kIG1ha2VzIHNvbWUgc21hbGwgY2hhbmdlcyB0byBtYWtlIHRoaXMgbW9yZQorICAgICAg
ICBzY2FsYWJsZS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVh
cC9WaXNpdGluZ1RpbWVvdXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmlu
ZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0cmFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFyYWxsZWxX
b3JrSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlz
aFBhcmFsbGVsV29ya0ltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29y
bGQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmV2
ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1
cmVFdmVudFRhcmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJFdmVudFRh
cmdldERhdGEpOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0
aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9D
YWNoZWRNb2R1bGVTY3JpcHRMb2FkZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRj
aGVyLmNwcAogYmluZGluZ3MvanMvQ2FsbFRyYWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZN
LmNwcAorYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMv
RE9NV3JhcHBlcldvcmxkLmNwcAogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMyBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaD4KKwpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91
dC5oCShub25leGlzdGVudCkKQEAgLTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9WaXNpdGluZ1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzUxLDYgKzM1MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRG
RjBERSAvKiBMZW5ndGhQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4NzE2NkUxQzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIx
REMzRkJBMzAwNDQzQzNGIC8qIEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMw
MDQ0M0MzRiAvKiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0
NTc2MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURD
NDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsK
KwkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQx
QzY2NDAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3
QTE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRD
MCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjYyNTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRy
eVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNjI1MkQxOERFMUIxNTAwQTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdE
MkZBMTAwMTBDREE1IC8qIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUg
LyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTQ0Niw2ICs1NDQ3LDggQEAKIAkJMEY4QjQ1NzQxREM0
MURCQTAwNDQzQzNGIC8qIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZC
IC8qIEpTRE9NUXVhZEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTVF1YWRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjk3QTY1NzE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25p
dG9ySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwQzFGRDFDNjYz
MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERPTUdDT3V0cHV0Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1
dENvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRw
dXRDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2
RkI1NUEwMDk3NUZERCAvKiBDU1NQcm9wZXJ0aWVzLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0
aWVzLmpzb247IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkw
MEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVy
VXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVy
VXBkYXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5ODAsNiArMjI5ODMs
OCBAQAogCQkJCTk1MjA3NjAyMUYyNjc1RjkwMDdEMkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAq
LywKIAkJCQkwRjYwRjMyOTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovLAogCQkJ
CTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICovLAorCQkJCTBGOURBQTBD
MUZEMUM2NjMwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuY3BwICovLAorCQkJCTBG
OURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJ
CQk3QzUxNkFEMjFGMzUyNTIwMDAzNEI2QkYgLyogRE9NUHJvbWlzZVByb3h5LmggKi8sCiAJCQkJ
QkM1M0RBNDcxMTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJ
QkM1M0RBMkQxMTQzMTIxRTAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5oICovLApAQCAtMjc1
NDcsNiArMjc1NTIsNyBAQAogCQkJCTUxOEY1MDA0MTk0Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVw
YWRCdXR0b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAv
KiBKU0dlb2xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAw
RDZGNzUgLyogSlNHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEYxRkQx
QzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEQTdDMUYxODgzMjJGQzAwQzk1NEI1IC8qIEpTR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NDgyQjc1MjExOThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3Rv
cnkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRD
b25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVk
ZSA8aGVhcC9IZWFwSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8
aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworRE9NR0NPdXRwdXRDb25z
dHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xp
ZW50RGF0YSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KCJEb21vIiwgIkRPTSBPdXRwdXQiLCBD
b25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkLCBDb25zdHJhaW50Q29uY3VycmVuY3k6
OkNvbmN1cnJlbnQsIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpCisgICAgLCBtX3Zt
KHZtKQorICAgICwgbV9jbGllbnREYXRhKGNsaWVudERhdGEpCisgICAgLCBtX2xhc3RFeGVjdXRp
b25WZXJzaW9uKHZtLmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSkKK3sKK30KKworRE9N
R0NPdXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdHJhaW50KCkKK3sKK30KKworQ29u
c3RyYWludFBhcmFsbGVsaXNtIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xv
dFZpc2l0b3ImKQoreworICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CisgICAgCisgICAgaWYg
KGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSA9PSBtX2xhc3RFeGVjdXRpb25WZXJzaW9u
KQorICAgICAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworICAg
IAorICAgIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJz
aW9uKCk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV90YXNrcy5pc0VtcHR5KCkpOworICAg
IG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAorICAgICAgICBbJl0g
KFN1YnNwYWNlJiBzdWJzcGFjZSkgeworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Cisg
ICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENl
bGwpOworICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZp
c2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX3Rhc2tzLmFwcGVuZChzdWJzcGFjZS5mb3JFYWNoTWFy
a2VkQ2VsbEluUGFyYWxsZWwoZnVuYykpOworICAgICAgICB9KTsKKyAgICAKKyAgICByZXR1cm4g
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDsKK30KKyAgICAgICAgCit2b2lkIERPTUdD
T3V0cHV0Q29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIGZvciAoYXV0byYgdGFzayA6IG1fdGFza3MpCisgICAgICAgIHRhc2stPnJ1bih2
aXNpdG9yKTsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZmluaXNo
UGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgbV90YXNrcy5jbGVhcigpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxoZWFwL01hcmtpbmdD
b25zdHJhaW50Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNWTUNsaWVudERhdGE7
CisKK2NsYXNzIERPTUdDT3V0cHV0Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25z
dHJhaW50IHsKK3B1YmxpYzoKKyAgICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpT
Vk1DbGllbnREYXRhJik7CisgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOworICAgIAorcHJv
dGVjdGVkOgorICAgIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKEpTQzo6
U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChKU0M6
OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBs
KEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBt
X3ZtOworICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7CisgICAgdWludDY0X3QgbV9s
YXN0RXhlY3V0aW9uVmVyc2lvbjsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChT
bG90VmlzaXRvciYpPj4+IG1fdGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxMiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
IAorI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgPGhlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJraW5n
Q29uc3RyYWludC5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgot
I2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJz
cGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRl
IDxydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNs
dWRlIDxydW50aW1lL1ZNLmg+CkBAIC03NCw0MyArNzIsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRh
Ojppbml0Tm9ybWFsV29ybGQoVk0qCiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBu
ZXcgSlNWTUNsaWVudERhdGEoKnZtKTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7
IC8vIH5WTSBkZWxldGVzIHRoaXMgcG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQg
PSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAi
V2ViQ29yZSBPdXRwdXQgQ29uc3RyYWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxh
c3RFeGVjdXRpb25WZXJzaW9uID0gdm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0K
LSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0g
bGFzdEV4ZWN1dGlvblZlcnNpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1
dGlvblZlcnNpb24oKTsKLQotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZp
c2l0IGNvdW50IGhlcmUgb3Vyc2VsdmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFk
ZHMKLSAgICAgICAgICAgIC8vIG9wYXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRl
cm1pbmF0aW9uIHlldC4gVGhlIHdheSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAgICAg
IC8vIGNvbnN0cmFpbnQgc29sdmVyIGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCi0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhl
YXAubnVtT3BhcXVlUm9vdHMoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBw
YXJhbGxlbCEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAg
ICAgICBjbGllbnREYXRhLT5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAgICAg
ICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1
YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChI
ZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0
T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bVJldmlzaXRlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzbG90VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9w
YXF1ZVJvb3RzKCkgLSBudW1PcGFxdWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1h
cmtpbmdDb25zdHJhaW50KFdURk1vdmUoY29uc3RyYWludCkpOworICAgIHZtLT5oZWFwLmFkZE1h
cmtpbmdDb25zdHJhaW50KHN0ZDo6bWFrZV91bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigq
dm0sICpjbGllbnREYXRhKSk7CiAgICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29y
bGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVk
QXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
cigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJD
aGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRl
ICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIx
NjIsNyArMjE2MywxNCBAQCBFdmVudFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgp
CiAKIEV2ZW50VGFyZ2V0RGF0YSogTm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCkK
IHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7
CisgICAgLy8gTm90IGhvbGRpbmcgdGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBlZCBh
Y2NlbGVyYXRlcyBwYXJhbGxlbCBjb25zdHJhaW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8gY2Fs
bHMgdGhpcyBmdW5jdGlvbiBmcm9tIG1hbnkgdGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWludCBz
b2x2aW5nIGNhbiBoYXBwZW4gd2l0aCB0aGUgd29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0b3Bw
ZWQsIGJ1dCBpZiB3ZSBkbyBpdCB3aXRoIGEgcnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3Vh
bGx5IG1peGluZyBjb25zdHJhaW50CisgICAgLy8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsuIFRo
ZXJlZm9yZSwgdGhlIG1vc3QgbGlrZWx5IHRpbWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBsb2Nr
IGlzIHdoZW4gdGhlCisgICAgLy8gd29ybGQgaXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBo
b2xkIHRoZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVk
IHdvcmxkCisgICAgLy8gbWVhbnMgdGhhdCB3ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQg
dGFyZ2V0IGRhdGEgbWFwLgorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYoc19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2bSAm
JiB2bS0+aGVhcC53b3JsZElzUnVubmluZygpKTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJnZXRE
YXRhKCkgPyBldmVudFRhcmdldERhdGFNYXAoKS5nZXQodGhpcykgOiBudWxscHRyOwogfQogCkBA
IC0yMTcxLDYgKzIxNzksOSBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFy
Z2V0CiAgICAgaWYgKGhhc0V2ZW50VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2ZW50
VGFyZ2V0RGF0YU1hcCgpLmdldCh0aGlzKTsKIAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1P
ck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5p
bmcoKSk7CisKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFw
TG9jayk7CiAgICAgc2V0SGFzRXZlbnRUYXJnZXREYXRhKHRydWUpOwogICAgIHJldHVybiAqZXZl
bnRUYXJnZXREYXRhTWFwKCkuYWRkKHRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJnZXRE
YXRhPigpKS5pdGVyYXRvci0+dmFsdWU7CkBAIC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRhcmdl
dERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRh
cmdldERhdGEoKQogeworICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2ZW50
VGFyZ2V0RGF0YU1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzOiBB
ZGQgc3BsYXktbGF0ZW5jeSB0ZXN0LCBzaW5jZSB0aGlzIGNoYW5nZSBuZWVkZWQgdG8gYmUgY2Fy
ZWZ1bGx5IHZhbGlkYXRlZCB3aXRoIHRoYXQgYmVuY2htYXJrLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOiBBZGRlZC4gVGhpcyBoYXMgdW5pdCB0
ZXN0cyBvZiB0aGUgbmV3IGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmUuIFRoZSB0ZXN0cyBmb2N1
cyBvbiBjb3JyZWN0bmVzcyB1bmRlciBzZXJpYWwgZXhlY3V0aW9uLCB3aGljaCBhcHBlYXJzIHRv
IGJlIGVub3VnaCBmb3Igbm93IChpdCdzIHNvIGVhc3kgdG8gY2F0Y2ggYSBjb25jdXJyZW5jeSBi
dWcgYnkganVzdCBydW5uaW5nIHRoZSBHQykuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKwogMjAxNy0xMi0wMSAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gQWRkIFNhbXBsZU1hcC5jcHAgQVBJIHRlc3RzIHRvIENNYWtlCklu
ZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkocmV2aXNpb24gMjI1NDAzKQorKysgVG9vbHMv
U2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDgg
QEAgTE9OR1NQSURFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhfUEFUSCA9IFBF
UkZPUk1BTkNFVEVTVFNfUEFUSCArICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2OC12NiIKIFRB
SUxCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5jaDkwMDAiCiBN
SUNST0JFTkNITUFSS1NfUEFUSCA9IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3RzIiArICJtaWNy
b2JlbmNobWFya3MiCi1PQ1RBTkVfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRI
ICsgIk9jdGFuZSIgKyAid3JhcHBlcnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRIID0gUEVSRk9S
TUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEggPSBPUEVOU09V
UkNFX09DVEFORV9QQVRIICsgIndyYXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VU
RVNUU19QQVRIICsgIkpTQmVuY2giCiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19Q
QVRIICsgIlNpeFNwZWVkIiArICJ0ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZP
Uk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04NDEsNiArODQy
LDIwIEBAIGNsYXNzIFNpbmdsZUZpbGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKICAgZW5kCiBl
bmQKIAorIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0
IGJlIGxvYWRlZCBpbiBpdHMgb3duIGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1
bigpKSwgYnV0IHJldHVybnMgaXRzIHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitjbGFzcyBTaW5n
bGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5j
aFBhdGgKKyAgCisgIGRlZiBpbml0aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVuY2hQYXRoID0g
YmVuY2hQYXRoCisgIGVuZAorICAKKyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmlsZUN1c3RvbVRp
bWVkQmVuY2htYXJrCisgIGVuZAorZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2Yg
b25lIG9yIG1vcmUgZGF0YSBmaWxlcyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZv
bGxvd2VkCiAjIGJ5IGEgY29tbWFuZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNsYXNzIE11bHRp
RmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1p
dEJlbmNoUnVuQ29kZUZpbGUobmFtZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0
ZGVycixmaWxlLCIgICAgaWYgKF9fYmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0pIHByaW50KFwi
I3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hlcl9p
bmRleCAtICN7d2FybXVwfSkgKyBcIjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1
bnMpKTsiKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29tbWFuZC5qc30i
KQorICAgICAgZWxzaWYgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVk
QmVuY2htYXJrCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2Jl
bmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsIiAgIHZhciBfX2JlbmNoZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsiKQorICAgICAg
ICAkcmVydW4udGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBy
dW4oX19iZW5jaGVyX3doYXQsIF9fYmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAgIH0KKyAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVzdWx0LnZhbHVl
ID09IG51bGwpIikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICAgIHRocm93
IG5ldyBFcnJvcihcIk51bGwgcmVzdWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCIgICByZXR1cm4gX19iZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCisgICAgICAgICR3YXJtdXAudGltZXMgeworICAgICAg
ICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMu
YmVuY2hQYXRoLmluc3BlY3R9KSIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUs
ImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KKyAgICAg
ICAgJGlubmVyLnRpbWVzIHsKKyAgICAgICAgICB8IGlubmVySW5kZXggfAorICAgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxh
bi5pdGVyYXRpb259OiAje2lubmVySW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7YmVu
Y2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSk7IikKKyAgICAgICAgICBkb3VibGVQdXRzKCRz
dGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAg
ICAgfQogICAgICAgZWxzZQogICAgICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9
PSA6c2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKQEAgLTE1OTQs
NiArMTYyOCwxOSBAQCBjbGFzcyBPY3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQKIAorY2xhc3Mg
Q3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0
aWFsaXplKG5hbWUsIGZ1bGxQYXRoKQorICAgIEBuYW1lID0gbmFtZQorICAgIEBmdWxsUGF0aCA9
IGZ1bGxQYXRoCisgIGVuZAorICAKKyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisgICAgZW1pdEJl
bmNoUnVuQ29kZShmdWxsbmFtZSwgcGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJr
UGFyYW1ldGVycy5uZXcoZW5zdXJlRmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0iLCBAZnVsbFBh
dGgpKSkKKyAgZW5kCitlbmQKKwogY2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGluY2x1ZGUgQmVu
Y2htYXJrCiAgIApAQCAtMzAxMCw2ICszMDU3LDcgQEAgYmVnaW4KICAgICB8IGFyZ3MgfAogICAg
IE9DVEFORS5hZGQgT2N0YW5lQmVuY2htYXJrLm5ldygqYXJncykKICAgfQorICBPQ1RBTkUuYWRk
IEN1c3RvbVRpbWVkQmVuY2htYXJrLm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVOU09VUkNFX09D
VEFORV9QQVRIICsgInNwbGF5LmpzIikudG9fcykKIAogICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0
ZS5uZXcoIktyYWtlbiIsIDphcml0aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0YXIiLCAiYXVk
aW8tYmVhdC1kZXRlY3Rpb24iLCAiYXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAg
c2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9C
bG9vbUZpbHRlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ1N0cmlu
Zy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0
aWNPcGVyYXRpb25zLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25j
dXJyZW50UHRySGFzaFNldC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
Q29uZGl0aW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Dcm9zc1Ro
cmVhZFRhc2suY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRo
LmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1
OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRm
b3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAv
KiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRp
bGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMkMyMEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1l
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMy
MEI3MURDRDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNwcCAqLzsgfTsKKwkJMEYzMENCNUMxRkNFMTc5
NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBD
b25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3
MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tX
ZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovOyB9OwogCQkwRjRGRkE5RTFFRDNBQTg1MDBG
NzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyog
U25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gKi87IH07CiAJCTBGNTY1MUY3MUZDRTREREMw
MDMxMEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTY1MUY2MUZDRTREREIwMDMxMEZC
QyAvKiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5tbSAqLzsgfTsKQEAgLTEwNzIsNiAr
MTA3Myw3IEBACiAJCTBGMTM5RTc1MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRyLm1tOyBw
YXRoID0gY29jb2EvV2Vha09iakNQdHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTdCQkQ0MTVBRjZDNEQwMDdBQjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlBy
b2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVN0
YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNl
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2NkMwMERF
MzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAvKiBT
bmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjRGRkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJTy5mcmFt
ZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3
cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JP
T1Q7IH07CkBAIC0yNTkzLDYgKzI1OTUsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRC
RiAvKiBBdG9taWNTdHJpbmcuY3BwICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAv
KiBCbG9vbUZpbHRlci5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENo
ZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNFMTc5MjAw
NEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0Qx
OUNCMDBDRTE3RjIgLyogQ29uZGl0aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0
NzIzQzQgLyogQ3Jvc3NUaHJlYWRUYXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1
QjFBMTQgLyogQ1N0cmluZy5jcHAgKi8sCkBAIC0zMTc5LDYgKzMxODIsNyBAQAogCQkJCTdDODNE
RUY2MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQ
dHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNG
MyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1
RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5
MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNl
dC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29u
Y3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50
UHRySGFzaFNldC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK25hbWVzcGFjZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJpbmcgdGhh
dCB0ZWxscyB0aGlzIHRoaW5nIHdoYXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVt
YmVyIG9mIGNoYXJhY3RlcnMuCisvLyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21tYW5kcy4g
Q29tbWFuZHM6CisvLworLy8gK3ggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3RzICd4JyB0
byBhIHZvaWQqKSBhbmQgYXNzZXJ0cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFkZHMgJ3gn
IHRvIHRoZSBzZXQgYW5kIGFzc2VydHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4KKy8vID14
ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3NlcnRzIHRo
YXQgJ3gnIGlzIG5vdCBpbiB0aGUgc2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBjb21tYW5k
cykKK3sKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25zdCBjaGFy
KiBjb21tYW5kID0gY29tbWFuZHM7IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29tbWFuZCAr
PSAyKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nh
c3Q8dWludHB0cl90Pihjb21tYW5kWzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZFswXSkg
eworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5hZGQocHRy
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICBF
WFBFQ1RfRkFMU0Uoc2V0LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICc9JzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVDVF9G
QUxTRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAgICBkb1Rl
c3QoIiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVu
dCkKK3sKKyAgICBkb1Rlc3QoIit4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQ
dHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4
IXgheCF4IXgheCF4IXgheCF4IXg9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0
ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgh
eCF4IXgheCF4IXgheCF4PXgteS0wIXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgiKTsK
K30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzKQor
eworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCth
K3MrZCtmK2craCtqK2srbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0Qr
RitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15
PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9
Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9D
b25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7CisgICAg
ZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2Yr
ZytoK2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtK
K0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89
cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1T
PUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUh
ciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZ
IVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITgh
OSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFR
IVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMh
NCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFj
IXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIh
TiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFq
IWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwh
WiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFz
IWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYh
RyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1
IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8h
UCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3
IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIh
VCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3
ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4h
bSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEy
ITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoh
eCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFW
IUIhTiFNIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZF
bGVtZW50c0FuZFF1ZXJ5U29tZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIr
MSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0x
PTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwt
ei14LWMtdi1iLW4tbS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1D
LVYtQi1OLU0rbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0gr
SitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1v
PXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9
Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJy
ZW50UHRySGFzaFNldCwgQWRkU29tZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRUaGVSZXN0
QW5kUXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0
KzUrNis3KzgrOSswK3ErdytlK3IrdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIh
MyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCEx
ITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIh
dCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitnK2graitr
PTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWst
bC16LXgtYy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1Y
LUMtVi1CLU4tTStsK3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0cr
SCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1p
PW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9
QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328218</attachid>
            <date>2017-12-01 23:53:34 -0800</date>
            <delta_ts>2017-12-02 00:19:40 -0800</delta_ts>
            <desc>back to progression on speedo</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>252057</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIEl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgYSBzbWFs
bAorICAgICAgICBTcGVlZG9tZXRlciBzcGVlZC11cCAoMC42OCUgZmFzdGVyIHdpdGggcCA9IDAu
MDM2KS4KKyAgICAgICAgCisgICAgICAgIFRoZSBjb25zdHJhaW50IHNvbHZlciBzdXBwb3J0cyBy
dW5uaW5nIGNvbnN0cmFpbnRzIGluIHBhcmFsbGVsIGluIHR3byBkaWZmZXJlbnQgd2F5czoKKyAg
ICAgICAgCisgICAgICAgIC4gQ29uc3RyYWludHMgdGhhdCBjYW4gdG9sZXJhdGUgb3RoZXIgY29u
c3RyYWludHMgcnVubmluZworICAgICAgICBjb25jdXJyZW50bHkgdG8gdGhlbSAoCisgICAgICAg
IAorICAgICAgICAtIFJ1biBtdWx0aXBsZSBjb25zdHJhaW50cyBpbiBwYXJhbGxlbCB0byBlYWNo
IG90aGVyLiBUaGlzIG9ubHkgd29ya3MgZm9yIGNvbnN0cmFpbnRzIHRoYXQgY2FuCisgICAgICAg
ICAgdG9sZXJhdGUgb3RoZXIgY29uc3RyYWludHMgcnVubmluZyBjb25jdXJyZW50bHkgdG8gdGhl
bSAoY29uc3RyYWludC5jb25jdXJyZW5jeSgpID09CisgICAgICAgICAgQ29uc3RyYWludENvbmN1
cnJlbmN5OjpDb25jdXJyZW50KS4gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBraW5kIG9mIHBhcmFs
bGVsaXNtIHRoYXQgdGhlCisgICAgICAgICAgY29uc3RyYWludCBzb2x2ZXIgc3VwcG9ydHMuIEFs
bCBjb25zdHJhaW50cyBleGNlcHQgdGhlIEpTQyBTUEkgY29uc3RyYWludHMgYXJlIGNvbmN1cnJl
bnQuIFdlCisgICAgICAgICAgY291bGQgcHJvYmFibHkgbWFrZSB0aGVtIGNvbmN1cnJlbnQsIGJ1
dCBJJ20gcGxheWluZyBpdCBzYWZlIGZvciBub3cuCisgICAgICAgIAorICAgICAgICAtIEEgY29u
c3RyYWludCBjYW4gY3JlYXRlIHBhcmFsbGVsIHdvcmsgZm9yIGl0c2VsZiwgd2hpY2ggdGhlIGNv
bnN0cmFpbnQgc29sdmVyIHdpbGwgaW50ZXJsZWF2ZQorICAgICAgICAgIHdpdGggb3RoZXIgcGFy
YWxsZWwgd29yayBmcm9tIG90aGVyIGNvbnN0cmFpbnRzLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9y
dCB0aGF0IGl0IGhhcyBwYXJhbGxlbAorICAgICAgICAgIHdvcmsgYnkgcmV0dXJuaW5nIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlv
bi4gVGhlbiB0aGUKKyAgICAgICAgICBzb2x2ZXIgd2lsbCBhbGxvdyB0aGF0IGNvbnN0cmFpbnQn
cyBkb1BhcmFsbGVsV29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJr
ZXIKKyAgICAgICAgICB0aHJlYWRzIGFzIGFyZSBhdmFpbGFibGUsIGZvciBhcyBsb25nIGFzIHRo
YXQgZnVuY3Rpb24gd2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9z
c2libGUgdG8gaGF2ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBh
cmFsbGVsIHdvcmsuCisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVt
ZW50ZWQgaW4gdGVybXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1
cm5zIG91dCB0byBiZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAg
ICAgICAKKyAgICAgICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAg
ICAgICAKKyAgICAgICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEg
U2xvdFZpc2l0b3IuIFRoZSBhd2Vzb21lIHRoaW5nIGFib3V0IHRoaXMgZGVzaWduIGlzIHRoYXQK
KyAgICAgICAgICB3ZSBkb24ndCBoYXZlIHRvIGVhZ2VybHkgbG9hZC1iYWxhbmNlIHRoZSB3b3Jr
IGNyZWF0ZWQgYnkgdGhlIHNvbHZlci4gVGhlIHNvbHZlciB3aWxsIGNyZWF0ZQorICAgICAgICAg
IHdvcmsgb24gdGhlIGxvY2FsIHRocmVhZCdzIFNsb3RWaXNpdG9yLiBXaGVuIHRoZSBzb2x2ZXIg
aXMgZG9uZSAic3RlYWxpbmciIHRoZSBtYXJrZXIgdGhyZWFkLAorICAgICAgICAgIHRoYXQgdGhy
ZWFkIHdpbGwgaGF2ZSB3b3JrIGl0IGNhbiBzdGFydCBkb2luZyBhcyBzb29uIGFzIHdlIHN0YXJ0
IGRyYWluaW5nLiBCZWZvcmUgdGhpcyBjaGFuZ2UsCisgICAgICAgICAgd2UgaGFkIHRvIGNvbnRy
aWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkgdGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9i
YWwgd29ya2xpc3Qgc28gdGhhdCBpdAorICAgICAgICAgIGNvdWxkIGJlIGRpc3RyaWJ1dGVkIHRv
IHRoZSBtYXJrZXIgdGhyZWFkcyBieSBsb2FkIGJhbGFuY2luZy4gSXQncyBsaWtlbHkgdGhhdCB0
aGUgZ2xvYmFsLQorICAgICAgICAgIHdvcmtsaXN0LWJhc2VkIGxvYWQgYmFsYW5jZXIgd2lsbCBo
YXZlIHRvIGtpY2sgaW4gc2hvcnRseSBhZnRlciBjb25zdHJhaW50IHNvbHZpbmcgc2luY2UgdGhl
CisgICAgICAgICAgc29sdmVyJ3MgbG9hZCBiYWxhbmNlciBtYWtlcyBubyBhdHRlbXB0IHRvIGJh
bGFuY2Ugd29yayBwcm9kdWNlZCAoaXQncyBvbmx5IGJhbGFuY2luZyB0aW1lCisgICAgICAgICAg
c3BlbnQpLiBCdXQgdGhpcyBzbWFsbCBvcHBvcnR1bml0eSB0byBhdm9pZCBsb2FkIGJhbGFuY2lu
ZyBtaWdodCBiZSBjb250cmlidXRpbmcgYSBiaXQgdG8gdGhlCisgICAgICAgICAgc3BlZWQtdXAu
CisgICAgICAgIAorICAgICAgICBBIGxvdCBvZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcg
aXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEgc3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcwor
ICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFi
bGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0
aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQgY29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2Vk
IGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRoaXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZl
cnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVsIGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxs
b2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMuCisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJh
bGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBvdXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0
aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAgICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0
b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5leHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0
IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4u
IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9u
ZQorICAgICAgICB3aGVuIGl0IHJldHVybnMgYSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0
aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAg
ICBkb25lIGlzIGluZGljYXRlZCBieSBudWxsKS4KKworICAgICAgICAqIEFQSS9KU01hcmtpbmdD
b25zdHJhaW50UHJpdmF0ZS5jcHA6CisgICAgICAgIChKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdD
b25zdHJhaW50KToKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbToKKyAgICAgICAg
KHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKToKKyAgICAgICAgKHNjYW5FeHRlcm5hbFJlbWVtYmVy
ZWRTZXQpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnZpc2l0V2Vha2x5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKToKKyAgICAgICAgKEpTQzo6c2hvdWxkTWFya1RyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RG
R1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20u
aDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5GaXhwb2ludFBo
YXNlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcFRoZVBlcmlwaGVyeSk6CisgICAgICAgIChK
U0M6OkhlYXA6OnJlc3VtZVRoZVBlcmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENv
cmVDb25zdHJhaW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnNldEJvbnVzVmlzaXRvclRhc2sp
OgorICAgICAgICAoSlNDOjpIZWFwOjpydW5UYXNrSW5QYXJhbGxlbCk6CisgICAgICAgIChKU0M6
OkhlYXA6OmZvckVhY2hTbG90VmlzaXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFw
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OndvcmxkSXNSdW5uaW5nIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6cnVuRnVuY3Rpb25JblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL0hlYXBJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndvcmxkSXNTdG9wcGVkIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjppbmNyZW1l
bnREZWZlcnJhbERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lm
TmVlZGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZSk6CisgICAgICAgICogaGVh
cC9MYXJnZUFsbG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01h
cmtlZCk6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6aXNNYXJrZWRDb25jdXJyZW50
bHkpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTG9ja0R1cmluZ01hcmtpbmcuaDoKKyAgICAg
ICAgKEpTQzo6bG9ja0R1cmluZ01hcmtpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5
QmxvY2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAg
ICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRU
b01hcmspOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWQpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjphY3RpdmVXZWFrU2V0c0JlZ2luKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFj
dGl2ZVdlYWtTZXRzRW5kKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Om5ld0FjdGl2ZVdl
YWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50Ojp3b3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9Q
YXJhbGxlbFdvcmspOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFy
YWxsZWxXb3JrKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxX
b3JrSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxl
bFdvcmtJbXBsKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpsYXN0RXhlY3V0ZVBhcmFsbGVsaXNtIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnBhcmFsbGVsaXNtIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHA6CisgICAgICAgIChK
U0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCk6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpNYXJraW5n
Q29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwpOgorICAgICAgICAoSlNDOjpN
YXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpFeGVjdXRpb25Db250ZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OnNob3VsZFRpbWVPdXQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29u
dGV4dDo6ZHJhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNl
dDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkRXhlY3V0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpleGVjdXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29u
c3RyYWludFNldC5oOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6Ok1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
On5NYXJraW5nQ29uc3RyYWludFNvbHZlcik6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpkaWRWaXNpdFNvbWV0aGluZyBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OmRyYWluKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OmNvbnZlcmdlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1
bkV4ZWN1dGlvblRocmVhZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVy
OjpkaWRFeGVjdXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmg6
IEFkZGVkLgorICAgICAgICAqIGhlYXAvT3BhcXVlUm9vdFNldC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGhlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQ
YXJhbGxlbFNvdXJjZUFkYXB0ZXI6OlBhcmFsbGVsU291cmNlQWRhcHRlcik6CisgICAgICAgIChK
U0M6OmNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcik6CisgICAgICAgICogaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5n
Q29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAg
KEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToKKyAgICAg
ICAgKEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKToKKyAgICAgICAg
KiBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAv
U2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJr
aW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dXBkYXRlTXV0
YXRvcklzU3RvcHBlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9w
cGVkSXNVcFRvRGF0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluSW5Q
YXJhbGxlbFBhc3NpdmVseSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVy
bWluYXRpb24pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVS
b290VHJpU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpt
ZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xv
dFZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29uc3QpOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6dm0pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0gY29uc3QpOgorICAgICAg
ICAqIGhlYXAvU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxB
bGxvY2F0b3JTb3VyY2UpOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0
eU1hcmtlZEJsb2NrU291cmNlKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAg
ICogaGVhcC9TdWJzcGFjZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbCk6CisgICAgICAgICogaGVhcC9WaXNpdENvdW50ZXIuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OlZpc2l0Q291bnRlcjo6VmlzaXRDb3VudGVyKToKKyAgICAg
ICAgKEpTQzo6VmlzaXRDb3VudGVyOjp2aXNpdENvdW50IGNvbnN0KToKKyAgICAgICAgKiBoZWFw
L1Zpc2l0aW5nVGltZW91dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6V2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNDaGVh
cER1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXJrSWZDaGVhcCk6CisKIDIw
MTctMTEtMzAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAg
ICAgW0pTQ10gVXNlIEpTRml4ZWRBcnJheSBmb3Igb3BfbmV3X2FycmF5X2J1ZmZlcgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDAsMTMgKzUwMCwx
NiBAQCBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3Bw
CiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKIGhlYXAvTWFya1N0YWNrLmNwcAoraGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAog
aGVhcC9NYXJrZWRCbG9jay5jcHAKIGhlYXAvTWFya2VkU3BhY2UuY3BwCiBoZWFwL01hcmtpbmdD
b25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKK2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL011
dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCiBoZWFwL1Ns
b3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAogaGVhcC9T
dG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUu
Y3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFy
a2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBA
QAogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludC5oIgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgor
I2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKQEAgLTcyLDExICs3MSwxMSBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0Nv
bnN0cmFpbnQoCiAgICAgLy8gZWxzZSBnZXRzIG1hcmtlZC4KICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSB2b2xhdGlsaXR5ID0gQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZzsK
ICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25z
dHJhaW50PigKKyAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1h
cmtpbmdDb25zdHJhaW50PigKICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5k
ZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFj
aykpLCAiKSIpLAogICAgICAgICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIs
IGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNv
bnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAg
ICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsKICAgICAg
ICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAgICAgbWFya2VyLk1h
cmsgPSBtYXJrOwpAQCAtODQsNyArODMsOCBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2lu
Z0NvbnN0cmFpbnQoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbnN0cmFpbnRDYWxsYmFj
aygmbWFya2VyLCB1c2VyRGF0YSk7CiAgICAgICAgIH0sCi0gICAgICAgIHZvbGF0aWxpdHkpOwor
ICAgICAgICB2b2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3k6OlNlcXVl
bnRpYWwpOwogICAgIAogICAgIHZtLmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShj
b25zdHJhaW50KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zp
cnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4Myw5ICsyODMs
OCBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6CiAgICAgICAgIHdo
aWxlICghc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB2b2lkKiBuZXh0Um9vdCA9IHN0
YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAg
IGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKG5leHRSb290KSA9PSBUcnVl
VHJpU3RhdGUpCisgICAgICAgICAgICBpZiAoIXZpc2l0b3IuYWRkT3BhcXVlUm9vdChuZXh0Um9v
dCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2aXNpdG9yLmFkZE9w
YXF1ZVJvb3QobmV4dFJvb3QpOwogCiAgICAgICAgICAgICBhdXRvIGFwcGVuZE93bmVkT2JqZWN0
cyA9IFsmXSB7CiAgICAgICAgICAgICAgICAgTlNNYXBUYWJsZSAqb3duZWRPYmplY3RzID0gW2V4
dGVybmFsT2JqZWN0R3JhcGggb2JqZWN0Rm9yS2V5OnN0YXRpY19jYXN0PGlkPihuZXh0Um9vdCld
OwpAQCAtMzI3LDggKzMyNiw2IEBAIHZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6
OlZNJiAKICAgICAgICAgfQogICAgICAgICBbZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHJlbW92ZUFs
bE9iamVjdHNdOwogICAgIH0KLQotICAgIHZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwogfQog
CiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVG
b3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87
IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFF
M0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9
OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29y
bGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5
NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBE
RkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZH
V29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmgg
Ki87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFF
MUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwpAQCAtMjkxLDYgKzI5
MCw3IEBACiAJCTBGNDBFNEE3MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzMyMUM0NUYzNUMw
MDcyNDUwQiAvKiBBaXJPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBODFDNDk3Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlR2Vu
ZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MEU0QTkxQzQ5N0Y3
NDAwQTU3N0ZBIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2Rl
VXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjQxNTQ1QjFGRDIwQjIyMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQxNTQ1QTFGRDIw
QjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhG
IC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkx
NDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZp
cnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZC
MDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0zMTIsNiArMzEyLDkgQEAKIAkJMEY0QTM4RkExQzhFMTNERjAw
MTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEI5
NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0
IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVt
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qzkx
NjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovOyB9OworCQkwRjREOEM3NDFG
QzdBOTdBMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi87IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50
UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjREOEM3
ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzc3MUZDQTNDRjMwMDFE
MzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBB
aXJGaXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxs
cy5oICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9OwogCQkwRjRGODI4ODFFMkZGREUwMDA3
NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAw
NzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzU0LDYgKzM1Nyw3
IEBACiAJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDUyMTVEMDcwNTEw
MDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaCAqLzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0
ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyB9OworCQkwRjY0NTMxODFG
RDI0NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjQ1MzE1MUZEMjQ2QTAwMDI0
MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovOyB9OwogCQkwRjY0QjI3MjFB
Nzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5
U3dpdGNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYg
LyogQ2FsbEVkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY0RUFGMzFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NEVBRjIxQzRFQ0Qw
NjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLzsgfTsKQEAgLTQ0Niw2ICs0NTAsOCBAQAog
CQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFBRTlDQzMzMDAw
RDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi87IH07CiAJCTBGOUQ0QzBEMUMzRTFDMTEwMDZD
RDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRp
b25UYXJnZXQuaCAqLzsgfTsKIAkJMEY5RDRDMTExQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlLmggKi87IH07CisJCTBGOURBQTA5MUZEMUMzQ0YwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyLmggKi87IH07CisJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNv
dXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCAq
LzsgfTsKIAkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuaCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi87IH07CiAJ
CTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyog
UHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xNDk5LDcgKzE1MDUsNiBAQAogCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBREJDNTRENTFERjhFQTJCMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREJDNTREMzFERjhF
QTAwMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi87IH07CiAJCUFERDhGQTQ2
MUVCMzA3OTcwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDhGQTQzMUVCMzA3NzEwMERGNTQy
RiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLzsgfTsKLQkJQUREQjFGNjMxOEQ3N0RCRTAw
OUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURF
ODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk0MUUwOEYxQzkw
MDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUExRTA4RjFERTAwNThERTc4IC8q
IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk1MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJB
c3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUMxRTA4RjFERTAwNThERTc4IC8qIFdlYkFz
c2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5NzFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlM
aW5rRXJyb3JQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTk4MSw3ICsxOTg2LDYgQEAKIAkJMEYxRkIzOEExRTE3M0E2MjAwQTlC
RTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4
QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRo
ZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0
aW5nVGltZW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdGluZ1Rp
bWVvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTQxRTFBRjdERjAw
QTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHUGxhbklubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dv
cmtsaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3Jr
bGlzdElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JT
Y2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YXRvclNjaGVk
dWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIzNCw2ICsyMjM4LDcgQEAK
IAkJMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuY3BwOyBwYXRo
ID0gZGZnL0RGR0luc2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0
U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0
U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENv
bmN1cnJlbmN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRD
b25jdXJyZW5jeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBD
QkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNzAsNiArMjI3NSwxMCBAQAogCQkwRjRBMzhGODFDOEUxM0RG
MDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN1cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTRE
QjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsgcGF0aCA9IGIz
L0IzT3JpZ2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MjFG
QzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0MxQzRDMUI1NDAw
NEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5jcHA7IHBhdGggPSBiMy9haXIvQWly
Rml4T2J2aW91c1NwaWxscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERF
MUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBCM09yaWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3Jp
Z2luRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzQxLDYgKzIzNTAs
OCBAQAogCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZH
QXJyYXlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fy
cmF5TW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheU1vZGUuaDsgcGF0aCA9
IGRmZy9ERkdBcnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUz
MTUxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjQ1MzE2MUZEMjQ2QTAwMDI0MzJBMSAv
KiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0
Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmluYXJ5U3dpdGNo
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0
RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
aW5hcnlTd2l0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzcxQTc5
NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbGxFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1
MDMsNiArMjUxNCw5IEBACiAJCTBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRp
b25UYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhjZXB0aW9u
VGFyZ2V0Lmg7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBFMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBwYXRoID0gZnRsL0ZUTFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlE
NEMwRjFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlLmg7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDgxRkQxQzNDODAwNzlD
NUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNl
cnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUUzMjYyMUIw
NUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xh
eW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI2Nyw3ICs0MjgxLDYgQEAKIAkJQUREMDlB
RjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNX
ZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9u
UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlv
blBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcx
MDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTMxRTA4RjFDOTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJvci5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTQx
RTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBwYXRoID0ganMv
SlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJv
ckNvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTE3LDYgKzU1MzAsOCBAQAogCQkJ
CTBGRENFMTI4MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8sCiAJCQkJ
MTQ2QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJ
CQkxNDlEQUFGMjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKKwkJ
CQkwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggKi8s
CisJCQkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5o
ICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAvKiBDb25zdHJhaW50Vm9sYXRpbGl0
eS5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLywK
IAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLApAQCAtNTYxMSwx
NyArNTYyNiwyMyBAQAogCQkJCTBGNjYwRTM0MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5oICovLAogCQkJCTBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludFNldC5jcHAgKi8sCiAJCQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50U2V0LmggKi8sCisJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyLmNwcCAqLywKKwkJCQkwRjlEQUEwNzFGRDFDM0M4MDA3OUM1
QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAqLywKIAkJCQkxNDJENkYwRTEzNTM5QTQx
MDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCAqLywKIAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJF
ODYgLyogTWFya1N0YWNrLmggKi8sCisJCQkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjY0NTMxNTFGRDI0NkEwMDAy
NDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQkwRjFGQjM4QzFF
MTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOTgx
RTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkwRkE3NjIwMjFE
QjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJCQkwRkE3NjIwMzFEQjky
NDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCi0JCQkJQUREQjFGNjIxOEQ3N0RCNzAw
OUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKKwkJCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1
QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggKi8sCiAJCQkJMEZCQjczQjYxREVGM0FBQzAw
MkMwMDlFIC8qIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCAqLywKIAkJCQkwRkQwRTVFRjFFNDZC
RjIzMDAwNkFCMDggLyogUmVnaXN0ZXJTdGF0ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYw
MDk4Q0MxMiAvKiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRG
QTQyQzAwQzEzODM5IC8qIFJ1bm5pbmdTY29wZS5oICovLAorCQkJCTBGNEQ4Qzc2MUZDQTNDRjIw
MDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCisJCQkJMEY0RDhDNzcx
RkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIy
NTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhG
MDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBB
M0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC01NjQzLDcgKzU2NjQs
NyBAQAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEg
LyogVGlueUJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJF
NTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFD
IC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBW
aXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNp
dFJhY2VLZXkuaCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAg
Ki8sCkBAIC04MDAwLDYgKzgwMjEsNyBAQAogCQkJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVDRjk4OTFFOUVENjUyMDBDMTg2
OTIgLyogQWlyU3RhY2tBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU4QzFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQx
NTQ1QjFGRDIwQjIyMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCQkQ5RTFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1OEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElu
bGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODIwMCw2ICs4MjIyLDcgQEAKIAkJCQk2NTE0RjIx
OTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4
NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20u
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8q
IENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAw
QjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTgyOTMsNiArODMxNiw3IEBA
CiAJCQkJQTc3QTQyM0UxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50
ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0MTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2
NDUzMTgxRkQyNDZBNzAwMjQzMkExIC8qIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzY4LDYgKzg3OTIsNyBAQAogCQkJCTBGMkI2
NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURBQTA5MUZEMUMzQ0Yw
MDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNB
c3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MTYsNiArODk0MSw3IEBACiAJCQkJ
QTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2Jq
ZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4RTZDRjAw
MEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc0MUZD
N0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZC
ODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
NUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
IGluIEhlYWRlcnMgKi8sCkBAIC05MDM1LDkgKzkwNjEsOSBAQAogCQkJCUUzQzI5NUREMUVEMkNC
REEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBF
MUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8qIE9iamVjdFByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1
ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTgg
LyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNBRTAw
RjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAw
Q0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NDdFQTE3QTBCRDQ2
MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTkyNDMsNiAr
OTI2OSw3IEBACiAJCQkJMEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVu
Y2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwODE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURB
QTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI4Myw3ICs5MzEwLDYgQEAKIAkJCQkw
RjZDNzM1MTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVn
aXN0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBW
aXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUExMURGNzg2MDkwMEUw
NkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNBNTYxOTYzODI2ODAw
M0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRp
b246Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX3N0cnVjdHVyZS0+
cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5w
cmV2aW91c0lEKCkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0
cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzIsNyArOTcyLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIAogICAgIG1fdmlzaXRXZWFrbHlIYXNC
ZWVuQ2FsbGVkID0gdHJ1ZTsKIAotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0
aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpIHsKQEAgLTExMjQsNyArMTEyNCw3
IEBAIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0wKIAogYm9vbCBDb2Rl
QmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JikKIHsKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYg
KEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2UoKSkp
CkBAIC0xMTM5LDEwICsxMTM5LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1
ZVRvT2xkQWcKICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFu
c2l0aW9uKERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCiB7Ci0gICAg
aWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eSh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9j
b2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICBpZiAoIUhlYXA6Omlz
TWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAgbV92bS0+
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0dXJlKSkKKyAgICAg
ICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJlKSkKICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBm
YWxzZTsKQEAgLTEyNDYsMTQgKzEyNDYsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndl
YWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0g
ZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5
bmFtaWNDYXN0PENvZGVCbG9jayo+KCpyZWZlcmVuY2UtPnZtKCksIHJlZmVyZW5jZSkpOwotICAg
ICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHJlZmVyZW5jZSkpIHsKKyAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVM
aXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQog
ICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFr
U3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6
aXNNYXJrZWQoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsK
ICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMTMg
QEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0LCAiOiBDb21waWxp
bmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CiAgICAgICAgIAogICAg
ICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNhZmVwb2ludGluZyBzaW5j
ZSB3ZSBvd24gcmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICBpZiAobV9wbGFu
LT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJIZWFw
IGlzIHN0b3BlZCBidXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1fcGxhbi0+Y29tcGls
ZUluVGhyZWFkKCZtX2RhdGEpOwogICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSAhPSBQbGFuOjpD
YW5jZWxsZWQpIHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BsYW4t
PnZtLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJI
ZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMilcbiIpOwogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB9CkBAIC0xMzAsNyAr
MTMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3dvcmtsaXN0
Lm1fcmVhZHlQbGFucy5hcHBlbmQobV9wbGFuKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhl
V29ybGRJc1N0b3BwZWQoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wbGFuLT52
bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9wbGFu
Q29tcGlsZWQubm90aWZ5QWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDcgKzcxLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQog
CiAgICAgaWYgKHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhlYXAuY29sbGVjdG9y
QmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXN0
YXRlLmdyYXBoLm1fdm0uaGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAKICAgICBpZiAoc3Rh
dGUuYWxsb2NhdGlvbkZhaWxlZCkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitlbnVtIGNsYXNzIENvbnN0cmFpbnRDb25jdXJyZW5jeSA6IHVpbnQ4X3QgeworICAgIFNlcXVl
bnRpYWwsCisgICAgQ29uY3VycmVudAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCitu
YW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBKU0M6OkNvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSkKK3sKKyAgICBzd2l0
Y2ggKGNvbmN1cnJlbmN5KSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRDb25jdXJyZW5jeTo6
U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50Ogor
ICAgICAgICBvdXQucHJpbnQoIkNvbmN1cnJlbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVs
aXNtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSA6IHVpbnQ4X3QgeworICAgIFNlcXVlbnRpYWwsCisgICAgUGFyYWxsZWwKK307CisgICAgCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc20gcGFy
YWxsZWxpc20pCit7CisgICAgc3dpdGNoIChwYXJhbGxlbGlzbSkgeworICAgIGNhc2UgSlNDOjpD
b25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw6CisgICAgICAgIG91dC5wcmludCgiU2Vx
dWVudGlhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWw6CisgICAgICAgIG91dC5wcmludCgiUGFyYWxsZWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NTZWdtZW50ZWRBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDksMTIgKzIwOSwxMSBAQCBpbmxpbmUgY29uc3QgVCBHQ1NlZ21l
bnRlZEFycmF5PFQ+OjpyZW1vCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGlubGluZSBib29sIEdD
U2VnbWVudGVkQXJyYXk8VD46OmlzRW1wdHkoKQogeworICAgIC8vIFRoaXMgaGFwcGVucyB0byBi
ZSBzYWZlIHRvIGNhbGwgY29uY3VycmVudGx5LiBJdCdzIGltcG9ydGFudCB0byBwcmVzZXJ2ZSB0
aGF0IGNhcGFiaWxpdHkuCiAgICAgaWYgKG1fdG9wKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG1fc2VnbWVudHMuaGVhZCgpLT5uZXh0KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc2Vn
bWVudHMuaGVhZCgpLT5uZXh0KCktPm1fdG9wID09IHNfc2VnbWVudENhcGFjaXR5KTsKKyAgICBp
ZiAobV9zZWdtZW50cy5oZWFkKCktPm5leHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiSlNWaXJ0
dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgorI2luY2x1ZGUgIk1hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgog
I2luY2x1ZGUgIk1hcmtlZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJh
aW50U2V0LmgiCkBAIC0yODEsNyArMjgyLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgICwgbV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxT
bG90VmlzaXRvcj4oKnRoaXMsICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjpt
YWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0
ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFp
bnRTZXQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAg
ICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxD
b2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVl
PEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAtNTk0LDcgKzU5NSw3IEBAIHZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0MKICAgICAgICAgZnVuYyhjb2RlQmxvY2spOwogfQog
Ci12b2lkIEhlYXA6OmFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpCit2b2lkIEhlYXA6OmFz
c2VydE1hcmtTdGFja3NFbXB0eSgpCiB7CiAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgCkBAIC02
MDgsNiArNjA5LDE1IEBAIHZvaWQgSGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkK
ICAgICAgICAgb2sgPSBmYWxzZTsKICAgICB9CiAgICAgCisgICAgZm9yRWFjaFNsb3RWaXNpdG9y
KAorICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBpZiAo
dmlzaXRvci5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgICAgICBkYXRhTG9nKCJGQVRBTDogVmlzaXRvciAiLCBSYXdQb2ludGVyKCZ2aXNp
dG9yKSwgIiBpcyBub3QgZW1wdHkhXG4iKTsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAg
ICAgIH0pOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG9rKTsKIH0KIApAQCAtNzMwLDcgKzc0
MCw3IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiAgICAgICAgICAgICB2aXNpdG9yLnJlc2V0
KCk7CiAgICAgICAgIH0pOwogCi0gICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7Cisg
ICAgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVy
cy5yZW1vdmVBbGwoKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNF
bXB0eSgpKTsKQEAgLTkxMSw3ICs5MjEsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNl
dChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRv
clNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAg
ICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJr
ZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8vIER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0
b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAg
ICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5t
YXJrZWQgUG9zc2libHlCbGFjayBvYmplY3QuIElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0
IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3du
IHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0LDE1ICs5MzQsMTUgQEAgdm9pZCBIZWFwOjphZGRU
b1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90
ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAg
ICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMgb3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAg
ICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAg
ICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAg
ICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1hcmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAg
ICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nhbm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAg
ICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9u
ZyBoZXJlLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBj
YXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUgb2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3Vn
aCBpdCBzaG91bGQKICAgICAgICAgICAgICAgICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRz
IHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAg
ICAgICAgICAgICAgICAvLyBpc01hcmtlZENvbmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3Rvbmlj
YWxseSB0byB0cnVlLgotICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShj
ZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNh
bGx5IHRvIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlmZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhl
IG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBibGFjayBhdAogICAgICAgICAgICAgICAgICAgICAv
LyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sgY29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAg
ICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAt
OTQ4LDcgKzk1OCw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NF
UlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3
YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0
aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9s
ZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRo
IHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNh
dXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0xMjgzLDEzICsxMjkzLDExIEBAIE5FVkVSX0lOTElO
RSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICB9CiAgICAgICAgIAogICAgIGlmIChz
bG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgbV9vcGFxdWVSb290
cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAgICAgCiAgICAgICAgIG1fc2NoZWR1bGVyLT5kaWRS
ZWFjaFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgYXNzZXJ0U2hhcmVkTWFy
a1N0YWNrc0VtcHR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFy
YWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlSWZO
ZWNlc3NhcnkoKTsKKyAgICAgICAgCisgICAgICAgIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwog
ICAgICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRvckRpZFJ1biBpbnRv
IGFjY291bnQgd2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxpa2VseSwKICAgICAg
ICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIHJvb3QgY29uc3RyYWludHMgYWdhaW4gdW5s
ZXNzIHRoZSBtdXRhdG9yIGRpZCBydW4uIEF0IGEKQEAgLTEzMDUsOSArMTMxMyw5IEBAIE5FVkVS
X0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgLy8gV29uZGVyaW5n
IHdoYXQgdGhpcyBkb2VzPyBMb29rIGF0IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpLiBUaGUg
RE9NIGFuZCBvdGhlcnMgY2FuIGFsc28KICAgICAgICAgLy8gYWRkIHRoZWlyIG93biB1c2luZyBI
ZWFwOjphZGRNYXJraW5nQ29uc3RyYWludCgpLgogICAgICAgICBib29sIGNvbnZlcmdlZCA9Ci0g
ICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRv
ciwgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgICAgICBtX2NvbnN0cmFpbnRT
ZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvcik7CiAgICAgICAgIGlmIChjb252ZXJn
ZWQgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhc3NlcnRTaGFyZWRN
YXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwog
ICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNlOjpFbmQp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE0ODksNiArMTQ5Nyw4IEBAIE5FVkVSX0lO
TElORSBib29sIEhlYXA6OmZpbmlzaENoYW5naW5nUGgKICAgICBpZiAoZmFsc2UpCiAgICAgICAg
IGRhdGFMb2coY29ubiwgIjogR29pbmcgdG8gcGhhc2U6ICIsIG1fbmV4dFBoYXNlLCAiIChmcm9t
ICIsIG1fY3VycmVudFBoYXNlLCAiKVxuIik7CiAgICAgCisgICAgbV9waGFzZVZlcnNpb24rKzsK
KyAgICAKICAgICBib29sIHN1c3BlbmRlZEJlZm9yZSA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQo
bV9jdXJyZW50UGhhc2UpOwogICAgIGJvb2wgc3VzcGVuZGVkQWZ0ZXIgPSB3b3JsZFNob3VsZEJl
U3VzcGVuZGVkKG1fbmV4dFBoYXNlKTsKICAgICAKQEAgLTE1MjYsNyArMTUzNiw3IEBAIE5FVkVS
X0lOTElORSBib29sIEhlYXA6OmZpbmlzaENoYW5naW5nUGgKIAogdm9pZCBIZWFwOjpzdG9wVGhl
UGVyaXBoZXJ5KEdDQ29uZHVjdG9yIGNvbm4pCiB7Ci0gICAgaWYgKG1fY29sbGVjdG9yQmVsaWV2
ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpIHsKKyAgICBpZiAobV93b3JsZElzU3RvcHBlZCkgewog
ICAgICAgICBkYXRhTG9nKCJGQVRBTDogd29ybGQgYWxyZWFkeSBzdG9wcGVkLlxuIik7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTUzNyw3ICsxNTQ3
LDcgQEAgdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29uZHVjdG9yIAogICAgIG1fbXV0
YXRvckRpZFJ1biA9IGZhbHNlOwogCiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwotICAg
IG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworICAgIG1f
d29ybGRJc1N0b3BwZWQgPSB0cnVlOwogCiAgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAogICAgICAg
ICBbJl0gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewpAQCAtMTU3NCwxMSArMTU4NCwxMSBA
QCBORVZFUl9JTkxJTkUgdm9pZCBIZWFwOjpyZXN1bWVUaGVQZXJpcGhlCiAgICAgCiAgICAgbV9i
YXJyaWVyc0V4ZWN1dGVkID0gMDsKICAgICAKLSAgICBpZiAoIW1fY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQpIHsKKyAgICBpZiAoIW1fd29ybGRJc1N0b3BwZWQpIHsKICAg
ICAgICAgZGF0YUxvZygiRmF0YWw6IGNvbGxlY3RvciBkb2VzIG5vdCBiZWxpZXZlIHRoYXQgdGhl
IHdvcmxkIGlzIHN0b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCA9IGZhbHNlOworICAgIG1fd29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICAKICAgICAvLyBG
SVhNRTogVGhpcyBjb3VsZCBiZSB2YXN0bHkgaW1wcm92ZWQ6IHdlIHdhbnQgdG8gZ3JhYiB0aGUg
bG9ja3MgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkKICAgICAvLyBiZWNvbWUgYXZhaWxhYmxl
LiBXZSBiYXNpY2FsbHkgd2FudCBhIGxvY2tBbnkoKSBtZXRob2QgdGhhdCB3aWxsIGxvY2sgd2hh
dGV2ZXIgbG9jayBpcyBhdmFpbGFibGUKQEAgLTI1NzgsNyArMjU4OCwxMSBAQCB2b2lkIEhlYXA6
OmFkZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAg
ICAgICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
LCBsYXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikgbXV0YWJsZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcnVu
IHRoaXMgb25jZSBwZXIgZml4cG9pbnQuCisgICAgICAgICAgICBpZiAobGFzdFZlcnNpb24gPT0g
bV9waGFzZVZlcnNpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCiAg
ICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAi
Q29uc3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UucHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKICAgICAgICAgICAgIENvbnNlcnZhdGl2
ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKQEAgLTI1ODcsMTIgKzI2MDEsMTQgQEAg
dm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgZ2F0aGVySlNTdGFj
a1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZm
ZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBl
bmQoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsYXN0VmVy
c2lvbiA9IG1fcGhhc2VWZXJzaW9uOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAg
ICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBz
bG90VmlzaXRvcik7CiAjZW5kaWYKQEAgLTI2MTMsNyArMjYyOSw3IEBAIHZvaWQgSGVhcDo6YWRk
Q29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0
U3Ryb25nSGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZp
c2l0KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKQEAgLTI2MjEsNyArMjYzNyw3IEBAIHZvaWQg
SGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFk
ZCgKICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10g
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxF
UikKICAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0g
bV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2NDEsMjEgKzI2NTcsMjEg
QEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAg
ICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRv
cik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4
ZWN1dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIs
ICJXZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwg
Y29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikgewogICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNs
b3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6Okdy
ZXllZEJ5TWFya2luZyk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJXcmgiLCAiV2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJz
LmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAgICAgICAgICAg
ICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
fSwKQEAgLTI2NjQsNyArMjY4MCw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAg
IkR3IiwgIkRGRyBXb3JrbGlzdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3Rp
bmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwog
ICAgICAgICAgICAgCkBAIC0yNjg0LDcgKzI3MDAsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIs
ICJDb2RlQmxvY2tzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Is
IGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdD
b2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2Rl
QmxvY2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KQEAgLTI2OTUsMjMgKzI3
MTEsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgIH0sCiAgICAg
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwogICAgIAotICAgIG1fY29u
c3RyYWludFNldC0+YWRkKAotICAgICAgICAiTXJtcyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFj
ayIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7Ci0gICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQg
dGhhdCB3ZSBpbnRyb2R1Y2VkIHdvcmshCi0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0
YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAg
ICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgICAgIGRhdGFMb2co
IigiLCBzaXplLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX211dGF0b3JNYXJr
U3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKLSAgICAg
ICAgICAgIG1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFy
a1N0YWNrKCkpOwotICAgICAgICB9LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJikgLT4g
ZG91YmxlIHsKLSAgICAgICAgICAgIHJldHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAr
IG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwotICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIG1fY29uc3RyYWludFNldC0+YWRk
KHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ+KCp0aGlzKSk7CiB9
CiAKIHZvaWQgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtp
bmdDb25zdHJhaW50PiBjb25zdHJhaW50KQpAQCAtMjc5NCwxNiArMjc5NCw2IEBAIHZvaWQgSGVh
cDo6YWxsb3dDb2xsZWN0aW9uKCkKICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrLnVubG9j
aygpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjpmb3JFYWNoU2xv
dFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZp
c2l0b3IpOwotICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKLSAgICBmb3IgKGF1dG8m
IHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgZnVuYygqc2xv
dFZpc2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29s
IHZhbHVlKQogewogICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3
LDQgKzI4MzcsMjQgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwog
ICAgIG1faGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAK
K3ZvaWQgSGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJr
aW5nTXV0ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuVGFza0lu
UGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sK
KyAgICB1bnNpZ25lZCBpbml0aWFsUmVmQ291bnQgPSB0YXNrLT5yZWZDb3VudCgpOworICAgIHNl
dEJvbnVzVmlzaXRvclRhc2sodGFzayk7CisgICAgdGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RW
aXNpdG9yKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKG51bGxwdHIpOworICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAgIHdoaWxl
ICh0YXNrLT5yZWZDb3VudCgpID4gaW5pdGlhbFJlZkNvdW50KQorICAgICAgICAgICAgbV9tYXJr
aW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChtX21hcmtpbmdNdXRleCk7CisgICAgfQorfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgog
I2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21h
dGljVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTczLDYgKzc0LDcgQEAgY2xhc3MgSlNWYWx1ZTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE1hY2hpbmVUaHJlYWRzOwogY2xhc3Mg
TWFya1N0YWNrQXJyYXk7CitjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKIGNsYXNz
IE1hcmtlZEFsbG9jYXRvcjsKIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOwogY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnQ7CkBAIC0xMTQsNyArMTE2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzX3RpbWVDaGVja1Jlc29sdXRpb24gPSAxNjsKIAogICAgIHN0YXRpYyBi
b29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKLSAgICBzdGF0aWMgYm9vbCBpc01hcmtlZENvbmN1
cnJlbnRseShjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChI
ZWFwVmVyc2lvbiwgY29uc3Qgdm9pZCopOwogICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNp
emUoY29uc3Qgdm9pZCopOwpAQCAtMTU0LDcgKzE1NSw4IEBAIHB1YmxpYzoKICAgICBNdXRhdG9y
U3RhdGUgbXV0YXRvclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhdGU7IH0KICAg
ICBzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gY29sbGVjdGlvblNjb3BlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xsZWN0aW9uU2NvcGU7IH0KICAgICBib29sIGhhc0hlYXBBY2Nlc3MoKSBj
b25zdDsKLSAgICBib29sIGNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkg
Y29uc3Q7CisgICAgYm9vbCB3b3JsZElzU3RvcHBlZCgpIGNvbnN0OworICAgIGJvb2wgd29ybGRJ
c1J1bm5pbmcoKSBjb25zdCB7IHJldHVybiAhd29ybGRJc1N0b3BwZWQoKTsgfQogCiAgICAgLy8g
V2UncmUgYWx3YXlzIGJ1c3kgb24gdGhlIGNvbGxlY3Rpb24gdGhyZWFkcy4gT24gdGhlIG1haW4g
dGhyZWFkLCB0aGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSdyZQogICAgIC8vIGhlbHBpbmcgaGVhcC4K
QEAgLTM0OSw2ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbGxvd0NvbGxlY3Rpb24oKTsK
ICAgICAKICAgICB1aW50NjRfdCBtdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbXV0YXRvckV4ZWN1dGlvblZlcnNpb247IH0KKyAgICB1aW50NjRfdCBwaGFzZVZlcnNp
b24oKSBjb25zdCB7IHJldHVybiBtX3BoYXNlVmVyc2lvbjsgfQogICAgIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtp
bmdDb25zdHJhaW50Pik7CiAgICAgCkBAIC0zNTgsNiArMzYxLDE3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2Fs
bGJhY2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFw
RmluYWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1
bmMmIGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRU
YXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC0zNzMsNiAr
Mzg3LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOworICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsK
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkU3BhY2U7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFs
bG9jYXRvcjsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CkBAIC01MjUsOCArNTQwLDEw
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGl0ZXJh
dGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25z
dCBGdW5jJik7CiAgICAgCi0gICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsK
KyAgICB2b2lkIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zp
c2l0b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAK
ICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNp
emU7CiAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTYs
NiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxs
ZWxTbG90VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAg
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0
b3IoY29uc3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRs
ZVN0YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4g
bV9jb2RlQmxvY2tzOwpAQCAtNjMzLDggKzY0Nyw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
bV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFs
bGVsTWFya2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29wYXF1ZVJvb3Rz
TXV0ZXg7Ci0gICAgSGFzaFNldDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsKKyAgICBDb25j
dXJyZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1NSw3IEBAIHByaXZh
dGU6CiAgICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1f
dW5jb25kaXRpb25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hl
bHBlckNsaWVudDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBt
X2JvbnVzVmlzaXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6
ZV90IG1fYmxvY2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKQEAgLTY1Nyw3ICs2NzEsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBuZWVkRmluYWxpemVCaXQgPSAxdSA8PCA0
dTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1
dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlh
YmxlLgogICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwotICAgIGJvb2wgbV9jb2xs
ZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X3dvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1fYmVmb3JlR0M7
CiAgICAgTW9ub3RvbmljVGltZSBtX2FmdGVyR0M7CiAgICAgTW9ub3RvbmljVGltZSBtX3N0b3BU
aW1lOwpAQCAtNjcyLDYgKzY4Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RocmVhZElzU3Rv
cHBpbmcgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9yRGlkUnVuIHsgdHJ1ZSB9OwogICAg
IHVpbnQ2NF90IG1fbXV0YXRvckV4ZWN1dGlvblZlcnNpb24geyAwIH07CisgICAgdWludDY0X3Qg
bV9waGFzZVZlcnNpb24geyAwIH07CiAgICAgQm94PExvY2s+IG1fdGhyZWFkTG9jazsKICAgICBS
ZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3RocmVhZENvbmRpdGlvbjsgLy8gVGhl
IG11dGF0b3IgbXVzdCBub3Qgd2FpdCBvbiB0aGlzLiBJdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2Nr
LgogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MywzMCArNjMsMjAgQEAgaW5saW5lIGJvb2wgSGVhcDo6aGFzSGVhcEFjY2VzcygpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fd29ybGRTdGF0ZS5sb2FkKCkgJiBoYXNBY2Nlc3NCaXQ7CiB9CiAKLWlubGlu
ZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgY29u
c3QKK2lubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKKyAgICByZXR1cm4g
bV93b3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGluc3Rh
bmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1aWNr
bHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4CiBB
TFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsK
LSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKICAg
ICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAg
IGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+bGFy
Z2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxs
LT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZCgKLSAgICAgICAgYmxv
Y2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qgdm9p
ZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2Vs
bCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAgICAg
ICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJrZWRC
bG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01h
cmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgp
Lm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9jay5pc01hcmtlZChibG9j
ay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAK
IEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAtMTc5LDE5ICsxNjksMTkgQEAg
aW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPAogCiBpbmxpbmUgdm9pZCBI
ZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJl
YWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBB
U1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVy
cmFsRGVwdGgrKzsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwg
bV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiB9CiAKIGlubGluZSB2
b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKIHsKLSAgICBB
U1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxk
SXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9w
cGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9k
aWREZWZlckdDV29yaykpIHsKQEAgLTI2OSw0ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6
c3RvcElmTmVjZXNzYXJ5KCkKICAgICAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29u
c3QgRnVuYyYgZnVuYykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxT
bG90VmlzaXRvckxvY2spOworICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAg
IGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9y
IDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxk
U25hcHNob3QoCiB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBj
ZWxsKQogewogICAgIEFTU0VSVChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09
IHRoaXMpOwotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7Cisg
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGluZ05v
ZGVGb3JDZWxsKGNlbGwpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtl
ZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsg
fQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCopIHsgcmV0dXJuIGlz
TWFya2VkKCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqLCBE
ZXBlbmRlbmN5KSB7IHJldHVybiBpc01hcmtlZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29s
IGlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlz
TWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24s
IEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyBy
ZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29s
IGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJr
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQgKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBV
c2UgdGhpcyBsb2NrIHNjb3BlIGxpa2Ugc286CiAvLyBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdN
YXJraW5nKGhlYXAsIGxvY2spOwogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci1Mb2NrZXI8
TG9ja1R5cGU+IGxvY2tEdXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNzZWRM
b2NrKQorYXV0byBsb2NrRHVyaW5nTWFya2luZyhIZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFzc2Vk
TG9jaykKIHsKLSAgICBMb2NrVHlwZSogbG9jazsKLSAgICBpZiAoaGVhcC5tdXRhdG9yU2hvdWxk
QmVGZW5jZWQoKSkKLSAgICAgICAgbG9jayA9ICZwYXNzZWRMb2NrOwotICAgIGVsc2UKLSAgICAg
ICAgbG9jayA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4obG9jayk7Cisg
ICAgcmV0dXJuIGhvbGRMb2NrSWYocGFzc2VkTG9jaywgaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5j
ZWQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQ6Ok1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCisgICAgOiBNYXJraW5n
Q29uc3RyYWludCgiTXNtIiwgIk1hcmsgU3RhY2sgTWVyZ2luZyIsIENvbnN0cmFpbnRWb2xhdGls
aXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbikKKyAgICAsIG1faGVhcChoZWFwKQoreworfQorCitNYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCkKK3sK
K30KKworZG91YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0
ZShTbG90VmlzaXRvciYpCit7CisgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2st
PnNpemUoKSArIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKK30KKwordm9pZCBNYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBMb2dnaW5nIHRoZSB3
b3JrIGhlcmUgZW5zdXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0
IGRvZXNuJ3QgbmVlZCB0byBwcm9kdWNlCisgICAgLy8gYW55bW9yZSB3b3JrLgorICAgIHNpemVf
dCBzaXplID0gbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFj
ZU1hcmtTdGFjay0+c2l6ZSgpOworICAgIHZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOwor
ICAgIAorICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCIoIiwgc2l6
ZSwgIikiKTsKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2hlYXAu
bV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygp
KTsKKyAgICBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRv
ck1hcmtTdGFjaygpKTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50
aWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGljIE1h
cmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWlu
dChIZWFwJik7CisgICAgfk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAg
ZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExv
Y2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Cisg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NCw2ICs0NDQsMzMg
QEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFzc2VydE5vVW5zd2VwdCgpCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUq
KCk+PiBNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7Cisg
ICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
CisgICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CisgICAgICAgICAgICBtX2luZGV4ID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkuZmlu
ZEJpdChtX2luZGV4LCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxsb2Nh
dG9yLm1fYmxvY2tzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5tX2Jsb2Nrc1ttX2luZGV4KytdOworICAgICAg
ICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9h
bGxvY2F0b3I7CisgICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OworICAgICAgICBMb2NrIG1f
bG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykp
OworfQorCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIv
IiwgbV9hdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNp
bmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwMyw2ICsx
MDQsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JF
YWNoQmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJl
ZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5
QmxvY2tTb3VyY2UoKTsKKyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5k
bGUqKTsKICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTgsNyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZChj
b25zdCB2b2lkKik7CiAgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
biwgY29uc3Qgdm9pZCopOwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0
IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9p
ZCosIERlcGVuZGVuY3kpOwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFy
ZU1hcmtzU3RhbGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lX
aXRoPGJvb2w+IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbik7CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbik7CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJv
b2wgTWFya2VkQmxvY2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lv
biAhPSBtX21hcmtpbmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRo
PGJvb2w+IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2lu
Z1ZlcnNpb247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiks
IHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJr
ZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAg
YXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNp
b24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtp
bmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAg
ICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lv
bik7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90
U3RhbGUoKQpAQCAtNTI0LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Omlz
TWFya2VkUmF3KGNvbgogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1h
cmtzU3RhbGUobWFya2luZ1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQot
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJl
TWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0
LnZhbHVlKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAg
IGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVw
ZW5kZW5jeSk7CisgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVu
Y3kodmVyc2lvbikpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29u
c3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiAr
MTY1LDExIEBAIHB1YmxpYzoKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0
IHdlIGhhdmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQu
CiAgICAgYm9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQogICAg
IAorICAgIFdlYWtTZXQqIGFjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX2FjdGl2ZVdl
YWtTZXRzLmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0
dXJuIG1fYWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFr
U2V0c0JlZ2luKCkgeyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAg
V2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtT
ZXRzLmVuZCgpOyB9CisgICAgCiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6
OmRhdGFGaWxlKCkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFy
cmF5PHNpemVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3Bw
CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsyNywxOCBAQAogI2luY2x1
ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiVmlzaXRDb3VudGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1NYXJraW5nQ29uc3Ry
YWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENT
dHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHkpCi0gICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCi0g
ICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1v
dmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQotewot
fQorc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAotTWFya2luZ0NvbnN0
cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShT
bG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5IHZvbGF0aWxpdHkpCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFp
bnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0
aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25z
dHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShh
YmJyZXZpYXRlZE5hbWUpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhl
Y3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fcXVpY2tXb3Jr
RXN0aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQogICAg
ICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCisgICAgLCBtX2NvbmN1cnJlbmN5KGNvbmN1cnJl
bmN5KQorICAgICwgbV9wYXJhbGxlbGlzbShwYXJhbGxlbGlzbSkKIHsKIH0KIApAQCAtNjMsMTQg
KzUxLDc0IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFz
dFZpc2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KQorQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtpbmdDb25zdHJhaW50OjpleGVj
dXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50
ZXIodmlzaXRvcik7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHJlc3VsdCA9IGV4ZWN1dGVJ
bXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0
Q291bnQoKTsKKyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQor
ICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNp
dENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CisgICAgaWYgKHJlc3VsdCA9
PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIC8vIEl0J3MgaWxs
ZWdhbCB0byBwcm9kdWNlIHBhcmFsbGVsIHdvcmsgaWYgeW91IGhhdmVuJ3QgYWR2ZXJ0aXNlZCBp
dCB1cGZyb250IGJlY2F1c2UgdGhlIHNvbHZlcgorICAgICAgICAvLyBoYXMgb3B0aW1pemF0aW9u
cyBmb3IgY29uc3RyYWludHMgdGhhdCBwcm9taXNlIHRvIG5ldmVyIHByb2R1Y2UgcGFyYWxsZWwg
d29yay4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
ZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYp
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0Vz
dGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHJldHVybiBsYXN0VmlzaXRDb3Vu
dCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRT
b2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7Ci0gICAgVmlzaXRp
bmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgdGlt
ZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdUaW1lb3V0KTsK
LSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0Q291bnQodmlzaXRv
cik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQuZGlkVmlzaXRTb21l
dGhpbmcodmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsK
KyAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdHJhaW50U29sdmluZ0xvY2tlciwgdmlzaXRv
cik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7Cisg
ICAgaWYgKHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0
YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZp
c2l0Q291bnQoKSwgIiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOworfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBW
aXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGRvUGFyYWxsZWxXb3JrSW1w
bCh2aXNpdG9yKTsKKyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgp
KQorICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2
aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGRvUGFyYWxsZWxXb3JrKSIpOworICAgIHsK
KyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBtX2xhc3RW
aXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgfQorfQorCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBmaW5p
c2hQYXJhbGxlbFdvcmtJbXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIu
dmlzaXRDb3VudCgpKQorICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIg
dmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGZpbmlzaFBhcmFsbGVs
V29yaykiKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUlt
cGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6
OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQorewogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEyIEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29uc3RyYWludENvbmN1cnJlbmN5LmgiCisj
aW5jbHVkZSAiQ29uc3RyYWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZv
bGF0aWxpdHkuaCIKLSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1p
dHMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bi5oPgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKQEAgLTQ0LDE3ICs0NCwxMSBAQCBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAg
ICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9s
YXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1
cnJlbmN5OjpDb25jdXJyZW50LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25z
dHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwg
Q1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNp
dG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7Ci0gICAgCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgfk1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCB+TWFya2luZ0NvbnN0cmFpbnQoKTsKICAgICAKICAgICB1bnNpZ25lZCBpbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKQEAgLTY1LDMyICs1OSwzOSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9s
YXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJv
b2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpOworICAgIAorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGlt
YXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdFZpc2l0
Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0KKyAgICB2b2lkIHBy
ZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9j
a2VyLCBTbG90VmlzaXRvciYpOworICAgIAorICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIGZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOwogICAg
IAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBt
X3ZvbGF0aWxpdHk7IH0KICAgICAKKyAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVu
Y3koKSBjb25zdCB7IHJldHVybiBtX2NvbmN1cnJlbmN5OyB9CisgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIHBhcmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwo
U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHBy
ZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmlu
Z0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJ
bXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0lt
cGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtp
bmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5z
aWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFt
ZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAg
ICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVu
Y3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0
cmFpbnRDb25jdXJyZW5jeSBtX2NvbmN1cnJlbmN5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBtX3BhcmFsbGVsaXNtOwogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAg
IExvY2sgbV9sb2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYwICsyNiwxOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0LmgiCiAKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKICNp
bmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIK
KyNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1jbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7Ci1wdWJs
aWM6Ci0gICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90
VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fc2V0
KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3RpbWVvdXQo
dGltZW91dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmco
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7Ci0gICAg
fQotICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAg
fQotICAgIAotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0LgotICAgIGJvb2wg
ZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggOiB1bmV4ZWN1dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAgICAg
ICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRp
bWVPdXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3Qg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQotCi0gICAgdm9p
ZCBleGVjdXRlKHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4
XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7Ci0g
ICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAg
IE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9y
OwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwotICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVk
OwotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci19OwotCi1NYXJraW5n
Q29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkK
IHsKIH0KIApAQCAtMTA3LDE4ICs2NSw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRp
ZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rp
b24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCi17Ci0gICAgYWRkKHN0ZDo6bWFr
ZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RG
TW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKLX0KLQotdm9pZCBN
YXJraW5nQ29uc3RyYWludFNldDo6YWRkKAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBD
U3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShT
bG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5IHZvbGF0aWxpdHkpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25z
dHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3kpCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlx
dWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShu
YW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRl
RnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5KSk7CiB9CiAKIHZv
aWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTEzMSw5ICs4MCw5IEBAIHZvaWQgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJh
aW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5j
ZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJr
aW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewotICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0
aW1lb3V0KTsKKyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRv
cik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDI3ICs5NywyNyBAQCBib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtp
bmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpl
eGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEV4ZWN1
dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7Cisg
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIE1hcmtp
bmdDb25zdHJhaW50U29sdmVyIHNvbHZlcigqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRl
cmF0aW9uID0gbV9pdGVyYXRpb24rKzsKICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
ICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICI6Iik7CiAKLSAgICAvLyBJZiB0aGVy
ZSBhcmUgYW55IGNvbnN0cmFpbnRzIHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1
cmluZyB0aGlzIGN5Y2xlLCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93
LgotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVm
b3JlIGFueSB2aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55
IGNvbnN0cmFpbnRzIG90aGVyCi0gICAgLy8gdGhhbiByb290cy4KLSAgICBpZiAoaXRlcmF0aW9u
ID09IDEpCisgICAgaWYgKGl0ZXJhdGlvbiA9PSAxKSB7CisgICAgICAgIC8vIEZpcnN0IGl0ZXJh
dGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3IgZHJhaW5pbmcsIHNvIGl0J3MgdW5saWtlbHkgdG8g
dHJpZ2dlciBhbnkgY29uc3RyYWludHMKKyAgICAgICAgLy8gb3RoZXIgdGhhbiByb290cy4KKyAg
ICAgICAgc29sdmVyLmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KICAgICAKLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4
ZWN1dGVkT3V0Z3Jvd3RocykpCisgICAgaWYgKGl0ZXJhdGlvbiA9PSAyKSB7CisgICAgICAgIHNv
bHZlci5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KICAgICAKICAgICAvLyBXZSB3YW50IHRvIGtlZXAgcHJlZmVycmluZyB0aGUgb3V0
Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50ZWQK
ICAgICAvLyBldmVuIGluIGEgc3RvcC10aGUtd29ybGQgR0MgLSB1bnRpbCB0aGV5IHN0b3AgcHJv
ZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBnbyB0b3RhbGx5CkBAIC0yMTUsMzMgKzE2
NCwxNiBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgICAg
ICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgpOwogICAgICAgICB9
KTsKICAgICAKLSAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRl
cmVkKSB7Ci0gICAgICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOwotICAgICAg
ICAKLSAgICAgICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1v
c3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQotICAgICAgICAvLyB3
ZSBmaW5kIHdvcmsuCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRl
IGFsbCBjb25zdHJhaW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCi0gICAg
ICAgIC8vIGJldHRlciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKLSAgICAg
ICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBydW5uaW5nLgotICAgICAgICAv
LyAtIElmIHRoZSB2aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgotICAg
ICAgICAvLyAtIEVsc2UgcnVuIHVudGlsIHRpbWVvdXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzIKLSAgICAgICAgaWYgKGV4ZWN1dGlv
bkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgc29sdmVyLmNvbnZlcmdlKG1fb3JkZXJlZCk7CiAgICAgCi0gICAgcmV0dXJu
IHRydWU7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UndmUgY29udmVyZ2VkLiBUaGF0IGhhcHBl
bnMgaWYgd2UgZGlkIG5vdCB2aXNpdCBhbnl0aGluZy4KKyAgICByZXR1cm4gIXNvbHZlci5kaWRW
aXNpdFNvbWV0aGluZygpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRl
QWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcg
PSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29u
c3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGlt
ZTo6aW5maW5pdHkoKSk7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CiAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQu
aAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTIgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZl
cjsKKwogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgewogcHVibGljOgotICAgIE1hcmtpbmdD
b25zdHJhaW50U2V0KCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYpOwogICAgIH5N
YXJraW5nQ29uc3RyYWludFNldCgpOwogICAgIAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7
CkBAIC00MSwxNSArNDQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJp
bmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwotICAgIAotICAgIHZvaWQgYWRkKAotICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKLSAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6
OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0g
ICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSk7CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwK
KyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJy
ZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCk7CiAgICAgCiAgICAgdm9p
ZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CiAgICAgCkBAIC02MCwy
MSArNTcsMTkgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4
ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3Jr
LiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMg
YW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKLSAg
ICAgICAgU2xvdFZpc2l0b3ImLAotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25v
dG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90
VmlzaXRvciYpOwogICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRo
b3V0IGFueSBzaGVuYW5pZ2Fucy4KICAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsK
ICAgICAKIHByaXZhdGU6Ci0gICAgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKLSAgICBmcmllbmQg
Y2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI7CiAgICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNp
dG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5j
ZUltcGwoU2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwg
TW9ub3RvbmljVGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVk
LCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYs
IEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlz
aXRTb21ldGhpbmcpOwogICAgIAorICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91
bmV4ZWN1dGVkUm9vdHM7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CiAg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U29sdmVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IAorCitNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCkKKyAgICA6IG1faGVhcChzZXQubV9oZWFw
KQorICAgICwgbV9tYWluVmlzaXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAg
ICAsIG1fc2V0KHNldCkKK3sKKyAgICBtX2hlYXAuZm9yRWFjaFNsb3RWaXNpdG9yKAorICAgICAg
ICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBtX3Zpc2l0Q291bnRl
cnMuYXBwZW5kKFZpc2l0Q291bnRlcih2aXNpdG9yKSk7CisgICAgICAgIH0pOworfQorCitNYXJr
aW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdDb25zdHJhaW50U29sdmVyKCkKK3sKK30KKwor
Ym9vbCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAor
eworICAgIGZvciAoY29uc3QgVmlzaXRDb3VudGVyJiB2aXNpdENvdW50ZXIgOiBtX3Zpc2l0Q291
bnRlcnMpIHsKKyAgICAgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRlKFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVy
ZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQor
eworICAgIG1fcGlja05leHRJc1N0aWxsQWN0aXZlID0gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrKTsKKyAgICAKKyAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZyhwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0Zp
cnN0ID8gIlAiIDogIk4iLCAiPCIpOworCisgICAgbV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxl
bCgKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeyBydW5FeGVjdXRpb25UaHJl
YWQodmlzaXRvciwgcHJlZmVyZW5jZSwgcGlja05leHQpOyB9KTsKKyAgICAKKyAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiPiIpOworICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
bnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yayk7CisgICAgICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaW5kZXhUb1J1biA6IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwpCisgICAgICAgIG1fc2V0Lm1f
c2V0W2luZGV4VG9SdW5dLT5maW5pc2hQYXJhbGxlbFdvcmsobV9tYWluVmlzaXRvcik7CisgICAg
bV9kaWRFeGVjdXRlSW5QYXJhbGxlbC5jbGVhcigpOworICAgIAorICAgIGlmICghbV90b0V4ZWN1
dGVTZXF1ZW50aWFsbHkuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhU
b1J1biA6IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5KQorICAgICAgICAgICAgZXhlY3V0ZSgqbV9z
ZXQubV9zZXRbaW5kZXhUb1J1bl0pOworICAgICAgICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5j
bGVhcigpOworICAgIH0KKyAgICAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV90b0V4ZWN1dGVJ
blBhcmFsbGVsLmlzRW1wdHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdG9FeGVjdXRlSW5Q
YXJhbGxlbFNldC5iaXRDb3VudCgpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6ZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQoreworICAgIGF1dG8gaXRlciA9IHVuZXhl
Y3V0ZWQuYmVnaW4oKTsKKyAgICBhdXRvIGVuZCA9IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgaWYg
KGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3Bl
ZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuICpp
dGVyKys7CisgICAgICAgIH0pOworICAgIGV4ZWN1dGUoTmV4dENvbnN0cmFpbnRGaXJzdCwgcGlj
a05leHQpOworICAgIHVuZXhlY3V0ZWQuY2xlYXJBbGwoKTsKK30KKwordm9pZCBNYXJraW5nQ29u
c3RyYWludFNvbHZlcjo6Y29udmVyZ2UoY29uc3QgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4m
IG9yZGVyKQoreworICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKG9yZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBzaXplX3QgaW5kZXggPSAwOworCisgICAgLy8gV2Ugd2FudCB0byBleGVjdXRlIHRo
ZSBmaXJzdCBjb25zdHJhaW50IHNlcXVlbnRpYWxseSBpZiB3ZSB0aGluayBpdCB3aWxsIHF1aWNr
bHkgZ2l2ZSB1cyBhCisgICAgLy8gcmVzdWx0LiBJZiB3ZSByYW4gaXQgaW4gcGFyYWxsZWwgdG8g
b3RoZXIgY29uc3RyYWludHMsIHRoZW4gd2UgbWlnaHQgZW5kIHVwIGhhdmluZyB0byB3YWl0IGZv
cgorICAgIC8vIHRob3NlIG90aGVyIGNvbnN0cmFpbnRzIHRvIGZpbmlzaCwgd2hpY2ggd291bGQg
YmUgYSB3YXN0ZSBvZiB0aW1lIHNpbmNlIGR1cmluZyBjb252ZXJnZW5jZSBpdCdzCisgICAgLy8g
ZW1waXJpY2FsbHkgbW9zdCBvcHRpbWFsIHRvIHJldHVybiB0byBkcmFpbmluZyBhcyBzb29uIGFz
IGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29yay4gTW9zdAorICAgIC8vIGNvbnN0cmFpbnRzIGRv
bid0IGdlbmVyYXRlIGFueSB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUsIGFuZCB3aGVuIHRoZXkgZG8g
Z2VuZXJhdGUgd29yaywgdGhleSB0ZW5kCisgICAgLy8gdG8gZ2VuZXJhdGUgZW5vdWdoIG9mIGl0
IHRvIGZlZWQgYSBkZWNlbnQgZHJhaW5pbmcgY3ljbGUuIFRoZXJlZm9yZSwgcGF1c2UgdGltZXMg
YXJlIGxvd2VzdCBpZgorICAgIC8vIHdlIGdldCB0aGUgaGVjayBvdXQgb2YgaGVyZSBhcyBzb29u
IGFzIGEgY29uc3RyYWludCBnZW5lcmF0ZXMgd29yay4gSSB0aGluayB0aGF0IHBhcnQgb2Ygd2hh
dAorICAgIC8vIG1ha2VzIHRoaXMgb3B0aW1hbCBpcyB0aGF0IHdlIGFsc28gbmV2ZXIgYWJvcnQg
cnVubmluZyBhIGNvbnN0cmFpbnQgZWFybHksIHNvIHdoZW4gd2UgZG8gcnVuCisgICAgLy8gb25l
LCBpdCBoYXMgYW4gb3Bwb3J0dW5pdHkgdG8gZ2VuZXJhdGUgYXMgbXVjaCB3b3JrIGFzIGl0IHBv
c3NpYmx5IGNhbi4KKyAgICBpZiAob3JkZXJbaW5kZXhdLT5xdWlja1dvcmtFc3RpbWF0ZShtX21h
aW5WaXNpdG9yKSkgeworICAgICAgICBleGVjdXRlKCpvcmRlcltpbmRleCsrXSk7CisgICAgICAg
IAorICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKQorICAgICAgICAg
ICAgJiYgKG9yZGVyLmlzRW1wdHkoKSB8fCBkaWRWaXNpdFNvbWV0aGluZygpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJk
YTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBvcmRlci5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFp
bnQmIGNvbnN0cmFpbnQgPSAqb3JkZXJbaW5kZXgrK107CisgICAgICAgICAgICByZXR1cm4gY29u
c3RyYWludC5pbmRleCgpOworICAgICAgICB9KTsKKyAgICAKKyAgICBleGVjdXRlKFBhcmFsbGVs
V29ya0ZpcnN0LCBwaWNrTmV4dCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCit7CisgICAgaWYgKG1fZXhl
Y3V0ZWQuZ2V0KGNvbnN0cmFpbnQuaW5kZXgoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBjb25zdHJhaW50LnByZXBhcmVUb0V4ZWN1dGUoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX21haW5W
aXNpdG9yKTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBjb25zdHJh
aW50LmV4ZWN1dGUobV9tYWluVmlzaXRvcik7CisgICAgZGlkRXhlY3V0ZShwYXJhbGxlbGlzbSwg
Y29uc3RyYWludC5pbmRleCgpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6
cnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJl
bmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBw
aWNrTmV4dCkKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtN
b2RlOworICAgICAgICB1bnNpZ25lZCBpbmRleFRvUnVuOworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRyeVBhcmFs
bGVsV29yayA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9F
eGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbmRl
eFRvUnVuID0gbV90b0V4ZWN1dGVJblBhcmFsbGVsLmZpcnN0KCk7CisgICAgICAgICAgICAgICAg
ICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgYXV0byB0cnlOZXh0Q29uc3RyYWludCA9IFsmXSAoKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBpY2tSZXN1bHQgPSBwaWNrTmV4dCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwaWNrUmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9waWNrTmV4dElzU3RpbGxBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4
ZWN1dGVkLmdldCgqcGlja1Jlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0
WypwaWNrUmVzdWx0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LmNv
bmN1cnJlbmN5KCkgPT0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpw
aWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJh
aW50LnBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmsr
KzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RyYWludC5wcmVwYXJlVG9FeGVjdXRlKGxvY2tlciwgdmlz
aXRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKHByZWZlcmVuY2UgPT0gUGFyYWxsZWxXb3JrRmlyc3QpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRyeVBhcmFsbGVsV29yaygpIHx8IHRyeU5leHRDb25zdHJhaW50KCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBpZiAodHJ5TmV4dENvbnN0cmFpbnQoKSB8fCB0cnlQYXJh
bGxlbFdvcmsoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRo
YXQgd2UgaGF2ZSBub3RoaW5nIGxlZnQgdG8gcnVuLiBUaGUgb25seSB3YXkgZm9yIHVzIHRvIGhh
dmUgbW9yZSB3b3JrIGlzCisgICAgICAgICAgICAgICAgLy8gaWYgc29tZW9uZSBpcyBydW5uaW5n
IGEgY29uc3RyYWludCB0aGF0IG1heSBwcm9kdWNlIHBhcmFsbGVsIHdvcmsuCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdv
cmspCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogQW55IHdhaXRpbmcgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBq
dXN0IHJ1bm5pbmcgdGhlIFNsb3RWaXNpdG9yLgorICAgICAgICAgICAgICAgIC8vIEkgd29uZGVy
IGlmIHRoYXQgd291bGQgYmUgcHJvZml0YWJsZS4KKyAgICAgICAgICAgICAgICBtX2NvbmRpdGlv
bi53YWl0KG1fbG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0W2luZGV4VG9S
dW5dOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9k
ZSkKKyAgICAgICAgICAgIGNvbnN0cmFpbnQuZG9QYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKHZp
c2l0b3IpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9kaWRFeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RvRXhl
Y3V0ZUluUGFyYWxsZWwudGFrZUZpcnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICh1
bnNpZ25lZCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gaW5kZXhUb1J1bjsgfSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQ
YXJhbGxlbCkKKyAgICAgICAgICAgICAgICAgICAgbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VX
b3JrLS07CisgICAgICAgICAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXhUb1J1bik7CisgICAg
ICAgICAgICAgICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVu
ZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVs
U2V0LnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFs
bCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVy
OjpkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSwgdW5zaWduZWQg
aW5kZXgpCit7CisgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgIGlmIChwYXJhbGxlbGlz
bSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIG1fdG9FeGVj
dXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXgpOworICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWxTZXQuc2V0KGluZGV4KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50
U29sdmVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKKyNp
bmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSGVhcDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50OworY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludFNvbHZlcik7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIoTWFya2luZ0NvbnN0cmFpbnRTZXQmKTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIoKTsKKyAgICAKKyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3Q7CisgICAg
CisgICAgZW51bSBTY2hlZHVsZXJQcmVmZXJlbmNlIHsKKyAgICAgICAgUGFyYWxsZWxXb3JrRmly
c3QsCisgICAgICAgIE5leHRDb25zdHJhaW50Rmlyc3QKKyAgICB9OworCisgICAgdm9pZCBleGVj
dXRlKFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPigpPiBwaWNrTmV4dCk7CisgICAgCisgICAgdm9pZCBkcmFpbihCaXRWZWN0b3ImIHVuZXhl
Y3V0ZWQpOworICAgIAorICAgIHZvaWQgY29udmVyZ2UoY29uc3QgVmVjdG9yPE1hcmtpbmdDb25z
dHJhaW50Kj4mIG9yZGVyKTsKKyAgICAKKyAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFp
bnQmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZp
c2l0b3ImLCBTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4oKT4gcGlja05leHQpOworICAgIAorICAgIHZvaWQgZGlkRXhlY3V0ZShDb25zdHJh
aW50UGFyYWxsZWxpc20sIHVuc2lnbmVkIGluZGV4KTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAg
ICBTbG90VmlzaXRvciYgbV9tYWluVmlzaXRvcjsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCYg
bV9zZXQ7CisgICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CisgICAgRGVxdWU8dW5zaWduZWQsIDMy
PiBtX3RvRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgQml0VmVjdG9yIG1fdG9FeGVjdXRlSW5QYXJh
bGxlbFNldDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBtX2RpZEV4ZWN1dGVJblBhcmFsbGVs
OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5OworICAg
IExvY2sgbV9sb2NrOworICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1bnNpZ25lZCBt
X251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmsgeyAwIH07CisgICAgYm9vbCBtX3BpY2tOZXh0
SXNTdGlsbEFjdGl2ZSB7IHRydWUgfTsKKyAgICBWZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92
aXNpdENvdW50ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIE9wYXF1ZVJv
b3RTZXQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZVJvb3RTZXQpOwotcHVibGlj
OgotICAgIE9wYXF1ZVJvb3RTZXQoKQotICAgICAgICA6IG1fbGFzdFF1ZXJpZWRSb290KG51bGxw
dHIpCi0gICAgICAgICwgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdChmYWxzZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgYm9vbCBjb250YWlucyh2b2lkKiByb290KSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKHJvb3QgIT0gbV9sYXN0UXVlcmllZFJvb3QpIHsKLSAgICAgICAgICAgIG1fbGFzdFF1
ZXJpZWRSb290ID0gcm9vdDsKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Qg
PSBtX3Jvb3RzLmNvbnRhaW5zKHJvb3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2Nv
bnRhaW5zTGFzdFF1ZXJpZWRSb290OwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAg
dm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX3Jvb3RzLmNsZWFyKCk7Ci0gICAgICAgIG1f
bGFzdFF1ZXJpZWRSb290ID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVk
Um9vdCA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCi0gICAgewot
ICAgICAgICBpZiAocm9vdCA9PSBtX2xhc3RRdWVyaWVkUm9vdCkKLSAgICAgICAgICAgIG1fY29u
dGFpbnNMYXN0UXVlcmllZFJvb3QgPSB0cnVlOwotICAgICAgICByZXR1cm4gbV9yb290cy5hZGQo
cm9vdCkuaXNOZXdFbnRyeTsKLSAgICB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9yb290cy5zaXplKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lk
Kj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3Jvb3RzLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5lbmQoKTsKLSAg
ICB9Ci0KLQotcHJpdmF0ZToKLSAgICBIYXNoU2V0PHZvaWQqPiBtX3Jvb3RzOwotICAgIG11dGFi
bGUgdm9pZCogbV9sYXN0UXVlcmllZFJvb3Q7Ci0gICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNM
YXN0UXVlcmllZFJvb3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRh
cHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlw
ZW5hbWUgVW53cmFwRnVuYz4KK2NsYXNzIFBhcmFsbGVsU291cmNlQWRhcHRlciA6IHB1YmxpYyBT
aGFyZWRUYXNrPElubmVyVHlwZSgpPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxTb3VyY2VBZGFw
dGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVu
d3JhcEZ1bmMmIHVud3JhcEZ1bmMpCisgICAgICAgIDogbV9vdXRlclNvdXJjZShvdXRlclNvdXJj
ZSkKKyAgICAgICAgLCBtX3Vud3JhcEZ1bmModW53cmFwRnVuYykKKyAgICB7CisgICAgfQorICAg
IAorICAgIElubmVyVHlwZSBydW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobV9p
bm5lclNvdXJjZSkgeworICAgICAgICAgICAgICAgIGlmIChJbm5lclR5cGUgcmVzdWx0ID0gbV9p
bm5lclNvdXJjZS0+cnVuKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5uZXJTb3VyY2UgPSBtX3Vud3JhcEZ1bmMobV9v
dXRlclNvdXJjZS0+cnVuKCkpOworICAgICAgICB9IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAg
ICAgICAgcmV0dXJuIElubmVyVHlwZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG1fb3V0ZXJTb3VyY2U7CisgICAgUmVmUHRyPFNoYXJl
ZFRhc2s8SW5uZXJUeXBlKCk+PiBtX2lubmVyU291cmNlOworICAgIFVud3JhcEZ1bmMgbV91bndy
YXBGdW5jOworICAgIExvY2sgbV9sb2NrOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJU
eXBlLCB0eXBlbmFtZSBJbm5lclR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitSZWY8UGFyYWxs
ZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPj4gY3JlYXRl
UGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0
ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBV
bndyYXBGdW5jPihvdXRlclNvdXJjZSwgdW53cmFwRnVuYykpOworfQorICAgIAorfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K1NpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxp
dHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQorICAgIDog
TWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUp
LCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50
aWFsKQorICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQor
eworfQorCitTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50
KCkKK3sKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50
OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2V4ZWN1dGVGdW5j
dGlvbih2aXNpdG9yKTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50
aWFsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgYWxsb3dzIGZvciBhbiBpbmZv
cm1hbCB3YXkgdG8gZGVmaW5lIGNvbnN0cmFpbnRzLiBKdXN0IHBhc3MgYSBsYW1iZGEgdG8gdGhl
IGNvbnN0cnVjdG9yLiBUaGUgb25seQorLy8gZG93bnNpZGUgaXMgdGhhdCB0aGlzIG1ha2VzIGl0
IGhhcmQgZm9yIGNvbnN0cmFpbnRzIHRvIGJlIHN0YXRlZnVsLCB3aGljaCBpcyBuZWNlc3Nhcnkg
Zm9yIHRoZW0gdG8gYmUKKy8vIHBhcmFsbGVsLiBJbiB0aG9zZSBjYXNlcywgaXQncyBlYXNpZXIg
dG8ganVzdCBzdWJjbGFzcyBNYXJraW5nQ29uc3RyYWludC4KK2NsYXNzIFNpbXBsZU1hcmtpbmdD
b25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29u
c3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50KTsK
KyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
KT4gbV9leGVjdXRlRnVuY3Rpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw5ICs5OCw3IEBAIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogewotICAgIGlmIChoZWFwKCkt
PmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgaGF2ZSBtZXJn
ZWQgYnkgbm93LgotICAgIGVsc2UKKyAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9
PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pCiAgICAgICAgIHJlc2V0KCk7CiAKICAgICBpZiAoSGVh
cFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSB2bSgpLmhlYXBQcm9maWxlcigpKQpAQCAtMTExLDcg
KzEwOSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xv
dFZpc2l0b3I6OnJlc2V0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5z
aXplKCkpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwog
ICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7CkBAIC0yNzcsMTEgKzI3NCwxMyBA
QCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb250YWluZXJUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsK
LSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VS
VChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsK
ICAgICAKICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwogICAgIAorICAgIC8vZGF0YUxvZygi
TSgiLCBSYXdQb2ludGVyKGNlbGwpLCAiKSIpOworICAgIAogICAgIG1fdmlzaXRDb3VudCsrOwog
ICAgIG1fYnl0ZXNWaXNpdGVkICs9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwogCkBAIC0zNDYsNyAr
MzQ1LDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNp
dENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7
CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBj
ZWxsKTsKICAgICAKQEAgLTQzNSw3ICs0MzQsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVL
bm93blBhcmFsbGVsKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBl
ZChjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0gICAgbV9tdXRhdG9ySXNTdG9wcGVkID0gKG1f
aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRp
bWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICBtX211dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFw
LndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKCkKQEAgLTQ1Miw3ICs0
NTEsNyBAQCBib29sIFNsb3RWaXNpdG9yOjpoYXNBY2tub3dsZWRnZWRUaGF0VGhlCiAKIGJvb2wg
U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7Cisg
ICAgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkg
JiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9y
OjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4ICs0ODksNiBAQCBORVZFUl9J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAgICAgIG1fcmlnaHRUb1J1bi5z
YWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KLSAgICAK
LSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9y
bUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVzdGVkKQpAQCAtNTUwLDcgKzU0
Nyw2IEBAIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHIKICAgICB9CiAK
ICAgICBkb25hdGVBbGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiAKICAgICByZXR1cm4g
Ynl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1NywxNiBAQCBib29sIFNsb3RWaXNpdG9y
OjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlkUmVhY2hUZXJtaW5hdGlvbihs
b2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0
IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24o
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgpCi0g
ICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAg
ICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQotICAgICAg
ICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgcmV0
dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycworICAgICAgICAmJiAh
aGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5KCkKKyAgICAgICAgfHwgIW1f
aGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFt
X2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKQEAgLTU4Mywx
MiArNTc4LDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAog
ICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAg
IAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJr
aW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9t
YXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAg
IG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBt
X2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAg
ICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Vs
YXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYyNiw1MSBAQCBORVZFUl9JTkxJTkUgU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBb
Jl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tl
cikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sK
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21h
cmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0
aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
IWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zp
c2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251
c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hl
YXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYg
c3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0
ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdH
bG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChNYXJr
U3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFw
Lm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAoYm9udXNUYXNrKSB7CisgICAg
ICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGlsbCBiZSBydW5uaW5nLCBhbmQgbWF5IHJ1biBm
b3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRoZSB0YXNrCisgICAgICAgICAgICAvLyBvdXJz
ZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFyb3VuZCB0cnlpbmcgdG8gcnVuIHRoZSB0YXNr
LgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fYm9u
dXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5t
X2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlh
YmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgICAgICBkcmFpbih0aW1l
b3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaXNBY3RpdmUgPSB0cnVlOwogICAg
IH0KIH0KQEAgLTY3MCwxNSArNjkwLDE5IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3Vs
dCBTbG90VmlzaXQKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxCiAg
ICAgICAgIHx8IChtX2hlYXAubV93b3JsZFN0YXRlLmxvYWQoKSAmIEhlYXA6Om11dGF0b3JXYWl0
aW5nQml0KQogICAgICAgICB8fCAhbV9oZWFwLmhhc0hlYXBBY2Nlc3MoKQotICAgICAgICB8fCBt
X2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAg
ICB8fCBtX2hlYXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAvLyBUaGlzIGlzIGFuIG9w
dGltaXphdGlvbiBvdmVyIGRyYWluSW5QYXJhbGxlbCgpIHdoZW4gd2UgaGF2ZSBhIGNvbmN1cnJl
bnQgbXV0YXRvciBidXQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGlzIG5vdCBwcm9maXRhYmxl
LgogICAgICAgICByZXR1cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVvdXQpOwogICAgIH0KIAotICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7Ci0gICAgZG9uYXRlQWxs
KGxvY2tlcik7Ci0gICAgCisgICAgZG9uYXRlQWxsKGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdN
dXRleCkpOworICAgIHJldHVybiB3YWl0Rm9yVGVybWluYXRpb24odGltZW91dCk7Cit9CisKK1Ns
b3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6d2FpdEZvclRlcm1pbmF0
aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoaGFz
RWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6
VGltZWRPdXQ7CkBAIC03MTEsNjEgKzczNSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFs
bChjb25zdCBBYnN0cmEKICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90
aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm9v
dCkKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9p
Z25vcmVOZXdPcGFxdWVSb290cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChPcHRp
b25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKLSAgICAgICAgLy8gUHV0IGRpcmVjdGx5
IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5h
ZGQocm9vdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gUHV0IGludG8gdGhlIGxv
Y2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgotICAg
IC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0
b28gbGFyZ2UuCi0gICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3Bh
cXVlUm9vdHMuYWRkKHJvb3QpOwotfQotCi1ib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1
ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgcmV0
dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwotfQotCi1UcmlTdGF0ZSBT
bG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCogcm9vdCkgY29uc3QK
LXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotICAgIAot
ICAgIGlmIChtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1
ZVRyaVN0YXRlOwotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1
ZVJvb3RzTXV0ZXgpOwotICAgIGlmIChtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290
KSkKLSAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICByZXR1cm4gTWl4ZWRUcmlTdGF0
ZTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYg
KG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFx
dWVSb290cygpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9m
aXRhYmxlKCkKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMu
c2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotICAgIAogdm9pZCBTbG90VmlzaXRv
cjo6ZG9uYXRlKCkKIHsKICAgICBpZiAoIW1faXNJblBhcmFsbGVsTW9kZSkgewpAQCAtNzg1LDE2
ICs3NTQsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uCiAgICAg
ZHJhaW4odGltZW91dCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMo
KQotewotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1f
b3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9v
dHMpCi0gICAgICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgfQot
ICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNl
SGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRo
cmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDYgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1
cy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIK
ICNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk1LDEwICs5NCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwogICAgIHZvaWQg
YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOworICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lk
Kik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgogICAgIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKLSAgICBU
cmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7CisgICAgYm9v
bCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogCiAgICAgYm9vbCBpc0VtcHR5KCkg
eyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNF
bXB0eSgpOyB9CiAKQEAgLTEyMSw2ICsxMTksOCBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWREcmFp
blJlc3VsdCBkcmFpbkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3Rvbmlj
VGltZTo6aW5maW5pdHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVs
UGFzc2l2ZWx5KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5
KCkpOworICAgIAorICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRGb3JUZXJtaW5hdGlvbihNb25v
dG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAgIC8v
IEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRyYWluaW5nIHRoYXQgaW52b2x2
ZXMgb25seSB3YWxraW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4gVGhpcwogICAgIC8vIGlzIGxp
a2VseSB0byBhY2NpZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0LiBJdCB3aWxs
IHVzdWFsbHkgbWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpAQCAtMTI4LDggKzEyOCw2IEBA
IHB1YmxpYzoKICAgICAvLyByYXJlIGNhc2VzIGhhcHBlbiB0ZW1wb3JhcmlseSBldmVuIGlmIHdl
J3JlIG5vdCByZWFjaGluZyB0ZXJtaW5hdGlvbikuCiAgICAgc2l6ZV90IHBlcmZvcm1JbmNyZW1l
bnRPZkRyYWluaW5nKHNpemVfdCBieXRlcyk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBtZXJnZUlmTmVjZXNzYXJ5KCk7Ci0KICAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFi
b3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYg
eW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0
IGVuZCBvZiBHQy4KICAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7CkBA
IC0xOTQsMTAgKzE5Miw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGls
aWFyeUNlbGwoSGVhcENlbGwqKTsKICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsK
LQotICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9pZCB2
aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25Q
YXJhbGxlbCgpOwpAQCAtMjE1LDcgKzIwOSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tB
cnJheSBtX2NvbGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNr
OwotICAgIE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRh
IHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIGJv
b2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVn
Z2luZyBtb2RlLgogICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiwyMyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhCiAgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tp
XSk7CiB9CiAKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0
cikKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ln
bm9yZU5ld09wYXF1ZVJvb3RzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFoZWFw
KCktPm1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBt
X3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgU2xvdFZp
c2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhlYXAoKS0+bV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworfQorCiBpbmxpbmUgdm9pZCBT
bG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewogICAg
IGlmIChtX2lzRmlyc3RWaXNpdCkgewpAQCAtMTU5LDEyICsxNzYsMTIgQEAgaW5saW5lIEhlYXAq
IFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKIAogaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0o
KQogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsK
IH0KIAogaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAogewotICAgIHJl
dHVybiAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiUGFyYWxsZWxTb3VyY2VBZGFwdGVy
LmgiCiAjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNw
YWNlSW5saW5lcy5oIgogCkBAIC04OCw1ICs4OSw0MiBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBT
dWJzcGFjZTo6ZmluZEVtcHR5CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1JlZlB0cjxTaGFy
ZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNv
dXJjZSgpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEFsbG9j
YXRvciooKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvcikKKyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogcnVuKCkgb3Zl
cnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvcjsK
KyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3IgPSBy
ZXN1bHQtPm5leHRBbGxvY2F0b3JJblN1YnNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFs
bG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgICAgIExvY2sgbV9sb2NrOworICAgIH07CisgICAg
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKG1fZmlyc3RBbGxvY2F0b3IpKTsKK30KKwor
UmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IFN1YnNwYWNlOjpwYXJh
bGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKQoreworICAgIHJldHVybiBjcmVhdGVQYXJh
bGxlbFNvdXJjZUFkYXB0ZXI8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkQmxvY2s6OkhhbmRsZSo+
KAorICAgICAgICBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpLAorICAgICAgICBbXSAoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IpIC0+IFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpI
YW5kbGUqKCk+PiB7CisgICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPnBhcmFsbGVs
Tm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksMTcgKzY5LDI0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5jJik7CiAgICAgCisg
ICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gcGFyYWxsZWxBbGxvY2F0
b3JTb3VyY2UoKTsKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaE1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2soY29uc3QgRnVu
YyYpOwogICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtl
ZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKTsK
KyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExhcmdl
QWxsb2NhdGlvbihjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZp
c2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0
IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5s
aW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNTMgQEAgdm9pZCBT
dWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6
OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGNs
YXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5j
KQorICAgICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQorICAgICAgICAgICAgLCBtX2Js
b2NrU291cmNlKHN1YnNwYWNlLnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpKQor
ICAgICAgICAgICAgLCBtX2Z1bmMoZnVuYykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAgICAg
ICAgeworICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1f
YmxvY2tTb3VyY2UtPnJ1bigpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFy
a2VkQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENl
bGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZnVuYyh2aXNpdG9yLCBjZWxsLCBraW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9zdWJzcGFj
ZS5mb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKAorICAgICAgICAgICAgICAgIFsmXSAoTGFyZ2VBbGxv
Y2F0aW9uKiBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9u
LT5pc01hcmtlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGFs
bG9jYXRpb24tPmNlbGwoKSwgbV9zdWJzcGFjZS5tX2F0dHJpYnV0ZXMuY2VsbEtpbmQpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIFN1YnNwYWNlJiBtX3N1YnNwYWNlOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJr
ZWRCbG9jazo6SGFuZGxlKigpPj4gbV9ibG9ja1NvdXJjZTsKKyAgICAgICAgRnVuYyBtX2Z1bmM7
CisgICAgICAgIExvY2sgbV9sb2NrOworICAgICAgICBib29sIG1fbmVlZFRvVmlzaXRMYXJnZUFs
bG9jYXRpb25zIHsgdHJ1ZSB9OworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUYXNrKCp0aGlzLCBmdW5jKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiB2b2lk
IFN1YnNwYWNlOjpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3JF
YWNoTWFya2VkQmxvY2soCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENv
dW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENv
dW50ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNp
dENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgVmlzaXRDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBWaXNpdENvdW50ZXIoKSB7
IH0KKyAgICAKKyAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAg
IDogbV92aXNpdG9yKCZ2aXNpdG9yKQorICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlz
aXRvci52aXNpdENvdW50KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTbG90VmlzaXRvciYg
dmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICAKKyAgICBzaXplX3Qg
dmlzaXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92aXNpdG9yLT52aXNp
dENvdW50KCkgLSBtX2luaXRpYWxWaXNpdENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9pbml0
aWFsVmlzaXRDb3VudCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFZpc2l0aW5nVGltZW91
dCB7Ci1wdWJsaWM6Ci0gICAgVmlzaXRpbmdUaW1lb3V0KCkKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIFZpc2l0aW5nVGltZW91dChTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCBkaWRWaXNpdFNv
bWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fZGlkVmlzaXRTb21l
dGhpbmcoZGlkVmlzaXRTb21ldGhpbmcpCi0gICAgICAgICwgbV92aXNpdENvdW50QmVmb3JlKHZp
c2l0b3IudmlzaXRDb3VudCgpKQotICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IHZpc2l0Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdENvdW50KCkgLSBtX3Zp
c2l0Q291bnRCZWZvcmU7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyhTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0
U29tZXRoaW5nIHx8IHZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
c2hvdWxkVGltZU91dChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBkaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91
dCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcg
eyBmYWxzZSB9OwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnRCZWZvcmUgeyAwIH07Ci0gICAgTW9u
b3RvbmljVGltZSBtX3RpbWVvdXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQo
Q29udGFpbgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZENv
bmN1cnJlbnRseShtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlm
IChjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVP
d25lci0+aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xv
dCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2
aXNpdG9yKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwMSwxNCArMTEwMSwxNCBAQCBib29s
IFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKCkKICAgICAvLyBoYXMgYW55IGxhcmdlIHByb3Bl
cnR5IG5hbWVzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTczMzQKICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01h
cmtlZENvbmN1cnJlbnRseShtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQ
b2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2ds
b2JhbE9iamVjdCB8fCBIZWFwOjppc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAg
ICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVh
cDo6aXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBTdHJ1Y3R1
cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNDaGVh
cER1cmluZ0dDKCkpCi0gICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0
aGlzKTsKKyAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKHRoaXMpOwogICAgIAogICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw4MCBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91bGQgYmUgcGFyYWxsZWwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTkzNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBkb2VzIHNvbWUgY2hhbmdlcyB0byBtYWtlIGl0IGVhc2llciB0byBkbyBwYXJhbGxlbCBj
b25zdHJhaW50IHNvbHZpbmc6CisgICAgICAgIAorICAgICAgICAtIEkgZmluYWxseSByZW1vdmVk
IGRlcGVuZGVuY3lXaXRoLiBUaGlzIHdhcyBhIHNpbGx5IGNvbnN0cnVjdCB3aG9zZSBvbmx5IHB1
cnBvc2UgaXMgdG8gY29uZnVzZQorICAgICAgICAgIHBlb3BsZSBhYm91dCB3aGF0IGl0IG1lYW5z
IHRvIGhhdmUgYSBkZXBlbmRlbmN5IGNoYWluLiBJIHRvb2sgdGhhdCBhcyBhbiBvcHBvcnR1bml0
eSB0byBncmVhbHkKKyAgICAgICAgICBzaW1wbGlmeSB0aGUgR0MncyB1c2Ugb2YgZGVwZW5kZW5j
eSBjaGFpbmluZy4KKyAgICAgICAgCisgICAgICAgIC0gQWRkZWQgbW9yZSBsb2dpYyB0byBEZXF1
ZTw+LCBzaW5jZSBJIHVzZSBpdCBmb3IgcGFydCBvZiB0aGUgbG9hZCBiYWxhbmNlci4KKyAgICAg
ICAgCisgICAgICAgIC0gTWFkZSBpdCBwb3NzaWJsZSB0byBwcm9maWxlIGxvY2sgY29udGVudGlv
bi4gU2VlCisgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4MDI1MCNjMCBmb3Igc29tZSBwcmVsaW1pbmFyeSBtZWFzdXJlbWVudHMuCisgICAgICAgIAor
ICAgICAgICAtIEludHJvZHVjZWQgaG9sZExvY2tJZiwgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBw
ZXJmb3JtIHByZWRpY2F0ZWQgbG9jayBhY3F1aXNpdGlvbi4gV2UgdXNlIHRoYXQKKyAgICAgICAg
ICB0byBwaWNrIGEgbG9jayBpbiBXZWJDb3JlLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdURjo6
ZGVwZW5kZW5jeSk6CisgICAgICAgIChXVEY6OkRlcGVuZGVuY3lXaXRoOjpEZXBlbmRlbmN5V2l0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvQml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6aXRlcmF0
b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiB3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29u
Y3VycmVudFB0ckhhc2hTZXQ6OkNvbmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCk6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpkZWxldGVPbGRUYWJsZXMpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50UHRySGFzaFNldDo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
UHRySGFzaFNldDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNo
U2V0OjphZGRTbG93KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6
ZUFuZEFkZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKiB3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaDogQWRkZWQuCisgICAg
ICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpjb250YWlucyk6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRy
SGFzaFNldDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0
OjpUYWJsZTo6bWF4TG9hZCBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNo
U2V0OjpoYXNoKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmNhc3QpOgor
ICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Y29udGFpbnNJbXBsIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZEltcGwpOgorICAgICAgICAq
IHd0Zi9EZXF1ZS5oOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdCk6
CisgICAgICAgICogd3RmL0Zhc3RNYWxsb2MuaDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6Cisg
ICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrU2xvdyk6CisgICAgICAgICogd3RmL0xvY2tlci5o
OgorICAgICAgICAoV1RGOjpob2xkTG9ja0lmKToKKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRh
Lmg6CisgICAgICAgICogd3RmL1NoYXJlZFRhc2suaDoKKyAgICAgICAgKFdURjo6U2hhcmVkVGFz
azxQYXNzZWRSZXN1bHRUeXBlKToKKyAgICAgICAgKFdURjo6U2hhcmVkVGFzazxSZXN1bHRUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvU3RhY2tTaG90Lmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpTdGFja1Nob3Q6OlN0YWNrU2hvdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjphcnJheSBjb25zdCk6CisgICAgICAg
IChXVEY6OlN0YWNrU2hvdDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6
b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I9
PSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6aGFzaCBjb25zdCk6CisgICAgICAg
IChXVEY6OlN0YWNrU2hvdDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTdGFja1Nob3Q6Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNr
U2hvdDo6ZGVsZXRlZFZhbHVlQXJyYXkpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RIYXNoOjpo
YXNoKToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHd0
Zi9TdGFja1Nob3RQcm9maWxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3RhY2tTaG90UHJv
ZmlsZXI6OlN0YWNrU2hvdFByb2ZpbGVyKToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90UHJvZmls
ZXI6OnByb2ZpbGUpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cnVuKToKKwog
MjAxNy0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIEludGVybmFscy50ZXJtaW5hdGVTZXJ2aWNlV29ya2VyLCBhbmQgdGhlIGFiaWxpdHkgdG8g
cmVzdGFydCBzZXJ2aWNlIHdvcmtlcnMgZm9yIHBvc3RNZXNzYWdlLgpJbmRleDogU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw2ICsyMyw3IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBGNTI2
QjFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEY1MjY5MUY0MjFGRjgwMDRBNDUyQyAvKiBT
dHJpbmdNYWxsb2MuY3BwICovOyB9OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xv
YmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgKi87IH07
CisJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1ODFG
Q0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjQz
RDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDNEOEVGMURCNUFEREMwMDEwOEZC
NiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICovOyB9OwogCQkwRjVCRjE3NjFGMjNENDlBMDAyOUQ5
MUQgLyogR2lnYWNhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY1QkYxNzQxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLzsgfTsK
IAkJMEY2MEYzMkYxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjBGMzJEMURGQ0JE
MUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi87IH07CkBAIC0xODMsNiArMTg0
LDggQEAKIAkJMEYzMEJBOEQxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoTWFwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBCQThFMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5n
SGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwQkE4RjFFNzg3MDhFMDAyQ0E4
NDcgLyogTG9nZ2luZ0hhc2hUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTG9nZ2luZ0hhc2hUcmFpdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYz
MENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8q
IENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbmN1cnJlbnRQdHJIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MzFERDcwMUYxMzA4QkMwMDcyRUI0QSAvKiBMb2NrQWxnb3JpdGhtSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NrQWxnb3JpdGhtSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjM0OEM3RDFGNDdBQTlEMDAzQ0ZFRjIgLyogU3RyaW5nVmVjdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0cmluZ1ZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM1
MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWFrUmFuZG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMjYsNiArMjI5LDggQEAKIAkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmlu
dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlUHJpbnRTdHJl
YW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUQxNjVEQkE3MzAwNUFE
Mzg3IC8qIFByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMz
NUUxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tTaG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOURBQTA1MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3RQcm9maWxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1Nob3RQcm9maWxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFjaW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC03OTQsNiArNzk5LDggQEAKIAkJCQkwRjhGMkI5MDE3MkUwMEYwMDA3
REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3MDE1MUE4MjVBMDA0
MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVBQjFGNENENjFFMDA5QTJCQkMgLyog
Q29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyog
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBGMzBDQjU5MUZDREYxMzMwMDRCNTMy
MyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJCTBGREI2OThEMUI3QzY0M0EwMDBD
MTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEyNjFFQjRFMDY4MDA0Mjk1N0QgLyog
Q1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5NTdEIC8qIENQVVRpbWUu
aCAqLywKQEAgLTEwMDUsNiArMTAxMiw4IEBACiAJCQkJQThBNDczMEQxNTFBODI1QjAwNDEyM0ZG
IC8qIFNwZWN0cnVtLmggKi8sCiAJCQkJQThBNDczMEUxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNr
Qm91bmRzLmNwcCAqLywKIAkJCQlBOEE0NzMwRjE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3Vu
ZHMuaCAqLywKKwkJCQkwRjlEQUEwNDFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90LmggKi8s
CisJCQkJMEY5REFBMDUxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8s
CiAJCQkJRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwICovLAogCQkJ
CUZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggKi8sCiAJCQkJMzEzRURF
Qzk3NzhFNDlDOUJFQTkxQ0ZDIC8qIFN0YWNrVHJhY2UuY3BwICovLApAQCAtMTQyNiw2ICsxNDM1
LDcgQEAKIAkJCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MUYxNzUyQjFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudENv
ZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyQzFGM0Q0ODYwMDBDNzQ5NTAgLyog
UGVyc2lzdGVudERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUExRkNERjEz
NDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxRjE3NTJEMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RW5jb2Rlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxMSArMzQ2LDE2
IEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVwZW5kZW5jeSgKICAgICByZXR1cm4g
MDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNp
emVvZihUKSA9PSA4Pjo6dHlwZSogPSBudWxscHRyPgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBB
TFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewogICAgIHVuc2ln
bmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDY0X3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4odmFsdWUpOworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDMyX3QgY29weTsKKyAgICAgICAg
VCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5ID0gMDsKKyAgICB1LnZhbHVlID0gdmFsdWU7
CiAjaWYgQ1BVKEFSTTY0KQogICAgIC8vIENyZWF0ZSBhIG1hZ2ljYWwgemVybyB2YWx1ZSB0aHJv
dWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRpb24KICAgICAvLyBpc24ndCB2aXNp
YmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVzYWJsZSBhcyBhbiBvZmZz
ZXQgaW4KQEAgLTM2Myw4MCArMzY4LDIwIEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5KFQgdmEKICAgICAvLyBvciBhbiBhY3F1aXJlIGxvYWQuCiAgICAgYXNtKCJlb3IgJXdb
ZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgogICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIi
KGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICA6IFtpbl0g
InIiKHUuY29weSkpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBhc20oImVvciAlW2RlcGVuZGVuY3ld
LCAlW2luXSwgJVtpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkK
LSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7
CiAjZWxzZQogICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZvciB0aGlzIGFyY2hpdGVj
dHVyZS4KICAgICBsb2FkTG9hZEZlbmNlKCk7CiAgICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvcHkpOworICAgIFVOVVNFRF9QQVJBTSh1LmNvcHkpOwogI2VuZGlmCiAgICAg
cmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgYWxtb3N0IGlk
ZW50aWNhbCB0byB0aGUgb3RoZXIgZGVwZW5kZW5jeSgpIG92ZXJsb2FkLgotLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwNQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA0Pjo6dHlwZSogPSBudWxs
cHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAg
ICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQzMl90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgYXNtKCJlb3IgJXdbZGVwZW5k
ZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVu
ZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2VsaWYgQ1BVKEFSTSkKLSAgICBh
c20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCi0gICAgICAgIDogW2RlcGVuZGVu
Y3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxzZQot
ICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFS
QU0oY29weSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVwZW5kZW5jeTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSAyPjo6dHlw
ZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUp
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNp
emVvZihUKSA9PSAxPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5
IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2Fz
dDx1aW50MzJfdD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBE
ZXBlbmRlbmN5V2l0aCB7Ci1wdWJsaWM6Ci0gICAgRGVwZW5kZW5jeVdpdGgoKQotICAgICAgICA6
IGRlcGVuZGVuY3kobnVsbERlcGVuZGVuY3koKSkKLSAgICAgICAgLCB2YWx1ZSgpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNv
bnN0IFQmIHZhbHVlKQotICAgICAgICA6IGRlcGVuZGVuY3koZGVwZW5kZW5jeSkKLSAgICAgICAg
LCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3kgZGVwZW5k
ZW5jeTsKLSAgICBUIHZhbHVlOwotfTsKLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxp
bmUgRGVwZW5kZW5jeVdpdGg8VD4gZGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5
LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGVwZW5kZW5jeVdpdGg8VD4oZGVwZW5k
ZW5jeSwgdmFsdWUpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQqIGNvbnN1
bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewpAQCAtNDY5LDEwICs0MTQs
OCBAQCBBTFdBWVNfSU5MSU5FIFQmIGVuc3VyZVBvaW50ZXIoQXRvbWljPFQqCiAKIHVzaW5nIFdU
Rjo6QXRvbWljOwogdXNpbmcgV1RGOjpEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpEZXBlbmRlbmN5
V2l0aDsKIHVzaW5nIFdURjo6Y29uc3VtZTsKIHVzaW5nIFdURjo6ZGVwZW5kZW5jeTsKLXVzaW5n
IFdURjo6ZGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmVuc3VyZVBvaW50ZXI7CiB1c2luZyBX
VEY6Om51bGxEZXBlbmRlbmN5OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2
ICszMDgsMTMgQEAgcHVibGljOiAKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAg
fQogCisgICAgICAgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7CisgICAgICAg
ICAgICBpdGVyYXRvciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgICAgICsrKCp0aGlzKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKwogICAgICAgICBib29sIGlzQXRF
bmQoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA+PSBtX2Jp
dFZlY3Rvci0+c2l6ZSgpOwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
OCw2ICsxOCw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIENsb2NrVHlwZS5oCiAgICAgQ29tcGls
YXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKKyAgICBDb25jdXJyZW50UHRySGFzaFNldC5o
CiAgICAgQ29uZGl0aW9uLmgKICAgICBDcm9zc1RocmVhZENvcGllci5oCiAgICAgQ3Jvc3NUaHJl
YWRUYXNrLmgKQEAgLTEzMiw2ICsxMzMsOCBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTZWdtZW50
ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCisgICAgU3Rh
Y2tTaG90LmgKKyAgICBTdGFja1Nob3RQcm9maWxlci5oCiAgICAgU3RhY2tTdGF0cy5oCiAgICAg
U3RhY2tUcmFjZS5oCiAgICAgU3RkTGliRXh0cmFzLmgKQEAgLTIxOCw2ICsyMjEsNyBAQCBzZXQo
V1RGX1NPVVJDRVMKICAgICBDUFVUaW1lLmNwcAogICAgIENsb2NrVHlwZS5jcHAKICAgICBDb21w
aWxhdGlvblRocmVhZC5jcHAKKyAgICBDb25jdXJyZW50UHRySGFzaFNldC5jcHAKICAgICBDcm9z
c1RocmVhZENvcGllci5jcHAKICAgICBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcAogICAgIENy
eXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcApJbmRleDogU291cmNlL1dURi93dGYvQ29u
Y3VycmVudFB0ckhhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1
cnJlbnRQdHJIYXNoU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25j
dXJyZW50UHRySGFzaFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRQdHJIYXNoU2V0LmgiCisKKyNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworQ29uY3VycmVudFB0ckhhc2hTZXQ6
OkNvbmN1cnJlbnRQdHJIYXNoU2V0KCkKK3sKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0NvbmN1
cnJlbnRQdHJIYXNoU2V0Ojp+Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworfQorCit2b2lkIENv
bmN1cnJlbnRQdHJIYXNoU2V0OjpkZWxldGVPbGRUYWJsZXMoKQoreworICAgIC8vIFRoaXMgaXMg
anVzdCBpbiBjYXNlLiBJdCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRv
IGNhbGwgYWRkKCkuIEJ1dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hl
cyBpZiB3ZSBkaWQgbWFrZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOyAKKyAgICAKKyAgICBtX2FsbFRhYmxlcy5yZW1vdmVBbGxNYXRjaGluZygKKyAg
ICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+JiB0YWJsZSkgLT4gYm9vbCB7CisgICAg
ICAgICAgICByZXR1cm4gdGFibGUuZ2V0KCkgIT0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAg
ICAgICB9KTsKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6Y2xlYXIoKQoreworICAg
IC8vIFRoaXMgaXMganVzdCBpbiBjYXNlLiBJdCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhl
ciB0aHJlYWRzIHRvIGNhbGwgYWRkKCkuIEJ1dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29t
ZSBiYWQgY3Jhc2hlcyBpZiB3ZSBkaWQgbWFrZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOyAKKyAgICAKKyAgICBtX2FsbFRhYmxlcy5jbGVhcigpOwor
ICAgIGluaXRpYWxpemUoKTsKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6aW5pdGlh
bGl6ZSgpCit7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGluaXRpYWxTaXplID0gMzI7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFRhYmxlPiB0YWJsZSA9IFRhYmxlOjpjcmVhdGUoaW5pdGlhbFNpemUp
OworICAgIG1fdGFibGUuc3RvcmVSZWxheGVkKHRhYmxlLmdldCgpKTsKKyAgICBtX2FsbFRhYmxl
cy5hcHBlbmQoV1RGTW92ZSh0YWJsZSkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNoU2V0
OjphZGRTbG93KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgaW5kZXgsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAodGFibGUtPmxvYWQuZXhj
aGFuZ2VBZGQoMSkgPj0gdGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuIHJlc2l6ZUFu
ZEFkZChwdHIpOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdm9pZCogb2xkRW50cnkg
PSB0YWJsZS0+YXJyYXlbaW5kZXhdLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhudWxscHRyLCBwdHIp
OworICAgICAgICBpZiAoIW9sZEVudHJ5KSB7CisgICAgICAgICAgICBpZiAobV90YWJsZS5sb2Fk
KCkgIT0gdGFibGUpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhZGRlZCBhbiBlbnRyeSB0byBh
biBvbGQgdGFibGUhIFdlIG5lZWQgdG8gcmVleGVjdXRlIHRoZSBhZGQgb24gdGhlIG5ldyB0YWJs
ZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkKHB0cik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2xkRW50cnkgPT0g
cHRyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgbWFzazsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7
CisgICAgfQorfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVJZk5lY2Vzc2Fy
eSgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIFRhYmxlKiB0
YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICBpZiAodGFibGUtPmxvYWQubG9hZFJl
bGF4ZWQoKSA8IHRhYmxlLT5tYXhMb2FkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8VGFibGU+IG5ld1RhYmxlID0gVGFibGU6OmNyZWF0ZSh0YWJsZS0+c2l6
ZSAqIDIpOworICAgIHVuc2lnbmVkIG1hc2sgPSBuZXdUYWJsZS0+bWFzazsKKyAgICB1bnNpZ25l
ZCBsb2FkID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUtPnNpemU7ICsr
aSkgeworICAgICAgICB2b2lkKiBwdHIgPSB0YWJsZS0+YXJyYXlbaV0ubG9hZFJlbGF4ZWQoKTsK
KyAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAg
IEF0b21pYzx2b2lkKj4mIGVudHJ5UmVmID0gbmV3VGFibGUtPmFycmF5W2luZGV4XTsKKyAgICAg
ICAgICAgIHZvaWQqIGVudHJ5ID0gZW50cnlSZWYubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAg
IGlmICghZW50cnkpIHsKKyAgICAgICAgICAgICAgICBlbnRyeVJlZi5zdG9yZVJlbGF4ZWQocHRy
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGVudHJ5ICE9IHB0cik7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5k
ZXgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsb2FkKys7CisgICAgfQorICAgIAor
ICAgIG5ld1RhYmxlLT5sb2FkLnN0b3JlUmVsYXhlZChsb2FkKTsKKyAgICAKKyAgICBtX3RhYmxl
LnN0b3JlKG5ld1RhYmxlLmdldCgpKTsKKyAgICBtX2FsbFRhYmxlcy5hcHBlbmQoV1RGTW92ZShu
ZXdUYWJsZSkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVBbmRBZGQo
dm9pZCogcHRyKQoreworICAgIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGFkZChw
dHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlPiBD
b25jdXJyZW50UHRySGFzaFNldDo6VGFibGU6OmNyZWF0ZSh1bnNpZ25lZCBzaXplKQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IHJlc3VsdChuZXcg
KGZhc3RNYWxsb2MoT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBhcnJheSkgKyBzaXplb2YoQXRvbWlj
PHZvaWQqPikgKiBzaXplKSkgVGFibGUoKSk7CisgICAgcmVzdWx0LT5zaXplID0gc2l6ZTsKKyAg
ICByZXN1bHQtPm1hc2sgPSBzaXplIC0gMTsKKyAgICByZXN1bHQtPmxvYWQuc3RvcmVSZWxheGVk
KDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJl
c3VsdC0+YXJyYXlbaV0uc3RvcmVSZWxheGVkKG51bGxwdHIpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJy
ZW50UHRySGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQ
dHJIYXNoU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0
ckhhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworLy8gVGhpcyBpcyBhIGNvbmN1cnJlbnQgaGFzaC1iYXNlZCBzZXQgZm9yIHBvaW50
ZXJzLiBJdCdzIG9wdGltaXplZCBmb3I6CisvLworLy8gLSBIaWdoIHJhdGUgb2YgY29udGFpbnMo
KSBjYWxscy4KKy8vIC0gSGlnaCByYXRlIG9mIGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3QgYWRkIGFu
eXRoaW5nIG5ldy4gYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgKG5vcCBhZGRz
KQorLy8gICBkb24ndCBtdXRhdGUgdGhlIHRhYmxlIGF0IGFsbC4KKy8vIC0gTm90IHRvbyBtYW55
IHRocmVhZHMuIEkgZG91YnQgdGhpcyBzY2FsZXMgYmV5b25kIH40LiBUaG91Z2gsIGl0IG1heSBh
Y3R1YWxseSBzY2FsZSBiZXR0ZXIgdGhhbiB0aGF0CisvLyAgIGlmIHRoZSByYXRlIG9mIG5vcCBh
ZGRzIGlzIGFic3VyZGx5IGhpZ2guCisvLworLy8gSWYgd2Ugd2FudGVkIHRoaXMgdG8gc2NhbGUg
YmV0dGVyLCB0aGUgbWFpbiBjaGFuZ2Ugd2UnZCBoYXZlIHRvIG1ha2UgaXMgaG93IHRoaXMgdGFi
bGUgZGV0ZXJtaW5lcyB3aGVuCisvLyB0byByZXNpemUuIFJpZ2h0IG5vdyBpdCdzIGEgc2hhcmVk
IGNvdW50ZXIuIFdlIGxvY2s7eGFkZCB0aGlzIGNvdW50ZXIuIE9uZSBlYXN5IHdheSB0byBtYWtl
IHRoYXQKKy8vIHNjYWxhYmxlIGlzIHRvIHJlcXVpcmUgZWFjaCB0aHJlYWQgdGhhdCB3b3JrcyB3
aXRoIHRoZSBDb25jdXJyZW50UHRySGFzaFNldCB0byByZWdpc3RlciBpdHNlbGYgZmlyc3QuCisv
LyBUaGVuIGVhY2ggdGhyZWFkIHdvdWxkIGhhdmUgc29tZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhh
cyBhIGNvdW50ZXIuIFdlIGNvdWxkIGluc3RpdHV0ZSB0aGUgcG9saWN5IHRoYXQKKy8vIGVhY2gg
dGhyZWFkIHNpbXBseSBpbmNyZW1lbnRzIGl0cyBvd24gbG9hZCBjb3VudGVyLCBpbiBpdHMgb3du
IGRhdGEgc3RydWN0dXJlLiBUaGVuLCBpZiBhbnkgc2VhcmNoIHRvCisvLyByZXNvbHZlIGEgY29s
bGlzaW9uIGRvZXMgbW9yZSB0aGFuIE4gaXRlcmF0aW9ucywgd2UgY2FuIGNvbXB1dGUgYSBjb21i
aW5lZCBsb2FkIGJ5IHN1bW1pbmcgdGhlIGxvYWQKKy8vIGNvdW50ZXJzIG9mIGFsbCBvZiB0aGUg
dGhyZWFkIGRhdGEgc3RydWN0dXJlcy4KKy8vCisvLyBDb25jdXJyZW50UHRySGFzaFNldCdzIG1h
aW4gdXNlciwgdGhlIEdDLCBzZWVzIGEgOTglIG5vcCBhZGQgcmF0ZSBpbiBTcGVlZG9tZXRlci4g
VGhhdCdzIHdoeSB0aGlzCisvLyBmb2N1c2VzIHNvIG11Y2ggb24gY2FzZXMgd2hlcmUgdGhlIHRh
YmxlIGRvZXMgbm90IGNoYW5nZS4KK2NsYXNzIENvbmN1cnJlbnRQdHJIYXNoU2V0IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50UHRySGFzaFNldCk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ29uY3Vy
cmVudFB0ckhhc2hTZXQoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkNvbmN1cnJlbnRQdHJI
YXNoU2V0KCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvbnRh
aW5zKFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udGFpbnNJbXBsKGNhc3QodmFs
dWUpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGFk
ZChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZEltcGwoY2FzdCh2YWx1ZSkpOwor
ICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV90YWJsZS5sb2FkUmVsYXhlZCgpLT5sb2FkLmxvYWRSZWxheGVkKCk7CisgICAgfQorICAg
IAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNh
biBjYWxsIGFkZCgpLiBUaGlzIGZyZWVzIHVwIG1lbW9yeSB3aXRob3V0IGNoYW5naW5nCisgICAg
Ly8gdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkZWxldGVPbGRUYWJsZXMoKTsKKyAgICAKKyAgICAvLyBPbmx5IGNhbGwgd2hlbiB5b3Uga25v
dyB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQoKS4gVGhpcyBmcmVlcyB1cCBhbGwg
bWVtb3J5IGV4Y2VwdCBmb3IKKyAgICAvLyB0aGUgc21hbGxlc3QgcG9zc2libGUgaGFzaHRhYmxl
LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyKCk7CisgICAgCitwcml2YXRlOgor
ICAgIHN0cnVjdCBUYWJsZSB7CisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRF
RDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IGNyZWF0
ZSh1bnNpZ25lZCBzaXplKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG1heExvYWQoKSBj
b25zdCB7IHJldHVybiBzaXplIC8gMjsgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc2l6
ZTsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAgIHVuc2lnbmVkIG1hc2s7IC8vIFRoaXMg
aXMgaW1tdXRhYmxlLgorICAgICAgICBBdG9taWM8dW5zaWduZWQ+IGxvYWQ7CisgICAgICAgIEF0
b21pYzx2b2lkKj4gYXJyYXlbMV07CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaCh2b2lkKiBwdHIpCisgICAgeworICAgICAgICByZXR1cm4gUHRySGFzaDx2b2lkKj46Omhh
c2gocHRyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkKiBjYXN0KFQgdmFsdWUpCisgICAgeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA8PSBzaXplb2Yodm9pZCopLCAidHlwZSB0b28g
YmlnIik7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHZvaWQqIHB0cjsKKyAgICAgICAg
ICAgIFQgdmFsdWU7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5wdHIgPSBudWxscHRyOworICAg
ICAgICB1LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiB1LnB0cjsKKyAgICB9CisgICAg
CisgICAgYm9vbCBjb250YWluc0ltcGwodm9pZCogcHRyKSBjb25zdAorICAgIHsKKyAgICAgICAg
VGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB1bnNpZ25lZCBt
YXNrID0gdGFibGUtPm1hc2s7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0
cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAg
IGZvciAoOzspIHsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4
XS5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoZW50cnkgPT0gcHRyKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1h
c2s7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBuZXcgZW50cnkg
d2FzIGFkZGVkLgorICAgIGJvb2wgYWRkSW1wbCh2b2lkKiBwdHIpCisgICAgeworICAgICAgICBU
YWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1h
c2sgPSB0YWJsZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRy
KSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhd
LmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAg
IHJldHVybiBhZGRTbG93KHRhYmxlLCBtYXNrLCBzdGFydEluZGV4LCBpbmRleCwgcHRyKTsKKyAg
ICAgICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBhZGRTbG93KFRhYmxlKiB0YWJsZSwgdW5z
aWduZWQgbWFzaywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgaW5kZXgsIHZvaWQqIHB0
cik7CisKKyAgICB2b2lkIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCByZXNpemVBbmRB
ZGQodm9pZCogcHRyKTsKKyAgICAKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRhYmxlPiwg
ND4gbV9hbGxUYWJsZXM7CisgICAgQXRvbWljPFRhYmxlKj4gbV90YWJsZTsgLy8gVGhpcyBpcyBu
ZXZlciBudWxsLgorICAgIExvY2sgbV9sb2NrOyAvLyBXZSBqdXN0IHVzZSB0aGlzIHRvIGNvbnRy
b2wgcmVzaXplIHJhY2VzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
Q29uY3VycmVudFB0ckhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNv
dXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTEgQEAg
cHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9p
ZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25zdCBGdW5jJik7CiAgICAgCisgICAgLy8gUmVtb3Zl
IGFuZCByZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1
cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBj
YWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgorICAgIFQgdGFrZUZpcnN0KGNvbnN0IEZ1bmMmKTsKKwogICAgIC8vIFJlbW92ZSBhbmQgcmV0
dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUu
IFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKICAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBh
bHdheXMgcmV0dXJucyBmYWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTcx
LDYgKzU3NiwyNSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwCiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJz
dChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNp
Z25lZCBzaXplID0gdGhpcy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8IHNpemUpIHsKKyAg
ICAgICAgVCBjYW5kaWRhdGUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlk
YXRlKSkgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgcHJl
cGVuZCh0YWtlTGFzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAg
IH0KKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7
CisgICAgfQorICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBpbmxpbmUgVCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAg
dW5zaWduZWQgY291bnQgPSAwOwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQs
OCArMjM0LDcgQEAgdXNpbmcgV1RGOjpmYXN0QWxpZ25lZEZyZWU7CiAjZGVmaW5lIFdURl9QUklW
QVRFX0lOTElORSBpbmxpbmUKICNlbmRpZgogCi0jZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEIFwKLXB1YmxpYzogXAorI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwK
ICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IFwK
ICAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0g
XAogICAgIFwKQEAgLTI2Myw3ICsyNjIsMTUgQEAgcHVibGljOiBcCiAgICAgICAgIEFTU0VSVChs
b2NhdGlvbik7IFwKICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOyBcCiAgICAgfSBcCisKKyNkZWZp
bmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAorcHVibGljOiBcCisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURURfSU1QTCBcCiBwcml2YXRlOiBcCiB0eXBlZGVmIGludCBfX3RoaXNJc0hlcmVU
b0ZvcmNlQVNlbWljb2xvbkFmdGVyVGhpc01hY3JvCiAKKyNkZWZpbmUgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEIFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKK3R5
cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KKwog
I2VuZGlmIC8qIFdURl9GYXN0TWFsbG9jX2ggKi8KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEg
KzI3LDE2IEBACiAjaW5jbHVkZSAiTG9jay5oIgogCiAjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0
aG1JbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg+CiAKIG5hbWVz
cGFjZSBXVEYgewogCitzdGF0aWMgY29uc3RleHByIGJvb2wgcHJvZmlsZUxvY2tDb250ZW50aW9u
ID0gZmFsc2U7CisKIHZvaWQgTG9ja0Jhc2U6OmxvY2tTbG93KCkKIHsKKyAgICBpZiAocHJvZmls
ZUxvY2tDb250ZW50aW9uKQorICAgICAgICBTVEFDS19TSE9UX1BST0ZJTEUoNCwgMiwgNSk7CiAg
ICAgRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0ZSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0xvY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tl
ci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMjIsNiArMTIyLDEyIEBAIExvY2tlcjxMb2NrVHlwZT4gaG9s
ZExvY2soTG9ja1R5cGUmIGxvY2sKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CitM
b2NrZXI8TG9ja1R5cGU+IGhvbGRMb2NrSWYoTG9ja1R5cGUmIGxvY2ssIGJvb2wgcHJlZGljYXRl
KQoreworICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+KHByZWRpY2F0ZSA/ICZsb2NrIDogbnVs
bHB0cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogTG9ja2VyPExvY2tUeXBl
PiB0cnlIb2xkTG9jayhMb2NrVHlwZSYgbG9jaykKIHsKICAgICByZXR1cm4gTG9ja2VyPExvY2tU
eXBlPjo6dHJ5TG9jayhsb2NrKTsKQEAgLTEzNCw1ICsxNDAsNiBAQCB1c2luZyBXVEY6OkxvY2tl
cjsKIHVzaW5nIFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnOwogdXNpbmcgV1RGOjpOb0xvY2tp
bmdOZWNlc3Nhcnk7CiB1c2luZyBXVEY6OmhvbGRMb2NrOwordXNpbmcgV1RGOjpob2xkTG9ja0lm
OwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDYg
KzE3NCwxMyBAQCBwcml2YXRlOgogCiAvLyBUaGlzIGlzIGZvciB3aGVuIHlvdSBhbHJlYWR5IHJl
ZmVyIHRvIGEgZnVuY3RvciBieSByZWZlcmVuY2UsIGFuZCB5b3Uga25vdyBpdHMgbGlmZXRpbWUg
aXMKIC8vIGdvb2QuIFRoaXMganVzdCBjcmVhdGVzIGEgU2NvcGVkTGFtYmRhIHRoYXQgcG9pbnRz
IHRvIHlvdXIgZnVuY3Rvci4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBpcyBhbHdheXMgd3Jvbmc6
CisvLworLy8gYXV0byByZWYgPSBzY29wZWRMYW1iZGFSZWYoWy4uLl0gKC4uLikgey4uLn0pOwor
Ly8KKy8vIEJlY2F1c2UgdGhlIHNjb3BlZExhbWJkYVJlZiB3aWxsIHJlZmVyIHRvIHRoZSBsYW1i
ZGEgYnkgcmVmZXJlbmNlLCBhbmQgdGhlIGxhbWJkYSB3aWxsIGRpZSBhZnRlciB0aGUKKy8vIHNl
bWljb2xvbi4gVXNlIHNjb3BlZExhbWJkYSgpIGluIHRoYXQgY2FzZS4KIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KIFNjb3BlZExhbWJkYVJlZkZ1bmN0
b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGFSZWYoY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNv
dXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTEg
QEAgbmFtZXNwYWNlIFdURiB7CiAvLyBzdGF0ZSBpbiBtZW1iZXIgZmllbGRzLiBUaGlzIGNhbiBi
ZSBtb3JlIG5hdHVyYWwgaWYgeW91IHdhbnQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB3aGF0
CiAvLyBzdGF0ZSBpcyBzaGFyZWQgYmV0d2VlbiBpbnN0YW5jZXMgb2YgdGhlIHRhc2suCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotY2xhc3MgU2hh
cmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8U2hhcmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+IHsK
K3RlbXBsYXRlPHR5cGVuYW1lIFBhc3NlZFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
VHlwZXM+CitjbGFzcyBTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMu
Li4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFBhc3NlZFJlc3Vs
dFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewogcHVibGljOgorICAgIHR5cGVkZWYgUGFzc2Vk
UmVzdWx0VHlwZSBSZXN1bHRUeXBlOworICAgIAogICAgIFNoYXJlZFRhc2soKSB7IH0KICAgICB2
aXJ0dWFsIH5TaGFyZWRUYXNrKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hv
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK2NsYXNzIFN0YWNrU2hvdCB7CitwdWJsaWM6CisgICAgU3RhY2tTaG90KCkgeyB9
CisgICAgCisgICAgQUxXQVlTX0lOTElORSBTdGFja1Nob3Qoc2l6ZV90IHNpemUpCisgICAgICAg
IDogbV9zaXplKHNpemUpCisgICAgeworICAgICAgICBpZiAoc2l6ZSkgeworICAgICAgICAgICAg
bV9hcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4oc2l6ZSk7CisgICAgICAgICAgICBp
bnQgaW50U2l6ZSA9IHNpemU7CisgICAgICAgICAgICBXVEZHZXRCYWNrdHJhY2UobV9hcnJheS5n
ZXQoKSwgJmludFNpemUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihpbnRTaXplKSA8PSBzaXplKTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IGludFNpemU7
CisgICAgICAgICAgICBpZiAoIW1fc2l6ZSkKKyAgICAgICAgICAgICAgICBtX2FycmF5ID0gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTdGFja1Nob3QoV1RGOjpIYXNoVGFi
bGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYXJyYXkoZGVsZXRlZFZhbHVlQXJyYXko
KSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0YWNrU2hv
dCYgb3BlcmF0b3I9KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpCisgICAgeworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbmV3QXJyYXkgPSBzdGQ6Om1ha2VfdW5pcXVlPHZvaWQqW10+
KG90aGVyLm1fc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvdGhlci5tX3NpemU7IGkt
LTspCisgICAgICAgICAgICBuZXdBcnJheVtpXSA9IG90aGVyLm1fYXJyYXlbaV07CisgICAgICAg
IG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9hcnJheSA9IFdURk1vdmUobmV3QXJy
YXkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdChj
b25zdCBTdGFja1Nob3QmIG90aGVyKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAg
ICB9CisgICAgCisgICAgdm9pZCoqIGFycmF5KCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS5nZXQo
KTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9hcnJheTsgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdGFja1Nob3QmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKG1fc2l6ZSAhPSBvdGhlci5tX3NpemUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9zaXplOyBp
LS07KSB7CisgICAgICAgICAgICBpZiAobV9hcnJheVtpXSAhPSBvdGhlci5tX2FycmF5W2ldKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9zaXplOworICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIHJlc3VsdCBePSBQ
dHJIYXNoPHZvaWQqPjo6aGFzaChtX2FycmF5W2ldKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NpemUgJiYgbV9hcnJheS5nZXQoKSA9
PSBkZWxldGVkVmFsdWVBcnJheSgpOworICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIFNwZWN0cnVt
PD4gaGFwcHkuCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgU3RhY2tTaG90JikgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQqKiBkZWxldGVk
VmFsdWVBcnJheSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKio+KHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oMSkpOyB9CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPHZvaWQqW10+IG1fYXJy
YXk7CisgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKK307CisKK3N0cnVjdCBTdGFja1Nob3RIYXNo
IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTdGFja1Nob3QmIHNob3QpIHsgcmV0
dXJuIHNob3QuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RhY2tTaG90
JiBhLCBjb25zdCBTdGFja1Nob3QmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBj
b25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxTdGFja1Nob3Q+IHsKKyAgICB0eXBlZGVmIFN0YWNrU2hvdEhhc2ggSGFz
aDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxTdGFja1Nob3Q+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRz
PFN0YWNrU2hvdD4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
dGFja1Nob3RQcm9maWxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0YWNr
U2hvdFByb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUg
PHd0Zi9Qcm9jZXNzSUQuaD4KKyNpbmNsdWRlIDx3dGYvU3BlY3RydW0uaD4KKyNpbmNsdWRlIDx3
dGYvU3RhY2tUcmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1Nob3QuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBTdGFja1Nob3RQcm9maWxlciB7CitwdWJsaWM6CisgICAgU3RhY2tTaG90
UHJvZmlsZXIodW5zaWduZWQgbnVtRnJhbWVzLCB1bnNpZ25lZCBmcmFtZXNUb1NraXAsIHVuc2ln
bmVkIHN0YWNrc1RvUmVwb3J0KQorICAgICAgICA6IG1fbnVtRnJhbWVzKG51bUZyYW1lcykKKyAg
ICAgICAgLCBtX2ZyYW1lc1RvU2tpcChmcmFtZXNUb1NraXApCisgICAgICAgICwgbV9zdGFja3NU
b1JlcG9ydChzdGFja3NUb1JlcG9ydCkKKyAgICB7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJT
dGFja1Nob3RQcm9maWxlciIsIFt0aGlzXSAoKSB7IHJ1bigpOyB9KTsKKyAgICB9CisKKyAgICAv
LyBORVZFUl9JTkxJTkUgc28gdGhhdCBmcmFtZXNUb1NraXAgaXMgcHJlZGljdGFibGUuCisgICAg
TkVWRVJfSU5MSU5FIHZvaWQgcHJvZmlsZSgpCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIG1fcHJvZmlsZS5hZGQoU3RhY2tTaG90KG1fbnVt
RnJhbWVzICsgbV9mcmFtZXNUb1NraXApKTsKKyAgICAgICAgbV90b3RhbENvdW50Kys7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBOT19SRVRVUk4gdm9pZCBydW4oKQorICAgIHsKKyAgICAg
ICAgZm9yICg7OykgeworICAgICAgICAgICAgc2xlZXAoMV9zKTsKKyAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGF1dG8gbGlzdCA9IG1fcHJv
ZmlsZS5idWlsZExpc3QoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuSG90dGVzdCBzdGFja3Mg
aW4gIiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiOlxuIik7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gbGlzdC5zaXplKCksIGNvdW50ID0gMDsgaS0tICYmIGNvdW50IDwgbV9zdGFja3NU
b1JlcG9ydDsgY291bnQrKykgeworICAgICAgICAgICAgICAgIGF1dG8mIGVudHJ5ID0gbGlzdFtp
XTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcblRvcCAjIiwgY291bnQgKyAxLCAiIHN0YWNr
OiAiLCBlbnRyeS5jb3VudCAqIDEwMCAvIG1fdG90YWxDb3VudCwgIiVcbiIpOworICAgICAgICAg
ICAgICAgIFN0YWNrVHJhY2UgdHJhY2UoZW50cnkua2V5LmFycmF5KCkgKyBtX2ZyYW1lc1RvU2tp
cCwgZW50cnkua2V5LnNpemUoKSAtIG1fZnJhbWVzVG9Ta2lwKTsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKHRyYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgV29yZExvY2sgbV9sb2NrOworICAgIFNwZWN0
cnVtPFN0YWNrU2hvdCwgZG91YmxlPiBtX3Byb2ZpbGU7CisgICAgZG91YmxlIG1fdG90YWxDb3Vu
dCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUZyYW1lczsKKyAgICB1bnNpZ25lZCBtX2ZyYW1l
c1RvU2tpcDsKKyAgICB1bnNpZ25lZCBtX3N0YWNrc1RvUmVwb3J0OworfTsKKworI2RlZmluZSBT
VEFDS19TSE9UX1BST0ZJTEUobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVwb3J0
KSBkbyB7IFwKKyAgICBzdGF0aWMgU3RhY2tTaG90UHJvZmlsZXIqIHN0YWNrU2hvdFByb2ZpbGVy
OyBcCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWc7
IFwKKyAgICBzdGQ6OmNhbGxfb25jZShzdGFja1Nob3RQcm9maWxlck9uY2VGbGFnLCBbXSB7IHN0
YWNrU2hvdFByb2ZpbGVyID0gbmV3IFN0YWNrU2hvdFByb2ZpbGVyKG51bUZyYW1lcywgZnJhbWVz
VG9Ta2lwLCBzdGFja3NUb1JlcG9ydCk7IH0pOyBcCisgICAgc3RhY2tTaG90UHJvZmlsZXItPnBy
b2ZpbGUoKTsgXAorfSB3aGlsZSAoZmFsc2UpCisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91
bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhpcyBj
aGFuZ2UgaXMgYmVzdCB0ZXN0ZWQgdXNpbmcgRE9NLUdDLWludGVuc2l2ZQorICAgICAgICBiZW5j
aG1hcmtzIGxpa2UgU3BlZWRvbWV0ZXIgYW5kIERyb21hZW8uCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhcmFsbGVsaXplcyB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0cmFpbnQsIGFuZCBtYWtlcyBz
b21lIHNtYWxsIGNoYW5nZXMgdG8gbWFrZSB0aGlzIG1vcmUKKyAgICAgICAgc2NhbGFibGUuCisK
KyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1l
b3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRw
dXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdHJhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0ltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaDogQWRk
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKToKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpldmVudFRhcmdldERhdGFD
b25jdXJyZW50bHkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyRXZlbnRUYXJnZXREYXRhKToKKwog
MjAxNy0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIEludGVybmFscy50ZXJtaW5hdGVTZXJ2aWNlV29ya2VyLCBhbmQgdGhlIGFiaWxpdHkgdG8g
cmVzdGFydCBzZXJ2aWNlIHdvcmtlcnMgZm9yIHBvc3RNZXNzYWdlLgpJbmRleDogU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjEsNiArMzIxLDcgQEAgYmluZGluZ3MvanMvQ2FjaGVkTW9kdWxlU2Ny
aXB0TG9hZGVyLmNwcAogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0RmV0Y2hlci5jcHAKIGJpbmRp
bmdzL2pzL0NhbGxUcmFjZXIuY3BwCiBiaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKK2JpbmRpbmdz
L2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAKIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3Js
ZC5jcHAKIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKIGJpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKyNwcmFn
bWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
Lmg+CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRp
bmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDIgKzAsMCBAQAotI3ByYWdtYSBvbmNlCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVmlzaXRpbmdUaW1lb3V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTM1MSw2ICszNTEsNyBAQAogCQkwRjg3MTY3MDFDODY5RDgzMDA0RkYwREUgLyogTGVuZ3Ro
UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODcxNjZFMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOEI0NTcyMURDM0ZCQTMwMDQ0M0Mz
RiAvKiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhCNDU3MTFEQzNGQkEzMDA0NDNDM0YgLyogSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovOyB9OwogCQkwRjhCNDU3NjFEQzQxREJBMDA0
NDNDM0YgLyogSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhCNDU3NDFEQzQxREJBMDA0NDNDM0Yg
LyogSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CisJCTBGOURBQTBGMUZE
MUM2NkEwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAv
KiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLzsgfTsKIAkJMEZBMjREN0ExNjJERjkxOTAwQTNG
NEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyNEQ3ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NM
YXllclVwZGF0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkI2MjUyRjE4REUxQjE1MDBBMDdDMDUgLyogR2VvbWV0cnlVdGlsaXRpZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjYyNTJEMThE
RTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjg4OTBBMTY3RDJGQTEwMDEwQ0RBNSAv
KiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZCODg5MDgxNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9sbGluZ1Ry
ZWVTdGlja3lOb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTU0NDYsNiArNTQ0Nyw4IEBACiAJCTBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAv
KiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTRBMzk1MUVGMUIxMDUwMEZCQUZGQiAvKiBKU0RPTVF1YWRD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01RdWFk
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5N0E2NTcxNTVEQTgx
RTAwRkFERDRDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMEMxRkQxQzY2MzAwNzlDNUIyIC8qIERP
TUdDT3V0cHV0Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBET01HQ091dHB1dENvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjlEQUEwRTFGRDFDNjY0MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUdDT3V0cHV0Q29uc3RyYWludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEwODUyQjFFNkZCNTVBMDA5NzVGREQg
LyogQ1NTUHJvcGVydGllcy5qc29uICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5qc29uOyBwYXRoID0gQ1NTUHJvcGVydGllcy5qc29uOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyNEQ3NzE2MkRGOTE5MDBBM0Y0QzAgLyogR3Jh
cGhpY3NMYXllclVwZGF0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR3JhcGhpY3NMYXllclVwZGF0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkEyNEQ3ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NMYXllclVwZGF0ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOTgwLDYgKzIyOTgzLDggQEAKIAkJCQk5NTIw
NzYwMjFGMjY3NUY5MDA3RDJBQUIgLyogQ2FsbFRyYWNlclR5cGVzLmggKi8sCiAJCQkJMEY2MEYz
MjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLywKIAkJCQkwRjYwRjMyQTFERkJC
MTA0MDA0MTZENkMgLyogQ29tbW9uVk0uaCAqLywKKwkJCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1
QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjlEQUEwRTFGRDFDNjY0
MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmggKi8sCiAJCQkJN0M1MTZBRDIxRjM1
MjUyMDAwMzRCNkJGIC8qIERPTVByb21pc2VQcm94eS5oICovLAogCQkJCUJDNTNEQTQ3MTE0MzEz
NEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3BwICovLAogCQkJCUJDNTNEQTJEMTE0MzEy
MUUwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuaCAqLywKQEAgLTI3NTQ3LDYgKzI3NTUyLDcg
QEAKIAkJCQk1MThGNTAwNDE5NENBQzNBMDA4MUJBQUUgLyogSlNHYW1lcGFkQnV0dG9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTgwREE2NDBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU4MERBNjYwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2Vv
cG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURBQTBGMUZEMUM2NkEwMDc5QzVCMiAv
KiBET01HQ091dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREE3QzFGMTg4
MzIyRkMwMEM5NTRCNSAvKiBKU0dlc3R1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ4
MkI3NTIxMTk4Q0I2QjAwQkZCMDA1IC8qIEpTSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzk0RDE0RjBDMjc1QzY4MDA2QkM2MTcgLyogSlNIaXN0b3J5LmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3Ry
YWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NP
dXRwdXRDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5oIgor
CisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvSGVhcElu
bGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KKyNpbmNs
dWRlIDxoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK0RPTUdDT3V0cHV0Q29uc3RyYWludDo6RE9NR0NP
dXRwdXRDb25zdHJhaW50KFZNJiB2bSwgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEpCisgICAg
OiBNYXJraW5nQ29uc3RyYWludCgiRG9tbyIsICJET00gT3V0cHV0IiwgQ29uc3RyYWludFZvbGF0
aWxpdHk6OlNlbGRvbUdyZXllZCwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICwgbV92bSh2bSkKKyAgICAsIG1f
Y2xpZW50RGF0YShjbGllbnREYXRhKQorICAgICwgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbih2bS5o
ZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkpCit7Cit9CisKK0RPTUdDT3V0cHV0Q29uc3Ry
YWludDo6fkRPTUdDT3V0cHV0Q29uc3RyYWludCgpCit7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxl
bGlzbSBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikKK3sK
KyAgICBIZWFwJiBoZWFwID0gbV92bS5oZWFwOworICAgIAorICAgIGlmIChoZWFwLm11dGF0b3JF
eGVjdXRpb25WZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVyc2lvbikKKyAgICAgICAgcmV0
dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAKKyAgICBtX2xhc3RF
eGVjdXRpb25WZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOworICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdGFza3MuaXNFbXB0eSgpKTsKKyAgICBtX2NsaWVudERhdGEu
Zm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKKyAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vi
c3BhY2UpIHsKKyAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRv
ciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAgICAg
ICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0
cmFpbnRzKGNlbGwsIHZpc2l0b3IpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV90YXNrcy5hcHBlbmQoc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFs
bGVsKGZ1bmMpKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWw7Cit9CisgICAgICAgIAordm9pZCBET01HQ091dHB1dENvbnN0cmFp
bnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3Ig
KGF1dG8mIHRhc2sgOiBtX3Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4odmlzaXRvcik7Cit9Cisg
ICAgICAgIAordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0lt
cGwoU2xvdFZpc2l0b3ImKQoreworICAgIG1fdGFza3MuY2xlYXIoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgor
I2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVk1DbGllbnREYXRhOworCitjbGFzcyBET01H
Q091dHB1dENvbnN0cmFpbnQgOiBwdWJsaWMgSlNDOjpNYXJraW5nQ29uc3RyYWludCB7CitwdWJs
aWM6CisgICAgRE9NR0NPdXRwdXRDb25zdHJhaW50KEpTQzo6Vk0mLCBKU1ZNQ2xpZW50RGF0YSYp
OworICAgIH5ET01HQ091dHB1dENvbnN0cmFpbnQoKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBK
U0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoSlNDOjpTbG90VmlzaXRvciYp
IG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNp
dG9yJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyAgICBKU1ZN
Q2xpZW50RGF0YSYgbV9jbGllbnREYXRhOworICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlvblZl
cnNpb247CisgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
PiBtX3Rhc2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVu
dERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAKKyNpbmNsdWRlICJE
T01HQ091dHB1dENvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlIDxoZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8
aGVhcC9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaD4K
LSNpbmNsdWRlIDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFw
L01hcmtlZEJsb2NrSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8aGVhcC9WaXNpdGluZ1RpbWVvdXQuaD4KICNpbmNsdWRlIDxydW50aW1lL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9W
TS5oPgpAQCAtNzQsNDMgKzcyLDcgQEAgdm9pZCBKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdv
cmxkKFZNKgogICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gbmV3IEpTVk1DbGllbnRE
YXRhKCp2bSk7CiAgICAgdm0tPmNsaWVudERhdGEgPSBjbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRl
cyB0aGlzIHBvaW50ZXIuCiAgICAgCi0gICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3Vu
aXF1ZTxNYXJraW5nQ29uc3RyYWludD4oCi0gICAgICAgICJXY29jIiwgIldlYkNvcmUgT3V0cHV0
IENvbnN0cmFpbnRzIiwKLSAgICAgICAgW3ZtLCBjbGllbnREYXRhLCBsYXN0RXhlY3V0aW9uVmVy
c2lvbiA9IHZtLT5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCldCi0gICAgICAgIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIG11dGFibGUgewot
ICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLT5oZWFwOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpID09IGxhc3RFeGVjdXRpb25W
ZXJzaW9uKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7
Ci0KLSAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFuYWdlIHRoZSB2aXNpdCBjb3VudCBoZXJl
IG91cnNlbHZlcy4gV2UgbmVlZCB0byBrbm93IHRoYXQgaWYgdGhpcyBhZGRzCi0gICAgICAgICAg
ICAvLyBvcGFxdWUgcm9vdHMgdGhlbiB3ZSBjYW5ub3QgZGVjbGFyZSB0ZXJtaW5hdGlvbiB5ZXQu
IFRoZSB3YXkgd2Ugc2lnbmFsIHRoaXMgdG8gdGhlCi0gICAgICAgICAgICAvLyBjb25zdHJhaW50
IHNvbHZlciBpcyBieSBhZGRpbmcgdG8gdGhlIHZpc2l0IGNvdW50LgotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzaXplX3QgbnVtT3BhcXVlUm9vdHNCZWZvcmUgPSBoZWFwLm51bU9wYXF1ZVJv
b3RzKCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgcGFyYWxsZWwhCi0gICAg
ICAgICAgICB1bnNpZ25lZCBudW1SZXZpc2l0ZWQgPSAwOwotICAgICAgICAgICAgY2xpZW50RGF0
YS0+Zm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKLSAgICAgICAgICAgICAgICBbJl0gKFN1
YnNwYWNlJiBzdWJzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBzdWJzcGFjZS5mb3JFYWNo
TWFya2VkQ2VsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGhlYXBD
ZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSgqdm0pLT52aXNpdE91dHB1dENvbnN0cmFp
bnRzKGNlbGwsIHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1S
ZXZpc2l0ZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiKCIsIG51bVJldmlzaXRlZCwgIikiKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc2xvdFZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoaGVhcC5udW1PcGFxdWVSb290cygpIC0g
bnVtT3BhcXVlUm9vdHNCZWZvcmUpOwotICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKLSAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWlu
dChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKKyAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWlu
dChzdGQ6Om1ha2VfdW5pcXVlPERPTUdDT3V0cHV0Q29uc3RyYWludD4oKnZtLCAqY2xpZW50RGF0
YSkpOwogICAgICAgICAKICAgICBjbGllbnREYXRhLT5tX25vcm1hbFdvcmxkID0gRE9NV3JhcHBl
cldvcmxkOjpjcmVhdGUoKnZtLCB0cnVlKTsKICAgICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxl
ciA9IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBdHRyLmgi
CiAjaW5jbHVkZSAiQmVmb3JlTG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRp
b25TY29wZS5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVl
QW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgi
CiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCkBAIC0yMTYyLDcgKzIxNjMsMTQg
QEAgRXZlbnRUYXJnZXREYXRhKiBOb2RlOjpldmVudFRhcmdldERhdGEoKQogCiBFdmVudFRhcmdl
dERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpCiB7Ci0gICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOworICAgIC8vIE5vdCBo
b2xkaW5nIHRoZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0b3BwZWQgYWNjZWxlcmF0ZXMgcGFy
YWxsZWwgY29uc3RyYWludCBzb2x2aW5nLCB3aGljaAorICAgIC8vIGNhbGxzIHRoaXMgZnVuY3Rp
b24gZnJvbSBtYW55IHRocmVhZHMuIFBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZyBjYW4gaGFw
cGVuIHdpdGggdGhlIHdvcmxkCisgICAgLy8gcnVubmluZyBvciBzdG9wcGVkLCBidXQgaWYgd2Ug
ZG8gaXQgd2l0aCBhIHJ1bm5pbmcgd29ybGQsIHRoZW4gd2UncmUgdXN1YWxseSBtaXhpbmcgY29u
c3RyYWludAorICAgIC8vIHNvbHZpbmcgd2l0aCBvdGhlciB3b3JrLiBUaGVyZWZvcmUsIHRoZSBt
b3N0IGxpa2VseSB0aW1lIGZvciBjb250ZW50aW9uIG9uIHRoaXMgbG9jayBpcyB3aGVuIHRoZQor
ICAgIC8vIHdvcmxkIGlzIHN0b3BwZWQuIFdlIGRvbid0IGhhdmUgdG8gaG9sZCB0aGUgbG9jayB3
aGVuIHRoZSB3b3JsZCBpcyBzdG9wcGVkLCBiZWNhdXNlIGEgc3RvcHBlZCB3b3JsZAorICAgIC8v
IG1lYW5zIHRoYXQgd2Ugd2lsbCBuZXZlciBtdXRhdGUgdGhlIGV2ZW50IHRhcmdldCBkYXRhIG1h
cC4KKyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9ja0lmKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jaywgdm0gJiYgdm0tPmhlYXAud29y
bGRJc1J1bm5pbmcoKSk7CiAgICAgcmV0dXJuIGhhc0V2ZW50VGFyZ2V0RGF0YSgpID8gZXZlbnRU
YXJnZXREYXRhTWFwKCkuZ2V0KHRoaXMpIDogbnVsbHB0cjsKIH0KIApAQCAtMjE3MSw2ICsyMTc5
LDkgQEAgRXZlbnRUYXJnZXREYXRhJiBOb2RlOjplbnN1cmVFdmVudFRhcmdldAogICAgIGlmICho
YXNFdmVudFRhcmdldERhdGEoKSkKICAgICAgICAgcmV0dXJuICpldmVudFRhcmdldERhdGFNYXAo
KS5nZXQodGhpcyk7CiAKKyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIXZtIHx8IHZtLT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOworCiAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIHNl
dEhhc0V2ZW50VGFyZ2V0RGF0YSh0cnVlKTsKICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1h
cCgpLmFkZCh0aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPEV2ZW50VGFyZ2V0RGF0YT4oKSkuaXRlcmF0
b3ItPnZhbHVlOwpAQCAtMjE3OCw2ICsyMTg5LDggQEAgRXZlbnRUYXJnZXREYXRhJiBOb2RlOjpl
bnN1cmVFdmVudFRhcmdldAogCiB2b2lkIE5vZGU6OmNsZWFyRXZlbnRUYXJnZXREYXRhKCkKIHsK
KyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IXZtIHx8IHZtLT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOwogICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2soc19ldmVudFRhcmdldERhdGFNYXBMb2NrKTsKICAgICBldmVudFRhcmdldERhdGFNYXAo
KS5yZW1vdmUodGhpcyk7CiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91bGQg
YmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrczogQWRkIHNwbGF5LWxhdGVu
Y3kgdGVzdCwgc2luY2UgdGhpcyBjaGFuZ2UgbmVlZGVkIHRvIGJlIGNhcmVmdWxseSB2YWxpZGF0
ZWQgd2l0aCB0aGF0IGJlbmNobWFyay4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1
cnJlbnRQdHJIYXNoU2V0LmNwcDogQWRkZWQuIFRoaXMgaGFzIHVuaXQgdGVzdHMgb2YgdGhlIG5l
dyBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlLiBUaGUgdGVzdHMgZm9jdXMgb24gY29ycmVjdG5l
c3MgdW5kZXIgc2VyaWFsIGV4ZWN1dGlvbiwgd2hpY2ggYXBwZWFycyB0byBiZSBlbm91Z2ggZm9y
IG5vdyAoaXQncyBzbyBlYXN5IHRvIGNhdGNoIGEgY29uY3VycmVuY3kgYnVnIGJ5IGp1c3QgcnVu
bmluZyB0aGUgR0MpLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMTIt
MDEgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIEFkZCBTYW1wbGVNYXAuY3BwIEFQSSB0ZXN0cyB0byBDTWFrZQpJbmRleDogVG9vbHMvU2Ny
aXB0cy9ydW4tanNjLWJlbmNobWFya3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4t
anNjLWJlbmNobWFya3MJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1iZW5jaG1hcmtzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIExPTkdTUElERVJf
UEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAKIFY4X1BBVEggPSBQRVJGT1JNQU5DRVRFU1RT
X1BBVEggKyAiU3VuU3BpZGVyIiArICJ0ZXN0cyIgKyAidjgtdjYiCiBUQUlMQkVOQ0hfUEFUSCA9
IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJUYWlsQmVuY2g5MDAwIgogTUlDUk9CRU5DSE1BUktT
X1BBVEggPSBPUEVOU09VUkNFX1BBVEggKyAiSlNUZXN0cyIgKyAibWljcm9iZW5jaG1hcmtzIgot
T0NUQU5FX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJPY3RhbmUiICsg
IndyYXBwZXJzIgorT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFU
SCArICJPY3RhbmUiCitPQ1RBTkVfV1JBUFBFUl9QQVRIID0gT1BFTlNPVVJDRV9PQ1RBTkVfUEFU
SCArICJ3cmFwcGVycyIKIEpTQkVOQ0hfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJK
U0JlbmNoIgogU0lYU1BFRURfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVl
ZCIgKyAidGVzdHMiCiBTSVhTUEVFRF9XUkFQUEVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BB
VEggKyAiU2l4U3BlZWQiICsgIndyYXBwZXJzIgpAQCAtODQxLDYgKzg0MiwyMCBAQCBjbGFzcyBT
aW5nbGVGaWxlVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCiAgIGVuZAogZW5kCiAKKyMgQmVuY2ht
YXJrIHRoYXQgY29uc2lzdHMgb2YgYSBzaW5nbGUgZmlsZSBhbmQgbXVzdCBiZSBsb2FkZWQgaW4g
aXRzIG93biBnbG9iYWwgb2JqZWN0IGVhY2gKKyMgdGltZSAoaS5lLiBydW4oKSksIGJ1dCByZXR1
cm5zIGl0cyByZXN1bHQgaW4gYSBjdXN0b20gd2F5LgorY2xhc3MgU2luZ2xlRmlsZUN1c3RvbVRp
bWVkQmVuY2htYXJrUGFyYW1ldGVycworICBhdHRyX3JlYWRlciA6YmVuY2hQYXRoCisgIAorICBk
ZWYgaW5pdGlhbGl6ZShiZW5jaFBhdGgpCisgICAgQGJlbmNoUGF0aCA9IGJlbmNoUGF0aAorICBl
bmQKKyAgCisgIGRlZiBraW5kCisgICAgOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyawor
ICBlbmQKK2VuZAorCiAjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGRh
dGEgZmlsZXMgdGhhdCBzaG91bGQgYmUgbG9hZGVkIGdsb2JhbGx5LCBmb2xsb3dlZAogIyBieSBh
IGNvbW1hbmQgdG8gcnVuIHRoZSBiZW5jaG1hcmsuCiBjbGFzcyBNdWx0aUZpbGVUaW1lZEJlbmNo
bWFya1BhcmFtZXRlcnMKQEAgLTk2NSw2ICs5ODAsMjUgQEAgZGVmIGVtaXRCZW5jaFJ1bkNvZGVG
aWxlKG5hbWUsIHBsYW4sIGJlbgogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAg
IGlmIChfX2JlbmNoZXJfaW5kZXggPj0gI3t3YXJtdXB9KSBwcmludChcIiN7bmFtZX06ICN7cGxh
bi52bX06ICN7cGxhbi5pdGVyYXRpb259OiBcIiArIChfX2JlbmNoZXJfaW5kZXggLSAje3dhcm11
cH0pICsgXCI6IFRpbWU6IFwiKygoX19hZnRlci1fX2JlZm9yZSkvX19ydW5zKSk7IikKICAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0iKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRl
cnIsZmlsZSwiI3tiZW5jaFBhcmFtcy50ZWFyRG93bkNvbW1hbmQuanN9IikKKyAgICAgIGVsc2lm
IGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyaworICAg
ICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5jaGVyX3J1bihfX2Jl
bmNoZXJfd2hhdCkgeyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICB2YXIg
X19iZW5jaGVyX3Jlc3VsdCA9IHt2YWx1ZTogbnVsbH07IikKKyAgICAgICAgJHJlcnVuLnRpbWVz
IHsKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcnVuKF9fYmVuY2hlcl93
aGF0LCBfX2JlbmNoZXJfcmVzdWx0KTsiKQorICAgICAgICB9CisgICAgICAgIGRvdWJsZVB1dHMo
JHN0ZGVycixmaWxlLCIgICBpZiAoX19iZW5jaGVyX3Jlc3VsdC52YWx1ZSA9PSBudWxsKSIpCisg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJO
dWxsIHJlc3VsdFwiKTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcmV0
dXJuIF9fYmVuY2hlcl9yZXN1bHQudmFsdWU7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsIn0iKQorICAgICAgICAkd2FybXVwLnRpbWVzIHsKKyAgICAgICAgICBkb3VibGVQdXRz
KCRzdGRlcnIsZmlsZSwiX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5pbnNw
ZWN0fSkiKQorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJnYygpOyIpIHVubGVz
cyBwbGFuLnZtLnNob3VsZE1lYXN1cmVHQworICAgICAgICB9CisgICAgICAgICRpbm5lci50aW1l
cyB7CisgICAgICAgICAgfCBpbm5lckluZGV4IHwKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRl
cnIsZmlsZSwicHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19OiAje3BsYW4uaXRlcmF0aW9ufTog
I3tpbm5lckluZGV4fTogVGltZTogXCIrX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNo
UGF0aC5pbnNwZWN0fSkpOyIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdj
KCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KICAgICAgIGVs
c2UKICAgICAgICAgcmFpc2UgdW5sZXNzIGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVU
aW1lZEJlbmNobWFyawogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24g
X19iZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCkBAIC0xNTk0LDYgKzE2MjgsMTkgQEAg
Y2xhc3MgT2N0YW5lQmVuY2htYXJrCiAgIGVuZAogZW5kCiAKK2NsYXNzIEN1c3RvbVRpbWVkQmVu
Y2htYXJrCisgIGluY2x1ZGUgQmVuY2htYXJrCisgIAorICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBm
dWxsUGF0aCkKKyAgICBAbmFtZSA9IG5hbWUKKyAgICBAZnVsbFBhdGggPSBmdWxsUGF0aAorICBl
bmQKKyAgCisgIGRlZiBlbWl0UnVuQ29kZShwbGFuKQorICAgIGVtaXRCZW5jaFJ1bkNvZGUoZnVs
bG5hbWUsIHBsYW4sIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFya1BhcmFtZXRlcnMubmV3
KGVuc3VyZUZpbGUoIkN1c3RvbVRpbWVkLSN7QG5hbWV9IiwgQGZ1bGxQYXRoKSkpCisgIGVuZAor
ZW5kCisKIGNsYXNzIEtyYWtlbkJlbmNobWFyawogICBpbmNsdWRlIEJlbmNobWFyawogICAKQEAg
LTMwMTAsNiArMzA1Nyw3IEBAIGJlZ2luCiAgICAgfCBhcmdzIHwKICAgICBPQ1RBTkUuYWRkIE9j
dGFuZUJlbmNobWFyay5uZXcoKmFyZ3MpCiAgIH0KKyAgT0NUQU5FLmFkZCBDdXN0b21UaW1lZEJl
bmNobWFyay5uZXcoInNwbGF5LWxhdGVuY3kiLCAoT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCArICJz
cGxheS5qcyIpLnRvX3MpCiAKICAgS1JBS0VOID0gQmVuY2htYXJrU3VpdGUubmV3KCJLcmFrZW4i
LCA6YXJpdGhtZXRpY01lYW4sIC0xKQogICBbImFpLWFzdGFyIiwgImF1ZGlvLWJlYXQtZGV0ZWN0
aW9uIiwgImF1ZGlvLWRmdCIsICJhdWRpby1mZnQiLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIHNldChUZXN0V1RGX1NP
VVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NTdHJpbmcuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5j
cHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ3Jvc3NUaHJlYWRUYXNrLmNwcAog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5jcHAKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxhdGZv
cm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0Nv
Y29hLm1tICovOyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyogUGxhdGZvcm1VdGls
aXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1t
ICovOyB9OwogCQkwRjJDMjBCODFEQ0Q1NDUwMDA1NDJEOUUgLyogVGltZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDMjBCNzFEQ0Q1NDQ4MDA1
NDJEOUUgLyogVGltZS5jcHAgKi87IH07CisJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBD
b25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwICovOyB9OwogCQkwRjNCOTRBNzFBNzcyNjc0MDBERTMyNzIgLyogV0tXZWJWaWV3
RXZhbHVhdGVKYXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRl
SmF2YVNjcmlwdC5tbSAqLzsgfTsKIAkJMEY0RkZBOUUxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBz
aG90VmlhUmVuZGVySW5Db250ZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVu
ZGVySW5Db250ZXh0Lm1tICovOyB9OwogCQkwRjU2NTFGNzFGQ0U0RERDMDAzMTBGQkMgLyogTm9I
aXN0b3J5SXRlbVNjcm9sbFRvRnJhZ21lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU2NTFGNjFGQ0U0RERCMDAzMTBGQkMgLyogTm9IaXN0b3J5
SXRlbVNjcm9sbFRvRnJhZ21lbnQubW0gKi87IH07CkBAIC0xMDcyLDYgKzEwNzMsNyBAQAogCQkw
RjEzOUU3NTFBNDIzQTUzMDBGNTkwRjUgLyogV2Vha09iakNQdHIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWFrT2JqQ1B0ci5tbTsgcGF0aCA9IGNvY29hL1dl
YWtPYmpDUHRyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3QkJENDE1QUY2
QzREMDA3QUI3NTMgLyogV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVTdGF0aXN0aWNzV2l0aE5v
V2ViUHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkMyMEI3MURD
RDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1QjFG
Q0UxNzkyMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJW
aWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5k
ZXJJbkNvbnRleHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
bmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0RkZBQTAxRUQzRDBERTAwRjcxMTFGIC8qIEltYWdlSU8uZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IG5hbWUgPSBJbWFnZUlPLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvSW1hZ2VJTy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwpAQCAtMjU5
Myw2ICsyNTk1LDcgQEAKIAkJCQkyNkYxQjQ0MjE1Q0E0MzRGMDBEMUU0QkYgLyogQXRvbWljU3Ry
aW5nLmNwcCAqLywKIAkJCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIu
Y3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwICovLAorCQkJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5jcHAgKi8sCiAJCQkJMEZFQUUzNjcxQjdEMTlDQjAwQ0UxN0YyIC8q
IENvbmRpdGlvbi5jcHAgKi8sCiAJCQkJNTE3MTRFQjkxRDA4NzQxNjAwNDcyM0M0IC8qIENyb3Nz
VGhyZWFkVGFzay5jcHAgKi8sCiAJCQkJMjZBMkM3MkUxNUUyRTczQzAwNUIxQTE0IC8qIENTdHJp
bmcuY3BwICovLApAQCAtMzE3OSw2ICszMTgyLDcgQEAKIAkJCQk3QzgzREVGNjFEMEE1OTBDMDBG
RUJDRjMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVGRTFE
MEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDU0
RjMxRjMzOEMzNjAwQTk3QUE3IC8qIE5ldmVyRGVzdHJveWVkLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMTFEMEE1OTBDMDBGRUJDRjMgLyogT3B0aW9uYWwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3N0JBQTMxRDlBRkZGQzAwNUZDNTY4IC8qIE9wdGlv
blNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMgLyog
T1NPYmplY3RQdHIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25leGlz
dGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNo
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitu
YW1lc3BhY2UgeworCisvLyBgY29tbWFuZHNgIGlzIGEgc3RyaW5nIHRoYXQgdGVsbHMgdGhpcyB0
aGluZyB3aGF0IHRvIGRvLiBJdCBoYXMgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBvZiBjaGFyYWN0
ZXJzLgorLy8gVGhlIGNoYXJhY3RlciBwYWlycyBhcmUgY29tbWFuZHMuIENvbW1hbmRzOgorLy8K
Ky8vICt4ICAgICBBZGRzICd4JyB0byB0aGUgc2V0IChjYXN0cyAneCcgdG8gYSB2b2lkKikgYW5k
IGFzc2VydHMgdGhhdCBpdCdzIG5ldy4KKy8vICF4ICAgICBBZGRzICd4JyB0byB0aGUgc2V0IGFu
ZCBhc3NlcnRzIHRoYXQgaXQgd2FzIHRoZXJlIGFscmVhZHkuCisvLyA9eCAgICAgQXNzZXJ0cyB0
aGF0ICd4JyBpcyBpbiB0aGUgc2V0CisvLyAteCAgICAgQXNzZXJ0cyB0aGF0ICd4JyBpcyBub3Qg
aW4gdGhlIHNldAordm9pZCBkb1Rlc3QoY29uc3QgY2hhciogY29tbWFuZHMpCit7CisgICAgQ29u
Y3VycmVudFB0ckhhc2hTZXQgc2V0OworICAgIGZvciAoY29uc3QgY2hhciogY29tbWFuZCA9IGNv
bW1hbmRzOyBjb21tYW5kWzBdICYmIGNvbW1hbmRbMV07IGNvbW1hbmQgKz0gMikgeworICAgICAg
ICB2b2lkKiBwdHIgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Y29tbWFuZFsxXSkpOworICAgICAgICBzd2l0Y2ggKGNvbW1hbmRbMF0pIHsKKyAgICAgICAgY2Fz
ZSAnKyc6CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQuYWRkKHB0cikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyEnOgorICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHNl
dC5hZGQocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnPSc6CisgICAg
ICAgICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRh
aW5zKHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitURVNUKFdU
Rl9Db25jdXJyZW50UHRySGFzaFNldCwgRW1wdHkpCit7CisgICAgZG9UZXN0KCIiKTsKK30KKwor
VEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnQpCit7CisgICAgZG9U
ZXN0KCIreD14LXktMCIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRk
T25lRWxlbWVudE11bHRpcGxlVGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4
IXgheCF4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRP
bmVFbGVtZW50TWFueVRpbWVzKQoreworICAgIGRvVGVzdCgiK3gheCF4IXgheCF4IXgheCF4IXgh
eD14LXktMCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4Iik7Cit9CisKK1RFU1QoV1RG
X0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50cykKK3sKKyAgICBkb1Rlc3Qo
IisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2graitr
K2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytMK1or
WCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1k
PWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9
SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhh
c2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzTWFueVRpbWVzKQoreworICAgIGRvVGVzdCgiKzErMisz
KzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6K3gr
Yyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitC
K04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9
aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1M
PVo9WD1DPVY9Qj1OPU0tLiExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAh
YSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFE
IUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQh
eSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJ
IU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAh
cSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFF
IVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUh
NiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFi
IW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0h
MSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFs
IXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVgh
QyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFm
IWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUgh
SiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFv
IXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEh
UyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFy
IXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkh
VSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5
ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEh
VyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSIpOworfQor
CitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNBbmRRdWVy
eVNvbWVCZWZvcmVBZGRpbmdUaGVSZXN0KQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2Kzcr
OCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2s9MT0yPTM9ND01PTY9Nz04
PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9ay1sLXoteC1jLXYtYi1uLW0t
US1XLUUtUi1ULVktVS1JLU8tUC1BLVMtRC1GLUctSC1KLUstTC1aLVgtQy1WLUItTi1NK2wreit4
K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytMK1orWCtDK1Yr
QitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1o
PWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9SD1KPUs9
TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQs
IEFkZFNvbWVFbGVtZW50c011bHRpcGxlVGltZXNUaGVuQWRkVGhlUmVzdEFuZFF1ZXJ5U29tZUJl
Zm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtx
K3crZStyK3QhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkh
MCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4
ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYh
NyE4ITkhMCFxIXchZSFyIXQreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03
PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4t
bS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6
K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0Mr
VitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1n
PWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9
Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328221</attachid>
            <date>2017-12-02 00:19:40 -0800</date>
            <delta_ts>2017-12-02 09:02:13 -0800</delta_ts>
            <desc>updated changelog</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>251592</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIEl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgYSBzbWFs
bAorICAgICAgICBTcGVlZG9tZXRlciBzcGVlZC11cCAoMC42OCUgZmFzdGVyIHdpdGggcCA9IDAu
MDM2KS4KKyAgICAgICAgCisgICAgICAgIFRoZSBjb25zdHJhaW50IHNvbHZlciBzdXBwb3J0cyBy
dW5uaW5nIGNvbnN0cmFpbnRzIGluIHBhcmFsbGVsIGluIHR3byBkaWZmZXJlbnQgd2F5czoKKyAg
ICAgICAgCisgICAgICAgIC0gUnVuIG11bHRpcGxlIGNvbnN0cmFpbnRzIGluIHBhcmFsbGVsIHRv
IGVhY2ggb3RoZXIuIFRoaXMgb25seSB3b3JrcyBmb3IgY29uc3RyYWludHMgdGhhdCBjYW4KKyAg
ICAgICAgICB0b2xlcmF0ZSBvdGhlciBjb25zdHJhaW50cyBydW5uaW5nIGNvbmN1cnJlbnRseSB0
byB0aGVtIChjb25zdHJhaW50LmNvbmN1cnJlbmN5KCkgPT0KKyAgICAgICAgICBDb25zdHJhaW50
Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQpLiBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIGtpbmQgb2Yg
cGFyYWxsZWxpc20gdGhhdCB0aGUKKyAgICAgICAgICBjb25zdHJhaW50IHNvbHZlciBzdXBwb3J0
cy4gQWxsIGNvbnN0cmFpbnRzIGV4Y2VwdCB0aGUgSlNDIFNQSSBjb25zdHJhaW50cyBhcmUgY29u
Y3VycmVudC4gV2UKKyAgICAgICAgICBjb3VsZCBwcm9iYWJseSBtYWtlIHRoZW0gY29uY3VycmVu
dCwgYnV0IEknbSBwbGF5aW5nIGl0IHNhZmUgZm9yIG5vdy4KKyAgICAgICAgCisgICAgICAgIC0g
QSBjb25zdHJhaW50IGNhbiBjcmVhdGUgcGFyYWxsZWwgd29yayBmb3IgaXRzZWxmLCB3aGljaCB0
aGUgY29uc3RyYWludCBzb2x2ZXIgd2lsbCBpbnRlcmxlYXZlCisgICAgICAgICAgd2l0aCBvdGhl
ciBzdHVmZi4gQSBjb25zdHJhaW50IGNhbiByZXBvcnQgdGhhdCBpdCBoYXMgcGFyYWxsZWwgd29y
ayBieSByZXR1cm5pbmcKKyAgICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVs
IGZyb20gaXRzIGV4ZWN1dGVJbXBsKCkgZnVuY3Rpb24uIFRoZW4gdGhlIHNvbHZlciB3aWxsIGFs
bG93IHRoYXQKKyAgICAgICAgICBjb25zdHJhaW50J3MgZG9QYXJhbGxlbFdvcmtJbXBsKCkgZnVu
Y3Rpb24gdG8gcnVuIG9uIGFzIG1hbnkgR0MgbWFya2VyIHRocmVhZHMgYXMgYXJlIGF2YWlsYWJs
ZSwKKyAgICAgICAgICBmb3IgYXMgbG9uZyBhcyB0aGF0IGZ1bmN0aW9uIHdhbnRzIHRvIHJ1bi4K
KyAgICAgICAgCisgICAgICAgIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGhhdmUgYSBub24tY29uY3Vy
cmVudCBjb25zdHJhaW50IHRoYXQgY3JlYXRlcyBwYXJhbGxlbCB3b3JrLgorICAgICAgICAKKyAg
ICAgICAgVGhlIHBhcmFsbGVsaXNtIGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIHRoZSBleGlz
dGluZyBHQyBtYXJrZXIgdGhyZWFkcy4gVGhpcyB0dXJucyBvdXQgdG8gYmUKKyAgICAgICAgbW9z
dCBuYXR1cmFsIGZvciB0d28gcmVhc29uczoKKyAgICAgICAgCisgICAgICAgIC0gTm8gbmVlZCB0
byBzdGFydCBhbnkgb3RoZXIgdGhyZWFkcy4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIGNvbnN0
cmFpbnRzIGFsbCB3YW50IHRvIGJlIHBhc3NlZCBhIFNsb3RWaXNpdG9yLiBSdW5uaW5nIG9uIHRo
ZSBtYXJrZXIgdGhyZWFkcyBtZWFucyBoYXZpbmcKKyAgICAgICAgICBhY2Nlc3MgdG8gYSBTbG90
VmlzaXRvci4gQWxzbywgaXQgbWVhbnMgbGVzcyBsb2FkIGJhbGFuY2luZy4gVGhlIHNvbHZlciB3
aWxsIGNyZWF0ZSB3b3JrIG9uIGVhY2gKKyAgICAgICAgICBtYXJraW5nIHRocmVhZCdzIFNsb3RW
aXNpdG9yLiBXaGVuIHRoZSBzb2x2ZXIgaXMgZG9uZSAic3RlYWxpbmciIGEgbWFya2VyIHRocmVh
ZCwgdGhhdCB0aHJlYWQKKyAgICAgICAgICB3aWxsIGhhdmUgd29yayBpdCBjYW4gc3RhcnQgZG9p
bmcgaW1tZWRpYXRlbHkuIEJlZm9yZSB0aGlzIGNoYW5nZSwgd2UgaGFkIHRvIGNvbnRyaWJ1dGUg
dGhlIHdvcmsKKyAgICAgICAgICBmb3VuZCBieSB0aGUgY29uc3RyYWludCBzb2x2ZXIgdG8gdGhl
IGdsb2JhbCB3b3JrbGlzdCBzbyB0aGF0IGl0IGNvdWxkIGJlIGRpc3RyaWJ1dGVkIHRvIHRoZQor
ICAgICAgICAgIG1hcmtlciB0aHJlYWRzIGJ5IGxvYWQgYmFsYW5jaW5nLiBUaGlzIGNoYW5nZSBw
cm9iYWJseSBoZWxwcyB0byBhdm9pZCB0aGF0IGxvYWQgYmFsYW5jaW5nIHN0ZXAuCisgICAgICAg
IAorICAgICAgICBBIGxvdCBvZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcgaXQgZWFzeSB0
byBpdGVyYXRlIEdDIGRhdGEgc3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcworICAgICAgICBj
aGFuZ2UgbWFrZXMgYWxtb3N0IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFibGVkLCBidXQg
b25seSB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0aGUgcGFyYWxs
ZWwgd29yayBBUEkuIFRoYXQgY29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2VkIGNlbGxzIGlu
IHR3byBzdWJzcGFjZXMuIFRoaXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZlcnkgZWFzeSB0
byBjb21wb3NlIHBhcmFsbGVsIGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxsb2NhdG9ycywg
YmxvY2tzLCBhbmQgY2VsbHMuCisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJhbGxlbCBpdGVy
YXRvciBpcyBjb21wb3NlZCBvdXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0aGUgb3RoZXJz
LiBBIHBhcmFsbGVsCisgICAgICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0b3IgdGhhdCBj
YW4gZG8gYW4gYXRvbWljIG5leHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0IHRoZW0gdXNp
bmcKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4uIGlzIHRoZSB0
eXBlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9uZQorICAgICAg
ICB3aGVuIGl0IHJldHVybnMgYSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0aGUgY3VycmVu
dCBjb2RlLCB0aGF0J3MgYWx3YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAgICBkb25lIGlz
IGluZGljYXRlZCBieSBudWxsKS4KKworICAgICAgICAqIEFQSS9KU01hcmtpbmdDb25zdHJhaW50
UHJpdmF0ZS5jcHA6CisgICAgICAgIChKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50
KToKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbToKKyAgICAgICAgKHNjYW5FeHRl
cm5hbE9iamVjdEdyYXBoKToKKyAgICAgICAgKHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQpOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zIGNvbnN0KToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0V2Vha2x5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1
ZVRvT2xkQWdlKToKKyAgICAgICAgKEpTQzo6c2hvdWxkTWFya1RyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0
LmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaDogQWRkZWQu
CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6
CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1Jl
bWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5GaXhwb2ludFBoYXNlKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6c3RvcFRoZVBlcmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6
OnJlc3VtZVRoZVBlcmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENvcmVDb25zdHJh
aW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnNldEJvbnVzVmlzaXRvclRhc2spOgorICAgICAg
ICAoSlNDOjpIZWFwOjpydW5UYXNrSW5QYXJhbGxlbCk6CisgICAgICAgIChKU0M6OkhlYXA6OmZv
ckVhY2hTbG90VmlzaXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgIChKU0M6OkhlYXA6OndvcmxkSXNSdW5uaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SGVh
cDo6cnVuRnVuY3Rpb25JblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkhlYXA6OndvcmxkSXNTdG9wcGVkIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjppbmNyZW1lbnREZWZlcnJh
bERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZSk6CisgICAgICAgICogaGVhcC9MYXJnZUFs
bG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZCk6Cisg
ICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvTG9ja0R1cmluZ01hcmtpbmcuaDoKKyAgICAgICAgKEpTQzo6
bG9ja0R1cmluZ01hcmtpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3Vy
Y2UpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgICogaGVhcC9N
YXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmspOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphY3Rp
dmVXZWFrU2V0c0JlZ2luKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2ZVdlYWtT
ZXRzRW5kKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Om5ld0FjdGl2ZVdlYWtTZXRzQmVn
aW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNFbmQpOgor
ICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwOgorICAgICAgICAoSlNDOjpNYXJr
aW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpNYXJraW5n
Q29uc3RyYWludDo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpx
dWlja1dvcmtFc3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojp3b3Jr
RXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdv
cmspOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3Jr
KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6
CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBs
KToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg6CisgICAgICAgIChKU0M6Ok1h
cmtpbmdDb25zdHJhaW50OjpsYXN0RXhlY3V0ZVBhcmFsbGVsaXNtIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnBhcmFsbGVsaXNtIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCk6CisgICAgICAgIChKU0M6Ok1h
cmtpbmdDb25zdHJhaW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29u
c3RyYWludFNldDo6ZXhlY3V0ZUFsbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpFeGVjdXRpb25Db250ZXh0OjpFeGVjdXRpb25Db250ZXh0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmRpZFZpc2l0
U29tZXRoaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OnNob3VsZFRpbWVPdXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZHJh
aW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0
aW9uQ29udGV4dDo6ZGlkRXhlY3V0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
cmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpleGVjdXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNl
dC5oOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50
U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6On5NYXJraW5n
Q29uc3RyYWludFNvbHZlcik6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVy
OjpkaWRWaXNpdFNvbWV0aGluZyBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OmRyYWluKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmNvbnZl
cmdlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlv
blRocmVhZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRFeGVj
dXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmg6IEFkZGVkLgor
ICAgICAgICAqIGhlYXAvT3BhcXVlUm9vdFNldC5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAv
UGFyYWxsZWxTb3VyY2VBZGFwdGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQYXJhbGxlbFNv
dXJjZUFkYXB0ZXI6OlBhcmFsbGVsU291cmNlQWRhcHRlcik6CisgICAgICAgIChKU0M6OmNyZWF0
ZVBhcmFsbGVsU291cmNlQWRhcHRlcik6CisgICAgICAgICogaGVhcC9TaW1wbGVNYXJraW5nQ29u
c3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5n
Q29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6U2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKToKKyAgICAgICAgKiBoZWFwL1Np
bXBsZU1hcmtpbmdDb25zdHJhaW50Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0
b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3Rv
cHBlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkSXNVcFRv
RGF0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbik6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyk6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5G
cm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluSW5QYXJhbGxlbFBh
c3NpdmVseSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24p
OgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3Rh
dGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWVyZ2VJZk5l
Y2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZU9wYXF1
ZVJvb3RzSWZQcm9maXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
Om1lcmdlT3BhcXVlUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3Iu
aDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpj
b250YWluc09wYXF1ZVJvb3QgY29uc3QpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0p
OgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAv
U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxBbGxvY2F0b3JT
b3VyY2UpOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJs
b2NrU291cmNlKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAgICogaGVhcC9T
dWJzcGFjZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZvckVhY2hNYXJrZWRD
ZWxsSW5QYXJhbGxlbCk6CisgICAgICAgICogaGVhcC9WaXNpdENvdW50ZXIuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OlZpc2l0Q291bnRlcjo6VmlzaXRDb3VudGVyKToKKyAgICAgICAgKEpTQzo6
VmlzaXRDb3VudGVyOjp2aXNpdENvdW50IGNvbnN0KToKKyAgICAgICAgKiBoZWFwL1Zpc2l0aW5n
VGltZW91dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dD
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXJrSWZDaGVhcCk6CisKIDIwMTctMTEtMzAg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10g
VXNlIEpTRml4ZWRBcnJheSBmb3Igb3BfbmV3X2FycmF5X2J1ZmZlcgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDAsMTMgKzUwMCwxNiBAQCBoZWFw
L0pJVFN0dWJSb3V0aW5lU2V0LmNwcAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3BwCiBoZWFwL01h
Y2hpbmVTdGFja01hcmtlci5jcHAKIGhlYXAvTWFya1N0YWNrLmNwcAoraGVhcC9NYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludC5jcHAKIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAogaGVhcC9NYXJr
ZWRCbG9jay5jcHAKIGhlYXAvTWFya2VkU3BhY2UuY3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50
LmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKK2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL011dGF0b3JTdGF0
ZS5jcHAKK2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCiBoZWFwL1Nsb3RWaXNpdG9y
LmNwcAogaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAogaGVhcC9TdG9jaGFzdGlj
U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuY3BwCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0
cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiAjaW5j
bHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJr
aW5nQ29uc3RyYWludC5oIgotI2luY2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgorI2luY2x1ZGUg
IlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAg
LTcyLDExICs3MSwxMSBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQo
CiAgICAgLy8gZWxzZSBnZXRzIG1hcmtlZC4KICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5ID0gQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZzsKICAgICAKLSAg
ICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PigK
KyAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50PigKICAgICAgICAgdG9DU3RyaW5nKCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwg
UmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIp
LAogICAgICAgICB0b0NTdHJpbmcoIkFQSSBNYXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFp
bnRJbmRleCwgIiAoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRD
YWxsYmFjaykpLCAiLCAiLCBSYXdQb2ludGVyKHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2Nv
bnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFdCi0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikgewogICAgICAgICAgICAgTWFya2VyIG1hcmtlcjsKICAgICAgICAgICAgIG1h
cmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwogICAgICAgICAgICAgbWFya2VyLk1hcmsgPSBtYXJr
OwpAQCAtODQsNyArODMsOCBAQCB2b2lkIEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFp
bnQoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbnN0cmFpbnRDYWxsYmFjaygmbWFya2Vy
LCB1c2VyRGF0YSk7CiAgICAgICAgIH0sCi0gICAgICAgIHZvbGF0aWxpdHkpOworICAgICAgICB2
b2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3k6OlNlcXVlbnRpYWwpOwog
ICAgIAogICAgIHZtLmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92ZShjb25zdHJhaW50
KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNo
aW5lLm1tCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4Myw5ICsyODMsOCBAQCBzdGF0
aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6CiAgICAgICAgIHdoaWxlICghc3Rh
Y2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB2b2lkKiBuZXh0Um9vdCA9IHN0YWNrLmxhc3Qo
KTsKICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIGlmICh2aXNp
dG9yLmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKG5leHRSb290KSA9PSBUcnVlVHJpU3RhdGUp
CisgICAgICAgICAgICBpZiAoIXZpc2l0b3IuYWRkT3BhcXVlUm9vdChuZXh0Um9vdCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qo
bmV4dFJvb3QpOwogCiAgICAgICAgICAgICBhdXRvIGFwcGVuZE93bmVkT2JqZWN0cyA9IFsmXSB7
CiAgICAgICAgICAgICAgICAgTlNNYXBUYWJsZSAqb3duZWRPYmplY3RzID0gW2V4dGVybmFsT2Jq
ZWN0R3JhcGggb2JqZWN0Rm9yS2V5OnN0YXRpY19jYXN0PGlkPihuZXh0Um9vdCldOwpAQCAtMzI3
LDggKzMyNiw2IEBAIHZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiAKICAg
ICAgICAgfQogICAgICAgICBbZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHJlbW92ZUFsbE9iamVjdHNd
OwogICAgIH0KLQotICAgIHZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwogfQogCiAjZW5kaWYg
Ly8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEy
OCw2IEBACiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBG
MUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0Ey
MURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFG
QjM4RjFFMTczQTY3MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyLmggKi87IH07Ci0JCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGlu
Z1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFGQjM5NjFFMUFGN0Ux
MDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5s
aW5lcy5oICovOyB9OwogCQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJ
CTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwpAQCAtMjkxLDYgKzI5MCw3IEBACiAJ
CTBGNDBFNEE3MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzMyMUM0NUYzNUMwMDcyNDUwQiAv
KiBBaXJPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjQwRTRBODFDNDk3Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFD
NDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MEU0QTkxQzQ5N0Y3NDAwQTU3N0ZB
IC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjQxNTQ1
QjFGRDIwQjIyMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4
RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAw
MTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdp
c3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYg
LyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0zMTIsNiArMzEyLDkgQEAKIAkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8q
IFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYw
NzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVk
QXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRG
MjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovOyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAx
RDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmgg
Ki87IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxp
c20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4
QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjREOEM3ODFGQ0EzQ0ZB
MDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBT
aW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZp
b3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9
OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3Vu
dEVzdGltYXRpb25QaGFzZS5oICovOyB9OwogCQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8q
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzU0LDYgKzM1Nyw3IEBACiAJCTBG
NjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAv
KiBBcnJheVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAq
LzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0ODIxNUU0ODEx
NDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyB9OworCQkwRjY0NTMxODFGRDI0NkE3MDAy
NDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAvKiBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovOyB9OwogCQkwRjY0QjI3MjFBNzg0QkFGMDA2
RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEIy
N0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVk
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjY0RUFGMzFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlC
IC8qIEFpckFyZ0lubGluZXMuaCAqLzsgfTsKQEAgLTQ0Niw2ICs0NTAsOCBAQAogCQkwRjlEMzY5
NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFBRTlDQzMzMDAwRDRERkIgLyog
REZHQ2xlYW5VcFBoYXNlLmggKi87IH07CiAJCTBGOUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAvKiBG
VExFeGNlcHRpb25UYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQu
aCAqLzsgfTsKIAkJMEY5RDRDMTExQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlLmggKi87IH07CisJCTBGOURBQTA5MUZEMUMzQ0YwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3Ry
YWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgg
Ki87IH07CisJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURB
QTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCAqLzsgfTsKIAkJ
MEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlFMzI2
MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLzsg
fTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdG
Q0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi87IH07CiAJCTBGOUZDOEM1
MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDk5
LDcgKzE1MDUsNiBAQAogCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREJDNTRE
NTFERjhFQTJCMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREJDNTREMzFERjhFQTAwMDA1QkY3
MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi87IH07CiAJCUFERDhGQTQ2MUVCMzA3OTcw
MERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNt
TmFtZVNlY3Rpb25QYXJzZXIuaCAqLzsgfTsKLQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8q
IE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOTkxRTA4
RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk0MUUwOEYxQzkwMDU4REU3OCAv
KiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUExRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2Vt
Ymx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFERTgwMjk1MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxp
bmtFcnJvckNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQURFODAyOUMxRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlu
a0Vycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBREU4MDI5NzFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQ
cm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTk4MSw3ICsxOTg2LDYgQEAKIAkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QjFFMTczQTYy
MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QzFF
MTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdGluZ1RpbWVvdXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8q
IERGR1BsYW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Bs
YW5JbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHUGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTUxRTFBRjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdElubGlu
ZXMuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIzNCw2ICsyMjM4LDcgQEAKIAkJMEYzQkQx
QjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gZGZnL0RG
R0luc2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0MxRjE4
MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHBhdGgg
PSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsg
cGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRDb25jdXJyZW5j
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFG
OEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
YWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ2MTQ2
MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIyNzAsNiArMjI3NSwxMCBAQAogCQkwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTgg
LyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1cGVy
U2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlGMDc1
MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbkR1bXAuaDsgcGF0aCA9IGIzL0IzT3JpZ2lu
RHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MjFGQzdBOTczMDAx
RDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MzFG
QzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0MxQzRDMUI1NDAwNEQ2QzExIC8q
IEFpckZpeE9idmlvdXNTcGlsbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5jcHA7IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91
c1NwaWxscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUNEMUM0QzFC
NTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhP
YnZpb3VzU3BpbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUQwMUM0
RDc2NEIwMDRENkMxMSAvKiBCM09yaWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNPcmlnaW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzQxLDYgKzIzNTAsOCBAQAogCQkw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Lmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FycmF5TW9kZS5j
cHA7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheU1vZGUuaDsgcGF0aCA9IGRmZy9ERkdB
cnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUzMTUxRkQyNDZB
MDAwMjQzMkExIC8qIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjQ1MzE2MUZEMjQ2QTAwMDI0MzJBMSAvKiBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmluYXJ5U3dpdGNoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJp
bmFyeVN3aXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaW5hcnlTd2l0
Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzcxQTc5NTdCMjAwNkU0
RTY2IC8qIENhbGxFZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MDMsNiArMjUx
NCw5IEBACiAJCTBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7
IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOUQ0QzBFMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBwYXRoID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlENEMwRjFDM0Uy
Qzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHBh
dGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlE
QUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDgxRkQxQzNDODAwNzlDNUIyIC8qIFBh
cmFsbGVsU291cmNlQWRhcHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllcklu
c2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUUzMjYyMUIwNUFCMDQwMDgw
MUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDI2Nyw3ICs0MjgxLDYgQEAKIAkJQUREMDlBRjMxRjYyNDgy
RTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJs
eS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYg
LyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTMxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
SlNXZWJBc3NlbWJseUxpbmtFcnJvci5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5TGlua0Vy
cm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTQxRTA4RjFDOTAw
NThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBwYXRoID0ganMvSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NTFF
MDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVj
dG9yLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTE3LDYgKzU1MzAsOCBAQAogCQkJCTBGRENFMTI4
MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8sCiAJCQkJMTQ2QjE0REIx
MkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFG
MjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKKwkJCQkwRjQxNTQ1
QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggKi8sCisJCQkJMEY0
RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovLAogCQkJ
CTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAvKiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLAog
CQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEz
NkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLApAQCAtNTYxMSwxNyArNTYyNiwy
MyBAQAogCQkJCTBGNjYwRTM0MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5o
ICovLAogCQkJCTBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNl
dC5jcHAgKi8sCiAJCQkJMEY2NjBFMzYxRTA1MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJh
aW50U2V0LmggKi8sCisJCQkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyLmNwcCAqLywKKwkJCQkwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAqLywKIAkJCQkxNDJENkYwRTEzNTM5QTQxMDBCMDJFODYg
LyogTWFya1N0YWNrLmNwcCAqLywKIAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyogTWFy
a1N0YWNrLmggKi8sCisJCQkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjY0NTMxNTFGRDI0NkEwMDAyNDMyQTEgLyog
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQkwRjFGQjM4QzFFMTczQTYyMDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIzOTgxRTFGNjVGOTAw
QTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBC
N0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLywKIAkJCQkwRkE3NjIwMzFEQjkyNDIzMDBCN0Ey
RkQgLyogTXV0YXRvclN0YXRlLmggKi8sCi0JCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8q
IE9wYXF1ZVJvb3RTZXQuaCAqLywKKwkJCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmggKi8sCiAJCQkJMEZCQjczQjYxREVGM0FBQzAwMkMwMDlFIC8q
IFByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCAqLywKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFC
MDggLyogUmVnaXN0ZXJTdGF0ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAv
KiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAwQzEz
ODM5IC8qIFJ1bm5pbmdTY29wZS5oICovLAorCQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAv
KiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCisJCQkJMEY0RDhDNzcxRkNBM0NGMzAw
MUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3
REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhG
MDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkz
MkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC01NjQzLDcgKzU2NjQsNyBAQAogCQkJ
CTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0
b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJs
b29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlz
aXRpbmdUaW1lb3V0LmggKi8sCisJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0
Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXku
aCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04
MDAwLDYgKzgwMjEsNyBAQAogCQkJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVDRjk4OTFFOUVENjUyMDBDMTg2OTIgLyogQWly
U3RhY2tBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU4QzFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQxNTQ1QjFGRDIw
QjIyMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCQkQ5RTFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1OEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElubGluZXMuaCBp
biBIZWFkZXJzICovLApAQCAtODIwMCw2ICs4MjIyLDcgQEAKIAkJCQk2NTE0RjIxOTE4QjNFMTY3
MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlB
M0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAy
M0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFy
cmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8q
IENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTgyOTMsNiArODMxNiw3IEBACiAJCQkJQTc3
QTQyM0UxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NDUzMTgxRkQy
NDZBNzAwMjQzMkExIC8qIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYx
OEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8sCkBAIC04NzY4LDYgKzg3OTIsNyBAQAogCQkJCTBGMkI2NkU1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURBQTA5MUZEMUMzQ0YwMDc5QzVCMiAv
KiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0
aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MTYsNiArODk0MSw3IEBACiAJCQkJQTc0ODJFOTMx
MTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVm
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8q
IEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZCODY4MUFFMzM1
QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkVCMUY3
NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDlF
ODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRl
cnMgKi8sCkBAIC05MDM1LDkgKzkwNjEsOSBAQAogCQkJCUUzQzI5NUREMUVEMkNCREEwMEQzMDE2
RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc4MUZD
QTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8qIE9iamVjdFByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5n
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyogT3BhcXVl
Um9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8q
IE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8q
IE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NDdFQTE3QTBCRDQ2MDBGNTg5OEUg
LyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTkyNDMsNiArOTI2OSw3IEBA
CiAJCQkJMEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFk
YXB0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwODE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURBQTBBMUZEMUMz
RDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5
cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI4Myw3ICs5MzEwLDYgQEAKIAkJCQkwRjZDNzM1MTFB
QzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1Rp
bWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBW
aXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8q
IFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjAsNyArMzIwLDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhTbAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX3N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpKSkKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5n
ZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NzIsNyArOTcyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIAogICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVk
ID0gdHJ1ZTsKIAotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChz
aG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikpIHsKQEAgLTExMjQsNyArMTEyNCw3IEBAIHN0YXRp
YyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0wKIAogYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKLSAg
ICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6Omlz
TWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2UoKSkpCkBAIC0xMTM5
LDEwICsxMTM5LDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWcK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERG
Rzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpb24pCiB7Ci0gICAgaWYgKHRyYW5z
aXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0
aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2lu
ICYmICFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHRy
YW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAo
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKQEAg
LTEyNDYsMTQgKzEyNDYsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2VsbCogcmVmZXJlbmNlID0gZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0
PENvZGVCbG9jayo+KCpyZWZlcmVuY2UtPnZtKCksIHJlZmVyZW5jZSkpOwotICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChyZWZlcmVuY2UpKSB7CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIg
PSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChh
bGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0Nv
bW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJl
UmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
ZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKICAgICAgICAg
ICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMTMgQEAgcHJvdGVj
dGVkOgogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0LCAiOiBDb21waWxpbmcgIiwgbV9w
bGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBU
aGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNhZmVwb2ludGluZyBzaW5jZSB3ZSBvd24g
cmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2
ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVh
cC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3Bl
ZCBidXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1fcGxhbi0+Y29tcGlsZUluVGhyZWFk
KCZtX2RhdGEpOwogICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSAhPSBQbGFuOjpDYW5jZWxsZWQp
IHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0
b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMilcbiIpOwogICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB9CkBAIC0xMzAsNyArMTMwLDcgQEAg
cHJvdGVjdGVkOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcmVhZHlQ
bGFucy5hcHBlbmQobV9wbGFuKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wbGFuLT52bS0+aGVhcC53
b3JsZElzU3RvcHBlZCgpKTsKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9wbGFuQ29tcGlsZWQu
bm90aWZ5QWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcx
LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYg
KHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBo
Lm1fdm0uaGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAKICAgICBpZiAoc3RhdGUuYWxsb2Nh
dGlvbkZhaWxlZCkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5LmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNs
YXNzIENvbnN0cmFpbnRDb25jdXJyZW5jeSA6IHVpbnQ4X3QgeworICAgIFNlcXVlbnRpYWwsCisg
ICAgQ29uY3VycmVudAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2Ug
V1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6
OkNvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSkKK3sKKyAgICBzd2l0Y2ggKGNvbmN1
cnJlbmN5KSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlh
bDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50OgorICAgICAgICBv
dXQucHJpbnQoIkNvbmN1cnJlbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVs
aXNtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3Ry
YWludFBhcmFsbGVsaXNtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA6IHVpbnQ4
X3QgeworICAgIFNlcXVlbnRpYWwsCisgICAgUGFyYWxsZWwKK307CisgICAgCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20p
Cit7CisgICAgc3dpdGNoIChwYXJhbGxlbGlzbSkgeworICAgIGNhc2UgSlNDOjpDb25zdHJhaW50
UGFyYWxsZWxpc206OlNlcXVlbnRpYWw6CisgICAgICAgIG91dC5wcmludCgiU2VxdWVudGlhbCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWw6CisgICAgICAgIG91dC5wcmludCgiUGFyYWxsZWwiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50
ZWRBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDksMTIgKzIwOSwxMSBAQCBpbmxpbmUgY29uc3QgVCBHQ1NlZ21lbnRlZEFycmF5
PFQ+OjpyZW1vCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGlubGluZSBib29sIEdDU2VnbWVudGVk
QXJyYXk8VD46OmlzRW1wdHkoKQogeworICAgIC8vIFRoaXMgaGFwcGVucyB0byBiZSBzYWZlIHRv
IGNhbGwgY29uY3VycmVudGx5LiBJdCdzIGltcG9ydGFudCB0byBwcmVzZXJ2ZSB0aGF0IGNhcGFi
aWxpdHkuCiAgICAgaWYgKG1fdG9wKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1f
c2VnbWVudHMuaGVhZCgpLT5uZXh0KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc2VnbWVudHMuaGVh
ZCgpLT5uZXh0KCktPm1fdG9wID09IHNfc2VnbWVudENhcGFjaXR5KTsKKyAgICBpZiAobV9zZWdt
ZW50cy5oZWFkKCktPm5leHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgorI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50LmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
Ik1hcmtlZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0Lmgi
CkBAIC0yODEsNyArMjgyLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgICwgbV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRv
cj4oKnRoaXMsICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1
ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91
bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFpbnRTZXQoc3Rk
OjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAgICwgbV9oYW5k
bGVTZXQodm0pCiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tT
ZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJS
b3V0aW5lU2V0PigpKQpAQCAtNTk0LDcgKzU5NSw3IEBAIHZvaWQgSGVhcDo6aXRlcmF0ZUV4ZWN1
dGluZ0FuZENvbXBpbGluZ0MKICAgICAgICAgZnVuYyhjb2RlQmxvY2spOwogfQogCi12b2lkIEhl
YXA6OmFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpCit2b2lkIEhlYXA6OmFzc2VydE1hcmtT
dGFja3NFbXB0eSgpCiB7CiAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgCkBAIC02MDgsNiArNjA5
LDE1IEBAIHZvaWQgSGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkKICAgICAgICAg
b2sgPSBmYWxzZTsKICAgICB9CiAgICAgCisgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAorICAgICAg
ICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBpZiAodmlzaXRvci5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBkYXRhTG9nKCJGQVRBTDogVmlzaXRvciAiLCBSYXdQb2ludGVyKCZ2aXNpdG9yKSwgIiBp
cyBub3QgZW1wdHkhXG4iKTsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgIH0pOwor
ICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG9rKTsKIH0KIApAQCAtNzMwLDcgKzc0MCw3IEBAIHZv
aWQgSGVhcDo6ZW5kTWFya2luZygpCiAgICAgICAgICAgICB2aXNpdG9yLnJlc2V0KCk7CiAgICAg
ICAgIH0pOwogCi0gICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CisgICAgYXNzZXJ0
TWFya1N0YWNrc0VtcHR5KCk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVB
bGwoKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsK
QEAgLTkxMSw3ICs5MjEsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBK
U0NlCiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJl
RmVuY2VkKSB7CiAgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlz
TWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkp
IHsKICAgICAgICAgICAgIC8vIER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8g
YW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAv
LyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9z
c2libHlCbGFjayBvYmplY3QuIElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFy
a2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3Jt
YWwgbWFya2luZwpAQCAtOTI0LDE1ICs5MzQsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVy
ZWRTZXQoY29uc3QgSlNDZQogICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWlu
c3QgdGhpcyByYWNlOgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAg
IDEpIE9iamVjdCBzdGFydHMgb3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAg
Ly8gICAgIC0tPiBXZSBkbyBpc01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAg
ICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAg
ICAgMikgT2JqZWN0IGlzIG1hcmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAg
ICAzKSBPYmplY3QgaXMgc2Nhbm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAg
ICAgLS0+IFdlIGRvIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgog
ICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdv
dWxkIGhhdmUgbWFkZSB0aGUgb2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91
bGQKICAgICAgICAgICAgICAgICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJl
Y3Qgb3VyIG1pc3Rha2UuIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAg
ICAgICAvLyBpc01hcmtlZENvbmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0
cnVlLgotICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgewor
ICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRy
dWUuCisgICAgICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIEl0J3MgZGlmZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBz
aG91bGQgYmUgZ3JleSBvciBibGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBv
aW50LiBXZSBzYXkgYmxhY2sgY29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNl
bGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk1
OCw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJr
ZWQoY2VsbCkpOwogICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3Qq
IG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAv
LyBzdGF0ZSB0byBEZWZpbml0ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sg
YXQgYW55IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xs
ZWN0b3IgaGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBv
YmplY3QgX3dpbGxfCkBAIC0xMjgzLDEzICsxMjkzLDExIEBAIE5FVkVSX0lOTElORSBib29sIEhl
YXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICB9CiAgICAgICAgIAogICAgIGlmIChzbG90VmlzaXRv
ci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgbV9vcGFxdWVSb290cy5kZWxldGVP
bGRUYWJsZXMoKTsKKyAgICAgICAgCiAgICAgICAgIG1fc2NoZWR1bGVyLT5kaWRSZWFjaFRlcm1p
bmF0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0Vt
cHR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VJZk5lY2Vzc2Fy
eSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90
VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlSWZOZWNlc3Nhcnko
KTsKKyAgICAgICAgCisgICAgICAgIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogICAgICAgICAg
ICAgCiAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRvckRpZFJ1biBpbnRvIGFjY291bnQg
d2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxpa2VseSwKICAgICAgICAgLy8gd2Ug
ZG9uJ3QgaGF2ZSB0byBleGVjdXRlIHJvb3QgY29uc3RyYWludHMgYWdhaW4gdW5sZXNzIHRoZSBt
dXRhdG9yIGRpZCBydW4uIEF0IGEKQEAgLTEzMDUsOSArMTMxMyw5IEBAIE5FVkVSX0lOTElORSBi
b29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgLy8gV29uZGVyaW5nIHdoYXQgdGhp
cyBkb2VzPyBMb29rIGF0IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpLiBUaGUgRE9NIGFuZCBv
dGhlcnMgY2FuIGFsc28KICAgICAgICAgLy8gYWRkIHRoZWlyIG93biB1c2luZyBIZWFwOjphZGRN
YXJraW5nQ29uc3RyYWludCgpLgogICAgICAgICBib29sIGNvbnZlcmdlZCA9Ci0gICAgICAgICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90VmlzaXRvciwgTW9ub3Rv
bmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1
dGVDb252ZXJnZW5jZShzbG90VmlzaXRvcik7CiAgICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xv
dFZpc2l0b3IuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tz
RW1wdHkoKTsKKyAgICAgICAgICAgIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogICAgICAgICAg
ICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNlOjpFbmQpOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTE0ODksNiArMTQ5Nyw4IEBAIE5FVkVSX0lOTElORSBib29s
IEhlYXA6OmZpbmlzaENoYW5naW5nUGgKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2co
Y29ubiwgIjogR29pbmcgdG8gcGhhc2U6ICIsIG1fbmV4dFBoYXNlLCAiIChmcm9tICIsIG1fY3Vy
cmVudFBoYXNlLCAiKVxuIik7CiAgICAgCisgICAgbV9waGFzZVZlcnNpb24rKzsKKyAgICAKICAg
ICBib29sIHN1c3BlbmRlZEJlZm9yZSA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQobV9jdXJyZW50
UGhhc2UpOwogICAgIGJvb2wgc3VzcGVuZGVkQWZ0ZXIgPSB3b3JsZFNob3VsZEJlU3VzcGVuZGVk
KG1fbmV4dFBoYXNlKTsKICAgICAKQEAgLTE1MjYsNyArMTUzNiw3IEBAIE5FVkVSX0lOTElORSBi
b29sIEhlYXA6OmZpbmlzaENoYW5naW5nUGgKIAogdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5
KEdDQ29uZHVjdG9yIGNvbm4pCiB7Ci0gICAgaWYgKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhl
V29ybGRJc1N0b3BwZWQpIHsKKyAgICBpZiAobV93b3JsZElzU3RvcHBlZCkgewogICAgICAgICBk
YXRhTG9nKCJGQVRBTDogd29ybGQgYWxyZWFkeSBzdG9wcGVkLlxuIik7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTUzNyw3ICsxNTQ3LDcgQEAgdm9p
ZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29uZHVjdG9yIAogICAgIG1fbXV0YXRvckRpZFJ1
biA9IGZhbHNlOwogCiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwotICAgIG1fY29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworICAgIG1fd29ybGRJc1N0
b3BwZWQgPSB0cnVlOwogCiAgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAogICAgICAgICBbJl0gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewpAQCAtMTU3NCwxMSArMTU4NCwxMSBAQCBORVZFUl9J
TkxJTkUgdm9pZCBIZWFwOjpyZXN1bWVUaGVQZXJpcGhlCiAgICAgCiAgICAgbV9iYXJyaWVyc0V4
ZWN1dGVkID0gMDsKICAgICAKLSAgICBpZiAoIW1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29y
bGRJc1N0b3BwZWQpIHsKKyAgICBpZiAoIW1fd29ybGRJc1N0b3BwZWQpIHsKICAgICAgICAgZGF0
YUxvZygiRmF0YWw6IGNvbGxlY3RvciBkb2VzIG5vdCBiZWxpZXZlIHRoYXQgdGhlIHdvcmxkIGlz
IHN0b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IGZhbHNl
OworICAgIG1fd29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICAKICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBiZSB2YXN0bHkgaW1wcm92ZWQ6IHdlIHdhbnQgdG8gZ3JhYiB0aGUgbG9ja3MgaW4g
dGhlIG9yZGVyIGluIHdoaWNoIHRoZXkKICAgICAvLyBiZWNvbWUgYXZhaWxhYmxlLiBXZSBiYXNp
Y2FsbHkgd2FudCBhIGxvY2tBbnkoKSBtZXRob2QgdGhhdCB3aWxsIGxvY2sgd2hhdGV2ZXIgbG9j
ayBpcyBhdmFpbGFibGUKQEAgLTI1NzgsNyArMjU4OCwxMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVD
b25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDcyIs
ICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzLCBsYXN0VmVy
c2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgbXV0YWJsZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcnVuIHRoaXMgb25j
ZSBwZXIgZml4cG9pbnQuCisgICAgICAgICAgICBpZiAobGFzdFZlcnNpb24gPT0gbV9waGFzZVZl
cnNpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCiAgICAgICAgICAg
ICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3RyYWlu
dDogY29uc2VydmF0aXZlIHNjYW4iKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UucHJlcGFy
ZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKICAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNv
bnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKQEAgLTI1ODcsMTIgKzI2MDEsMTQgQEAgdm9pZCBIZWFw
OjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhj
b25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29uc2Vy
dmF0aXZlUm9vdHMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsYXN0VmVyc2lvbiA9IG1f
cGhhc2VWZXJzaW9uOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhp
c10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90VmlzaXRv
cik7CiAjZW5kaWYKQEAgLTI2MTMsNyArMjYyOSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0
cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNoIiwg
IlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFu
ZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNsb3RW
aXNpdG9yKTsKICAgICAgICAgfSwKQEAgLTI2MjEsNyArMjYzNyw3IEBAIHZvaWQgSGVhcDo6YWRk
Q29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAg
ICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAg
ICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2Ft
cGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2Ft
cGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2NDEsMjEgKzI2NTcsMjEgQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faml0
U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CiAgICAg
ICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7
CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFrIFNl
dHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlz
aXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgewogICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNpdG9y
KTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFy
a2luZyk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcmgiLCAi
V2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAo
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAgICAgICAgICAgICAgICBjdXJy
ZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKQEAgLTI2
NjQsNyArMjY4MCw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkR3IiwgIkRG
RyBXb3JrbGlzdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwg
Y29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJP
ZldvcmtsaXN0cygpOyBpLS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlz
dEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAg
ICAgCkBAIC0yNjg0LDcgKzI3MDAsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygp
CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2RlQmxv
Y2tzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IpIHsKICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tz
V2l0aG91dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayogY29k
ZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sgYXMg
YSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KQEAgLTI2OTUsMjMgKzI3MTEsNyBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwogICAgIAotICAgIG1fY29uc3RyYWludFNl
dC0+YWRkKAotICAgICAgICAiTXJtcyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIsCi0gICAg
ICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKSB7Ci0gICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhhdCB3ZSBp
bnRyb2R1Y2VkIHdvcmshCi0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtT
dGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAgICAgICBzbG90
VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIigiLCBzaXpl
LCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRy
YW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKLSAgICAgICAgICAgIG1f
cmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkp
OwotICAgICAgICB9LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsK
LSAgICAgICAgICAgIHJldHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1h
cmtTdGFjay0+c2l6ZSgpOwotICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIG1fY29uc3RyYWludFNldC0+YWRkKHN0ZDo6bWFr
ZV91bmlxdWU8TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ+KCp0aGlzKSk7CiB9CiAKIHZvaWQg
SGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJh
aW50PiBjb25zdHJhaW50KQpAQCAtMjc5NCwxNiArMjc5NCw2IEBAIHZvaWQgSGVhcDo6YWxsb3dD
b2xsZWN0aW9uKCkKICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrLnVubG9jaygpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3Io
Y29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxs
ZWxTbG90VmlzaXRvckxvY2spOwotICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwot
ICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKLSAgICBmb3IgKGF1dG8mIHNsb3RWaXNp
dG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgZnVuYygqc2xvdFZpc2l0b3Ip
OwotfQotCiB2b2lkIEhlYXA6OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKQog
ewogICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3LDQgKzI4Mzcs
MjQgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwogICAgIG1faGVh
cEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAKK3ZvaWQgSGVh
cDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0ZXgp
OworICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0aW9u
VmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxsZWwo
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICB1bnNp
Z25lZCBpbml0aWFsUmVmQ291bnQgPSB0YXNrLT5yZWZDb3VudCgpOworICAgIHNldEJvbnVzVmlz
aXRvclRhc2sodGFzayk7CisgICAgdGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
KyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKG51bGxwdHIpOworICAgIHsKKyAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAgIHdoaWxlICh0YXNrLT5y
ZWZDb3VudCgpID4gaW5pdGlhbFJlZkNvdW50KQorICAgICAgICAgICAgbV9tYXJraW5nQ29uZGl0
aW9uVmFyaWFibGUud2FpdChtX21hcmtpbmdNdXRleCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgogI2luY2x1ZGUg
IldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KQEAgLTczLDYgKzc0LDcgQEAgY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE1hY2hpbmVUaHJlYWRzOwogY2xhc3MgTWFya1N0YWNr
QXJyYXk7CitjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtlZEFs
bG9jYXRvcjsKIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOwogY2xhc3MgTWFya2luZ0NvbnN0
cmFpbnQ7CkBAIC0xMTQsNyArMTE2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzX3RpbWVDaGVja1Jlc29sdXRpb24gPSAxNjsKIAogICAgIHN0YXRpYyBib29sIGlzTWFy
a2VkKGNvbnN0IHZvaWQqKTsKLSAgICBzdGF0aWMgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShj
b25zdCB2b2lkKik7CiAgICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChIZWFwVmVyc2lv
biwgY29uc3Qgdm9pZCopOwogICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29uc3Qg
dm9pZCopOwpAQCAtMTU0LDcgKzE1NSw4IEBAIHB1YmxpYzoKICAgICBNdXRhdG9yU3RhdGUgbXV0
YXRvclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhdGU7IH0KICAgICBzdGQ6Om9w
dGlvbmFsPENvbGxlY3Rpb25TY29wZT4gY29sbGVjdGlvblNjb3BlKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xsZWN0aW9uU2NvcGU7IH0KICAgICBib29sIGhhc0hlYXBBY2Nlc3MoKSBjb25zdDsKLSAg
ICBib29sIGNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgY29uc3Q7Cisg
ICAgYm9vbCB3b3JsZElzU3RvcHBlZCgpIGNvbnN0OworICAgIGJvb2wgd29ybGRJc1J1bm5pbmco
KSBjb25zdCB7IHJldHVybiAhd29ybGRJc1N0b3BwZWQoKTsgfQogCiAgICAgLy8gV2UncmUgYWx3
YXlzIGJ1c3kgb24gdGhlIGNvbGxlY3Rpb24gdGhyZWFkcy4gT24gdGhlIG1haW4gdGhyZWFkLCB0
aGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSdyZQogICAgIC8vIGhlbHBpbmcgaGVhcC4KQEAgLTM0OSw2
ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbGxvd0NvbGxlY3Rpb24oKTsKICAgICAKICAg
ICB1aW50NjRfdCBtdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbXV0
YXRvckV4ZWN1dGlvblZlcnNpb247IH0KKyAgICB1aW50NjRfdCBwaGFzZVZlcnNpb24oKSBjb25z
dCB7IHJldHVybiBtX3BoYXNlVmVyc2lvbjsgfQogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJh
aW50Pik7CiAgICAgCkBAIC0zNTgsNiArMzYxLDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lk
IGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2smKTsK
ICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVy
Q2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1bmMp
CisgICAgeworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQo
U2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC0zNzMsNiArMzg3LDcgQEAg
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogICAgIGZyaWVuZCBjbGFz
cyBKSVRTdHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OworICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKICAgICBmcmll
bmQgY2xhc3MgTWFya2VkU3BhY2U7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsK
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CkBAIC01MjUsOCArNTQwLDEwIEBAIHByaXZh
dGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGl0ZXJhdGVFeGVjdXRp
bmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5jJik7
CiAgICAgCi0gICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICB2b2lk
IGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBjb25z
dCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAgICAg
Y29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTYsNiBAQCBwcml2
YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90Vmlz
aXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3Qg
RnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNrIG1f
aGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9jb2RlQmxv
Y2tzOwpAQCAtNjMzLDggKzY0Nyw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1iZXJP
ZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vy
c1Nob3VsZEV4aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0ZXg7Ci0g
ICAgSGFzaFNldDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsKKyAgICBDb25jdXJyZW50UHRy
SGFzaFNldCBtX29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2Nr
RnJhZ21lbnRMZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1NSw3IEBAIHByaXZhdGU6CiAgICAg
TGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVu
dDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVzVmlz
aXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1fYmxv
Y2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKQEAgLTY1Nyw3ICs2NzEsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBuZWVkRmluYWxpemVCaXQgPSAxdSA8PCA0dTsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsgLy8gQWxs
b3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxlLgogICAg
IEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwotICAgIGJvb2wgbV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dvcmxkSXNT
dG9wcGVkIHsgZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1fYmVmb3JlR0M7CiAgICAgTW9u
b3RvbmljVGltZSBtX2FmdGVyR0M7CiAgICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwpAQCAt
NjcyLDYgKzY4Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RocmVhZElzU3RvcHBpbmcgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9yRGlkUnVuIHsgdHJ1ZSB9OwogICAgIHVpbnQ2NF90
IG1fbXV0YXRvckV4ZWN1dGlvblZlcnNpb24geyAwIH07CisgICAgdWludDY0X3QgbV9waGFzZVZl
cnNpb24geyAwIH07CiAgICAgQm94PExvY2s+IG1fdGhyZWFkTG9jazsKICAgICBSZWZQdHI8QXV0
b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3RocmVhZENvbmRpdGlvbjsgLy8gVGhlIG11dGF0b3Ig
bXVzdCBub3Qgd2FpdCBvbiB0aGlzLiBJdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2NrLgogICAgIFJl
ZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MywzMCArNjMs
MjAgQEAgaW5saW5lIGJvb2wgSGVhcDo6aGFzSGVhcEFjY2VzcygpIGNvbnN0CiAgICAgcmV0dXJu
IG1fd29ybGRTdGF0ZS5sb2FkKCkgJiBoYXNBY2Nlc3NCaXQ7CiB9CiAKLWlubGluZSBib29sIEhl
YXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgY29uc3QKK2lubGlu
ZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb2xs
ZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZDsKKyAgICByZXR1cm4gbV93b3JsZElz
U3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG1ldGhv
ZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBtYXJraW5nVmVyc2lvbigpIHF1aWNrbHkuCisvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5M
SU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NF
UlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKICAgICBIZWFwQ2Vs
bCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxs
LT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0
aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRC
bG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZCgKLSAgICAgICAgYmxvY2sudm0oKS0+
aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOwotfQotCi1BTFdBWVNf
SU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCogcmF3Q2Vs
bCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0Nl
bGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAgICAgICByZXR1cm4g
Y2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKLSAgICBNYXJrZWRCbG9jayYgYmxv
Y2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5pc01hcmtlZENvbmN1
cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdW
ZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVybiBibG9jay5pc01hcmtlZChibG9jay52bSgpLT5o
ZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJz
aW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpAQCAtMTc5LDE5ICsxNjksMTkgQEAgaW5saW5lIHZv
aWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPAogCiBpbmxpbmUgdm9pZCBIZWFwOjppbmNy
ZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBt
X2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1h
eUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgr
KzsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0g
ICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVX
b3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElz
U3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6
OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQoIW1h
eUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVk
KTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAg
ICBtX2RlZmVycmFsRGVwdGgtLTsKICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9kaWREZWZlckdD
V29yaykpIHsKQEAgLTI2OSw0ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVj
ZXNzYXJ5KCkKICAgICAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgordm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYg
ZnVuYykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRv
ckxvY2spOworICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIGZ1bmMoKm1f
bXV0YXRvclNsb3RWaXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJh
bGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFw
c2hvdEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjksNyArNjksNyBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3Qo
CiB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQogewog
ICAgIEFTU0VSVChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOwot
ICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJU
KEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGluZ05vZGVGb3JDZWxs
KGNlbGwpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9MYXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcg
Kzc2LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZCgpIHsgcmV0
dXJuIG1faXNNYXJrZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsgfQogICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7
IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqLCBEZXBlbmRlbmN5
KSB7IHJldHVybiBpc01hcmtlZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2Vk
Q29uY3VycmVudGx5KEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24sIEhlYXBDZWxs
KikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyByZXR1cm4gaXNN
YXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29sIGhhc1ZhbGlk
Q2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzMsMTQgKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBVc2UgdGhpcyBs
b2NrIHNjb3BlIGxpa2Ugc286CiAvLyBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKGhl
YXAsIGxvY2spOwogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci1Mb2NrZXI8TG9ja1R5cGU+
IGxvY2tEdXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNzZWRMb2NrKQorYXV0
byBsb2NrRHVyaW5nTWFya2luZyhIZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFzc2VkTG9jaykKIHsK
LSAgICBMb2NrVHlwZSogbG9jazsKLSAgICBpZiAoaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQo
KSkKLSAgICAgICAgbG9jayA9ICZwYXNzZWRMb2NrOwotICAgIGVsc2UKLSAgICAgICAgbG9jayA9
IG51bGxwdHI7Ci0gICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4obG9jayk7CisgICAgcmV0dXJu
IGhvbGRMb2NrSWYocGFzc2VkTG9jaywgaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6Ok1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCisgICAgOiBNYXJraW5nQ29uc3RyYWlu
dCgiTXNtIiwgIk1hcmsgU3RhY2sgTWVyZ2luZyIsIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5
ZWRCeUV4ZWN1dGlvbikKKyAgICAsIG1faGVhcChoZWFwKQoreworfQorCitNYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludDo6fk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCkKK3sKK30KKworZG91
YmxlIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90Vmlz
aXRvciYpCit7CisgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSAr
IG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKK30KKwordm9pZCBNYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUg
ZW5zdXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3Qg
bmVlZCB0byBwcm9kdWNlCisgICAgLy8gYW55bW9yZSB3b3JrLgorICAgIHNpemVfdCBzaXplID0g
bV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFj
ay0+c2l6ZSgpOworICAgIHZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOworICAgIAorICAg
IGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCIoIiwgc2l6ZSwgIikiKTsK
K30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Ojpl
eGVjdXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2hlYXAubV9tdXRhdG9y
TWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKKyAgICBt
X2hlYXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFj
aygpKTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25z
dHJhaW50IHsKK3B1YmxpYzoKKyAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJik7
CisgICAgfk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1
aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29u
c3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgQ29uc3Ry
YWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAg
Citwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NCw2ICs0NDQsMzMgQEAgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmFzc2VydE5vVW5zd2VwdCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJr
ZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7CisgICAgY2xhc3Mg
VGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAg
ICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVycmlkZQorICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
ICAgICBtX2luZGV4ID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkuZmluZEJpdChtX2lu
ZGV4LCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxv
Y2tzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
IHJldHVybiBtX2FsbG9jYXRvci5tX2Jsb2Nrc1ttX2luZGV4KytdOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7
CisgICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OworICAgICAgICBMb2NrIG1fbG9jazsKKyAg
ICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykpOworfQorCiB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRy
aWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3
dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwMyw2ICsxMDQsOCBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2so
Y29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJlZlB0cjxTaGFy
ZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3Vy
Y2UoKTsKKyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAg
ICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTgsNyArMjU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lk
Kik7CiAgICAgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qg
dm9pZCopOwotICAgIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2lu
Z1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqLCBE
ZXBlbmRlbmN5KTsKICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVu
ZGVuY3kpOwogICAgICAgICAKQEAgLTI4MCw3ICsyNzksNiBAQCBwdWJsaWM6CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtzU3Rh
bGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIERlcGVuZGVuY3lXaXRoPGJvb2w+
IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7
CiAgICAgCiAgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbik7CiAgICAgICAgIApAQCAtNDk4LDE4ICs0OTYsMTIgQEAgaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21h
cmtpbmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+IE1h
cmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2lu
Z1ZlcnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247
Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24g
IT0gbWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6
YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgYXV0byByZXN1
bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21h
cmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9u
KSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1cm4g
cmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIGRlcGVuZGVuY3kodmVyc2lvbik7CiB9CiAK
IGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQpA
QCAtNTI0LDE1ICs1MTYsMTAgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkUmF3
KGNvbgogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUo
bWFya2luZ1ZlcnNpb24pID8gZmFsc2UgOiBpc01hcmtlZFJhdyhwKTsKLX0KLQotaW5saW5lIGJv
b2wgTWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uLCBjb25zdCB2b2lkKiBwKQotewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFs
ZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAocmVzdWx0LnZhbHVlKQor
ICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJ
S0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCByZXN1bHQuZGVwZW5kZW5jeSk7
CisgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kodmVyc2lv
bikpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCog
cCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDExIEBA
IHB1YmxpYzoKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUg
ZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9v
bCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQogICAgIAorICAgIFdl
YWtTZXQqIGFjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmJl
Z2luKCk7IH0KKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1fYWN0
aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0JlZ2lu
KCkgeyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCog
bmV3QWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmVuZCgp
OyB9CisgICAgCiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxl
KCkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNpemVf
dCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWlu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsyNywxOCBAQAogI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmlz
aXRDb3VudGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1NYXJraW5nQ29uc3RyYWludDo6TWFy
a2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVv
dXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxp
dHkpCi0gICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCi0gICAgLCBtX25h
bWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0
ZUZ1bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQotewotfQorc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1h
cmtpbmdDb25zdHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRv
ciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHkpCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmlu
ZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9s
YXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFy
YWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRl
ZE5hbWUpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0
aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQogICAgICwgbV92b2xh
dGlsaXR5KHZvbGF0aWxpdHkpCisgICAgLCBtX2NvbmN1cnJlbmN5KGNvbmN1cnJlbmN5KQorICAg
ICwgbV9wYXJhbGxlbGlzbShwYXJhbGxlbGlzbSkKIHsKIH0KIApAQCAtNjMsMTQgKzUxLDc0IEBA
IHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFzdFZpc2l0Q291
bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0
KQorQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRv
cik7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHJlc3VsdCA9IGV4ZWN1dGVJbXBsKHZpc2l0
b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsK
KyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBk
YXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIu
dmlzaXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CisgICAgaWYgKHJlc3VsdCA9PSBDb25zdHJh
aW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIC8vIEl0J3MgaWxsZWdhbCB0byBw
cm9kdWNlIHBhcmFsbGVsIHdvcmsgaWYgeW91IGhhdmVuJ3QgYWR2ZXJ0aXNlZCBpdCB1cGZyb250
IGJlY2F1c2UgdGhlIHNvbHZlcgorICAgICAgICAvLyBoYXMgb3B0aW1pemF0aW9ucyBmb3IgY29u
c3RyYWludHMgdGhhdCBwcm9taXNlIHRvIG5ldmVyIHByb2R1Y2UgcGFyYWxsZWwgd29yay4KKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9wYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxp
c206OlBhcmFsbGVsKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZG91YmxlIE1h
cmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVp
Y2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnBy
ZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9j
a2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
ICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0
IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7Ci0g
ICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBtX2xh
c3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAg
ZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlz
aXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBwcmVw
YXJlVG9FeGVjdXRlSW1wbChjb25zdHJhaW50U29sdmluZ0xvY2tlciwgdmlzaXRvcik7CisgICAg
bV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYgKHZl
cmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIs
IGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQo
KSwgIiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50
ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGRvUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9y
KTsKKyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAg
ICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50
ZXIudmlzaXRDb3VudCgpLCAiIGluIGRvUGFyYWxsZWxXb3JrKSIpOworICAgIHsKKyAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBtX2xhc3RWaXNpdENvdW50
ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBmaW5pc2hQYXJhbGxl
bFdvcmtJbXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVy
LnZpc2l0Q291bnQoKTsKKyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3Vu
dCgpKQorICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAi
LCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGZpbmlzaFBhcmFsbGVsV29yaykiKTsK
K30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBh
cmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQu
aAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEyIEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiQ29uc3RyYWludENvbmN1cnJlbmN5LmgiCisjaW5jbHVkZSAi
Q29uc3RyYWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHku
aCIKLSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2lu
Y2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
QEAgLTQ0LDE3ICs0NCwxMSBAQCBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2lu
Z0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICBDU3Ry
aW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSwK
KyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpD
b25jdXJyZW50LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFy
YWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtp
bmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBu
YW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgfk1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+
TWFya2luZ0NvbnN0cmFpbnQoKTsKICAgICAKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KICAgICAKQEAgLTY1LDMyICs1OSwzOSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRD
b3VudDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZp
c2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
OworICAgIAorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwog
ICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
LSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rp
b24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSAr
IHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0KKyAgICB2b2lkIHByZXBhcmVUb0V4
ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90
VmlzaXRvciYpOworICAgIAorICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsK
KyAgICB2b2lkIGZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOwogICAgIAogICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxp
dHk7IH0KICAgICAKKyAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3koKSBjb25z
dCB7IHJldHVybiBtX2NvbmN1cnJlbmN5OyB9CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBh
cmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0
b3ImKSA9IDA7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4
ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwg
U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RW
aXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZp
c2l0b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJh
aW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9p
bmRleCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBD
U3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0
aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRDb25j
dXJyZW5jeSBtX2NvbmN1cnJlbmN5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFs
bGVsaXNtOwogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9s
b2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYwICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRl
ICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3
dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFz
cyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAg
RXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYg
dmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fc2V0KHNldCkKLSAg
ICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlk
VmlzaXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAgIAot
ICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0LgotICAgIGJvb2wgZHJhaW4oQml0
VmVjdG9yJiB1bmV4ZWN1dGVkKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1
bmV4ZWN1dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAgICAgICAgICAgIHVu
ZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQotCi0gICAgdm9pZCBleGVjdXRl
KHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0
ZShtX3Zpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7Ci0gICAgICAgIG1f
ZXhlY3V0ZWQuc2V0KGluZGV4KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE1hcmtpbmdD
b25zdHJhaW50U2V0JiBtX3NldDsKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIE1v
bm90b25pY1RpbWUgbV90aW1lb3V0OwotICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOwotICAgIGJv
b2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci19OwotCi1NYXJraW5nQ29uc3RyYWlu
dFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtp
bmdDb25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsKIH0KIApA
QCAtMTA3LDE4ICs2NSw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFy
a2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rpb24sIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCi17Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8
TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKLX0KLQotdm9pZCBNYXJraW5nQ29u
c3RyYWludFNldDo6YWRkKAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1l
b3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRv
ciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHkpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+
IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29u
Y3VycmVuY3kgY29uY3VycmVuY3kpCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2lu
Z0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24p
LCB2b2xhdGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92
ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5KSk7CiB9CiAKIHZvaWQgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTEzMSw5ICs4MCw5IEBAIHZvaWQgTWFya2luZ0NvbnN0
cmFpbnRTZXQ6OmFkZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9
CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90Vmlz
aXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3Ry
YWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAg
IGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsK
KyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMTQ4LDI3ICs5NywyNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojpp
c1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEV4ZWN1dGlvbkNvbnRl
eHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyIHNvbHZlcigqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0g
bV9pdGVyYXRpb24rKzsKICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAg
ZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICI6Iik7CiAKLSAgICAvLyBJZiB0aGVyZSBhcmUgYW55
IGNvbnN0cmFpbnRzIHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlz
IGN5Y2xlLCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlm
ICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2
aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFp
bnRzIG90aGVyCi0gICAgLy8gdGhhbiByb290cy4KLSAgICBpZiAoaXRlcmF0aW9uID09IDEpCisg
ICAgaWYgKGl0ZXJhdGlvbiA9PSAxKSB7CisgICAgICAgIC8vIEZpcnN0IGl0ZXJhdGlvbiBpcyBi
ZWZvcmUgYW55IHZpc2l0b3IgZHJhaW5pbmcsIHNvIGl0J3MgdW5saWtlbHkgdG8gdHJpZ2dlciBh
bnkgY29uc3RyYWludHMKKyAgICAgICAgLy8gb3RoZXIgdGhhbiByb290cy4KKyAgICAgICAgc29s
dmVyLmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KICAgICAKLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0
Z3Jvd3RocykpCisgICAgaWYgKGl0ZXJhdGlvbiA9PSAyKSB7CisgICAgICAgIHNvbHZlci5kcmFp
bihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
ICAgICAKICAgICAvLyBXZSB3YW50IHRvIGtlZXAgcHJlZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNv
bnN0cmFpbnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50ZWQKICAgICAvLyBl
dmVuIGluIGEgc3RvcC10aGUtd29ybGQgR0MgLSB1bnRpbCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBU
aGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBnbyB0b3RhbGx5CkBAIC0yMTUsMzMgKzE2NCwxNiBAQCBi
b29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgICAgICAgICByZXR1
cm4gYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgpOwogICAgICAgICB9KTsKICAgICAK
LSAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRlcmVkKSB7Ci0g
ICAgICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOwotICAgICAgICAKLSAgICAg
ICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2Ug
dG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQotICAgICAgICAvLyB3ZSBmaW5kIHdv
cmsuCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25z
dHJhaW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCi0gICAgICAgIC8vIGJl
dHRlciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKLSAgICAgICAgLy8gLSBJ
ZiB0aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBydW5uaW5nLgotICAgICAgICAvLyAtIElmIHRo
ZSB2aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgotICAgICAgICAvLyAt
IEVsc2UgcnVuIHVudGlsIHRpbWVvdXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzIKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQu
ZGlkVmlzaXRTb21ldGhpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Cisg
ICAgc29sdmVyLmNvbnZlcmdlKG1fb3JkZXJlZCk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgLy8gUmV0dXJuIHRydWUgaWYgd2UndmUgY29udmVyZ2VkLiBUaGF0IGhhcHBlbnMgaWYgd2Ug
ZGlkIG5vdCB2aXNpdCBhbnl0aGluZy4KKyAgICByZXR1cm4gIXNvbHZlci5kaWRWaXNpdFNvbWV0
aGluZygpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsK
ICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWludC0+
ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSk7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CiAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKKwogY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgewogcHVibGljOgotICAgIE1hcmtpbmdDb25zdHJhaW50
U2V0KCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYpOwogICAgIH5NYXJraW5nQ29u
c3RyYWludFNldCgpOwogICAgIAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CkBAIC00MSwx
NSArNDQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2
aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3Ry
YWludFZvbGF0aWxpdHkpOwotICAgIAotICAgIHZvaWQgYWRkKAotICAgICAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwKLSAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6
RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eSk7CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENv
bnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCk7CiAgICAgCiAgICAgdm9pZCBhZGQoc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CiAgICAgCkBAIC02MCwyMSArNTcsMTkg
QEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFs
bCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAg
ICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWlu
ZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKLSAgICAgICAgU2xv
dFZpc2l0b3ImLAotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1l
OjppbmZpbml0eSgpKTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYp
OwogICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBz
aGVuYW5pZ2Fucy4KICAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKICAgICAKIHBy
aXZhdGU6Ci0gICAgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgRXhl
Y3V0aW9uQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7
CiAgICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9u
b3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xv
dFZpc2l0b3ImKTsKICAgICAKLSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3Rvbmlj
VGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBk
aWRWaXNpdFNvbWV0aGluZyk7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIEJpdFZlY3Rv
ciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhp
bmcpOwogICAgIAorICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVk
Um9vdHM7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CiAgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVy
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IAorCitNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoTWFy
a2luZ0NvbnN0cmFpbnRTZXQmIHNldCkKKyAgICA6IG1faGVhcChzZXQubV9oZWFwKQorICAgICwg
bV9tYWluVmlzaXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAgICAsIG1fc2V0
KHNldCkKK3sKKyAgICBtX2hlYXAuZm9yRWFjaFNsb3RWaXNpdG9yKAorICAgICAgICBbJl0gKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBtX3Zpc2l0Q291bnRlcnMuYXBwZW5k
KFZpc2l0Q291bnRlcih2aXNpdG9yKSk7CisgICAgICAgIH0pOworfQorCitNYXJraW5nQ29uc3Ry
YWludFNvbHZlcjo6fk1hcmtpbmdDb25zdHJhaW50U29sdmVyKCkKK3sKK30KKworYm9vbCBNYXJr
aW5nQ29uc3RyYWludFNvbHZlcjo6ZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAoreworICAgIGZv
ciAoY29uc3QgVmlzaXRDb3VudGVyJiB2aXNpdENvdW50ZXIgOiBtX3Zpc2l0Q291bnRlcnMpIHsK
KyAgICAgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyOjpleGVjdXRlKFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2Nv
cGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIG1f
cGlja05leHRJc1N0aWxsQWN0aXZlID0gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9udW1U
aHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKKyAgICAgICAgZGF0YUxvZyhwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0ID8gIlAi
IDogIk4iLCAiPCIpOworCisgICAgbV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAgICAg
ICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeyBydW5FeGVjdXRpb25UaHJlYWQodmlzaXRv
ciwgcHJlZmVyZW5jZSwgcGlja05leHQpOyB9KTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgZGF0YUxvZygiPiIpOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbnVtVGhyZWFk
c1RoYXRNYXlQcm9kdWNlV29yayk7CisgICAgICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXhU
b1J1biA6IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwpCisgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4
VG9SdW5dLT5maW5pc2hQYXJhbGxlbFdvcmsobV9tYWluVmlzaXRvcik7CisgICAgbV9kaWRFeGVj
dXRlSW5QYXJhbGxlbC5jbGVhcigpOworICAgIAorICAgIGlmICghbV90b0V4ZWN1dGVTZXF1ZW50
aWFsbHkuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6IG1f
dG9FeGVjdXRlU2VxdWVudGlhbGx5KQorICAgICAgICAgICAgZXhlY3V0ZSgqbV9zZXQubV9zZXRb
aW5kZXhUb1J1bl0pOworICAgICAgICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5jbGVhcigpOwor
ICAgIH0KKyAgICAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV90b0V4ZWN1dGVJblBhcmFsbGVs
LmlzRW1wdHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdG9FeGVjdXRlSW5QYXJhbGxlbFNl
dC5iaXRDb3VudCgpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZHJhaW4o
Qml0VmVjdG9yJiB1bmV4ZWN1dGVkKQoreworICAgIGF1dG8gaXRlciA9IHVuZXhlY3V0ZWQuYmVn
aW4oKTsKKyAgICBhdXRvIGVuZCA9IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0g
ZW5kKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHsKKyAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuICppdGVyKys7Cisg
ICAgICAgIH0pOworICAgIGV4ZWN1dGUoTmV4dENvbnN0cmFpbnRGaXJzdCwgcGlja05leHQpOwor
ICAgIHVuZXhlY3V0ZWQuY2xlYXJBbGwoKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNv
bHZlcjo6Y29udmVyZ2UoY29uc3QgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4mIG9yZGVyKQor
eworICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKG9yZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBz
aXplX3QgaW5kZXggPSAwOworCisgICAgLy8gV2Ugd2FudCB0byBleGVjdXRlIHRoZSBmaXJzdCBj
b25zdHJhaW50IHNlcXVlbnRpYWxseSBpZiB3ZSB0aGluayBpdCB3aWxsIHF1aWNrbHkgZ2l2ZSB1
cyBhCisgICAgLy8gcmVzdWx0LiBJZiB3ZSByYW4gaXQgaW4gcGFyYWxsZWwgdG8gb3RoZXIgY29u
c3RyYWludHMsIHRoZW4gd2UgbWlnaHQgZW5kIHVwIGhhdmluZyB0byB3YWl0IGZvcgorICAgIC8v
IHRob3NlIG90aGVyIGNvbnN0cmFpbnRzIHRvIGZpbmlzaCwgd2hpY2ggd291bGQgYmUgYSB3YXN0
ZSBvZiB0aW1lIHNpbmNlIGR1cmluZyBjb252ZXJnZW5jZSBpdCdzCisgICAgLy8gZW1waXJpY2Fs
bHkgbW9zdCBvcHRpbWFsIHRvIHJldHVybiB0byBkcmFpbmluZyBhcyBzb29uIGFzIGEgY29uc3Ry
YWludCBnZW5lcmF0ZXMgd29yay4gTW9zdAorICAgIC8vIGNvbnN0cmFpbnRzIGRvbid0IGdlbmVy
YXRlIGFueSB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUsIGFuZCB3aGVuIHRoZXkgZG8gZ2VuZXJhdGUg
d29yaywgdGhleSB0ZW5kCisgICAgLy8gdG8gZ2VuZXJhdGUgZW5vdWdoIG9mIGl0IHRvIGZlZWQg
YSBkZWNlbnQgZHJhaW5pbmcgY3ljbGUuIFRoZXJlZm9yZSwgcGF1c2UgdGltZXMgYXJlIGxvd2Vz
dCBpZgorICAgIC8vIHdlIGdldCB0aGUgaGVjayBvdXQgb2YgaGVyZSBhcyBzb29uIGFzIGEgY29u
c3RyYWludCBnZW5lcmF0ZXMgd29yay4gSSB0aGluayB0aGF0IHBhcnQgb2Ygd2hhdAorICAgIC8v
IG1ha2VzIHRoaXMgb3B0aW1hbCBpcyB0aGF0IHdlIGFsc28gbmV2ZXIgYWJvcnQgcnVubmluZyBh
IGNvbnN0cmFpbnQgZWFybHksIHNvIHdoZW4gd2UgZG8gcnVuCisgICAgLy8gb25lLCBpdCBoYXMg
YW4gb3Bwb3J0dW5pdHkgdG8gZ2VuZXJhdGUgYXMgbXVjaCB3b3JrIGFzIGl0IHBvc3NpYmx5IGNh
bi4KKyAgICBpZiAob3JkZXJbaW5kZXhdLT5xdWlja1dvcmtFc3RpbWF0ZShtX21haW5WaXNpdG9y
KSkgeworICAgICAgICBleGVjdXRlKCpvcmRlcltpbmRleCsrXSk7CisgICAgICAgIAorICAgICAg
ICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKQorICAgICAgICAgICAgJiYgKG9y
ZGVyLmlzRW1wdHkoKSB8fCBkaWRWaXNpdFNvbWV0aGluZygpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHsKKyAgICAgICAgICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSBvcmRlci5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0
cmFpbnQgPSAqb3JkZXJbaW5kZXgrK107CisgICAgICAgICAgICByZXR1cm4gY29uc3RyYWludC5p
bmRleCgpOworICAgICAgICB9KTsKKyAgICAKKyAgICBleGVjdXRlKFBhcmFsbGVsV29ya0ZpcnN0
LCBwaWNrTmV4dCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUo
TWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCit7CisgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0
KGNvbnN0cmFpbnQuaW5kZXgoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjb25zdHJh
aW50LnByZXBhcmVUb0V4ZWN1dGUoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX21haW5WaXNpdG9yKTsK
KyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1
dGUobV9tYWluVmlzaXRvcik7CisgICAgZGlkRXhlY3V0ZShwYXJhbGxlbGlzbSwgY29uc3RyYWlu
dC5pbmRleCgpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0
aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZl
cmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkK
K3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOworICAg
ICAgICB1bnNpZ25lZCBpbmRleFRvUnVuOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRyeVBhcmFsbGVsV29yayA9
IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0g
bV90b0V4ZWN1dGVJblBhcmFsbGVsLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgIGRvUGFy
YWxsZWxXb3JrTW9kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgYXV0byB0cnlOZXh0Q29uc3RyYWludCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHBpY2tSZXN1bHQgPSBwaWNrTmV4dCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFwaWNrUmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9waWNrTmV4dElzU3RpbGxBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdl
dCgqcGlja1Jlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVz
dWx0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LmNvbmN1cnJlbmN5
KCkgPT0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNrUmVzdWx0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFs
bGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmsrKzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RyYWludC5wcmVwYXJlVG9FeGVjdXRlKGxvY2tlciwgdmlzaXRvcik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKHByZWZlcmVuY2UgPT0gUGFyYWxsZWxXb3JrRmlyc3QpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRyeVBhcmFsbGVsV29yaygpIHx8IHRyeU5leHRDb25zdHJhaW50KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodHJ5TmV4dENvbnN0cmFpbnQoKSB8fCB0cnlQYXJhbGxlbFdvcmso
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2
ZSBub3RoaW5nIGxlZnQgdG8gcnVuLiBUaGUgb25seSB3YXkgZm9yIHVzIHRvIGhhdmUgbW9yZSB3
b3JrIGlzCisgICAgICAgICAgICAgICAgLy8gaWYgc29tZW9uZSBpcyBydW5uaW5nIGEgY29uc3Ry
YWludCB0aGF0IG1heSBwcm9kdWNlIHBhcmFsbGVsIHdvcmsuCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKCFtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmspCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogQW55IHdhaXRpbmcgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5p
bmcgdGhlIFNsb3RWaXNpdG9yLgorICAgICAgICAgICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQg
d291bGQgYmUgcHJvZml0YWJsZS4KKyAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1f
bG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1hcmtp
bmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkKKyAgICAg
ICAgICAgIGNvbnN0cmFpbnQuZG9QYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKHZpc2l0b3IpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVj
dXRlSW5QYXJhbGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9kaWRFeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFy
YWxsZWwudGFrZUZpcnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCB2
YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gaW5kZXhUb1J1bjsgfSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjb25z
dHJhaW50LnBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkK
KyAgICAgICAgICAgICAgICAgICAgbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrLS07Cisg
ICAgICAgICAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAg
ICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleFRv
UnVuKTsKKyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChp
bmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRFeGVj
dXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgpCit7
CisgICAgbV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25z
dHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJh
bGxlbC5hcHBlbmQoaW5kZXgpOworICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0
KGluZGV4KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKKyNpbmNsdWRlIDx3
dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVk
TGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSGVhcDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50OworY2xhc3MgTWFya2luZ0NvbnN0
cmFpbnRTZXQ7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShNYXJraW5nQ29uc3RyYWludFNvbHZlcik7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIo
TWFya2luZ0NvbnN0cmFpbnRTZXQmKTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoKTsK
KyAgICAKKyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3Q7CisgICAgCisgICAgZW51
bSBTY2hlZHVsZXJQcmVmZXJlbmNlIHsKKyAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisgICAg
ICAgIE5leHRDb25zdHJhaW50Rmlyc3QKKyAgICB9OworCisgICAgdm9pZCBleGVjdXRlKFNjaGVk
dWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBw
aWNrTmV4dCk7CisgICAgCisgICAgdm9pZCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpOwor
ICAgIAorICAgIHZvaWQgY29udmVyZ2UoY29uc3QgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4m
IG9yZGVyKTsKKyAgICAKKyAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmKTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3ImLCBT
Y2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4o
KT4gcGlja05leHQpOworICAgIAorICAgIHZvaWQgZGlkRXhlY3V0ZShDb25zdHJhaW50UGFyYWxs
ZWxpc20sIHVuc2lnbmVkIGluZGV4KTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAgICBTbG90Vmlz
aXRvciYgbV9tYWluVmlzaXRvcjsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Cisg
ICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7CisgICAgRGVxdWU8dW5zaWduZWQsIDMyPiBtX3RvRXhl
Y3V0ZUluUGFyYWxsZWw7CisgICAgQml0VmVjdG9yIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldDsK
KyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsOworICAgIFZl
Y3Rvcjx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5OworICAgIExvY2sgbV9s
b2NrOworICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1bnNpZ25lZCBtX251bVRocmVh
ZHNUaGF0TWF5UHJvZHVjZVdvcmsgeyAwIH07CisgICAgYm9vbCBtX3BpY2tOZXh0SXNTdGlsbEFj
dGl2ZSB7IHRydWUgfTsKKyAgICBWZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNpdENvdW50
ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDkx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIE9wYXF1ZVJvb3RTZXQgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZVJvb3RTZXQpOwotcHVibGljOgotICAgIE9w
YXF1ZVJvb3RTZXQoKQotICAgICAgICA6IG1fbGFzdFF1ZXJpZWRSb290KG51bGxwdHIpCi0gICAg
ICAgICwgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBjb250YWlucyh2b2lkKiByb290KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHJv
b3QgIT0gbV9sYXN0UXVlcmllZFJvb3QpIHsKLSAgICAgICAgICAgIG1fbGFzdFF1ZXJpZWRSb290
ID0gcm9vdDsKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBtX3Jvb3Rz
LmNvbnRhaW5zKHJvb3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2NvbnRhaW5zTGFz
dFF1ZXJpZWRSb290OwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9yb290cy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVh
cigpCi0gICAgewotICAgICAgICBtX3Jvb3RzLmNsZWFyKCk7Ci0gICAgICAgIG1fbGFzdFF1ZXJp
ZWRSb290ID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IGZh
bHNlOwotICAgIH0KLQotICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCi0gICAgewotICAgICAgICBp
ZiAocm9vdCA9PSBtX2xhc3RRdWVyaWVkUm9vdCkKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0
UXVlcmllZFJvb3QgPSB0cnVlOwotICAgICAgICByZXR1cm4gbV9yb290cy5hZGQocm9vdCkuaXNO
ZXdFbnRyeTsKLSAgICB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9yb290cy5zaXplKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0
X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmJl
Z2luKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5lbmQoKTsKLSAgICB9Ci0KLQot
cHJpdmF0ZToKLSAgICBIYXNoU2V0PHZvaWQqPiBtX3Jvb3RzOwotICAgIG11dGFibGUgdm9pZCog
bV9sYXN0UXVlcmllZFJvb3Q7Ci0gICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNMYXN0UXVlcmll
ZFJvb3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTG9jay5o
PgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53
cmFwRnVuYz4KK2NsYXNzIFBhcmFsbGVsU291cmNlQWRhcHRlciA6IHB1YmxpYyBTaGFyZWRUYXNr
PElubmVyVHlwZSgpPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0
cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMm
IHVud3JhcEZ1bmMpCisgICAgICAgIDogbV9vdXRlclNvdXJjZShvdXRlclNvdXJjZSkKKyAgICAg
ICAgLCBtX3Vud3JhcEZ1bmModW53cmFwRnVuYykKKyAgICB7CisgICAgfQorICAgIAorICAgIElu
bmVyVHlwZSBydW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobV9pbm5lclNvdXJj
ZSkgeworICAgICAgICAgICAgICAgIGlmIChJbm5lclR5cGUgcmVzdWx0ID0gbV9pbm5lclNvdXJj
ZS0+cnVuKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAg
ICAgICAgbV9pbm5lclNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1faW5uZXJTb3VyY2UgPSBtX3Vud3JhcEZ1bmMobV9vdXRlclNvdXJj
ZS0+cnVuKCkpOworICAgICAgICB9IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAgICAgICAgcmV0
dXJuIElubmVyVHlwZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkVGFz
azxPdXRlclR5cGUoKT4+IG1fb3V0ZXJTb3VyY2U7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8SW5u
ZXJUeXBlKCk+PiBtX2lubmVyU291cmNlOworICAgIFVud3JhcEZ1bmMgbV91bndyYXBGdW5jOwor
ICAgIExvY2sgbV9sb2NrOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBl
bmFtZSBJbm5lclR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitSZWY8UGFyYWxsZWxTb3VyY2VB
ZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPj4gY3JlYXRlUGFyYWxsZWxT
b3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2Us
IGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5j
PihvdXRlclNvdXJjZSwgdW53cmFwRnVuYykpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJh
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZU1h
cmtpbmdDb25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90Vmlz
aXRvciYpPiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQorICAgIDogTWFya2luZ0Nv
bnN0cmFpbnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGls
aXR5LCBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKQorICAg
ICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQoreworfQorCitT
aW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30K
KworQ29uc3RyYWludFBhcmFsbGVsaXNtIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNp
dG9yKTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgYWxsb3dzIGZvciBhbiBpbmZvcm1hbCB3YXkg
dG8gZGVmaW5lIGNvbnN0cmFpbnRzLiBKdXN0IHBhc3MgYSBsYW1iZGEgdG8gdGhlIGNvbnN0cnVj
dG9yLiBUaGUgb25seQorLy8gZG93bnNpZGUgaXMgdGhhdCB0aGlzIG1ha2VzIGl0IGhhcmQgZm9y
IGNvbnN0cmFpbnRzIHRvIGJlIHN0YXRlZnVsLCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIHRoZW0g
dG8gYmUKKy8vIHBhcmFsbGVsLiBJbiB0aG9zZSBjYXNlcywgaXQncyBlYXNpZXIgdG8ganVzdCBz
dWJjbGFzcyBNYXJraW5nQ29uc3RyYWludC4KK2NsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50
IDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
Jik+LAorICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludENv
bmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50KTsKKyAgICAKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKK3By
aXZhdGU6CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9y
Jikgb3ZlcnJpZGU7CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVj
dXRlRnVuY3Rpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OCw5ICs5OCw3IEBAIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogCiB2b2lkIFNs
b3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogewotICAgIGlmIChoZWFwKCktPmNvbGxlY3Rp
b25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkgbm93
LgotICAgIGVsc2UKKyAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0
aW9uU2NvcGU6OkVkZW4pCiAgICAgICAgIHJlc2V0KCk7CiAKICAgICBpZiAoSGVhcFByb2ZpbGVy
KiBoZWFwUHJvZmlsZXIgPSB2bSgpLmhlYXBQcm9maWxlcigpKQpAQCAtMTExLDcgKzEwOSw2IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6
OnJlc2V0KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5zaXplKCkpOwog
ICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVh
cFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7CkBAIC0yNzcsMTEgKzI3NCwxMyBAQCB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250
YWluZXJUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtT
dGFjayhDb250YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NF
UlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAKICAg
ICBjb250YWluZXIubm90ZU1hcmtlZCgpOwogICAgIAorICAgIC8vZGF0YUxvZygiTSgiLCBSYXdQ
b2ludGVyKGNlbGwpLCAiKSIpOworICAgIAogICAgIG1fdmlzaXRDb3VudCsrOwogICAgIG1fYnl0
ZXNWaXNpdGVkICs9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwogCkBAIC0zNDYsNyArMzQ1LDcgQEAg
cHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVu
KGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgCiAg
ICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAg
ICAKQEAgLTQzNSw3ICs0MzQsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFs
bGVsKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZChjb25zdCBB
YnN0cmFjdExvY2tlciYpCiB7Ci0gICAgbV9tdXRhdG9ySXNTdG9wcGVkID0gKG1faGVhcC5jb2xs
ZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0
b3BwZWRNdXRhdG9yKTsKKyAgICBtX211dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFwLndvcmxkSXNT
dG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNs
b3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKCkKQEAgLTQ1Miw3ICs0NTEsNyBAQCBi
b29sIFNsb3RWaXNpdG9yOjpoYXNBY2tub3dsZWRnZWRUaGF0VGhlCiAKIGJvb2wgU2xvdFZpc2l0
b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9t
dXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJ
c1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7CisgICAgcmV0dXJu
IG1fbXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9w
dGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6
ZUZvclN0b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4ICs0ODksNiBAQCBORVZFUl9JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQo
KTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KLSAgICAKLSAgICBtZXJn
ZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVu
dE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVzdGVkKQpAQCAtNTUwLDcgKzU0Nyw2IEBAIHNp
emVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHIKICAgICB9CiAKICAgICBkb25h
dGVBbGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiAKICAgICByZXR1cm4gYnl0ZXNWaXNp
dGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1NywxNiBAQCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFj
aFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwog
fQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0
TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJz
dHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYm
ICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAmJiBtX2hl
YXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hl
YXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycworICAgICAgICAmJiAhaGFzV29yayhs
b2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9j
a2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+
aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3No
YXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKQEAgLTU4MywxMiArNTc4LDE0
IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wg
aXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAgIAogICAgICAg
ICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgp
OworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0
ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAgIG1faGVhcC5t
X251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBtX2hlYXAubV9u
dW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAgICAgICAgICAg
ICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGlt
ZW91dCkpCkBAIC02MjksMjggKzYyNiw1MSBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNo
YXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4g
Ym9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAg
ICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBp
c1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1dvcmso
bG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNr
KQorICAgICAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JU
YXNrOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVk
RHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hN
YXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+
IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNl
bGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFj
ayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRp
bmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
Zm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJh
eSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29y
cmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2hlYXAubV9udW1i
ZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVy
T2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAoYm9udXNUYXNrKSB7CisgICAgICAgICAgICBi
b251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBt
YWluIHRocmVhZCBjb3VsZCBzdGlsbCBiZSBydW5uaW5nLCBhbmQgbWF5IHJ1biBmb3IgYSB3aGls
ZS4gVW5sZXNzIHdlIGNsZWFyIHRoZSB0YXNrCisgICAgICAgICAgICAvLyBvdXJzZWx2ZXMsIHdl
IHdpbGwga2VlcCBsb29waW5nIGFyb3VuZCB0cnlpbmcgdG8gcnVuIHRoZSB0YXNrLgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1f
bWFya2luZ011dGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fYm9udXNWaXNpdG9y
VGFzayA9PSBib251c1Rhc2spCisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX2JvbnVzVmlz
aXRvclRhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgaXNBY3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAg
LTY3MCwxNSArNjkwLDE5IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90Vmlz
aXQKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxCiAgICAgICAgIHx8
IChtX2hlYXAubV93b3JsZFN0YXRlLmxvYWQoKSAmIEhlYXA6Om11dGF0b3JXYWl0aW5nQml0KQog
ICAgICAgICB8fCAhbV9oZWFwLmhhc0hlYXBBY2Nlc3MoKQotICAgICAgICB8fCBtX2hlYXAuY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICB8fCBtX2hl
YXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlv
biBvdmVyIGRyYWluSW5QYXJhbGxlbCgpIHdoZW4gd2UgaGF2ZSBhIGNvbmN1cnJlbnQgbXV0YXRv
ciBidXQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGlzIG5vdCBwcm9maXRhYmxlLgogICAgICAg
ICByZXR1cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVvdXQpOwogICAgIH0KIAotICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7
Ci0gICAgCisgICAgZG9uYXRlQWxsKGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCkpOwor
ICAgIHJldHVybiB3YWl0Rm9yVGVybWluYXRpb24odGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9y
OjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90
b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5t
X21hcmtpbmdNdXRleCk7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0
aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7
CkBAIC03MTEsNjEgKzczNSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFsbChjb25zdCBB
YnN0cmEKICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7
CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm9vdCkKLXsKLSAg
ICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9pZ25vcmVOZXdP
cGFxdWVSb290cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChPcHRpb25zOjpudW1i
ZXJPZkdDTWFya2VycygpID09IDEpIHsKLSAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhl
IHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwg
YnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgotICAgIC8vIGEgd2hp
bGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2Uu
Ci0gICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMu
YWRkKHJvb3QpOwotfQotCi1ib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgcmV0dXJuIG1faGVh
cC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwotfQotCi1UcmlTdGF0ZSBTbG90VmlzaXRv
cjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBp
ZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotICAgIAotICAgIGlmICht
X29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRl
OwotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0
ZXgpOwotICAgIGlmIChtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKLSAgICAg
ICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKLX0KLQot
dm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fb3BhcXVl
Um9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygp
OwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkK
LXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8
IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotICAgIAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRl
KCkKIHsKICAgICBpZiAoIW1faXNJblBhcmFsbGVsTW9kZSkgewpAQCAtNzg1LDE2ICs3NTQsNiBA
QCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uCiAgICAgZHJhaW4odGlt
ZW91dCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQotewotICAg
IHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9v
dHNNdXRleCk7Ci0gICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCi0gICAg
ICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgfQotICAgIG1fb3Bh
cXVlUm9vdHMuY2xlYXIoKTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVy
KQogewogICAgIG1faGVhcC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUo
d2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNp
bmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2lu
Y2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKICNpbmNsdWRl
ICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk1LDEwICs5NCw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwogICAgIHZvaWQgYXBwZW5kSGlk
ZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFk
ZE9wYXF1ZVJvb3Qodm9pZCopOworICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgogICAgIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKLSAgICBUcmlTdGF0ZSBj
b250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7CisgICAgYm9vbCBjb250YWlu
c09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogCiAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4g
bV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9
CiAKQEAgLTEyMSw2ICsxMTksOCBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBk
cmFpbkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5m
aW5pdHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5
KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAg
IAorICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1l
IHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRz
IHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRyYWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3
YWxraW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4gVGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBh
Y2NpZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkg
bWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpAQCAtMTI4LDggKzEyOCw2IEBAIHB1YmxpYzoK
ICAgICAvLyByYXJlIGNhc2VzIGhhcHBlbiB0ZW1wb3JhcmlseSBldmVuIGlmIHdlJ3JlIG5vdCBy
ZWFjaGluZyB0ZXJtaW5hdGlvbikuCiAgICAgc2l6ZV90IHBlcmZvcm1JbmNyZW1lbnRPZkRyYWlu
aW5nKHNpemVfdCBieXRlcyk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJn
ZUlmTmVjZXNzYXJ5KCk7Ci0KICAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGls
aWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0
IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBH
Qy4KICAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7CkBAIC0xOTQsMTAg
KzE5Miw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwo
SGVhcENlbGwqKTsKICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLQotICAgIHZv
aWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9pZCB2aXNpdENoaWxk
cmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgp
OwpAQCAtMjE1LDcgKzIwOSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX2Nv
bGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAgIE9w
YXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVy
ZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIGJvb2wgbV9pZ25v
cmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2Rl
LgogICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiwyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFZhCiAgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CiB9CiAK
K2lubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKK3sKKyAg
ICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lnbm9yZU5ld09w
YXF1ZVJvb3RzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFoZWFwKCktPm1fb3Bh
cXVlUm9vdHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291
bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYXAoKS0+
bV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworfQorCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRv
cjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewogICAgIGlmIChtX2lz
Rmlyc3RWaXNpdCkgewpAQCAtMTU5LDEyICsxNzYsMTIgQEAgaW5saW5lIEhlYXAqIFNsb3RWaXNp
dG9yOjpoZWFwKCkgY29uc3QKIAogaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQogewotICAg
IHJldHVybiAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogaW5s
aW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAogewotICAgIHJldHVybiAqbV9o
ZWFwLm1fdm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgiCiAjaW5j
bHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5l
cy5oIgogCkBAIC04OCw1ICs4OSw0MiBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6
ZmluZEVtcHR5CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1h
cmtlZEFsbG9jYXRvciooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpCit7
CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikK
KyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogcnVuKCkgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
ICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvcjsKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3IgPSByZXN1bHQtPm5l
eHRBbGxvY2F0b3JJblN1YnNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciog
bV9hbGxvY2F0b3I7CisgICAgICAgIExvY2sgbV9sb2NrOworICAgIH07CisgICAgCisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUYXNrKG1fZmlyc3RBbGxvY2F0b3IpKTsKK30KKworUmVmUHRyPFNo
YXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbE5vdEVt
cHR5TWFya2VkQmxvY2tTb3VyY2UoKQoreworICAgIHJldHVybiBjcmVhdGVQYXJhbGxlbFNvdXJj
ZUFkYXB0ZXI8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkQmxvY2s6OkhhbmRsZSo+KAorICAgICAg
ICBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpLAorICAgICAgICBbXSAoTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IpIC0+IFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+
PiB7CisgICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPnBhcmFsbGVsTm90RW1wdHlC
bG9ja1NvdXJjZSgpOworICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NDAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjksMTcgKzY5LDI0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgog
ICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5jJik7CiAgICAgCisgICAgUmVmUHRy
PFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gcGFyYWxsZWxBbGxvY2F0b3JTb3VyY2Uo
KTsKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1h
cmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAg
IAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpI
YW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKTsKKyAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExhcmdlQWxsb2NhdGlv
bihjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2
b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNTMgQEAgdm9pZCBTdWJzcGFjZTo6
Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hN
YXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGNsYXNzIFRhc2sg
OiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgICAg
ICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQorICAgICAgICAgICAgLCBtX2Jsb2NrU291cmNl
KHN1YnNwYWNlLnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpKQorICAgICAgICAg
ICAgLCBtX2Z1bmMoZnVuYykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3Vy
Y2UtPnJ1bigpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2VsbCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQg
a2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVu
Yyh2aXNpdG9yLCBjZWxsLCBraW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbmVl
ZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9zdWJzcGFjZS5mb3JFYWNo
TGFyZ2VBbGxvY2F0aW9uKAorICAgICAgICAgICAgICAgIFsmXSAoTGFyZ2VBbGxvY2F0aW9uKiBh
bGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uLT5pc01hcmtl
ZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGFsbG9jYXRpb24t
PmNlbGwoKSwgbV9zdWJzcGFjZS5tX2F0dHJpYnV0ZXMuY2VsbEtpbmQpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN1YnNw
YWNlJiBtX3N1YnNwYWNlOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6
SGFuZGxlKigpPj4gbV9ibG9ja1NvdXJjZTsKKyAgICAgICAgRnVuYyBtX2Z1bmM7CisgICAgICAg
IExvY2sgbV9sb2NrOworICAgICAgICBib29sIG1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25z
IHsgdHJ1ZSB9OworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0
aGlzLCBmdW5jKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiB2b2lkIFN1YnNwYWNl
Ojpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3JFYWNoTWFya2Vk
QmxvY2soCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgVmlzaXRDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBWaXNpdENvdW50ZXIoKSB7IH0KKyAgICAK
KyAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDogbV92aXNp
dG9yKCZ2aXNpdG9yKQorICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlzaXRvci52aXNp
dENvdW50KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTbG90VmlzaXRvciYgdmlzaXRvcigp
IGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRDb3Vu
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92aXNpdG9yLT52aXNpdENvdW50KCkg
LSBtX2luaXRpYWxWaXNpdENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU2xvdFZp
c2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRD
b3VudCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1NDAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFZpc2l0aW5nVGltZW91dCB7Ci1wdWJs
aWM6Ci0gICAgVmlzaXRpbmdUaW1lb3V0KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZpc2l0
aW5nVGltZW91dChTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCBkaWRWaXNpdFNvbWV0aGluZywg
TW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fZGlkVmlzaXRTb21ldGhpbmcoZGlk
VmlzaXRTb21ldGhpbmcpCi0gICAgICAgICwgbV92aXNpdENvdW50QmVmb3JlKHZpc2l0b3Iudmlz
aXRDb3VudCgpKQotICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgc2l6ZV90IHZpc2l0Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdENvdW50KCkgLSBtX3Zpc2l0Q291bnRC
ZWZvcmU7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyhTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5n
IHx8IHZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkVGlt
ZU91dChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBk
aWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAg
fQotICAgIAotcHJpdmF0ZToKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9
OwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnRCZWZvcmUgeyAwIH07Ci0gICAgTW9ub3RvbmljVGlt
ZSBtX3RpbWVvdXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTEsNyArMTExLDcgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0lt
cGwtPmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZENvbmN1cnJlbnRs
eShtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChjb250YWlu
ZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3Rf
Y2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwMSwxNCArMTEwMSwxNCBAQCBib29sIFN0cnVjdHVy
ZTo6aXNDaGVhcER1cmluZ0dDKCkKICAgICAvLyBoYXMgYW55IGxhcmdlIHByb3BlcnR5IG5hbWVz
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTczMzQK
ICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01hcmtlZENvbmN1
cnJlbnRseShtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8o
KSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVj
dCB8fCBIZWFwOjppc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAgICYmICho
YXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJr
ZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNDaGVhcER1cmluZ0dD
KCkpCi0gICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKHRoaXMpOwogICAgIAogICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV1RG
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw4MCBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBkb2Vz
IHNvbWUgY2hhbmdlcyB0byBtYWtlIGl0IGVhc2llciB0byBkbyBwYXJhbGxlbCBjb25zdHJhaW50
IHNvbHZpbmc6CisgICAgICAgIAorICAgICAgICAtIEkgZmluYWxseSByZW1vdmVkIGRlcGVuZGVu
Y3lXaXRoLiBUaGlzIHdhcyBhIHNpbGx5IGNvbnN0cnVjdCB3aG9zZSBvbmx5IHB1cnBvc2UgaXMg
dG8gY29uZnVzZQorICAgICAgICAgIHBlb3BsZSBhYm91dCB3aGF0IGl0IG1lYW5zIHRvIGhhdmUg
YSBkZXBlbmRlbmN5IGNoYWluLiBJIHRvb2sgdGhhdCBhcyBhbiBvcHBvcnR1bml0eSB0byBncmVh
bHkKKyAgICAgICAgICBzaW1wbGlmeSB0aGUgR0MncyB1c2Ugb2YgZGVwZW5kZW5jeSBjaGFpbmlu
Zy4KKyAgICAgICAgCisgICAgICAgIC0gQWRkZWQgbW9yZSBsb2dpYyB0byBEZXF1ZTw+LCBzaW5j
ZSBJIHVzZSBpdCBmb3IgcGFydCBvZiB0aGUgbG9hZCBiYWxhbmNlci4KKyAgICAgICAgCisgICAg
ICAgIC0gTWFkZSBpdCBwb3NzaWJsZSB0byBwcm9maWxlIGxvY2sgY29udGVudGlvbi4gU2VlCisg
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDI1MCNj
MCBmb3Igc29tZSBwcmVsaW1pbmFyeSBtZWFzdXJlbWVudHMuCisgICAgICAgIAorICAgICAgICAt
IEludHJvZHVjZWQgaG9sZExvY2tJZiwgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBwZXJmb3JtIHBy
ZWRpY2F0ZWQgbG9jayBhY3F1aXNpdGlvbi4gV2UgdXNlIHRoYXQKKyAgICAgICAgICB0byBwaWNr
IGEgbG9jayBpbiBXZWJDb3JlLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdURjo6ZGVwZW5kZW5j
eSk6CisgICAgICAgIChXVEY6OkRlcGVuZGVuY3lXaXRoOjpEZXBlbmRlbmN5V2l0aCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OmRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvQml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6aXRlcmF0b3I6Om9wZXJh
dG9yKyspOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvQ29u
Y3VycmVudFB0ckhhc2hTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0
ckhhc2hTZXQ6OkNvbmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFB0ckhhc2hTZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRQdHJIYXNoU2V0OjpkZWxldGVPbGRUYWJsZXMpOgorICAgICAgICAoV1RGOjpDb25jdXJy
ZW50UHRySGFzaFNldDo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNl
dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRT
bG93KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCk6
CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiB3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpjb250YWlucyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRQdHJIYXNoU2V0OjphZGQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6
c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6
bWF4TG9hZCBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpoYXNo
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmNhc3QpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Y29udGFpbnNJbXBsIGNvbnN0KToKKyAgICAgICAg
KFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZEltcGwpOgorICAgICAgICAqIHd0Zi9EZXF1
ZS5oOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdCk6CisgICAgICAg
ICogd3RmL0Zhc3RNYWxsb2MuaDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6CisgICAgICAgIChX
VEY6OkxvY2tCYXNlOjpsb2NrU2xvdyk6CisgICAgICAgICogd3RmL0xvY2tlci5oOgorICAgICAg
ICAoV1RGOjpob2xkTG9ja0lmKToKKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRhLmg6CisgICAg
ICAgICogd3RmL1NoYXJlZFRhc2suaDoKKyAgICAgICAgKFdURjo6U2hhcmVkVGFzazxQYXNzZWRS
ZXN1bHRUeXBlKToKKyAgICAgICAgKFdURjo6U2hhcmVkVGFzazxSZXN1bHRUeXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3dGYvU3RhY2tTaG90Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpTdGFj
a1Nob3Q6OlN0YWNrU2hvdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I9KToK
KyAgICAgICAgKFdURjo6U3RhY2tTaG90OjphcnJheSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0
YWNrU2hvdDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6aGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0
YWNrU2hvdDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV1RGOjpT
dGFja1Nob3Q6Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6ZGVs
ZXRlZFZhbHVlQXJyYXkpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RIYXNoOjpoYXNoKToKKyAg
ICAgICAgKFdURjo6U3RhY2tTaG90SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHd0Zi9TdGFja1No
b3RQcm9maWxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OlN0
YWNrU2hvdFByb2ZpbGVyKToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OnByb2Zp
bGUpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cnVuKToKKwogMjAxNy0xMi0w
MSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEludGVy
bmFscy50ZXJtaW5hdGVTZXJ2aWNlV29ya2VyLCBhbmQgdGhlIGFiaWxpdHkgdG8gcmVzdGFydCBz
ZXJ2aWNlIHdvcmtlcnMgZm9yIHBvc3RNZXNzYWdlLgpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3
IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBGNTI2QjFGNDIxRkY4
MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEY1MjY5MUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxs
b2MuY3BwICovOyB9OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMw
QkE4QTFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgKi87IH07CisJCTBGMzBD
QjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1ODFGQ0RGMTMzMDA0
QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjQzRDhGMTFEQjVB
RERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDNEOEVGMURCNUFEREMwMDEwOEZCNiAvKiBBdXRv
bWF0aWNUaHJlYWQuY3BwICovOyB9OwogCQkwRjVCRjE3NjFGMjNENDlBMDAyOUQ5MUQgLyogR2ln
YWNhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1QkYxNzQxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLzsgfTsKIAkJMEY2MEYz
MkYxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2
QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi87IH07CkBAIC0xODMsNiArMTg0LDggQEAKIAkJ
MEYzMEJBOEQxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoTWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzBCQThFMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwQkE4RjFFNzg3MDhFMDAyQ0E4NDcgLyogTG9n
Z2luZ0hhc2hUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2lu
Z0hhc2hUcmFpdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENCNTgxRkNE
RjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJl
bnRQdHJIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzFERDcwMUYx
MzA4QkMwMDcyRUI0QSAvKiBMb2NrQWxnb3JpdGhtSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
b2NrQWxnb3JpdGhtSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0
OEM3RDFGNDdBQTlEMDAzQ0ZFRjIgLyogU3RyaW5nVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
cmluZ1ZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM1MDE2MzFCQjI1
OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWFrUmFuZG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjYsNiAr
MjI5LDggQEAKIAkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlUHJpbnRTdHJlYW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFBy
aW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50
U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUUxNjVEQkE3
MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTA0
MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RhY2tTaG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURB
QTA1MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3RQcm9maWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1Nob3RQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIz
MTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFjaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03OTQsNiArNzk5LDggQEAKIAkJCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyog
Q29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyog
Q29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVBQjFGNENENjFFMDA5QTJCQkMgLyogQ29tcGxldGlv
bkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVu
dFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBGMzBDQjU5MUZDREYxMzMwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5oICovLAogCQkJCTBGREI2OThEMUI3QzY0M0EwMDBDMTA3OCAvKiBD
b25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEyNjFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5j
cHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5NTdEIC8qIENQVVRpbWUuaCAqLywKQEAg
LTEwMDUsNiArMTAxMiw4IEBACiAJCQkJQThBNDczMEQxNTFBODI1QjAwNDEyM0ZGIC8qIFNwZWN0
cnVtLmggKi8sCiAJCQkJQThBNDczMEUxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmNw
cCAqLywKIAkJCQlBOEE0NzMwRjE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuaCAqLywK
KwkJCQkwRjlEQUEwNDFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90LmggKi8sCisJCQkJMEY5
REFBMDUxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8sCiAJCQkJRkVE
QUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwICovLAogCQkJCUZFREFDRDND
MTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggKi8sCiAJCQkJMzEzRURFQzk3NzhFNDlD
OUJFQTkxQ0ZDIC8qIFN0YWNrVHJhY2UuY3BwICovLApAQCAtMTQyNiw2ICsxNDM1LDcgQEAKIAkJ
CQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MUYxNzUyQjFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudENvZGVycy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyQzFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVu
dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIz
IC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJE
MUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxMSArMzQ2LDE2IEBAIEFMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVwZW5kZW5jeSgKICAgICByZXR1cm4gMDsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9
PSA4Pjo6dHlwZSogPSBudWxscHRyPgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5M
SU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewogICAgIHVuc2lnbmVkIGRlcGVu
ZGVuY3k7Ci0gICAgdWludDY0X3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUp
OworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDMyX3QgY29weTsKKyAgICAgICAgVCB2YWx1ZTsK
KyAgICB9IHU7CisgICAgdS5jb3B5ID0gMDsKKyAgICB1LnZhbHVlID0gdmFsdWU7CiAjaWYgQ1BV
KEFSTTY0KQogICAgIC8vIENyZWF0ZSBhIG1hZ2ljYWwgemVybyB2YWx1ZSB0aHJvdWdoIGlubGlu
ZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRpb24KICAgICAvLyBpc24ndCB2aXNpYmxlIHRvIHRo
ZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVzYWJsZSBhcyBhbiBvZmZzZXQgaW4KQEAg
LTM2Myw4MCArMzY4LDIwIEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQg
dmEKICAgICAvLyBvciBhbiBhY3F1aXJlIGxvYWQuCiAgICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5j
eV0sICV3W2luXSwgJXdbaW5dIgogICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVu
Y3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29w
eSkpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwg
JVtpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAg
OiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxzZQog
ICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KICAg
ICBsb2FkTG9hZEZlbmNlKCk7CiAgICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFN
KGNvcHkpOworICAgIFVOVVNFRF9QQVJBTSh1LmNvcHkpOwogI2VuZGlmCiAgICAgcmV0dXJuIGRl
cGVuZGVuY3k7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgYWxtb3N0IGlkZW50aWNhbCB0
byB0aGUgb3RoZXIgZGVwZW5kZW5jeSgpIG92ZXJsb2FkLgotLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwNQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA0Pjo6dHlwZSogPSBudWxscHRyPgotQUxX
QVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICB1bnNpZ25l
ZCBkZXBlbmRlbmN5OwotICAgIHVpbnQzMl90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3
W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0g
ICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2VsaWYgQ1BVKEFSTSkKLSAgICBhc20oImVvciAl
W2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIo
ZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxzZQotICAgIGxvYWRM
b2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVwZW5kZW5jeTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSAyPjo6dHlwZSogPSBudWxs
cHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9
PSAxPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJf
dD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBEZXBlbmRlbmN5
V2l0aCB7Ci1wdWJsaWM6Ci0gICAgRGVwZW5kZW5jeVdpdGgoKQotICAgICAgICA6IGRlcGVuZGVu
Y3kobnVsbERlcGVuZGVuY3koKSkKLSAgICAgICAgLCB2YWx1ZSgpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZh
bHVlKQotICAgICAgICA6IGRlcGVuZGVuY3koZGVwZW5kZW5jeSkKLSAgICAgICAgLCB2YWx1ZSh2
YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKLSAg
ICBUIHZhbHVlOwotfTsKLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgRGVwZW5k
ZW5jeVdpdGg8VD4gZGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBU
JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGVwZW5kZW5jeVdpdGg8VD4oZGVwZW5kZW5jeSwgdmFs
dWUpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQqIGNvbnN1bWUoVCogcG9p
bnRlciwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewpAQCAtNDY5LDEwICs0MTQsOCBAQCBBTFdB
WVNfSU5MSU5FIFQmIGVuc3VyZVBvaW50ZXIoQXRvbWljPFQqCiAKIHVzaW5nIFdURjo6QXRvbWlj
OwogdXNpbmcgV1RGOjpEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpEZXBlbmRlbmN5V2l0aDsKIHVz
aW5nIFdURjo6Y29uc3VtZTsKIHVzaW5nIFdURjo6ZGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6ZGVw
ZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmVuc3VyZVBvaW50ZXI7CiB1c2luZyBXVEY6Om51bGxE
ZXBlbmRlbmN5OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsMTMg
QEAgcHVibGljOiAKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCisgICAg
ICAgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7CisgICAgICAgICAgICBpdGVy
YXRvciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgICAgICsrKCp0aGlzKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKwogICAgICAgICBib29sIGlzQXRFbmQoKSBjb25z
dAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA+PSBtX2JpdFZlY3Rvci0+
c2l6ZSgpOwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFNv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsxOCw3
IEBAIHNldChXVEZfSEVBREVSUwogICAgIENsb2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJl
YWQuaAogICAgIENvbXBpbGVyLmgKKyAgICBDb25jdXJyZW50UHRySGFzaFNldC5oCiAgICAgQ29u
ZGl0aW9uLmgKICAgICBDcm9zc1RocmVhZENvcGllci5oCiAgICAgQ3Jvc3NUaHJlYWRUYXNrLmgK
QEAgLTEzMiw2ICsxMzMsOCBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTZWdtZW50ZWRWZWN0b3Iu
aAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCisgICAgU3RhY2tTaG90LmgK
KyAgICBTdGFja1Nob3RQcm9maWxlci5oCiAgICAgU3RhY2tTdGF0cy5oCiAgICAgU3RhY2tUcmFj
ZS5oCiAgICAgU3RkTGliRXh0cmFzLmgKQEAgLTIxOCw2ICsyMjEsNyBAQCBzZXQoV1RGX1NPVVJD
RVMKICAgICBDUFVUaW1lLmNwcAogICAgIENsb2NrVHlwZS5jcHAKICAgICBDb21waWxhdGlvblRo
cmVhZC5jcHAKKyAgICBDb25jdXJyZW50UHRySGFzaFNldC5jcHAKICAgICBDcm9zc1RocmVhZENv
cGllci5jcHAKICAgICBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcAogICAgIENyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyLmNwcApJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0
ckhhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRy
SGFzaFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNvbmN1cnJlbnRQdHJIYXNoU2V0LmgiCisKKyNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworQ29uY3VycmVudFB0ckhhc2hTZXQ6OkNvbmN1cnJl
bnRQdHJIYXNoU2V0KCkKK3sKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0NvbmN1cnJlbnRQdHJI
YXNoU2V0Ojp+Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworfQorCit2b2lkIENvbmN1cnJlbnRQ
dHJIYXNoU2V0OjpkZWxldGVPbGRUYWJsZXMoKQoreworICAgIC8vIFRoaXMgaXMganVzdCBpbiBj
YXNlLiBJdCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRvIGNhbGwgYWRk
KCkuIEJ1dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBpZiB3ZSBk
aWQgbWFrZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OyAKKyAgICAKKyAgICBtX2FsbFRhYmxlcy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZd
IChzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+JiB0YWJsZSkgLT4gYm9vbCB7CisgICAgICAgICAgICBy
ZXR1cm4gdGFibGUuZ2V0KCkgIT0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB9KTsK
K30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6Y2xlYXIoKQoreworICAgIC8vIFRoaXMg
aXMganVzdCBpbiBjYXNlLiBJdCBkb2VzIG5vdCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRz
IHRvIGNhbGwgYWRkKCkuIEJ1dCBpdCBtaWdodCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jh
c2hlcyBpZiB3ZSBkaWQgbWFrZSB0aGF0IG1pc3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOyAKKyAgICAKKyAgICBtX2FsbFRhYmxlcy5jbGVhcigpOworICAgIGluaXRp
YWxpemUoKTsKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6aW5pdGlhbGl6ZSgpCit7
CisgICAgY29uc3RleHByIHVuc2lnbmVkIGluaXRpYWxTaXplID0gMzI7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFRhYmxlPiB0YWJsZSA9IFRhYmxlOjpjcmVhdGUoaW5pdGlhbFNpemUpOworICAgIG1f
dGFibGUuc3RvcmVSZWxheGVkKHRhYmxlLmdldCgpKTsKKyAgICBtX2FsbFRhYmxlcy5hcHBlbmQo
V1RGTW92ZSh0YWJsZSkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRTbG93
KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWdu
ZWQgaW5kZXgsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAodGFibGUtPmxvYWQuZXhjaGFuZ2VBZGQo
MSkgPj0gdGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJuIHJlc2l6ZUFuZEFkZChwdHIp
OworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdm9pZCogb2xkRW50cnkgPSB0YWJsZS0+
YXJyYXlbaW5kZXhdLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhudWxscHRyLCBwdHIpOworICAgICAg
ICBpZiAoIW9sZEVudHJ5KSB7CisgICAgICAgICAgICBpZiAobV90YWJsZS5sb2FkKCkgIT0gdGFi
bGUpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhZGRlZCBhbiBlbnRyeSB0byBhbiBvbGQgdGFi
bGUhIFdlIG5lZWQgdG8gcmVleGVjdXRlIHRoZSBhZGQgb24gdGhlIG5ldyB0YWJsZS4KKyAgICAg
ICAgICAgICAgICByZXR1cm4gYWRkKHB0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2xkRW50cnkgPT0gcHRyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFz
azsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgfQor
fQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVJZk5lY2Vzc2FyeSgpCit7Cisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIFRhYmxlKiB0YWJsZSA9IG1f
dGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICBpZiAodGFibGUtPmxvYWQubG9hZFJlbGF4ZWQoKSA8
IHRhYmxlLT5tYXhMb2FkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8VGFibGU+IG5ld1RhYmxlID0gVGFibGU6OmNyZWF0ZSh0YWJsZS0+c2l6ZSAqIDIpOwor
ICAgIHVuc2lnbmVkIG1hc2sgPSBuZXdUYWJsZS0+bWFzazsKKyAgICB1bnNpZ25lZCBsb2FkID0g
MDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUtPnNpemU7ICsraSkgeworICAg
ICAgICB2b2lkKiBwdHIgPSB0YWJsZS0+YXJyYXlbaV0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAg
aWYgKCFwdHIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIEF0b21pYzx2
b2lkKj4mIGVudHJ5UmVmID0gbmV3VGFibGUtPmFycmF5W2luZGV4XTsKKyAgICAgICAgICAgIHZv
aWQqIGVudHJ5ID0gZW50cnlSZWYubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50
cnkpIHsKKyAgICAgICAgICAgICAgICBlbnRyeVJlZi5zdG9yZVJlbGF4ZWQocHRyKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGVudHJ5ICE9IHB0cik7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFz
azsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBsb2FkKys7CisgICAgfQorICAgIAorICAgIG5ld1Rh
YmxlLT5sb2FkLnN0b3JlUmVsYXhlZChsb2FkKTsKKyAgICAKKyAgICBtX3RhYmxlLnN0b3JlKG5l
d1RhYmxlLmdldCgpKTsKKyAgICBtX2FsbFRhYmxlcy5hcHBlbmQoV1RGTW92ZShuZXdUYWJsZSkp
OworfQorCitib29sIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVBbmRBZGQodm9pZCogcHRy
KQoreworICAgIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGFkZChwdHIpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlPiBDb25jdXJyZW50
UHRySGFzaFNldDo6VGFibGU6OmNyZWF0ZSh1bnNpZ25lZCBzaXplKQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IHJlc3VsdChuZXcgKGZhc3RNYWxs
b2MoT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBhcnJheSkgKyBzaXplb2YoQXRvbWljPHZvaWQqPikg
KiBzaXplKSkgVGFibGUoKSk7CisgICAgcmVzdWx0LT5zaXplID0gc2l6ZTsKKyAgICByZXN1bHQt
Pm1hc2sgPSBzaXplIC0gMTsKKyAgICByZXN1bHQtPmxvYWQuc3RvcmVSZWxheGVkKDApOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJlc3VsdC0+YXJy
YXlbaV0uc3RvcmVSZWxheGVkKG51bGxwdHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFz
aFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9B
dG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
Ly8gVGhpcyBpcyBhIGNvbmN1cnJlbnQgaGFzaC1iYXNlZCBzZXQgZm9yIHBvaW50ZXJzLiBJdCdz
IG9wdGltaXplZCBmb3I6CisvLworLy8gLSBIaWdoIHJhdGUgb2YgY29udGFpbnMoKSBjYWxscy4K
Ky8vIC0gSGlnaCByYXRlIG9mIGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIG5l
dy4gYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgKG5vcCBhZGRzKQorLy8gICBk
b24ndCBtdXRhdGUgdGhlIHRhYmxlIGF0IGFsbC4KKy8vIC0gTm90IHRvbyBtYW55IHRocmVhZHMu
IEkgZG91YnQgdGhpcyBzY2FsZXMgYmV5b25kIH40LiBUaG91Z2gsIGl0IG1heSBhY3R1YWxseSBz
Y2FsZSBiZXR0ZXIgdGhhbiB0aGF0CisvLyAgIGlmIHRoZSByYXRlIG9mIG5vcCBhZGRzIGlzIGFi
c3VyZGx5IGhpZ2guCisvLworLy8gSWYgd2Ugd2FudGVkIHRoaXMgdG8gc2NhbGUgYmV0dGVyLCB0
aGUgbWFpbiBjaGFuZ2Ugd2UnZCBoYXZlIHRvIG1ha2UgaXMgaG93IHRoaXMgdGFibGUgZGV0ZXJt
aW5lcyB3aGVuCisvLyB0byByZXNpemUuIFJpZ2h0IG5vdyBpdCdzIGEgc2hhcmVkIGNvdW50ZXIu
IFdlIGxvY2s7eGFkZCB0aGlzIGNvdW50ZXIuIE9uZSBlYXN5IHdheSB0byBtYWtlIHRoYXQKKy8v
IHNjYWxhYmxlIGlzIHRvIHJlcXVpcmUgZWFjaCB0aHJlYWQgdGhhdCB3b3JrcyB3aXRoIHRoZSBD
b25jdXJyZW50UHRySGFzaFNldCB0byByZWdpc3RlciBpdHNlbGYgZmlyc3QuCisvLyBUaGVuIGVh
Y2ggdGhyZWFkIHdvdWxkIGhhdmUgc29tZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhhcyBhIGNvdW50
ZXIuIFdlIGNvdWxkIGluc3RpdHV0ZSB0aGUgcG9saWN5IHRoYXQKKy8vIGVhY2ggdGhyZWFkIHNp
bXBseSBpbmNyZW1lbnRzIGl0cyBvd24gbG9hZCBjb3VudGVyLCBpbiBpdHMgb3duIGRhdGEgc3Ry
dWN0dXJlLiBUaGVuLCBpZiBhbnkgc2VhcmNoIHRvCisvLyByZXNvbHZlIGEgY29sbGlzaW9uIGRv
ZXMgbW9yZSB0aGFuIE4gaXRlcmF0aW9ucywgd2UgY2FuIGNvbXB1dGUgYSBjb21iaW5lZCBsb2Fk
IGJ5IHN1bW1pbmcgdGhlIGxvYWQKKy8vIGNvdW50ZXJzIG9mIGFsbCBvZiB0aGUgdGhyZWFkIGRh
dGEgc3RydWN0dXJlcy4KKy8vCisvLyBDb25jdXJyZW50UHRySGFzaFNldCdzIG1haW4gdXNlciwg
dGhlIEdDLCBzZWVzIGEgOTglIG5vcCBhZGQgcmF0ZSBpbiBTcGVlZG9tZXRlci4gVGhhdCdzIHdo
eSB0aGlzCisvLyBmb2N1c2VzIHNvIG11Y2ggb24gY2FzZXMgd2hlcmUgdGhlIHRhYmxlIGRvZXMg
bm90IGNoYW5nZS4KK2NsYXNzIENvbmN1cnJlbnRQdHJIYXNoU2V0IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb25jdXJyZW50UHRySGFzaFNldCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisKK3B1YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ29uY3VycmVudFB0ckhh
c2hTZXQoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkNvbmN1cnJlbnRQdHJIYXNoU2V0KCk7
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvbnRhaW5zKFQgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udGFpbnNJbXBsKGNhc3QodmFsdWUpKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGFkZChUIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZEltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAg
ICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90YWJs
ZS5sb2FkUmVsYXhlZCgpLT5sb2FkLmxvYWRSZWxheGVkKCk7CisgICAgfQorICAgIAorICAgIC8v
IE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBjYWxsIGFk
ZCgpLiBUaGlzIGZyZWVzIHVwIG1lbW9yeSB3aXRob3V0IGNoYW5naW5nCisgICAgLy8gdGhlIGNv
bnRlbnRzIG9mIHRoZSB0YWJsZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVP
bGRUYWJsZXMoKTsKKyAgICAKKyAgICAvLyBPbmx5IGNhbGwgd2hlbiB5b3Uga25vdyB0aGF0IG5v
IG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQoKS4gVGhpcyBmcmVlcyB1cCBhbGwgbWVtb3J5IGV4
Y2VwdCBmb3IKKyAgICAvLyB0aGUgc21hbGxlc3QgcG9zc2libGUgaGFzaHRhYmxlLgorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyKCk7CisgICAgCitwcml2YXRlOgorICAgIHN0cnVj
dCBUYWJsZSB7CisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IGNyZWF0ZSh1bnNpZ25l
ZCBzaXplKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG1heExvYWQoKSBjb25zdCB7IHJl
dHVybiBzaXplIC8gMjsgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc2l6ZTsgLy8gVGhp
cyBpcyBpbW11dGFibGUuCisgICAgICAgIHVuc2lnbmVkIG1hc2s7IC8vIFRoaXMgaXMgaW1tdXRh
YmxlLgorICAgICAgICBBdG9taWM8dW5zaWduZWQ+IGxvYWQ7CisgICAgICAgIEF0b21pYzx2b2lk
Kj4gYXJyYXlbMV07CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaCh2b2lk
KiBwdHIpCisgICAgeworICAgICAgICByZXR1cm4gUHRySGFzaDx2b2lkKj46Omhhc2gocHRyKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkKiBjYXN0KFQgdmFsdWUpCisgICAgeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihUKSA8PSBzaXplb2Yodm9pZCopLCAidHlwZSB0b28gYmlnIik7Cisg
ICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHZvaWQqIHB0cjsKKyAgICAgICAgICAgIFQgdmFs
dWU7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5wdHIgPSBudWxscHRyOworICAgICAgICB1LnZh
bHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiB1LnB0cjsKKyAgICB9CisgICAgCisgICAgYm9v
bCBjb250YWluc0ltcGwodm9pZCogcHRyKSBjb25zdAorICAgIHsKKyAgICAgICAgVGFibGUqIHRh
YmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFi
bGUtPm1hc2s7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNr
OworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVs
YXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBpZiAoZW50cnkgPT0gcHRyKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBuZXcgZW50cnkgd2FzIGFkZGVk
LgorICAgIGJvb2wgYWRkSW1wbCh2b2lkKiBwdHIpCisgICAgeworICAgICAgICBUYWJsZSogdGFi
bGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJs
ZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7
CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxh
eGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBh
ZGRTbG93KHRhYmxlLCBtYXNrLCBzdGFydEluZGV4LCBpbmRleCwgcHRyKTsKKyAgICAgICAgICAg
IGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBhZGRTbG93KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFz
aywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgaW5kZXgsIHZvaWQqIHB0cik7CisKKyAg
ICB2b2lkIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCByZXNpemVBbmRBZGQodm9pZCog
cHRyKTsKKyAgICAKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRhYmxlPiwgND4gbV9hbGxU
YWJsZXM7CisgICAgQXRvbWljPFRhYmxlKj4gbV90YWJsZTsgLy8gVGhpcyBpcyBuZXZlciBudWxs
LgorICAgIExvY2sgbV9sb2NrOyAvLyBXZSBqdXN0IHVzZSB0aGlzIHRvIGNvbnRyb2wgcmVzaXpl
IHJhY2VzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q29uY3VycmVu
dFB0ckhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYv
d3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTEgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBhcHBlbmRB
bmRCdWJibGUoVSYmLCBjb25zdCBGdW5jJik7CiAgICAgCisgICAgLy8gUmVtb3ZlIGFuZCByZXR1
cm4gdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUu
IFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBh
bHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFQg
dGFrZUZpcnN0KGNvbnN0IEZ1bmMmKTsKKwogICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBs
YXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMg
YSBudWxsIHZlcnNpb24gb2YKICAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0
dXJucyBmYWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTcxLDYgKzU3Niwy
NSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwCiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdChjb25zdCBG
dW5jJiBmdW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzaXpl
ID0gdGhpcy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgVCBj
YW5kaWRhdGUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkgewor
ICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgcHJlcGVuZCh0YWtl
TGFzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAgIH0KKyAgICAg
ICAgY291bnQrKzsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7CisgICAgfQor
ICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBpbmxpbmUgVCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgdW5zaWduZWQg
Y291bnQgPSAwOwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDcg
QEAgdXNpbmcgV1RGOjpmYXN0QWxpZ25lZEZyZWU7CiAjZGVmaW5lIFdURl9QUklWQVRFX0lOTElO
RSBpbmxpbmUKICNlbmRpZgogCi0jZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIFwKLXB1
YmxpYzogXAorI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKICAgICB2b2lk
KiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IFwKICAgICB2b2lk
KiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIFwK
QEAgLTI2Myw3ICsyNjIsMTUgQEAgcHVibGljOiBcCiAgICAgICAgIEFTU0VSVChsb2NhdGlvbik7
IFwKICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOyBcCiAgICAgfSBcCisKKyNkZWZpbmUgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQgXAorcHVibGljOiBcCisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfSU1QTCBcCiBwcml2YXRlOiBcCiB0eXBlZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNl
bWljb2xvbkFmdGVyVGhpc01hY3JvCiAKKyNkZWZpbmUgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxM
T0NBVEVEIFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKK3R5cGVkZWYgaW50
IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KKwogI2VuZGlmIC8q
IFdURl9GYXN0TWFsbG9jX2ggKi8KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDE2IEBA
CiAjaW5jbHVkZSAiTG9jay5oIgogCiAjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG1JbmxpbmVz
Lmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewogCitzdGF0aWMgY29uc3RleHByIGJvb2wgcHJvZmlsZUxvY2tDb250ZW50aW9uID0gZmFsc2U7
CisKIHZvaWQgTG9ja0Jhc2U6OmxvY2tTbG93KCkKIHsKKyAgICBpZiAocHJvZmlsZUxvY2tDb250
ZW50aW9uKQorICAgICAgICBTVEFDS19TSE9UX1BST0ZJTEUoNCwgMiwgNSk7CiAgICAgRGVmYXVs
dExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0xvY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMjIsNiArMTIyLDEyIEBAIExvY2tlcjxMb2NrVHlwZT4gaG9sZExvY2soTG9j
a1R5cGUmIGxvY2sKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CitMb2NrZXI8TG9j
a1R5cGU+IGhvbGRMb2NrSWYoTG9ja1R5cGUmIGxvY2ssIGJvb2wgcHJlZGljYXRlKQoreworICAg
IHJldHVybiBMb2NrZXI8TG9ja1R5cGU+KHByZWRpY2F0ZSA/ICZsb2NrIDogbnVsbHB0cik7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogTG9ja2VyPExvY2tUeXBlPiB0cnlIb2xk
TG9jayhMb2NrVHlwZSYgbG9jaykKIHsKICAgICByZXR1cm4gTG9ja2VyPExvY2tUeXBlPjo6dHJ5
TG9jayhsb2NrKTsKQEAgLTEzNCw1ICsxNDAsNiBAQCB1c2luZyBXVEY6OkxvY2tlcjsKIHVzaW5n
IFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnOwogdXNpbmcgV1RGOjpOb0xvY2tpbmdOZWNlc3Nh
cnk7CiB1c2luZyBXVEY6OmhvbGRMb2NrOwordXNpbmcgV1RGOjpob2xkTG9ja0lmOwogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDYgKzE3NCwxMyBA
QCBwcml2YXRlOgogCiAvLyBUaGlzIGlzIGZvciB3aGVuIHlvdSBhbHJlYWR5IHJlZmVyIHRvIGEg
ZnVuY3RvciBieSByZWZlcmVuY2UsIGFuZCB5b3Uga25vdyBpdHMgbGlmZXRpbWUgaXMKIC8vIGdv
b2QuIFRoaXMganVzdCBjcmVhdGVzIGEgU2NvcGVkTGFtYmRhIHRoYXQgcG9pbnRzIHRvIHlvdXIg
ZnVuY3Rvci4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBpcyBhbHdheXMgd3Jvbmc6CisvLworLy8g
YXV0byByZWYgPSBzY29wZWRMYW1iZGFSZWYoWy4uLl0gKC4uLikgey4uLn0pOworLy8KKy8vIEJl
Y2F1c2UgdGhlIHNjb3BlZExhbWJkYVJlZiB3aWxsIHJlZmVyIHRvIHRoZSBsYW1iZGEgYnkgcmVm
ZXJlbmNlLCBhbmQgdGhlIGxhbWJkYSB3aWxsIGRpZSBhZnRlciB0aGUKKy8vIHNlbWljb2xvbi4g
VXNlIHNjb3BlZExhbWJkYSgpIGluIHRoYXQgY2FzZS4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KIFNjb3BlZExhbWJkYVJlZkZ1bmN0b3I8RnVuY3Rp
b25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGFSZWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
IHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYv
d3RmL1NoYXJlZFRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTEgQEAgbmFtZXNw
YWNlIFdURiB7CiAvLyBzdGF0ZSBpbiBtZW1iZXIgZmllbGRzLiBUaGlzIGNhbiBiZSBtb3JlIG5h
dHVyYWwgaWYgeW91IHdhbnQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB3aGF0CiAvLyBzdGF0
ZSBpcyBzaGFyZWQgYmV0d2VlbiBpbnN0YW5jZXMgb2YgdGhlIHRhc2suCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotY2xhc3MgU2hhcmVkVGFzazxS
ZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8U2hhcmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+IHsKK3RlbXBsYXRl
PHR5cGVuYW1lIFBhc3NlZFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Citj
bGFzcyBTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPj4gewogcHVibGljOgorICAgIHR5cGVkZWYgUGFzc2VkUmVzdWx0VHlw
ZSBSZXN1bHRUeXBlOworICAgIAogICAgIFNoYXJlZFRhc2soKSB7IH0KICAgICB2aXJ0dWFsIH5T
aGFyZWRUYXNrKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIFN0YWNrU2hvdCB7CitwdWJsaWM6CisgICAgU3RhY2tTaG90KCkgeyB9CisgICAgCisg
ICAgQUxXQVlTX0lOTElORSBTdGFja1Nob3Qoc2l6ZV90IHNpemUpCisgICAgICAgIDogbV9zaXpl
KHNpemUpCisgICAgeworICAgICAgICBpZiAoc2l6ZSkgeworICAgICAgICAgICAgbV9hcnJheSA9
IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4oc2l6ZSk7CisgICAgICAgICAgICBpbnQgaW50U2l6
ZSA9IHNpemU7CisgICAgICAgICAgICBXVEZHZXRCYWNrdHJhY2UobV9hcnJheS5nZXQoKSwgJmlu
dFNpemUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bnRTaXplKSA8PSBzaXplKTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IGludFNpemU7CisgICAgICAg
ICAgICBpZiAoIW1fc2l6ZSkKKyAgICAgICAgICAgICAgICBtX2FycmF5ID0gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTdGFja1Nob3QoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQorICAgICAgICA6IG1fYXJyYXkoZGVsZXRlZFZhbHVlQXJyYXkoKSkKKyAgICAg
ICAgLCBtX3NpemUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdCYgb3BlcmF0
b3I9KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8dm9pZCpbXT4gbmV3QXJyYXkgPSBzdGQ6Om1ha2VfdW5pcXVlPHZvaWQqW10+KG90aGVyLm1f
c2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvdGhlci5tX3NpemU7IGktLTspCisgICAg
ICAgICAgICBuZXdBcnJheVtpXSA9IG90aGVyLm1fYXJyYXlbaV07CisgICAgICAgIG1fc2l6ZSA9
IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9hcnJheSA9IFdURk1vdmUobmV3QXJyYXkpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdChjb25zdCBTdGFj
a1Nob3QmIG90aGVyKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICB9CisgICAg
CisgICAgdm9pZCoqIGFycmF5KCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS5nZXQoKTsgfQorICAg
IHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgCisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9hcnJheTsgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdGFja1Nob3QmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fc2l6ZSAhPSBvdGhlci5tX3NpemUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9zaXplOyBpLS07KSB7Cisg
ICAgICAgICAgICBpZiAobV9hcnJheVtpXSAhPSBvdGhlci5tX2FycmF5W2ldKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9zaXplOworICAgICAgICAKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IG1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIHJlc3VsdCBePSBQdHJIYXNoPHZv
aWQqPjo6aGFzaChtX2FycmF5W2ldKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NpemUgJiYgbV9hcnJheS5nZXQoKSA9PSBkZWxldGVk
VmFsdWVBcnJheSgpOworICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIFNwZWN0cnVtPD4gaGFwcHku
CisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgU3RhY2tTaG90JikgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQqKiBkZWxldGVkVmFsdWVBcnJh
eSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKio+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkpOyB9CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPHZvaWQqW10+IG1fYXJyYXk7CisgICAg
c2l6ZV90IG1fc2l6ZSB7IDAgfTsKK307CisKK3N0cnVjdCBTdGFja1Nob3RIYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTdGFja1Nob3QmIHNob3QpIHsgcmV0dXJuIHNob3Qu
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RhY2tTaG90JiBhLCBjb25z
dCBTdGFja1Nob3QmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxTdGFja1Nob3Q+IHsKKyAgICB0eXBlZGVmIFN0YWNrU2hvdEhhc2ggSGFzaDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1
Y3QgSGFzaFRyYWl0czxTdGFja1Nob3Q+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFN0YWNrU2hv
dD4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvU3Rh
Y2tTaG90UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQ
cm9maWxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2Zp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Qcm9j
ZXNzSUQuaD4KKyNpbmNsdWRlIDx3dGYvU3BlY3RydW0uaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tU
cmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1Nob3QuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBTdGFja1Nob3RQcm9maWxlciB7CitwdWJsaWM6CisgICAgU3RhY2tTaG90UHJvZmlsZXIo
dW5zaWduZWQgbnVtRnJhbWVzLCB1bnNpZ25lZCBmcmFtZXNUb1NraXAsIHVuc2lnbmVkIHN0YWNr
c1RvUmVwb3J0KQorICAgICAgICA6IG1fbnVtRnJhbWVzKG51bUZyYW1lcykKKyAgICAgICAgLCBt
X2ZyYW1lc1RvU2tpcChmcmFtZXNUb1NraXApCisgICAgICAgICwgbV9zdGFja3NUb1JlcG9ydChz
dGFja3NUb1JlcG9ydCkKKyAgICB7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJTdGFja1Nob3RQ
cm9maWxlciIsIFt0aGlzXSAoKSB7IHJ1bigpOyB9KTsKKyAgICB9CisKKyAgICAvLyBORVZFUl9J
TkxJTkUgc28gdGhhdCBmcmFtZXNUb1NraXAgaXMgcHJlZGljdGFibGUuCisgICAgTkVWRVJfSU5M
SU5FIHZvaWQgcHJvZmlsZSgpCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisgICAgICAgIG1fcHJvZmlsZS5hZGQoU3RhY2tTaG90KG1fbnVtRnJhbWVzICsg
bV9mcmFtZXNUb1NraXApKTsKKyAgICAgICAgbV90b3RhbENvdW50Kys7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBOT19SRVRVUk4gdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yICg7
OykgeworICAgICAgICAgICAgc2xlZXAoMV9zKTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGF1dG8gbGlzdCA9IG1fcHJvZmlsZS5idWls
ZExpc3QoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuSG90dGVzdCBzdGFja3MgaW4gIiwgZ2V0
Q3VycmVudFByb2Nlc3NJRCgpLCAiOlxuIik7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
bGlzdC5zaXplKCksIGNvdW50ID0gMDsgaS0tICYmIGNvdW50IDwgbV9zdGFja3NUb1JlcG9ydDsg
Y291bnQrKykgeworICAgICAgICAgICAgICAgIGF1dG8mIGVudHJ5ID0gbGlzdFtpXTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJcblRvcCAjIiwgY291bnQgKyAxLCAiIHN0YWNrOiAiLCBlbnRy
eS5jb3VudCAqIDEwMCAvIG1fdG90YWxDb3VudCwgIiVcbiIpOworICAgICAgICAgICAgICAgIFN0
YWNrVHJhY2UgdHJhY2UoZW50cnkua2V5LmFycmF5KCkgKyBtX2ZyYW1lc1RvU2tpcCwgZW50cnku
a2V5LnNpemUoKSAtIG1fZnJhbWVzVG9Ta2lwKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRy
YWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgV29yZExvY2sgbV9sb2NrOworICAgIFNwZWN0cnVtPFN0YWNr
U2hvdCwgZG91YmxlPiBtX3Byb2ZpbGU7CisgICAgZG91YmxlIG1fdG90YWxDb3VudCB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX251bUZyYW1lczsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lc1RvU2tpcDsK
KyAgICB1bnNpZ25lZCBtX3N0YWNrc1RvUmVwb3J0OworfTsKKworI2RlZmluZSBTVEFDS19TSE9U
X1BST0ZJTEUobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVwb3J0KSBkbyB7IFwK
KyAgICBzdGF0aWMgU3RhY2tTaG90UHJvZmlsZXIqIHN0YWNrU2hvdFByb2ZpbGVyOyBcCisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWc7IFwKKyAgICBz
dGQ6OmNhbGxfb25jZShzdGFja1Nob3RQcm9maWxlck9uY2VGbGFnLCBbXSB7IHN0YWNrU2hvdFBy
b2ZpbGVyID0gbmV3IFN0YWNrU2hvdFByb2ZpbGVyKG51bUZyYW1lcywgZnJhbWVzVG9Ta2lwLCBz
dGFja3NUb1JlcG9ydCk7IH0pOyBcCisgICAgc3RhY2tTaG90UHJvZmlsZXItPnByb2ZpbGUoKTsg
XAorfSB3aGlsZSAoZmFsc2UpCisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91bGQgYmUgcGFy
YWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBiZWNhdXNlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhpcyBjaGFuZ2UgaXMg
YmVzdCB0ZXN0ZWQgdXNpbmcgRE9NLUdDLWludGVuc2l2ZQorICAgICAgICBiZW5jaG1hcmtzIGxp
a2UgU3BlZWRvbWV0ZXIgYW5kIERyb21hZW8uCisgICAgICAgIAorICAgICAgICBUaGlzIHBhcmFs
bGVsaXplcyB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0cmFpbnQsIGFuZCBtYWtlcyBzb21lIHNtYWxs
IGNoYW5nZXMgdG8gbWFrZSB0aGlzIG1vcmUKKyAgICAgICAgc2NhbGFibGUuCisKKyAgICAgICAg
KiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg6IEFkZGVk
LgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0Lmg6IFJl
bW92ZWQuCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJh
aW50OjpET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRw
dXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdHJhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NR0NPdXRwdXRDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0ltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaDogQWRkZWQuCisgICAg
ICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKToKKyAgICAgICAgKiBkb20vTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpldmVudFRhcmdldERhdGFDb25jdXJyZW50
bHkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyRXZlbnRUYXJnZXREYXRhKToKKwogMjAxNy0xMi0w
MSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEludGVy
bmFscy50ZXJtaW5hdGVTZXJ2aWNlV29ya2VyLCBhbmQgdGhlIGFiaWxpdHkgdG8gcmVzdGFydCBz
ZXJ2aWNlIHdvcmtlcnMgZm9yIHBvc3RNZXNzYWdlLgpJbmRleDogU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0zMjEsNiArMzIxLDcgQEAgYmluZGluZ3MvanMvQ2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVy
LmNwcAogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0RmV0Y2hlci5jcHAKIGJpbmRpbmdzL2pzL0Nh
bGxUcmFjZXIuY3BwCiBiaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKK2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5jcHAKIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAKIGJp
bmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKyNwcmFnbWEgb25jZQor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg+CisKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9W
aXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDIgKzAsMCBAQAotI3ByYWdtYSBvbmNlCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVmlzaXRp
bmdUaW1lb3V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw2
ICszNTEsNyBAQAogCQkwRjg3MTY3MDFDODY5RDgzMDA0RkYwREUgLyogTGVuZ3RoUG9pbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxNjZFMUM4
NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOEI0NTcyMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjhCNDU3MTFEQzNGQkEzMDA0NDNDM0YgLyogSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJDYWxsYmFjay5oICovOyB9OwogCQkwRjhCNDU3NjFEQzQxREJBMDA0NDNDM0YgLyog
SlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhCNDU3NDFEQzQxREJBMDA0NDNDM0YgLyogSlNJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CisJCTBGOURBQTBGMUZEMUM2NkEwMDc5
QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091
dHB1dENvbnN0cmFpbnQuaCAqLzsgfTsKIAkJMEZBMjREN0ExNjJERjkxOTAwQTNGNEMwIC8qIEdy
YXBoaWNzTGF5ZXJVcGRhdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkEyNEQ3ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkI2MjUyRjE4REUxQjE1MDBBMDdDMDUgLyogR2VvbWV0cnlVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjYyNTJEMThERTFCMTUwMEEw
N0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjg4OTBBMTY3RDJGQTEwMDEwQ0RBNSAvKiBTY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCODg5MDgxNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTU0NDYsNiArNTQ0Nyw4IEBACiAJCTBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVy
c2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOTRBMzk1MUVGMUIxMDUwMEZCQUZGQiAvKiBKU0RPTVF1YWRDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01RdWFkQ3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRD
IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMEMxRkQxQzY2MzAwNzlDNUIyIC8qIERPTUdDT3V0cHV0
Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01H
Q091dHB1dENvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlE
QUEwRTFGRDFDNjY0MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUdDT3V0cHV0Q29uc3RyYWludC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEwODUyQjFFNkZCNTVBMDA5NzVGREQgLyogQ1NTUHJv
cGVydGllcy5qc29uICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5qc29uOyBwYXRoID0gQ1NTUHJvcGVydGllcy5qc29uOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkEyNEQ3NzE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXll
clVwZGF0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhp
Y3NMYXllclVwZGF0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyNEQ3
ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NMYXllclVwZGF0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOTgwLDYgKzIyOTgzLDggQEAKIAkJCQk5NTIwNzYwMjFGMjY3
NUY5MDA3RDJBQUIgLyogQ2FsbFRyYWNlclR5cGVzLmggKi8sCiAJCQkJMEY2MEYzMjkxREZCQjEw
NDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLywKIAkJCQkwRjYwRjMyQTFERkJCMTA0MDA0MTZE
NkMgLyogQ29tbW9uVk0uaCAqLywKKwkJCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjlEQUEwRTFGRDFDNjY0MDA3OUM1QjIg
LyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmggKi8sCiAJCQkJN0M1MTZBRDIxRjM1MjUyMDAwMzRC
NkJGIC8qIERPTVByb21pc2VQcm94eS5oICovLAogCQkJCUJDNTNEQTQ3MTE0MzEzNEQwMDBEODE3
RSAvKiBET01XcmFwcGVyV29ybGQuY3BwICovLAogCQkJCUJDNTNEQTJEMTE0MzEyMUUwMDBEODE3
RSAvKiBET01XcmFwcGVyV29ybGQuaCAqLywKQEAgLTI3NTQ3LDYgKzI3NTUyLDcgQEAKIAkJCQk1
MThGNTAwNDE5NENBQzNBMDA4MUJBQUUgLyogSlNHYW1lcGFkQnV0dG9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRTgwREE2NDBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU4MERBNjYwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvcG9zaXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURBQTBGMUZEMUM2NkEwMDc5QzVCMiAvKiBET01HQ091
dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREE3QzFGMTg4MzIyRkMwMEM5
NTRCNSAvKiBKU0dlc3R1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ4MkI3NTIxMTk4
Q0I2QjAwQkZCMDA1IC8qIEpTSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Qzk0RDE0RjBDMjc1QzY4MDA2QkM2MTcgLyogSlNIaXN0b3J5LmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5oIgorCisjaW5jbHVk
ZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4K
KyNpbmNsdWRlIDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFw
L01hcmtlZEJsb2NrSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7CisKK0RPTUdDT3V0cHV0Q29uc3RyYWludDo6RE9NR0NPdXRwdXRDb25z
dHJhaW50KFZNJiB2bSwgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEpCisgICAgOiBNYXJraW5n
Q29uc3RyYWludCgiRG9tbyIsICJET00gT3V0cHV0IiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNl
bGRvbUdyZXllZCwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICwgbV92bSh2bSkKKyAgICAsIG1fY2xpZW50RGF0
YShjbGllbnREYXRhKQorICAgICwgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbih2bS5oZWFwLm11dGF0
b3JFeGVjdXRpb25WZXJzaW9uKCkpCit7Cit9CisKK0RPTUdDT3V0cHV0Q29uc3RyYWludDo6fkRP
TUdDT3V0cHV0Q29uc3RyYWludCgpCit7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBET01H
Q091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikKK3sKKyAgICBIZWFw
JiBoZWFwID0gbV92bS5oZWFwOworICAgIAorICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25W
ZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAKKyAgICBtX2xhc3RFeGVjdXRpb25W
ZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOworICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUKG1fdGFza3MuaXNFbXB0eSgpKTsKKyAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91
dHB1dENvbnN0cmFpbnRTcGFjZSgKKyAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsK
KyAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENl
bGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCog
Y2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAgICAgICAgICAgICBj
ZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNl
bGwsIHZpc2l0b3IpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV90YXNrcy5hcHBlbmQoc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGZ1bmMp
KTsKKyAgICAgICAgfSk7CisgICAgCisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWw7Cit9CisgICAgICAgIAordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFy
YWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKGF1dG8mIHRh
c2sgOiBtX3Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4odmlzaXRvcik7Cit9CisgICAgICAgIAor
dm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZp
c2l0b3ImKQoreworICAgIG1fdGFza3MuY2xlYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEpTVk1DbGllbnREYXRhOworCitjbGFzcyBET01HQ091dHB1dENv
bnN0cmFpbnQgOiBwdWJsaWMgSlNDOjpNYXJraW5nQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAg
RE9NR0NPdXRwdXRDb25zdHJhaW50KEpTQzo6Vk0mLCBKU1ZNQ2xpZW50RGF0YSYpOworICAgIH5E
T01HQ091dHB1dENvbnN0cmFpbnQoKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0M6OkNvbnN0
cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRl
OworICAgIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyAgICBKU1ZNQ2xpZW50RGF0
YSYgbV9jbGllbnREYXRhOworICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlvblZlcnNpb247Cisg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+PiBtX3Rhc2tz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAKKyNpbmNsdWRlICJET01HQ091dHB1
dENvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxoZWFw
L0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaD4KLSNpbmNsdWRl
IDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL01hcmtlZEJs
b2NrSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8aGVhcC9WaXNpdGluZ1RpbWVvdXQuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9WTS5oPgpAQCAt
NzQsNDMgKzcyLDcgQEAgdm9pZCBKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKFZNKgog
ICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gbmV3IEpTVk1DbGllbnREYXRhKCp2bSk7
CiAgICAgdm0tPmNsaWVudERhdGEgPSBjbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBv
aW50ZXIuCiAgICAgCi0gICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJr
aW5nQ29uc3RyYWludD4oCi0gICAgICAgICJXY29jIiwgIldlYkNvcmUgT3V0cHV0IENvbnN0cmFp
bnRzIiwKLSAgICAgICAgW3ZtLCBjbGllbnREYXRhLCBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IHZt
LT5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCldCi0gICAgICAgIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIG11dGFibGUgewotICAgICAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLT5oZWFwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpID09IGxhc3RFeGVjdXRpb25WZXJzaW9uKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGFzdEV4
ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7Ci0KLSAgICAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gbWFuYWdlIHRoZSB2aXNpdCBjb3VudCBoZXJlIG91cnNlbHZl
cy4gV2UgbmVlZCB0byBrbm93IHRoYXQgaWYgdGhpcyBhZGRzCi0gICAgICAgICAgICAvLyBvcGFx
dWUgcm9vdHMgdGhlbiB3ZSBjYW5ub3QgZGVjbGFyZSB0ZXJtaW5hdGlvbiB5ZXQuIFRoZSB3YXkg
d2Ugc2lnbmFsIHRoaXMgdG8gdGhlCi0gICAgICAgICAgICAvLyBjb25zdHJhaW50IHNvbHZlciBp
cyBieSBhZGRpbmcgdG8gdGhlIHZpc2l0IGNvdW50LgotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzaXplX3QgbnVtT3BhcXVlUm9vdHNCZWZvcmUgPSBoZWFwLm51bU9wYXF1ZVJvb3RzKCk7Ci0K
LSAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgcGFyYWxsZWwhCi0gICAgICAgICAgICB1
bnNpZ25lZCBudW1SZXZpc2l0ZWQgPSAwOwotICAgICAgICAgICAgY2xpZW50RGF0YS0+Zm9yRWFj
aE91dHB1dENvbnN0cmFpbnRTcGFjZSgKLSAgICAgICAgICAgICAgICBbJl0gKFN1YnNwYWNlJiBz
dWJzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2Vs
bCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFw
Q2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9
IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjZWxsLT5tZXRob2RUYWJsZSgqdm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGws
IHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1SZXZpc2l0ZWQr
KzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygi
KCIsIG51bVJldmlzaXRlZCwgIikiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvdFZp
c2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90
VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoaGVhcC5udW1PcGFxdWVSb290cygpIC0gbnVtT3BhcXVl
Um9vdHNCZWZvcmUpOwotICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
U2VsZG9tR3JleWVkKTsKLSAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3Zl
KGNvbnN0cmFpbnQpKTsKKyAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChzdGQ6Om1h
a2VfdW5pcXVlPERPTUdDT3V0cHV0Q29uc3RyYWludD4oKnZtLCAqY2xpZW50RGF0YSkpOwogICAg
ICAgICAKICAgICBjbGllbnREYXRhLT5tX25vcm1hbFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpj
cmVhdGUoKnZtLCB0cnVlKTsKICAgICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0
UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVk
ZSAiQmVmb3JlTG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5o
IgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgiCiAjaW5jbHVk
ZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCkBAIC0yMTYyLDcgKzIxNjMsMTQgQEAgRXZlbnRU
YXJnZXREYXRhKiBOb2RlOjpldmVudFRhcmdldERhdGEoKQogCiBFdmVudFRhcmdldERhdGEqIE5v
ZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpCiB7Ci0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOworICAgIC8vIE5vdCBob2xkaW5nIHRo
ZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0b3BwZWQgYWNjZWxlcmF0ZXMgcGFyYWxsZWwgY29u
c3RyYWludCBzb2x2aW5nLCB3aGljaAorICAgIC8vIGNhbGxzIHRoaXMgZnVuY3Rpb24gZnJvbSBt
YW55IHRocmVhZHMuIFBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZyBjYW4gaGFwcGVuIHdpdGgg
dGhlIHdvcmxkCisgICAgLy8gcnVubmluZyBvciBzdG9wcGVkLCBidXQgaWYgd2UgZG8gaXQgd2l0
aCBhIHJ1bm5pbmcgd29ybGQsIHRoZW4gd2UncmUgdXN1YWxseSBtaXhpbmcgY29uc3RyYWludAor
ICAgIC8vIHNvbHZpbmcgd2l0aCBvdGhlciB3b3JrLiBUaGVyZWZvcmUsIHRoZSBtb3N0IGxpa2Vs
eSB0aW1lIGZvciBjb250ZW50aW9uIG9uIHRoaXMgbG9jayBpcyB3aGVuIHRoZQorICAgIC8vIHdv
cmxkIGlzIHN0b3BwZWQuIFdlIGRvbid0IGhhdmUgdG8gaG9sZCB0aGUgbG9jayB3aGVuIHRoZSB3
b3JsZCBpcyBzdG9wcGVkLCBiZWNhdXNlIGEgc3RvcHBlZCB3b3JsZAorICAgIC8vIG1lYW5zIHRo
YXQgd2Ugd2lsbCBuZXZlciBtdXRhdGUgdGhlIGV2ZW50IHRhcmdldCBkYXRhIG1hcC4KKyAgICBK
U0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
a0lmKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jaywgdm0gJiYgdm0tPmhlYXAud29ybGRJc1J1bm5p
bmcoKSk7CiAgICAgcmV0dXJuIGhhc0V2ZW50VGFyZ2V0RGF0YSgpID8gZXZlbnRUYXJnZXREYXRh
TWFwKCkuZ2V0KHRoaXMpIDogbnVsbHB0cjsKIH0KIApAQCAtMjE3MSw2ICsyMTc5LDkgQEAgRXZl
bnRUYXJnZXREYXRhJiBOb2RlOjplbnN1cmVFdmVudFRhcmdldAogICAgIGlmIChoYXNFdmVudFRh
cmdldERhdGEoKSkKICAgICAgICAgcmV0dXJuICpldmVudFRhcmdldERhdGFNYXAoKS5nZXQodGhp
cyk7CiAKKyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIXZtIHx8IHZtLT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOworCiAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIHNldEhhc0V2ZW50
VGFyZ2V0RGF0YSh0cnVlKTsKICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmFkZCh0
aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPEV2ZW50VGFyZ2V0RGF0YT4oKSkuaXRlcmF0b3ItPnZhbHVl
OwpAQCAtMjE3OCw2ICsyMTg5LDggQEAgRXZlbnRUYXJnZXREYXRhJiBOb2RlOjplbnN1cmVFdmVu
dFRhcmdldAogCiB2b2lkIE5vZGU6OmNsZWFyRXZlbnRUYXJnZXREYXRhKCkKIHsKKyAgICBKU0M6
OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtIHx8IHZt
LT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc19l
dmVudFRhcmdldERhdGFNYXBMb2NrKTsKICAgICBldmVudFRhcmdldERhdGFNYXAoKS5yZW1vdmUo
dGhpcyk7CiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91bGQgYmUgcGFyYWxs
ZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTkz
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgKiBTY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrczogQWRkIHNwbGF5LWxhdGVuY3kgdGVzdCwg
c2luY2UgdGhpcyBjaGFuZ2UgbmVlZGVkIHRvIGJlIGNhcmVmdWxseSB2YWxpZGF0ZWQgd2l0aCB0
aGF0IGJlbmNobWFyay4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcDogQWRkZWQuIFRoaXMgaGFzIHVuaXQgdGVzdHMgb2YgdGhlIG5ldyBjb25jdXJy
ZW50IGRhdGEgc3RydWN0dXJlLiBUaGUgdGVzdHMgZm9jdXMgb24gY29ycmVjdG5lc3MgdW5kZXIg
c2VyaWFsIGV4ZWN1dGlvbiwgd2hpY2ggYXBwZWFycyB0byBiZSBlbm91Z2ggZm9yIG5vdyAoaXQn
cyBzbyBlYXN5IHRvIGNhdGNoIGEgY29uY3VycmVuY3kgYnVnIGJ5IGp1c3QgcnVubmluZyB0aGUg
R0MpLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMTItMDEgIEFsaWNp
YSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBT
YW1wbGVNYXAuY3BwIEFQSSB0ZXN0cyB0byBDTWFrZQpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4t
anNjLWJlbmNobWFya3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNo
bWFya3MJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1h
cmtzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIExPTkdTUElERVJfUEFUSCA9IFBF
UkZPUk1BTkNFVEVTVFNfUEFUSCAKIFY4X1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAi
U3VuU3BpZGVyIiArICJ0ZXN0cyIgKyAidjgtdjYiCiBUQUlMQkVOQ0hfUEFUSCA9IFBFUkZPUk1B
TkNFVEVTVFNfUEFUSCArICJUYWlsQmVuY2g5MDAwIgogTUlDUk9CRU5DSE1BUktTX1BBVEggPSBP
UEVOU09VUkNFX1BBVEggKyAiSlNUZXN0cyIgKyAibWljcm9iZW5jaG1hcmtzIgotT0NUQU5FX1dS
QVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJPY3RhbmUiICsgIndyYXBwZXJz
IgorT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJPY3Rh
bmUiCitPQ1RBTkVfV1JBUFBFUl9QQVRIID0gT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCArICJ3cmFw
cGVycyIKIEpTQkVOQ0hfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJKU0JlbmNoIgog
U0lYU1BFRURfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAidGVz
dHMiCiBTSVhTUEVFRF9XUkFQUEVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU2l4
U3BlZWQiICsgIndyYXBwZXJzIgpAQCAtODQxLDYgKzg0MiwyMCBAQCBjbGFzcyBTaW5nbGVGaWxl
VGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCiAgIGVuZAogZW5kCiAKKyMgQmVuY2htYXJrIHRoYXQg
Y29uc2lzdHMgb2YgYSBzaW5nbGUgZmlsZSBhbmQgbXVzdCBiZSBsb2FkZWQgaW4gaXRzIG93biBn
bG9iYWwgb2JqZWN0IGVhY2gKKyMgdGltZSAoaS5lLiBydW4oKSksIGJ1dCByZXR1cm5zIGl0cyBy
ZXN1bHQgaW4gYSBjdXN0b20gd2F5LgorY2xhc3MgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2ht
YXJrUGFyYW1ldGVycworICBhdHRyX3JlYWRlciA6YmVuY2hQYXRoCisgIAorICBkZWYgaW5pdGlh
bGl6ZShiZW5jaFBhdGgpCisgICAgQGJlbmNoUGF0aCA9IGJlbmNoUGF0aAorICBlbmQKKyAgCisg
IGRlZiBraW5kCisgICAgOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyaworICBlbmQKK2Vu
ZAorCiAjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGRhdGEgZmlsZXMg
dGhhdCBzaG91bGQgYmUgbG9hZGVkIGdsb2JhbGx5LCBmb2xsb3dlZAogIyBieSBhIGNvbW1hbmQg
dG8gcnVuIHRoZSBiZW5jaG1hcmsuCiBjbGFzcyBNdWx0aUZpbGVUaW1lZEJlbmNobWFya1BhcmFt
ZXRlcnMKQEAgLTk2NSw2ICs5ODAsMjUgQEAgZGVmIGVtaXRCZW5jaFJ1bkNvZGVGaWxlKG5hbWUs
IHBsYW4sIGJlbgogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgIGlmIChfX2Jl
bmNoZXJfaW5kZXggPj0gI3t3YXJtdXB9KSBwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7
cGxhbi5pdGVyYXRpb259OiBcIiArIChfX2JlbmNoZXJfaW5kZXggLSAje3dhcm11cH0pICsgXCI6
IFRpbWU6IFwiKygoX19hZnRlci1fX2JlZm9yZSkvX19ydW5zKSk7IikKICAgICAgICAgZG91Ymxl
UHV0cygkc3RkZXJyLGZpbGUsIn0iKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
I3tiZW5jaFBhcmFtcy50ZWFyRG93bkNvbW1hbmQuanN9IikKKyAgICAgIGVsc2lmIGJlbmNoUGFy
YW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyaworICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hh
dCkgeyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICB2YXIgX19iZW5jaGVy
X3Jlc3VsdCA9IHt2YWx1ZTogbnVsbH07IikKKyAgICAgICAgJHJlcnVuLnRpbWVzIHsKKyAgICAg
ICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcnVuKF9fYmVuY2hlcl93aGF0LCBfX2Jl
bmNoZXJfcmVzdWx0KTsiKQorICAgICAgICB9CisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCIgICBpZiAoX19iZW5jaGVyX3Jlc3VsdC52YWx1ZSA9PSBudWxsKSIpCisgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdWxsIHJlc3Vs
dFwiKTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcmV0dXJuIF9fYmVu
Y2hlcl9yZXN1bHQudmFsdWU7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0i
KQorICAgICAgICAkd2FybXVwLnRpbWVzIHsKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIs
ZmlsZSwiX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5pbnNwZWN0fSkiKQor
ICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJnYygpOyIpIHVubGVzcyBwbGFuLnZt
LnNob3VsZE1lYXN1cmVHQworICAgICAgICB9CisgICAgICAgICRpbm5lci50aW1lcyB7CisgICAg
ICAgICAgfCBpbm5lckluZGV4IHwKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
cHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19OiAje3BsYW4uaXRlcmF0aW9ufTogI3tpbm5lcklu
ZGV4fTogVGltZTogXCIrX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5pbnNw
ZWN0fSkpOyIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5s
ZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KICAgICAgIGVsc2UKICAgICAg
ICAgcmFpc2UgdW5sZXNzIGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVUaW1lZEJlbmNo
bWFyawogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5jaGVy
X3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCkBAIC0xNTk0LDYgKzE2MjgsMTkgQEAgY2xhc3MgT2N0
YW5lQmVuY2htYXJrCiAgIGVuZAogZW5kCiAKK2NsYXNzIEN1c3RvbVRpbWVkQmVuY2htYXJrCisg
IGluY2x1ZGUgQmVuY2htYXJrCisgIAorICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBmdWxsUGF0aCkK
KyAgICBAbmFtZSA9IG5hbWUKKyAgICBAZnVsbFBhdGggPSBmdWxsUGF0aAorICBlbmQKKyAgCisg
IGRlZiBlbWl0UnVuQ29kZShwbGFuKQorICAgIGVtaXRCZW5jaFJ1bkNvZGUoZnVsbG5hbWUsIHBs
YW4sIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFya1BhcmFtZXRlcnMubmV3KGVuc3VyZUZp
bGUoIkN1c3RvbVRpbWVkLSN7QG5hbWV9IiwgQGZ1bGxQYXRoKSkpCisgIGVuZAorZW5kCisKIGNs
YXNzIEtyYWtlbkJlbmNobWFyawogICBpbmNsdWRlIEJlbmNobWFyawogICAKQEAgLTMwMTAsNiAr
MzA1Nyw3IEBAIGJlZ2luCiAgICAgfCBhcmdzIHwKICAgICBPQ1RBTkUuYWRkIE9jdGFuZUJlbmNo
bWFyay5uZXcoKmFyZ3MpCiAgIH0KKyAgT0NUQU5FLmFkZCBDdXN0b21UaW1lZEJlbmNobWFyay5u
ZXcoInNwbGF5LWxhdGVuY3kiLCAoT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCArICJzcGxheS5qcyIp
LnRvX3MpCiAKICAgS1JBS0VOID0gQmVuY2htYXJrU3VpdGUubmV3KCJLcmFrZW4iLCA6YXJpdGht
ZXRpY01lYW4sIC0xKQogICBbImFpLWFzdGFyIiwgImF1ZGlvLWJlYXQtZGV0ZWN0aW9uIiwgImF1
ZGlvLWRmdCIsICJhdWRpby1mZnQiLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAKKyAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ3Jvc3NUaHJlYWRUYXNrLmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQAogCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRp
ZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICov
OyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2Nv
YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5
RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICovOyB9Owog
CQkwRjJDMjBCODFEQ0Q1NDUwMDA1NDJEOUUgLyogVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJEOUUgLyog
VGltZS5jcHAgKi87IH07CisJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50
UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
ICovOyB9OwogCQkwRjNCOTRBNzFBNzcyNjc0MDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVK
YXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlw
dC5tbSAqLzsgfTsKIAkJMEY0RkZBOUUxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVu
ZGVySW5Db250ZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVuZGVySW5Db250
ZXh0Lm1tICovOyB9OwogCQkwRjU2NTFGNzFGQ0U0RERDMDAzMTBGQkMgLyogTm9IaXN0b3J5SXRl
bVNjcm9sbFRvRnJhZ21lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjU2NTFGNjFGQ0U0RERCMDAzMTBGQkMgLyogTm9IaXN0b3J5SXRlbVNjcm9s
bFRvRnJhZ21lbnQubW0gKi87IH07CkBAIC0xMDcyLDYgKzEwNzMsNyBAQAogCQkwRjEzOUU3NTFB
NDIzQTUzMDBGNTkwRjUgLyogV2Vha09iakNQdHIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXZWFrT2JqQ1B0ci5tbTsgcGF0aCA9IGNvY29hL1dlYWtPYmpDUHRy
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3QkJENDE1QUY2QzREMDA3QUI3
NTMgLyogV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVTdGF0aXN0aWNzV2l0aE5vV2ViUHJvY2Vz
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkMyMEI3MURDRDU0NDgwMDU0
MkQ5RSAvKiBUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRp
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1QjFGQ0UxNzkyMDA0
QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVh
dGVKYXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRl
eHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTbmFwc2hvdFZp
YVJlbmRlckluQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RkZB
QTAxRUQzRDBERTAwRjcxMTFGIC8qIEltYWdlSU8uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUg
PSBJbWFnZUlPLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSW1h
Z2VJTy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwpAQCAtMjU5Myw2ICsyNTk1
LDcgQEAKIAkJCQkyNkYxQjQ0MjE1Q0E0MzRGMDBEMUU0QkYgLyogQXRvbWljU3RyaW5nLmNwcCAq
LywKIAkJCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIuY3BwICovLAog
CQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlv
bnMuY3BwICovLAorCQkJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAgKi8sCiAJCQkJMEZFQUUzNjcxQjdEMTlDQjAwQ0UxN0YyIC8qIENvbmRpdGlv
bi5jcHAgKi8sCiAJCQkJNTE3MTRFQjkxRDA4NzQxNjAwNDcyM0M0IC8qIENyb3NzVGhyZWFkVGFz
ay5jcHAgKi8sCiAJCQkJMjZBMkM3MkUxNUUyRTczQzAwNUIxQTE0IC8qIENTdHJpbmcuY3BwICov
LApAQCAtMzE3OSw2ICszMTgyLDcgQEAKIAkJCQk3QzgzREVGNjFEMEE1OTBDMDBGRUJDRjMgLyog
TWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVGRTFEMEE1OTBDMDBG
RUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDU0RjMxRjMzOEMz
NjAwQTk3QUE3IC8qIE5ldmVyRGVzdHJveWVkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBD
QjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzREYwMTFEMEE1OTBDMDBGRUJDRjMgLyogT3B0aW9uYWwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE3N0JBQTMxRDlBRkZGQzAwNUZDNTY4IC8qIE9wdGlvblNldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMgLyogT1NPYmplY3RQ
dHIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25leGlzdGVudCkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCituYW1lc3BhY2Ug
eworCisvLyBgY29tbWFuZHNgIGlzIGEgc3RyaW5nIHRoYXQgdGVsbHMgdGhpcyB0aGluZyB3aGF0
IHRvIGRvLiBJdCBoYXMgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzLgorLy8g
VGhlIGNoYXJhY3RlciBwYWlycyBhcmUgY29tbWFuZHMuIENvbW1hbmRzOgorLy8KKy8vICt4ICAg
ICBBZGRzICd4JyB0byB0aGUgc2V0IChjYXN0cyAneCcgdG8gYSB2b2lkKikgYW5kIGFzc2VydHMg
dGhhdCBpdCdzIG5ldy4KKy8vICF4ICAgICBBZGRzICd4JyB0byB0aGUgc2V0IGFuZCBhc3NlcnRz
IHRoYXQgaXQgd2FzIHRoZXJlIGFscmVhZHkuCisvLyA9eCAgICAgQXNzZXJ0cyB0aGF0ICd4JyBp
cyBpbiB0aGUgc2V0CisvLyAteCAgICAgQXNzZXJ0cyB0aGF0ICd4JyBpcyBub3QgaW4gdGhlIHNl
dAordm9pZCBkb1Rlc3QoY29uc3QgY2hhciogY29tbWFuZHMpCit7CisgICAgQ29uY3VycmVudFB0
ckhhc2hTZXQgc2V0OworICAgIGZvciAoY29uc3QgY2hhciogY29tbWFuZCA9IGNvbW1hbmRzOyBj
b21tYW5kWzBdICYmIGNvbW1hbmRbMV07IGNvbW1hbmQgKz0gMikgeworICAgICAgICB2b2lkKiBw
dHIgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29tbWFuZFsx
XSkpOworICAgICAgICBzd2l0Y2ggKGNvbW1hbmRbMF0pIHsKKyAgICAgICAgY2FzZSAnKyc6Cisg
ICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQuYWRkKHB0cikpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJyEnOgorICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHNldC5hZGQocHRy
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnPSc6CisgICAgICAgICAgICBF
WFBFQ1RfVFJVRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnLSc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKHB0cikp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitURVNUKFdURl9Db25jdXJy
ZW50UHRySGFzaFNldCwgRW1wdHkpCit7CisgICAgZG9UZXN0KCIiKTsKK30KKworVEVTVChXVEZf
Q29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnQpCit7CisgICAgZG9UZXN0KCIreD14
LXktMCIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVu
dE11bHRpcGxlVGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgt
eS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50
TWFueVRpbWVzKQoreworICAgIGRvVGVzdCgiK3gheCF4IXgheCF4IXgheCF4IXgheD14LXktMCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4Iik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJl
bnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50cykKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0
KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2graitrK2wreit4K2Mr
ditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytMK1orWCtDK1YrQitO
K009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9
az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9SD1KPUs9TD1a
PVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFk
ZExvdHNPZkVsZW1lbnRzTWFueVRpbWVzKQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2Kzcr
OCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6K3grYyt2K2Irbitt
K1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9
Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14
PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9
Qj1OPU0tLiExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFn
IWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUoh
SyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFw
IWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMh
RCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0
IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUh
SSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVch
RSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1
ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYh
YiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFN
ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWsh
bCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFY
IUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQh
ZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFI
IUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkh
byFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFB
IVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUh
ciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZ
IVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSIpOworfQorCitURVNUKFdU
Rl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNBbmRRdWVyeVNvbWVCZWZv
cmVBZGRpbmdUaGVSZXN0KQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3
K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2s9MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9
ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9ay1sLXoteC1jLXYtYi1uLW0tUS1XLUUtUi1U
LVktVS1JLU8tUC1BLVMtRC1GLUctSC1KLUstTC1aLVgtQy1WLUItTi1NK2wreit4K2MrditiK24r
bStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytMK1orWCtDK1YrQitOK009MT0y
PTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1sPXo9
eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9Qz1W
PUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZFNvbWVF
bGVtZW50c011bHRpcGxlVGltZXNUaGVuQWRkVGhlUmVzdEFuZFF1ZXJ5U29tZUJlZm9yZUFkZGlu
Z1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3Qh
MSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFy
IXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXch
ZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFx
IXchZSFyIXQreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9
dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1S
LVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2Ir
bittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0x
PTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9
ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1D
PVY9Qj1OPU0tLiIpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisK
</data>
<flag name="commit-queue"
          id="347426"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328233</attachid>
            <date>2017-12-02 09:02:13 -0800</date>
            <delta_ts>2017-12-02 15:14:22 -0800</delta_ts>
            <desc>more solid speedup</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>259730</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIFRoaXMgbG9va3MgbGlrZSBhIDElIFNwZWVkb21ldGVy
CisgICAgICAgIHNwZWVkLXVwLgorICAgICAgICAKKyAgICAgICAgVGhlIGNvbnN0cmFpbnQgc29s
dmVyIHN1cHBvcnRzIHJ1bm5pbmcgY29uc3RyYWludHMgaW4gcGFyYWxsZWwgaW4gdHdvIGRpZmZl
cmVudCB3YXlzOgorICAgICAgICAKKyAgICAgICAgLSBSdW4gbXVsdGlwbGUgY29uc3RyYWludHMg
aW4gcGFyYWxsZWwgdG8gZWFjaCBvdGhlci4gVGhpcyBvbmx5IHdvcmtzIGZvciBjb25zdHJhaW50
cyB0aGF0IGNhbgorICAgICAgICAgIHRvbGVyYXRlIG90aGVyIGNvbnN0cmFpbnRzIHJ1bm5pbmcg
Y29uY3VycmVudGx5IHRvIHRoZW0gKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PQorICAgICAg
ICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCkuIFRoaXMgaXMgdGhlIG1vc3Qg
YmFzaWMga2luZCBvZiBwYXJhbGxlbGlzbSB0aGF0IHRoZQorICAgICAgICAgIGNvbnN0cmFpbnQg
c29sdmVyIHN1cHBvcnRzLiBBbGwgY29uc3RyYWludHMgZXhjZXB0IHRoZSBKU0MgU1BJIGNvbnN0
cmFpbnRzIGFyZSBjb25jdXJyZW50LiBXZQorICAgICAgICAgIGNvdWxkIHByb2JhYmx5IG1ha2Ug
dGhlbSBjb25jdXJyZW50LCBidXQgSSdtIHBsYXlpbmcgaXQgc2FmZSBmb3Igbm93LgorICAgICAg
ICAKKyAgICAgICAgLSBBIGNvbnN0cmFpbnQgY2FuIGNyZWF0ZSBwYXJhbGxlbCB3b3JrIGZvciBp
dHNlbGYsIHdoaWNoIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGludGVybGVhdmUKKyAgICAg
ICAgICB3aXRoIG90aGVyIHN0dWZmLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9ydCB0aGF0IGl0IGhh
cyBwYXJhbGxlbCB3b3JrIGJ5IHJldHVybmluZworICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlvbi4gVGhlbiB0aGUg
c29sdmVyIHdpbGwgYWxsb3cgdGhhdAorICAgICAgICAgIGNvbnN0cmFpbnQncyBkb1BhcmFsbGVs
V29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJrZXIgdGhyZWFkcyBh
cyBhcmUgYXZhaWxhYmxlLAorICAgICAgICAgIGZvciBhcyBsb25nIGFzIHRoYXQgZnVuY3Rpb24g
d2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9zc2libGUgdG8gaGF2
ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBhcmFsbGVsIHdvcmsu
CisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVtZW50ZWQgaW4gdGVy
bXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1cm5zIG91dCB0byBi
ZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAgICAgICAKKyAgICAg
ICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEgU2xvdFZpc2l0b3Iu
IFJ1bm5pbmcgb24gdGhlIG1hcmtlciB0aHJlYWRzIG1lYW5zIGhhdmluZworICAgICAgICAgIGFj
Y2VzcyB0byB0aG9zZSB0aHJlYWRzJyBTbG90VmlzaXRvcnMuIEFsc28sIGl0IG1lYW5zIGxlc3Mg
bG9hZCBiYWxhbmNpbmcuIFRoZSBzb2x2ZXIgd2lsbAorICAgICAgICAgIGNyZWF0ZSB3b3JrIG9u
IGVhY2ggbWFya2luZyB0aHJlYWQncyBTbG90VmlzaXRvci4gV2hlbiB0aGUgc29sdmVyIGlzIGRv
bmUgInN0ZWFsaW5nIiBhIG1hcmtlcgorICAgICAgICAgIHRocmVhZCwgdGhhdCB0aHJlYWQgd2ls
bCBoYXZlIHdvcmsgaXQgY2FuIHN0YXJ0IGRvaW5nIGltbWVkaWF0ZWx5LiBCZWZvcmUgdGhpcyBj
aGFuZ2UsIHdlIGhhZCB0bworICAgICAgICAgIGNvbnRyaWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkg
dGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9iYWwgd29ya2xpc3Qgc28gdGhhdCBpdCBj
b3VsZCBiZQorICAgICAgICAgIGRpc3RyaWJ1dGVkIHRvIHRoZSBtYXJrZXIgdGhyZWFkcyBieSBs
b2FkIGJhbGFuY2luZy4gVGhpcyBjaGFuZ2UgcHJvYmFibHkgaGVscHMgdG8gYXZvaWQgdGhhdAor
ICAgICAgICAgIGxvYWQgYmFsYW5jaW5nIHN0ZXAuCisgICAgICAgIAorICAgICAgICBBIGxvdCBv
ZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcgaXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEg
c3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcworICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0
IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFibGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0
cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQg
Y29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2VkIGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRo
aXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVs
IGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxsb2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMu
CisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJhbGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBv
dXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAg
ICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5l
eHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4uIGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20g
dGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9uZQorICAgICAgICB3aGVuIGl0IHJldHVybnMg
YSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3
YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAgICBkb25lIGlzIGluZGljYXRlZCBieSBudWxs
KS4KKyAgICAgICAgCisgICAgICAgIERldGFpbGVkIGFuYWx5c2lzIG9mIHRoZSBwZXJmb3JtYW5j
ZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBpbmRpY2F0ZSBhIGRlZmluaXRlIDElIFNwZWVkb21l
dGVyCisgICAgICAgIHByb2dyZXNzaW9uIGFuZCBubyBjaGFuZ2Ugb24gSmV0U3RyZWFtLiBJIGhh
dmUgZG9uZSB0aGUgU3BlZWRvbWV0ZXIgY29tcGFyaXNvbiBtYW55IHRpbWVzIG5vdyBhbmQKKyAg
ICAgICAgdGhlIHByb2dyZXNzaW9uIGlzIG5vdyBlYXNpbHkgcmVwcm9kdWNpYmxlIG9uIG15IG1h
Y2hpbmUuIEl0IHN0YXJ0ZWQgaW5pdGlhbGx5IGFzIGFuIHVucmVsaWFibGUKKyAgICAgICAgfjAu
NSUgc3BlZWQtdXAgb24gU3BlZWRvbWV0ZXIgYW5kIGEgcmVsaWFibGUgfjAuNSUgcmVncmVzc2lv
biBvbiBKZXRTdHJlYW0uIEFmdGVyIGZpeGluZyBsb3RzIG9mCisgICAgICAgIGJ1Z3MgaW4gdGhl
IGxvYWQgYmFsYW5jZXIgYW5kIHNvbWUgcmVhbGx5IGZ1bm55IHBhdGhvbG9naWVzLCB0aGUgSmV0
U3RyZWFtIHNjb3JlIGJlY2FtZSBuZXV0cmFsCisgICAgICAgIGFuZCB0aGUgU3BlZWRvbWV0ZXIg
c2NvcmUgZ290IGV2ZW4gYmV0dGVyLiAoV2VpcmRlc3QgcGF0aG9sb2d5IHRoYXQgSSBmaXhlZDog
aWYgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBzY2FuIGNvbnN0cmFpbnQgaXMgcnVuIGJ5IHNv
bWUgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIGFuZCB0aGUgbXV0YXRvciBoYXMgdGhl
IGNvbm4gW3NvCisgICAgICAgIHRoZSBtYWluIHRocmVhZCdzIHRvcCBmcmFtZXMgYXJlIHRoZSBH
QyBpdHNlbGZdIHRoZW4gd2Ugd2lsbCBzY2FuIHRoZSBtYWluIHRocmVhZCB0d2ljZSAtIG9uY2UK
KyAgICAgICAgdXNpbmcgQ3VycmVudFRocmVhZFN0YXRlIFt3aGljaCBjYXJlZnVsbHkgYXZvaWRz
IHNjYW5uaW5nIHRoZSBHQydzIHN0YWNrIGZyYW1lc10gYW5kIG9uY2UgYXMgaWYgaXQKKyAgICAg
ICAgd2FzIGEgcmFuZG9tIG5hdGl2ZSB0aHJlYWQgW3doaWNoIHdpbGwgc2NhbiB0aGUgR0MncyBm
cmFtZXNdOyB0aGUgbGF0dGVyIHNjYW4gd291bGQgcGljayB1cAorICAgICAgICBvYmplY3RzIHRo
YXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGhhZCBjb25zaWRlcmVkIGJ1dCByZWplY3RlZCwgd2hp
Y2ggd291bGQgc29tZXRpbWVzIGxlYWQgdG8KKyAgICAgICAgcnVuYXdheSBHQ3MuIEkgZml4ZWQg
dGhpcyBieSB0ZWFjaGluZyB0aGUgY29uc2VydmF0aXZlIHNjYW4gbm90IHRvIHNjYW4gdGhlIHRo
cmVhZCBydW5uaW5nIEdDCisgICAgICAgIHVzaW5nIHRoZSByYW5kb20gbmF0aXZlIHRocmVhZCBz
Y2FubmluZyBhbGdvcml0aG0uKQorCisgICAgICAgICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQp
OgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVl
VG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3Qu
Y3BwOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlKToKKyAgICAgICAgKiBoZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkZpeHBvaW50UGhhc2UpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
cmVzdW1lVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9y
RWFjaFNsb3RWaXNpdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d29ybGRJc1J1bm5pbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpydW5GdW5jdGlvbkluUGFyYWxsZWwpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6d29ybGRJc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxs
b2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkKToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oOgorICAgICAgICAoSlNDOjps
b2NrRHVyaW5nTWFya2luZyk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJj
ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFwL01h
cmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFyayk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAg
ICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2
ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNCZWdp
bik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpuZXdBY3RpdmVXZWFrU2V0c0VuZCk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1
aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtF
c3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwp
OgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnQ6Omxhc3RFeGVjdXRlUGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6cGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OkV4ZWN1dGlvbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkVmlzaXRT
b21ldGhpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6c2hvdWxkVGltZU91dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkcmFp
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpkaWRFeGVjdXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUpOiBEZWxldGVkLgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
Lmg6CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVy
Z2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9u
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1
dGUpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDogQWRkZWQuCisg
ICAgICAgICogaGVhcC9PcGFxdWVSb290U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9Q
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBhcmFsbGVsU291
cmNlQWRhcHRlcjo6UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50
OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdD
b25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpT
aW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9E
YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZy
b21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBhcmFsbGVsUGFz
c2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZUlmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVl
Um9vdHNJZlByb2ZpdGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VPcGFxdWVSb290cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9T
dWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNv
dXJjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxv
Y2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1
YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL1Zpc2l0Q291bnRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpW
aXNpdENvdW50ZXI6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAqIGhlYXAvVmlzaXRpbmdU
aW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9XZWFrQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKToKKwogMjAxNy0xMS0zMCAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBV
c2UgSlNGaXhlZEFycmF5IGZvciBvcF9uZXdfYXJyYXlfYnVmZmVyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMCwxMyArNTAwLDE2IEBAIGhlYXAv
SklUU3R1YlJvdXRpbmVTZXQuY3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCitoZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCiBoZWFwL01hcmtl
ZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAoraGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0yOTEsNiArMjkwLDcgQEAKIAkJ
MEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8q
IEFpck9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNDBFNEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzM0MUM0
NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBOTFDNDk3Rjc0MDBBNTc3RkEg
LyogQWlyT3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDE1NDVC
MUZEMjBCMjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDE1NDVBMUZEMjBCMUYwMDFCNThG
NiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAx
MzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTMxMiw2ICszMTIsOSBAQAogCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyog
U3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYy
MDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07CisJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAq
LzsgfTsKKwkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhD
NzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEQ4Qzc4MUZDQTNDRkEw
MDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlv
dXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi87IH07
CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTQsNiArMzU3LDcgQEAKIAkJMEY2
Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8q
IEFycmF5UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
OyB9OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IH07CisJCTBGNjQ1MzE4MUZEMjQ2QTcwMDI0
MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NDUzMTUxRkQyNDZBMDAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi87IH07CiAJCTBGNjRCMjcyMUE3ODRCQUYwMDZF
NEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY0QjI3
QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIg
LyogQWlyQXJnSW5saW5lcy5oICovOyB9OwpAQCAtNDQ2LDYgKzQ1MCw4IEBACiAJCTBGOUQzNjk1
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBE
RkdDbGVhblVwUGhhc2UuaCAqLzsgfTsKIAkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovOyB9OwogCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuaCAqLzsgfTsKKwkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAq
LzsgfTsKKwkJMEY5REFBMEExRkQxQzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFB
MDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovOyB9OwogCQkw
RjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyB9
OwogCQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgfTsKIAkJMEY5RkM4QzUx
NEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0OTks
NyArMTUwNSw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1NEQ1
MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVCRjcz
OCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5NzAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21O
YW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFFMDhG
MURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlu
a0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclBy
b3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xOTgxLDcgKzE5ODYsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIw
MEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUx
NzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxh
bklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5l
cy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjM0LDYgKzIyMzgsNyBAQAogCQkwRjNCRDFC
NjFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZH
SW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzFGMTgx
Qjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgcGF0aCA9
IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBw
YXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDE1NDVBMUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludENvbmN1cnJlbmN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
bHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI3MCw2ICsyMjc1LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAv
KiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJT
YW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5E
dW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5NzMwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzczMUZD
N0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1
NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRE
NzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDEsNiArMjM1MCw4IEBACiAJCTBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJyYXlNb2RlLmNw
cDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0Fy
cmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY0NTMxNTFGRDI0NkEw
MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlTd2l0Y2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRj
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwMyw2ICsyNTE0
LDkgQEAKIAkJMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQuaDsg
cGF0aCA9IGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5jcHA7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBGMUMzRTJD
NzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgcGF0
aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURB
QTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
cmFsbGVsU291cmNlQWRhcHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlF
MzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00MjY3LDcgKzQyODEsNiBAQAogCQlBREQwOUFGMzFGNjI0ODJF
MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAv
KiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5MzFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NDFFMDhGMUM5MDA1
OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmg7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk1MUUw
OEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0
b3IuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MTcsNiArNTUzMCw4IEBACiAJCQkJMEZEQ0UxMjgx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEy
RUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYy
MTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNDE1NDVB
MUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLywKKwkJCQkwRjRE
OEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJ
MEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJ
CQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2
RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjExLDE3ICs1NjI2LDIz
IEBACiAJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
Ki8sCiAJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcCAqLywKIAkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnRTZXQuaCAqLywKKwkJCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwICovLAorCQkJCTBGOURBQTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJr
U3RhY2suaCAqLywKKwkJCQkwRjY0NTMxNjFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAvKiBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3
QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJG
RCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oICovLAorCQkJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLywKIAkJCQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyog
UHJldmVudENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIw
OCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8q
IFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4
MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYw
MDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMy
QiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTU2NDMsNyArNTY2NCw3IEBACiAJCQkJ
MEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxv
b21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRp
b25hbEZpbmFsaXplci5oICovLAotCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNp
dGluZ1RpbWVvdXQuaCAqLywKKwkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgw
MDAsNiArODAyMSw3IEBACiAJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNp
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUNGOTg5MUU5RUQ2NTIwMEMxODY5MiAvKiBBaXJT
dGFja0FsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDE1NDVCMUZEMjBC
MjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MjAwLDYgKzgyMjIsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcw
MDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEz
QkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIz
RUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJy
aWVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q2FsbERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODI5Myw2ICs4MzE2LDcgQEAKIAkJCQlBNzdB
NDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY0NTMxODFGRDI0
NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg3NjgsNiArODc5Miw3IEBACiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8q
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtODkxNiw2ICs4OTQxLDcgQEAKIAkJCQlBNzQ4MkU5MzEx
NkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQz
MkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVD
NjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4
NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVy
cyAqLywKQEAgLTkwMzUsOSArOTA2MSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZG
IC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNB
M0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVS
b290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyog
T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0Myw2ICs5MjY5LDcgQEAK
IAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEExRkQxQzNE
MzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjgzLDcgKzkzMTAsNiBAQAogCQkJCTBGNkM3MzUxMUFD
OUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGlt
ZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYw
IC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyog
Vk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Miw3ICs5NzIsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRX
ZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQg
PSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAg
IGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNo
b3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGlj
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAogCiBib29sIENvZGVCbG9jazo6c2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewotICAg
IGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTExMzks
MTAgKzExMzksMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwog
I2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRp
b24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4g
JiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJh
bnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwpAQCAt
MTI0NiwxNCArMTI0NiwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5j
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8
Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGFs
bEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29t
bW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVS
ZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChk
ZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewogICAgICAgICAg
ICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3Bs
YW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93biBy
aWdodFRvUnVuLgotICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcGVk
IGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJlYWQo
Jm1fZGF0YSk7CiAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxlZCkg
ewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAu
d29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3Rv
cHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBs
YW5zLmFwcGVuZChtX3BsYW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFwLndv
cmxkSXNTdG9wcGVkKCkpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3BsYW5Db21waWxlZC5u
b3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAo
c2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgu
bV92bS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwogICAgIAogICAgIGlmIChzdGF0ZS5hbGxvY2F0
aW9uRmFpbGVkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xh
c3MgQ29uc3RyYWludENvbmN1cnJlbmN5IDogdWludDhfdCB7CisgICAgU2VxdWVudGlhbCwKKyAg
ICBDb25jdXJyZW50Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBX
VEYgeworCitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6
Q29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQoreworICAgIHN3aXRjaCAoY29uY3Vy
cmVuY3kpIHsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFs
OgorICAgICAgICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSlNDOjpDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQ6CisgICAgICAgIG91
dC5wcmludCgiQ29uY3VycmVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxp
c20uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJh
aW50UGFyYWxsZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhf
dCB7CisgICAgU2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkK
K3sKKyAgICBzd2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQ
YXJhbGxlbDoKKyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRl
ZEFycmF5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwOSwxMiArMjA5LDExIEBAIGlubGluZSBjb25zdCBUIEdDU2VnbWVudGVkQXJyYXk8
VD46OnJlbW8KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogaW5saW5lIGJvb2wgR0NTZWdtZW50ZWRB
cnJheTxUPjo6aXNFbXB0eSgpCiB7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIGJlIHNhZmUgdG8g
Y2FsbCBjb25jdXJyZW50bHkuIEl0J3MgaW1wb3J0YW50IHRvIHByZXNlcnZlIHRoYXQgY2FwYWJp
bGl0eS4KICAgICBpZiAobV90b3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9z
ZWdtZW50cy5oZWFkKCktPm5leHQoKSkgewotICAgICAgICBBU1NFUlQobV9zZWdtZW50cy5oZWFk
KCktPm5leHQoKS0+bV90b3AgPT0gc19zZWdtZW50Q2FwYWNpdHkpOworICAgIGlmIChtX3NlZ21l
bnRzLmhlYWQoKS0+bmV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5l
SW50ZXJuYWwuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TWFya2VkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIK
QEAgLTI4MSw3ICsyODIsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgLCBtX211dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9y
PigqdGhpcywgIk0iKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlx
dWU8TWFya1N0YWNrQXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtlX3Vu
aXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3RyYWludFNldChzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAgICAgLCBtX2hhbmRs
ZVNldCh2bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9ja1Nl
dD4oKSkKICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1YlJv
dXRpbmVTZXQ+KCkpCkBAIC01OTQsNyArNTk1LDcgQEAgdm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0
aW5nQW5kQ29tcGlsaW5nQwogICAgICAgICBmdW5jKGNvZGVCbG9jayk7CiB9CiAKLXZvaWQgSGVh
cDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkKK3ZvaWQgSGVhcDo6YXNzZXJ0TWFya1N0
YWNrc0VtcHR5KCkKIHsKICAgICBib29sIG9rID0gdHJ1ZTsKICAgICAKQEAgLTYwOCwxMiArNjA5
LDIxIEBAIHZvaWQgSGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkKICAgICAgICAg
b2sgPSBmYWxzZTsKICAgICB9CiAgICAgCisgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAorICAgICAg
ICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBpZiAodmlzaXRvci5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBkYXRhTG9nKCJGQVRBTDogVmlzaXRvciAiLCBSYXdQb2ludGVyKCZ2aXNpdG9yKSwgIiBp
cyBub3QgZW1wdHkhXG4iKTsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgIH0pOwor
ICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG9rKTsKIH0KIAogdm9pZCBIZWFwOjpnYXRoZXJTdGFj
a1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsKLSAgICBtX21hY2hpbmVUaHJlYWRz
LT5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9j
b2RlQmxvY2tzLCBtX2N1cnJlbnRUaHJlYWRTdGF0ZSk7CisgICAgbV9tYWNoaW5lVGhyZWFkcy0+
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1fY29k
ZUJsb2NrcywgbV9jdXJyZW50VGhyZWFkU3RhdGUsIG1fY3VycmVudFRocmVhZCk7CiB9CiAKIHZv
aWQgSGVhcDo6Z2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKQEAg
LTczMCw3ICs3NDAsNyBAQCB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogICAgICAgICAgICAgdmlz
aXRvci5yZXNldCgpOwogICAgICAgICB9KTsKIAotICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NF
bXB0eSgpOworICAgIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogICAgIG1fd2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAKICAgICBSRUxFQVNFX0FTU0VSVChtX3JhY2VNYXJr
U3RhY2stPmlzRW1wdHkoKSk7CkBAIC05MTEsNyArOTIxLDcgQEAgdm9pZCBIZWFwOjphZGRUb1Jl
bWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwogICAgIGlm
IChtX211dGF0b3JTaG91bGRCZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2Uo
KTsKLSAgICAgICAgaWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICBp
ZiAoIWlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxl
Y3Rpb24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQg
cGFzdAogICAgICAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3Jl
IHRvIGFuIHVubWFya2VkIFBvc3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAgICAgICAg
IC8vIG9iamVjdCBnZXRzIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdp
bGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTM0LDE1IEBAIHZvaWQg
SGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAgICAvLyBO
b3cgd2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgICAgIC8vICAgICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVubWFya2Vk
LgotICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJyZW50bHkg
aGVyZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhlcmUuCiAg
ICAgICAgICAgICAgICAgLy8gICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXllZC4KICAg
ICAgICAgICAgICAgICAvLyAgICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNrZWQuCiAg
ICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxs
U3RhdGVTdHJvbmcgaGVyZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8v
IEluIHRoaXMgY2FzZSB3ZSB3b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBhZ2Fpbiwg
ZXZlbiB0aG91Z2ggaXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2suIFRoaXMg
Y2hlY2sgbGV0cyB1cyBjb3JyZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0aGUgZmFj
dCB0aGF0Ci0gICAgICAgICAgICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29udmVyZ2Vz
IG1vbm90b25pY2FsbHkgdG8gdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWRDb25j
dXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252ZXJnZXMg
bW9ub3RvbmljYWxseSB0byB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjZWxs
KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3JrIG91dCB3
aGV0aGVyIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhpcyBwb2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5LgogICAg
ICAgICAgICAgICAgICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUJs
YWNrKTsKQEAgLTk0OCw3ICs5NTgsNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChj
b25zdCBKU0NlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAg
ICAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICAgICAg
QVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRo
ZSBvYmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9y
IG1heSBzZXQgdGhlCiAgICAgLy8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRoZW4gdG8g
UG9zc2libHlPbGRPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwogICAgIC8v
IHJhY2Ugd2l0aCB0aGUgY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNj
dXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXwpAQCAtMTA5MSw2ICsxMTAxLDcgQEAgYXV0
byBIZWFwOjpydW5DdXJyZW50UGhhc2UoR0NDb25kdWN0b3IgYwogewogICAgIGNoZWNrQ29ubihj
b25uKTsKICAgICBtX2N1cnJlbnRUaHJlYWRTdGF0ZSA9IGN1cnJlbnRUaHJlYWRTdGF0ZTsKKyAg
ICBtX2N1cnJlbnRUaHJlYWQgPSAmV1RGOjpUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICAKICAgICBp
ZiAoY29ubiA9PSBHQ0NvbmR1Y3Rvcjo6TXV0YXRvcikKICAgICAgICAgc2FuaXRpemVTdGFja0Zv
clZNKHZtKCkpOwpAQCAtMTI4MywxMyArMTI5NCwxMSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFw
OjpydW5GaXhwb2ludFBoYXNlCiAgICAgfQogICAgICAgICAKICAgICBpZiAoc2xvdFZpc2l0b3Iu
ZGlkUmVhY2hUZXJtaW5hdGlvbigpKSB7CisgICAgICAgIG1fb3BhcXVlUm9vdHMuZGVsZXRlT2xk
VGFibGVzKCk7CisgICAgICAgIAogICAgICAgICBtX3NjaGVkdWxlci0+ZGlkUmVhY2hUZXJtaW5h
dGlvbigpOwotICAgICAgICAgICAgCi0gICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0
eSgpOwotICAgICAgICAgICAgCi0gICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlSWZOZWNlc3Nhcnko
KTsKLSAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzKQotICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZUlmTmVjZXNzYXJ5KCk7
CisgICAgICAgIAorICAgICAgICBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICAgICAgICAg
IAogICAgICAgICAvLyBGSVhNRTogVGFrZSBtX211dGF0b3JEaWRSdW4gaW50byBhY2NvdW50IHdo
ZW4gc2NoZWR1bGluZyBjb25zdHJhaW50cy4gTW9zdCBsaWtlbHksCiAgICAgICAgIC8vIHdlIGRv
bid0IGhhdmUgdG8gZXhlY3V0ZSByb290IGNvbnN0cmFpbnRzIGFnYWluIHVubGVzcyB0aGUgbXV0
YXRvciBkaWQgcnVuLiBBdCBhCkBAIC0xMjk3LDE3ICsxMzA2LDE0IEBAIE5FVkVSX0lOTElORSBi
b29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgLy8gZXN0aW1hdGUuCiAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjgKICAgICAg
ICAgICAgIAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRha2UgYWR2YW50YWdlIG9mIHRo
ZSBmYWN0IHRoYXQgd2UgY291bGQgdGltZW91dC4gVGhpcyBvbmx5IGNvbWVzCi0gICAgICAgIC8v
IGludG8gcGxheSBpZiB3ZSdyZSBleGVjdXRpbmcgY29uc3RyYWludHMgZm9yIHRoZSBmaXJzdCB0
aW1lLiBCdXQgdGhhdCB3aWxsIG1hdHRlcgotICAgICAgICAvLyB3aGVuIHdlIGhhdmUgZGVlcCBz
dGFja3Mgb3IgYSBsb3Qgb2YgRE9NIHN0dWZmLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMxCi0gICAgICAgICAgICAKICAgICAgICAgLy8g
V29uZGVyaW5nIHdoYXQgdGhpcyBkb2VzPyBMb29rIGF0IEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpLiBUaGUgRE9NIGFuZCBvdGhlcnMgY2FuIGFsc28KICAgICAgICAgLy8gYWRkIHRoZWlyIG93
biB1c2luZyBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludCgpLgotICAgICAgICBib29sIGNvbnZl
cmdlZCA9Ci0gICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShz
bG90VmlzaXRvciwgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgIGJvb2wgY29u
dmVyZ2VkID0gbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3Ip
OworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZSBzbG90VmlzaXRvci5pc0VtcHR5KCkg
Y2hlY2sgaXMgbW9zdCBsaWtlbHkgbm90IG5lZWRlZC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDMxMAogICAgICAgICBpZiAoY29udmVyZ2Vk
ICYmIHNsb3RWaXNpdG9yLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYXNzZXJ0U2hhcmVkTWFy
a1N0YWNrc0VtcHR5KCk7CisgICAgICAgICAgICBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKICAg
ICAgICAgICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBDb2xsZWN0b3JQaGFzZTo6RW5kKTsK
ICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMzI0LDYgKzEzMzAsMTUgQEAgTkVWRVJfSU5M
SU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAKICAgICBtX3NjaGVkdWxl
ci0+c3luY2hyb25vdXNEcmFpbmluZ0RpZFN0YWxsKCk7CiAKKyAgICAvLyBUaGlzIGlzIGtpbmRh
IHRyaWNreS4gVGhlIHRlcm1pbmF0aW9uIGNoZWNrIGxvb2tzIGF0OgorICAgIC8vCisgICAgLy8g
LSBXaGV0aGVyIHRoZSBtYXJraW5nIHRocmVhZHMgYXJlIGFjdGl2ZS4gSWYgdGhleSBhcmUgbm90
LCB0aGlzIG1lYW5zIHRoYXQgdGhlIG1hcmtpbmcgdGhyZWFkcycKKyAgICAvLyAgIFNsb3RWaXNp
dG9ycyBhcmUgZW1wdHkuCisgICAgLy8gLSBXaGV0aGVyIHRoZSBjb2xsZWN0b3IncyBzbG90IHZp
c2l0b3IgaXMgZW1wdHkuCisgICAgLy8gLSBXaGV0aGVyIHRoZSBzaGFyZWQgbWFyayBzdGFja3Mg
YXJlIGVtcHR5LgorICAgIC8vCisgICAgLy8gVGhpcyBkb2Vzbid0IGhhdmUgdG8gY2hlY2sgdGhl
IG11dGF0b3IgU2xvdFZpc2l0b3IgYmVjYXVzZSB0aGF0IG9uZSBiZWNvbWVzIGVtcHR5IGFmdGVy
IGV2ZXJ5IEdDCisgICAgLy8gd29yayBpbmNyZW1lbnQsIHNvIGl0IG11c3QgYmUgZW1wdHkgbm93
LgogICAgIGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOyAvLyBUaGlzIGlzIGxpa2UgcmVsb29waW5nIHRvIHRoZSB0b3AgaWYgcnVuRml4
cG9pbnRQaGFzZSgpLgogICAgICAgICAKQEAgLTE0ODksNiArMTUwNCw4IEBAIE5FVkVSX0lOTElO
RSBib29sIEhlYXA6OmZpbmlzaENoYW5naW5nUGgKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRh
dGFMb2coY29ubiwgIjogR29pbmcgdG8gcGhhc2U6ICIsIG1fbmV4dFBoYXNlLCAiIChmcm9tICIs
IG1fY3VycmVudFBoYXNlLCAiKVxuIik7CiAgICAgCisgICAgbV9waGFzZVZlcnNpb24rKzsKKyAg
ICAKICAgICBib29sIHN1c3BlbmRlZEJlZm9yZSA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQobV9j
dXJyZW50UGhhc2UpOwogICAgIGJvb2wgc3VzcGVuZGVkQWZ0ZXIgPSB3b3JsZFNob3VsZEJlU3Vz
cGVuZGVkKG1fbmV4dFBoYXNlKTsKICAgICAKQEAgLTE1MjYsNyArMTU0Myw3IEBAIE5FVkVSX0lO
TElORSBib29sIEhlYXA6OmZpbmlzaENoYW5naW5nUGgKIAogdm9pZCBIZWFwOjpzdG9wVGhlUGVy
aXBoZXJ5KEdDQ29uZHVjdG9yIGNvbm4pCiB7Ci0gICAgaWYgKG1fY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQpIHsKKyAgICBpZiAobV93b3JsZElzU3RvcHBlZCkgewogICAg
ICAgICBkYXRhTG9nKCJGQVRBTDogd29ybGQgYWxyZWFkeSBzdG9wcGVkLlxuIik7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTUzNyw3ICsxNTU0LDcg
QEAgdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29uZHVjdG9yIAogICAgIG1fbXV0YXRv
ckRpZFJ1biA9IGZhbHNlOwogCiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwotICAgIG1f
Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworICAgIG1fd29y
bGRJc1N0b3BwZWQgPSB0cnVlOwogCiAgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAogICAgICAgICBb
Jl0gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewpAQCAtMTU3NCwxMSArMTU5MSwxMSBAQCBO
RVZFUl9JTkxJTkUgdm9pZCBIZWFwOjpyZXN1bWVUaGVQZXJpcGhlCiAgICAgCiAgICAgbV9iYXJy
aWVyc0V4ZWN1dGVkID0gMDsKICAgICAKLSAgICBpZiAoIW1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQpIHsKKyAgICBpZiAoIW1fd29ybGRJc1N0b3BwZWQpIHsKICAgICAg
ICAgZGF0YUxvZygiRmF0YWw6IGNvbGxlY3RvciBkb2VzIG5vdCBiZWxpZXZlIHRoYXQgdGhlIHdv
cmxkIGlzIHN0b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9
IGZhbHNlOworICAgIG1fd29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICAKICAgICAvLyBGSVhN
RTogVGhpcyBjb3VsZCBiZSB2YXN0bHkgaW1wcm92ZWQ6IHdlIHdhbnQgdG8gZ3JhYiB0aGUgbG9j
a3MgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkKICAgICAvLyBiZWNvbWUgYXZhaWxhYmxlLiBX
ZSBiYXNpY2FsbHkgd2FudCBhIGxvY2tBbnkoKSBtZXRob2QgdGhhdCB3aWxsIGxvY2sgd2hhdGV2
ZXIgbG9jayBpcyBhdmFpbGFibGUKQEAgLTI1NzgsNyArMjU5NSwxMSBAQCB2b2lkIEhlYXA6OmFk
ZENvcmVDb25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAg
ICJDcyIsICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzLCBs
YXN0VmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgbXV0YWJsZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcnVuIHRo
aXMgb25jZSBwZXIgZml4cG9pbnQuCisgICAgICAgICAgICBpZiAobGFzdFZlcnNpb24gPT0gbV9w
aGFzZVZlcnNpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCiAgICAg
ICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29u
c3RyYWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2Uu
cHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKICAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJv
b3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKQEAgLTI1ODcsMTIgKzI2MDgsMTQgQEAgdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jv
b3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJS
b290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQo
Y29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsYXN0VmVyc2lv
biA9IG1fcGhhc2VWZXJzaW9uOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEpTQ19PQkpDX0FQSV9F
TkFCTEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90
VmlzaXRvcik7CiAjZW5kaWYKQEAgLTI2MTMsNyArMjYzNiw3IEBAIHZvaWQgSGVhcDo6YWRkQ29y
ZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAg
IlNoIiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ry
b25nSGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0
KHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKQEAgLTI2MjEsNyArMjY0NCw3IEBAIHZvaWQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgK
ICAgICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBz
bG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikK
ICAgICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92
bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2NDEsMjEgKzI2NjQsMjEgQEAg
dm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNl
dC0+YWRkKAogICAgICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsK
KyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAg
IG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7
CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1
dGlvbik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJX
ZWFrIFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgewogICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RW
aXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXll
ZEJ5TWFya2luZyk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJX
cmgiLCAiV2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhl
YWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAgICAgICAgICAgICAg
ICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwK
QEAgLTI2NjQsNyArMjY4Nyw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkR3
IiwgIkRGRyBXb3JrbGlzdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpu
dW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAg
ICAgICAgICAgCkBAIC0yNjg0LDcgKzI3MDcsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJh
aW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJD
b2RlQmxvY2tzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IpIHsKICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2Rl
QmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9j
ayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxv
Y2sgYXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KQEAgLTI2OTUsMjMgKzI3MTgs
NyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgIH0sCiAgICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwogICAgIAotICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAotICAgICAgICAiTXJtcyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7Ci0gICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhh
dCB3ZSBpbnRyb2R1Y2VkIHdvcmshCi0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAgICAg
ICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIigi
LCBzaXplLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX211dGF0b3JNYXJrU3Rh
Y2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKLSAgICAgICAg
ICAgIG1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0
YWNrKCkpOwotICAgICAgICB9LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJikgLT4gZG91
YmxlIHsKLSAgICAgICAgICAgIHJldHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1f
cmFjZU1hcmtTdGFjay0+c2l6ZSgpOwotICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIG1fY29uc3RyYWludFNldC0+YWRkKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ+KCp0aGlzKSk7CiB9CiAK
IHZvaWQgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdD
b25zdHJhaW50PiBjb25zdHJhaW50KQpAQCAtMjc5NCwxNiArMjgwMSw2IEBAIHZvaWQgSGVhcDo6
YWxsb3dDb2xsZWN0aW9uKCkKICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrLnVubG9jaygp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZp
c2l0b3IoY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOwotICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKLSAgICBmb3IgKGF1dG8mIHNs
b3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgZnVuYygqc2xvdFZp
c2l0b3IpOwotfQotCiB2b2lkIEhlYXA6OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZh
bHVlKQogewogICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3LDQg
KzI4NDQsMjQgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwogICAg
IG1faGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAKK3Zv
aWQgSGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5n
TXV0ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuVGFza0luUGFy
YWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAg
ICB1bnNpZ25lZCBpbml0aWFsUmVmQ291bnQgPSB0YXNrLT5yZWZDb3VudCgpOworICAgIHNldEJv
bnVzVmlzaXRvclRhc2sodGFzayk7CisgICAgdGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RWaXNp
dG9yKTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKG51bGxwdHIpOworICAgIHsKKyAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAgIHdoaWxlICh0
YXNrLT5yZWZDb3VudCgpID4gaW5pdGlhbFJlZkNvdW50KQorICAgICAgICAgICAgbV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGUud2FpdChtX21hcmtpbmdNdXRleCk7CisgICAgfQorfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgogI2lu
Y2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGlj
VGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTczLDYgKzc0LDcgQEAgY2xhc3MgSlNWYWx1ZTsKIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE1hY2hpbmVUaHJlYWRzOwogY2xhc3MgTWFy
a1N0YWNrQXJyYXk7CitjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKIGNsYXNzIE1h
cmtlZEFsbG9jYXRvcjsKIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOwogY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnQ7CkBAIC0xMTQsNyArMTE2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBzX3RpbWVDaGVja1Jlc29sdXRpb24gPSAxNjsKIAogICAgIHN0YXRpYyBib29s
IGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKLSAgICBzdGF0aWMgYm9vbCBpc01hcmtlZENvbmN1cnJl
bnRseShjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChIZWFw
VmVyc2lvbiwgY29uc3Qgdm9pZCopOwogICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUo
Y29uc3Qgdm9pZCopOwpAQCAtMTU0LDcgKzE1NSw4IEBAIHB1YmxpYzoKICAgICBNdXRhdG9yU3Rh
dGUgbXV0YXRvclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhdGU7IH0KICAgICBz
dGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gY29sbGVjdGlvblNjb3BlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2xsZWN0aW9uU2NvcGU7IH0KICAgICBib29sIGhhc0hlYXBBY2Nlc3MoKSBjb25z
dDsKLSAgICBib29sIGNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgY29u
c3Q7CisgICAgYm9vbCB3b3JsZElzU3RvcHBlZCgpIGNvbnN0OworICAgIGJvb2wgd29ybGRJc1J1
bm5pbmcoKSBjb25zdCB7IHJldHVybiAhd29ybGRJc1N0b3BwZWQoKTsgfQogCiAgICAgLy8gV2Un
cmUgYWx3YXlzIGJ1c3kgb24gdGhlIGNvbGxlY3Rpb24gdGhyZWFkcy4gT24gdGhlIG1haW4gdGhy
ZWFkLCB0aGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSdyZQogICAgIC8vIGhlbHBpbmcgaGVhcC4KQEAg
LTM0OSw2ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbGxvd0NvbGxlY3Rpb24oKTsKICAg
ICAKICAgICB1aW50NjRfdCBtdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbXV0YXRvckV4ZWN1dGlvblZlcnNpb247IH0KKyAgICB1aW50NjRfdCBwaGFzZVZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX3BoYXNlVmVyc2lvbjsgfQogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdD
b25zdHJhaW50Pik7CiAgICAgCkBAIC0zNTgsNiArMzYxLDE3IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJh
Y2smKTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmlu
YWxpemVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMm
IGZ1bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC0zNzMsNiArMzg3
LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogICAgIGZyaWVu
ZCBjbGFzcyBKSVRTdHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOworICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKICAg
ICBmcmllbmQgY2xhc3MgTWFya2VkU3BhY2U7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9j
YXRvcjsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CkBAIC01MjUsOCArNTQwLDEwIEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGl0ZXJhdGVF
eGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBG
dW5jJik7CiAgICAgCi0gICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAg
ICB2b2lkIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0
b3JUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAg
ICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7
CiAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTYsNiBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxT
bG90VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3Io
Y29uc3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0
YWNrIG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9j
b2RlQmxvY2tzOwpAQCAtNjMzLDggKzY0Nyw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9u
dW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVs
TWFya2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0
ZXg7Ci0gICAgSGFzaFNldDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsKKyAgICBDb25jdXJy
ZW50UHRySGFzaFNldCBtX29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
X2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1NSw3IEBAIHByaXZhdGU6
CiAgICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBl
ckNsaWVudDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2Jv
bnVzVmlzaXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90
IG1fYmxvY2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKQEAgLTY1Nyw3ICs2NzEsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBuZWVkRmluYWxpemVCaXQgPSAxdSA8PCA0dTsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsg
Ly8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxl
LgogICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwotICAgIGJvb2wgbV9jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dv
cmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1fYmVmb3JlR0M7CiAg
ICAgTW9ub3RvbmljVGltZSBtX2FmdGVyR0M7CiAgICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1l
OwpAQCAtNjcyLDYgKzY4Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RocmVhZElzU3RvcHBp
bmcgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9yRGlkUnVuIHsgdHJ1ZSB9OwogICAgIHVp
bnQ2NF90IG1fbXV0YXRvckV4ZWN1dGlvblZlcnNpb24geyAwIH07CisgICAgdWludDY0X3QgbV9w
aGFzZVZlcnNpb24geyAwIH07CiAgICAgQm94PExvY2s+IG1fdGhyZWFkTG9jazsKICAgICBSZWZQ
dHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3RocmVhZENvbmRpdGlvbjsgLy8gVGhlIG11
dGF0b3IgbXVzdCBub3Qgd2FpdCBvbiB0aGlzLiBJdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2NrLgog
ICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwpAQCAtNjkzLDYgKzcwOCw3IEBA
IHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fYmFycmllcnNFeGVjdXRlZCB7IDAgfTsKICAgICAK
ICAgICBDdXJyZW50VGhyZWFkU3RhdGUqIG1fY3VycmVudFRocmVhZFN0YXRlIHsgbnVsbHB0ciB9
OworICAgIFdURjo6VGhyZWFkKiBtX2N1cnJlbnRUaHJlYWQgeyBudWxscHRyIH07IC8vIEl0J3Mg
T0sgaWYgdGhpcyBiZWNvbWVzIGEgZGFuZ2xpbmcgcG9pbnRlci4KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MywzMCArNjMsMjAgQEAgaW5saW5lIGJvb2wgSGVhcDo6
aGFzSGVhcEFjY2VzcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fd29ybGRTdGF0ZS5sb2FkKCkgJiBo
YXNBY2Nlc3NCaXQ7CiB9CiAKLWlubGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkKCkgY29uc3QKK2lubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9w
cGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3Js
ZElzU3RvcHBlZDsKKyAgICByZXR1cm4gbV93b3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRo
ZSBtYXJraW5nVmVyc2lvbigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQo
Y29uc3Qgdm9pZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdD
VGhyZWFkVHlwZTo6SGVscGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxI
ZWFwQ2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQog
ICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBN
YXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9j
ay5pc01hcmtlZCgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtp
bmdWZXJzaW9uKCksIGNlbGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoY29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2Vs
bCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xh
cmdlQWxsb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCku
aXNNYXJrZWQoKTsKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygp
OwotICAgIHJldHVybiBibG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2su
dm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJl
dHVybiBibG9jay5pc01hcmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2lu
Z1ZlcnNpb24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5k
U2V0TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxs
KQpAQCAtMTc5LDE5ICsxNjksMTkgQEAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0
YWluUHRyPAogCiBpbmxpbmUgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsK
LSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRo
ZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxk
SXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAogaW5saW5lIHZvaWQgSGVh
cDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFk
KCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgQVNT
RVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJh
bERlcHRoLS07CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhB
bmRHQ0lmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKICAg
ICAKICAgICBpZiAoVU5MSUtFTFkobV9kaWREZWZlckdDV29yaykpIHsKQEAgLTI2OSw0ICsyNTks
MTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5KCkKICAgICAgICAgc3RvcElm
TmVjZXNzYXJ5U2xvdygpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBIZWFw
Ojpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgIGZ1bmMoKm1fY29s
bGVjdG9yU2xvdFZpc2l0b3IpOworICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKKyAg
ICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAg
ICAgZnVuYygqc2xvdFZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3Bw
CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25h
cHNob3RCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIEhl
YXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3QoCiB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxk
ZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQogewogICAgIEFTU0VSVChtX3Byb2ZpbGVyLmFj
dGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOwotICAgIEFTU0VSVChIZWFwOjppc01hcmtl
ZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsK
IAogICAgIGlmIChoYXNFeGlzdGluZ05vZGVGb3JDZWxsKGNlbGwpKQogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAko
cmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxv
Y2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQubG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtl
ZChIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNNYXJrZWQoSGVhcENlbGwqLCBEZXBlbmRlbmN5KSB7IHJldHVybiBpc01hcmtlZCgpOyB9
Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9u
LCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNNYXJrZWQoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsg
fQogICAgIGJvb2wgaXNMaXZlKCkgeyByZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2Nh
dGVkKCk7IH0KICAgICAKICAgICBib29sIGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzVmFsaWRDZWxsOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVy
aW5nTWFya2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2tEdXJpbmdNYXJraW5nLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQgKzMzLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBVc2UgdGhpcyBsb2NrIHNjb3BlIGxpa2Ugc286CiAvLyBh
dXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKGhlYXAsIGxvY2spOwogdGVtcGxhdGU8dHlw
ZW5hbWUgTG9ja1R5cGU+Ci1Mb2NrZXI8TG9ja1R5cGU+IGxvY2tEdXJpbmdNYXJraW5nKEhlYXAm
IGhlYXAsIExvY2tUeXBlJiBwYXNzZWRMb2NrKQorYXV0byBsb2NrRHVyaW5nTWFya2luZyhIZWFw
JiBoZWFwLCBMb2NrVHlwZSYgcGFzc2VkTG9jaykKIHsKLSAgICBMb2NrVHlwZSogbG9jazsKLSAg
ICBpZiAoaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSkKLSAgICAgICAgbG9jayA9ICZwYXNz
ZWRMb2NrOwotICAgIGVsc2UKLSAgICAgICAgbG9jayA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIExv
Y2tlcjxMb2NrVHlwZT4obG9jayk7CisgICAgcmV0dXJuIGhvbGRMb2NrSWYocGFzc2VkTG9jaywg
aGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJr
ZXIuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YWNoaW5lU3RhY2tNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAg
dm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkUwogICAgICpzaXplICs9IHN0
YWNrLnNlY29uZDsKIH0KIAotYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFk
U3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90
IGNhcGFjaXR5LCBzaXplX3QqIHNpemUpCitib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgdm9pZCogYnVmZmVy
LCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSwgVGhyZWFkJiBjdXJyZW50VGhyZWFkRm9y
R0MpCiB7CiAgICAgLy8gUHJldmVudCB0d28gVk1zIGZyb20gc3VzcGVuZGluZyBlYWNoIG90aGVy
J3MgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLAogICAgIC8vIHdoaWNoIGNhbiBjYXVzZSBkZWFk
bG9jazogPHJkYXI6Ly9wcm9ibGVtLzIwMzAwODQyPi4KQEAgLTE0NSwxMyArMTQ1LDE0IEBAIGJv
b2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFMKICAgICAqc2l6ZSA9IDA7CiAK
ICAgICBUaHJlYWQmIGN1cnJlbnRUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKLSAgICBjb25z
dCBhdXRvJiB0aHJlYWRzID0gbV90aHJlYWRHcm91cC0+dGhyZWFkcyhsb2NrZXIpOworICAgIGNv
bnN0IExpc3RIYXNoU2V0PFJlZjxUaHJlYWQ+PiYgdGhyZWFkcyA9IG1fdGhyZWFkR3JvdXAtPnRo
cmVhZHMobG9ja2VyKTsKICAgICBCaXRWZWN0b3IgaXNTdXNwZW5kZWQodGhyZWFkcy5zaXplKCkp
OwogCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgICAgIGZvciAoYXV0
byYgdGhyZWFkIDogdGhyZWFkcykgewotICAgICAgICAgICAgaWYgKHRocmVhZC5nZXQoKSAhPSBj
dXJyZW50VGhyZWFkKSB7CisgICAgICAgIGZvciAoY29uc3QgUmVmPFRocmVhZD4mIHRocmVhZCA6
IHRocmVhZHMpIHsKKyAgICAgICAgICAgIGlmICh0aHJlYWQuZ2V0KCkgIT0gY3VycmVudFRocmVh
ZAorICAgICAgICAgICAgICAgICYmIHRocmVhZC5nZXQoKSAhPSBjdXJyZW50VGhyZWFkRm9yR0Mp
IHsKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHRocmVhZC0+c3VzcGVuZCgpOwogICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgIGlzU3VzcGVuZGVk
LnNldChpbmRleCk7CkBAIC0xOTksNyArMjAwLDcgQEAgc3RhdGljIHZvaWQgZ3Jvd0J1ZmZlcihz
aXplX3Qgc2l6ZSwgdm9pZAogICAgICpidWZmZXIgPSBmYXN0TWFsbG9jKCpjYXBhY2l0eSk7CiB9
CiAKLXZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJS
b3V0aW5lcywgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzLCBDdXJyZW50VGhyZWFkU3RhdGUqIGN1
cnJlbnRUaHJlYWRTdGF0ZSkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRp
bmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzLCBDdXJyZW50
VGhyZWFkU3RhdGUqIGN1cnJlbnRUaHJlYWRTdGF0ZSwgVGhyZWFkKiBjdXJyZW50VGhyZWFkKQog
ewogICAgIGlmIChjdXJyZW50VGhyZWFkU3RhdGUpCiAgICAgICAgIGdhdGhlckZyb21DdXJyZW50
VGhyZWFkKGNvbnNlcnZhdGl2ZVJvb3RzLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3MsICpj
dXJyZW50VGhyZWFkU3RhdGUpOwpAQCAtMjA4LDcgKzIwOSw3IEBAIHZvaWQgTWFjaGluZVRocmVh
ZHM6OmdhdGhlckNvbnNlcnZhdGl2ZVIKICAgICBzaXplX3QgY2FwYWNpdHkgPSAwOwogICAgIHZv
aWQqIGJ1ZmZlciA9IG51bGxwdHI7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3RocmVh
ZEdyb3VwLT5nZXRMb2NrKCkpOwotICAgIHdoaWxlICghdHJ5Q29weU90aGVyVGhyZWFkU3RhY2tz
KGxvY2tlciwgYnVmZmVyLCBjYXBhY2l0eSwgJnNpemUpKQorICAgIHdoaWxlICghdHJ5Q29weU90
aGVyVGhyZWFkU3RhY2tzKGxvY2tlciwgYnVmZmVyLCBjYXBhY2l0eSwgJnNpemUsICpjdXJyZW50
VGhyZWFkKSkKICAgICAgICAgZ3Jvd0J1ZmZlcihzaXplLCAmYnVmZmVyLCAmY2FwYWNpdHkpOwog
CiAgICAgaWYgKCFidWZmZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNo
aW5lU3RhY2tNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogcHVibGljOgogICAgIE1hY2hpbmVU
aHJlYWRzKCk7CiAKLSAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmLCBDdXJyZW50VGhyZWFk
U3RhdGUqKTsKKyAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJv
b3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmLCBDdXJyZW50VGhyZWFkU3Rh
dGUqLCBUaHJlYWQqKTsKIAogICAgIC8vIE9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIGJ5IGNsaWVu
dHMgdGhhdCBjYW4gdXNlIHRoZSBzYW1lIGhlYXAgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgogICAg
IHZvaWQgYWRkQ3VycmVudFRocmVhZCgpIHsgbV90aHJlYWRHcm91cC0+YWRkQ3VycmVudFRocmVh
ZCgpOyB9CkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnYXRoZXJGcm9tQ3Vy
cmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJs
b2NrU2V0JiwgQ3VycmVudFRocmVhZFN0YXRlJik7CiAKICAgICB2b2lkIHRyeUNvcHlPdGhlclRo
cmVhZFN0YWNrKFRocmVhZCYsIHZvaWQqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCopOwotICAg
IGJvb2wgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9p
ZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7CisgICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJl
YWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBz
aXplX3QqLCBUaHJlYWQmKTsKIAogICAgIHN0ZDo6c2hhcmVkX3B0cjxUaHJlYWRHcm91cD4gbV90
aHJlYWRHcm91cDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6TWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQoSGVhcCYgaGVhcCkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KCJNc20i
LCAiTWFyayBTdGFjayBNZXJnaW5nIiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhl
Y3V0aW9uKQorICAgICwgbV9oZWFwKGhlYXApCit7Cit9CisKK01hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50Ojp+TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoKQoreworfQorCitkb3VibGUgTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikK
K3sKKyAgICByZXR1cm4gbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFw
Lm1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOworfQorCit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIC8vIExvZ2dpbmcgdGhlIHdvcmsgaGVyZSBlbnN1cmVz
IHRoYXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGtub3dzIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRv
IHByb2R1Y2UKKyAgICAvLyBhbnltb3JlIHdvcmsuCisgICAgc2l6ZV90IHNpemUgPSBtX2hlYXAu
bV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXpl
KCk7CisgICAgdmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CisgICAgCisgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2coIigiLCBzaXplLCAiKSIpOworfQorCitD
b25zdHJhaW50UGFyYWxsZWxpc20gTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJ
bXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3Rh
Y2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOworICAgIG1faGVhcC5t
X3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwor
ICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQg
eworcHVibGljOgorICAgIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmKTsKKyAgICB+
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKKyAgICBkb3VibGUgcXVpY2tXb3Jr
RXN0aW1hdGUoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50
U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICBDb25zdHJhaW50UGFy
YWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICAKK3ByaXZh
dGU6CisgICAgSGVhcCYgbV9oZWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0LDYgKzQ0NCwzMyBAQCB2b2lkIE1hcmtlZEFs
bG9jYXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IE1hcmtlZEFsbG9j
YXRvcjo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDog
cHVibGljIFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDog
bV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHJ1bigpIG92ZXJyaWRlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIG1f
aW5kZXggPSBtX2FsbG9jYXRvci5tX21hcmtpbmdOb3RFbXB0eS5maW5kQml0KG1faW5kZXgsIHRy
dWUpOworICAgICAgICAgICAgaWYgKG1faW5kZXggPj0gbV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJu
IG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKKyAgICAg
ICAgc2l6ZV90IG1faW5kZXggeyAwIH07CisgICAgICAgIExvY2sgbV9sb2NrOworICAgIH07Cisg
ICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzKSk7Cit9CisKIHZvaWQgTWFy
a2VkQWxsb2NhdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnBy
aW50KFJhd1BvaW50ZXIodGhpcyksICI6IiwgbV9jZWxsU2l6ZSwgIi8iLCBtX2F0dHJpYnV0ZXMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTWFy
a2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0
Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTAzLDYgKzEwNCw4IEBAIHB1YmxpYzoK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBG
dW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90
RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8
TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOwor
ICAgIAogICAgIHZvaWQgYWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIHZvaWQg
cmVtb3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw3
ICsyNTgsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAg
ICBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7
Ci0gICAgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
biwgY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVu
Y3kpOwogICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7
CiAgICAgICAgIApAQCAtMjgwLDcgKzI3OSw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgYXJlTWFya3NTdGFsZSgpOwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbik7Ci0gICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFy
a3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAK
ICAgICBEZXBlbmRlbmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsK
ICAgICAgICAgCkBAIC00OTgsMTggKzQ5NiwxMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6
YXJlTWFya3NTdGFsZShICiAgICAgcmV0dXJuIG1hcmtpbmdWZXJzaW9uICE9IG1fbWFya2luZ1Zl
cnNpb247CiB9CiAKLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gTWFya2VkQmxv
Y2s6OmFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
bikKLXsKLSAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKLSAgICBy
ZXR1cm4gZGVwZW5kZW5jeVdpdGgoZGVwZW5kZW5jeSh2ZXJzaW9uKSwgdmVyc2lvbiAhPSBtYXJr
aW5nVmVyc2lvbik7Ci19Ci0KIGlubGluZSBEZXBlbmRlbmN5IE1hcmtlZEJsb2NrOjphYm91dFRv
TWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGFy
ZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHJlc3VsdC52YWx1ZSkpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1Zl
cnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAg
ICAgICBhYm91dFRvTWFya1Nsb3cobWFya2luZ1ZlcnNpb24pOwotICAgIHJldHVybiByZXN1bHQu
ZGVwZW5kZW5jeTsKKyAgICByZXR1cm4gZGVwZW5kZW5jeSh2ZXJzaW9uKTsKIH0KIAogaW5saW5l
IHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQs
MTUgKzUxNiwxMCBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAK
IGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgY29uc3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5n
VmVyc2lvbikgPyBmYWxzZSA6IGlzTWFya2VkUmF3KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24s
IGNvbnN0IHZvaWQqIHApCi17Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERl
cGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVh
cFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElLRUxZKHZl
cnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICBy
ZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSh2ZXJzaW9uKSk7CiB9
CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBl
bmRlbmN5IGRlcGVuZGVuY3kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsMTEgQEAgcHVibGlj
OgogICAgIC8vIFdoZW4gdGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlwcGVk
IGJ1dCB0aGUgbWFyayBiaXRzIGhhdmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlzTWFy
a2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJraW5nOyB9CiAgICAgCisgICAgV2Vha1NldCog
YWN0aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0dXJuIG1fYWN0aXZlV2Vha1NldHMuYmVnaW4oKTsg
fQorICAgIFdlYWtTZXQqIGFjdGl2ZVdlYWtTZXRzRW5kKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFr
U2V0cy5lbmQoKTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJl
dHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3Rp
dmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1fbmV3QWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAg
ICAKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAg
ICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJyYXk8c2l6ZV90LCBudW1T
aXplQ2xhc3Nlcz4gc19zaXplQ2xhc3NGb3JTaXplU3RlcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3LDE4IEBACiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0
cmFpbnQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJWaXNpdENvdW50
ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29u
c3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBl
eGVjdXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSkKLSAg
ICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkKLSAgICAsIG1fbmFtZShXVEZN
b3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rp
b24pKQotICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCi17Ci19CitzdGF0aWMgY29uc3Rl
eHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi1NYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0Nv
bnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4g
ZXhlY3V0ZUZ1bmN0aW9uLAotICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSkKK01hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludChDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5
LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBwYXJhbGxlbGlzbSkKICAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkK
ICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RG
TW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
KFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikpCiAgICAgLCBtX3ZvbGF0aWxpdHko
dm9sYXRpbGl0eSkKKyAgICAsIG1fY29uY3VycmVuY3koY29uY3VycmVuY3kpCisgICAgLCBtX3Bh
cmFsbGVsaXNtKHBhcmFsbGVsaXNtKQogewogfQogCkBAIC02MywxNCArNTEsNzQgQEAgdm9pZCBN
YXJraW5nQ29uc3RyYWludDo6cmVzZXRTdGF0cygpCiAgICAgbV9sYXN0VmlzaXRDb3VudCA9IDA7
CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitDb25z
dHJhaW50UGFyYWxsZWxpc20gTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGUoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gcmVzdWx0ID0gZXhlY3V0ZUltcGwodmlzaXRvcik7Cisg
ICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIGlm
ICh2ZXJib3NlICYmIHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgIGRhdGFMb2co
IigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENv
dW50KCksICIgaW4gZXhlY3V0ZSkiKTsKKyAgICBpZiAocmVzdWx0ID09IENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgLy8gSXQncyBpbGxlZ2FsIHRvIHByb2R1Y2Ug
cGFyYWxsZWwgd29yayBpZiB5b3UgaGF2ZW4ndCBhZHZlcnRpc2VkIGl0IHVwZnJvbnQgYmVjYXVz
ZSB0aGUgc29sdmVyCisgICAgICAgIC8vIGhhcyBvcHRpbWl6YXRpb25zIGZvciBjb25zdHJhaW50
cyB0aGF0IHByb21pc2UgdG8gbmV2ZXIgcHJvZHVjZSBwYXJhbGxlbCB3b3JrLgorICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX3BhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitkb3VibGUgTWFya2luZ0Nv
bnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3sKKyAgICByZXR1cm4g
MDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtF
c3RpbWF0ZSh2aXNpdG9yKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRv
RXhlY3V0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAg
ICBkYXRhTG9nKGFiYnJldmlhdGVkTmFtZSgpKTsKLSAgICBWaXNpdGluZ1RpbWVvdXQgdmlzaXRp
bmdUaW1lb3V0KHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCB0aW1lb3V0KTsKLSAgICBtX2V4
ZWN1dGVGdW5jdGlvbih2aXNpdG9yLCB2aXNpdGluZ1RpbWVvdXQpOwotICAgIG1fbGFzdFZpc2l0
Q291bnQgPSB2aXNpdGluZ1RpbWVvdXQudmlzaXRDb3VudCh2aXNpdG9yKTsKLSAgICBkaWRWaXNp
dFNvbWV0aGluZyA9IHZpc2l0aW5nVGltZW91dC5kaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKTsK
KyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIHByZXBhcmVUb0V4
ZWN1dGVJbXBsKGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCB2aXNpdG9yKTsKKyAgICBtX2xhc3RW
aXNpdENvdW50ID0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICBpZiAodmVyYm9zZSAm
JiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2
aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGlu
IHByZXBhcmVUb0V4ZWN1dGUpIik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFy
YWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNp
dENvdW50ZXIodmlzaXRvcik7CisgICAgZG9QYXJhbGxlbFdvcmtJbXBsKHZpc2l0b3IpOworICAg
IGlmICh2ZXJib3NlICYmIHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgIGRhdGFM
b2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNp
dENvdW50KCksICIgaW4gZG9QYXJhbGxlbFdvcmspIik7CisgICAgeworICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OmZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNp
dENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGZpbmlzaFBhcmFsbGVsV29ya0lt
cGwodmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpOworICAgIGlmICh2ZXJib3NlICYmIHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisg
ICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0
Q291bnRlci52aXNpdENvdW50KCksICIgaW4gZmluaXNoUGFyYWxsZWxXb3JrKSIpOworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFj
dExvY2tlciYsIFNsb3RWaXNpdG9yJikKK3sKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6
ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxX
b3JrSW1wbChTbG90VmlzaXRvciYpCit7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpbmNsdWRlICJDb25zdHJhaW50Q29uY3VycmVuY3kuaCIKKyNpbmNsdWRlICJDb25zdHJh
aW50UGFyYWxsZWxpc20uaCIKICNpbmNsdWRlICJDb25zdHJhaW50Vm9sYXRpbGl0eS5oIgotI2lu
Y2x1ZGUgIlZpc2l0aW5nVGltZW91dC5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8
d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDQs
MTcgKzQ0LDExIEBAIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3Ry
YWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAg
ICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAg
ICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJl
bnQsCisgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6U2VxdWVudGlhbCk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0
cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0g
ICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpPiwKLSAgICAgICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCi0gICAgICAg
IENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB+TWFy
a2luZ0NvbnN0cmFpbnQoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5NYXJraW5n
Q29uc3RyYWludCgpOwogICAgIAogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQogICAgIApAQCAtNjUsMzIgKzU5LDM5IEBAIHB1YmxpYzoKICAgICAKICAgICBz
aXplX3QgbGFzdFZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RWaXNpdENvdW50OyB9
CiAgICAgCi0gICAgdm9pZCBleGVjdXRlKFNsb3RWaXNpdG9yJiwgYm9vbCYgZGlkVmlzaXRTb21l
dGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
IGV4ZWN1dGUoU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0
dWFsIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CisgICAg
CisgICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcik7CiAgICAgCi0g
ICAgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgaWYgKCFtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbih2aXNp
dG9yKTsKLSAgICB9Ci0gICAgCi0gICAgZG91YmxlIHdvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tX
b3JrRXN0aW1hdGUodmlzaXRvcik7Ci0gICAgfQorICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZShj
b25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9y
Jik7CisgICAgCisgICAgdm9pZCBkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOworICAgIHZv
aWQgZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkgdm9sYXRpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sYXRpbGl0eTsgfQog
ICAgIAorICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29uY3VycmVuY3k7IH0KKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxp
c20oKSBjb25zdCB7IHJldHVybiBtX3BhcmFsbGVsaXNtOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpID0g
MDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUlt
cGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90Vmlz
aXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3Im
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYp
OworICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7
IC8vIFNvIGl0IGNhbiBzZXQgbV9pbmRleC4KICAgICAKICAgICB1bnNpZ25lZCBtX2luZGV4IHsg
VUlOVF9NQVggfTsKICAgICBDU3RyaW5nIG1fYWJicmV2aWF0ZWROYW1lOwogICAgIENTdHJpbmcg
bV9uYW1lOwotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYgdGltZW91dCk+IG1fZXhlY3V0ZUZ1bmN0aW9uOwotICAgIDo6RnVuY3Rpb248ZG91
YmxlKFNsb3RWaXNpdG9yJik+IG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbjsKICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSBtX3ZvbGF0aWxpdHk7CisgICAgQ29uc3RyYWludENvbmN1cnJlbmN5
IG1fY29uY3VycmVuY3k7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIG1fcGFyYWxsZWxpc207
CiAgICAgc2l6ZV90IG1fbGFzdFZpc2l0Q291bnQgeyAwIH07CisgICAgTG9jayBtX2xvY2s7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNjAgKzI2LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKIAorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMu
aCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1ZGUgIlN1cGVy
U2FtcGxlci5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9UaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hcmtp
bmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0IHsKLXB1YmxpYzoKLSAgICBFeGVjdXRp
b25Db250ZXh0KE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCi0gICAgICAgIDogbV9zZXQoc2V0KQotICAgICAgICAs
IG1fdmlzaXRvcih2aXNpdG9yKQotICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZzsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBzaG91bGRUaW1lT3V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWRWaXNpdFNv
bWV0aGluZygpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi0gICAgLy8g
UmV0dXJucyBmYWxzZSBpZiBpdCB0aW1lcyBvdXQuCi0gICAgYm9vbCBkcmFpbihCaXRWZWN0b3Im
IHVuZXhlY3V0ZWQpCi0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IHVuZXhlY3V0
ZWQpIHsKLSAgICAgICAgICAgIGV4ZWN1dGUoaW5kZXgpOwotICAgICAgICAgICAgdW5leGVjdXRl
ZC5jbGVhcihpbmRleCk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGltZU91dCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRFeGVjdXRlKHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9leGVjdXRlZC5nZXQoaW5kZXgpOyB9Ci0KLSAgICB2b2lkIGV4ZWN1dGUoc2l6ZV90
IGluZGV4KQotICAgIHsKLSAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhdLT5leGVjdXRlKG1fdmlz
aXRvciwgbV9kaWRWaXNpdFNvbWV0aGluZywgbV90aW1lb3V0KTsKLSAgICAgICAgbV9leGVjdXRl
ZC5zZXQoaW5kZXgpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgTWFya2luZ0NvbnN0cmFp
bnRTZXQmIG1fc2V0OwotICAgIFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Ci0gICAgTW9ub3Rvbmlj
VGltZSBtX3RpbWVvdXQ7Ci0gICAgQml0VmVjdG9yIG1fZXhlY3V0ZWQ7Ci0gICAgYm9vbCBtX2Rp
ZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKLX07Ci0KLU1hcmtpbmdDb25zdHJhaW50U2V0OjpN
YXJraW5nQ29uc3RyYWludFNldCgpCitNYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0
cmFpbnRTZXQoSGVhcCYgaGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQogewogfQogCkBAIC0xMDcs
MTggKzY1LDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZGlkU3RhcnRNYXJraQogICAg
IG1faXRlcmF0aW9uID0gMTsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSkKLXsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5n
Q29uc3RyYWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKGZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOwotfQotCi12b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjphZGQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4g
ZXhlY3V0ZUZ1bmN0aW9uLAotICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+IHF1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSkKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZnVuY3Rp
b24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5j
eSBjb25jdXJyZW5jeSkKIHsKLSAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3Ry
YWludD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGV4
ZWN1dGVGdW5jdGlvbiksIFdURk1vdmUocXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiksIHZvbGF0
aWxpdHkpKTsKKyAgICBhZGQoc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dD4oV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGZ1bmN0
aW9uKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3kpKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKApAQCAtMTMxLDkgKzgwLDkgQEAgdm9pZCBNYXJraW5nQ29uc3RyYWludFNl
dDo6YWRkKAogICAgIG1fc2V0LmFwcGVuZChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKIH0KIAotYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0
OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgYm9vbCBy
ZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IsIHRpbWVvdXQpOworICAgIGJv
b2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yKTsKICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogICAgIHJldHVybiByZXN1bHQ7
CkBAIC0xNDgsMjcgKzk3LDI3IEBAIGJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmlzV2F2ZWZy
b250QWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1Rp
bWUgdGltZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5j
ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgRXhlY3V0aW9uQ29udGV4dCBleGVj
dXRpb25Db250ZXh0KCp0aGlzLCB2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIgc29sdmVyKCp0aGlzKTsKICAgICAKICAgICB1bnNpZ25lZCBpdGVyYXRpb24gPSBtX2l0ZXJh
dGlvbisrOwogICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9n
KCJpIyIsIGl0ZXJhdGlvbiwgIjoiKTsKIAotICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29uc3Ry
YWludHMgdGhhdCB3ZSBoYXZlIG5vdCBleGVjdXRlZCBhdCBhbGwgZHVyaW5nIHRoaXMgY3ljbGUs
IHRoZW4KLSAgICAvLyB3ZSBzaG91bGQgZXhlY3V0ZSB0aG9zZSBub3cuCi0gICAgaWYgKCFleGVj
dXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIC8vIEZpcnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3Ig
ZHJhaW5pbmcsIHNvIGl0J3MgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMgb3Ro
ZXIKLSAgICAvLyB0aGFuIHJvb3RzLgotICAgIGlmIChpdGVyYXRpb24gPT0gMSkKKyAgICBpZiAo
aXRlcmF0aW9uID09IDEpIHsKKyAgICAgICAgLy8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBh
bnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQncyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25z
dHJhaW50cworICAgICAgICAvLyBvdGhlciB0aGFuIHJvb3RzLgorICAgICAgICBzb2x2ZXIuZHJh
aW4obV91bmV4ZWN1dGVkUm9vdHMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAg
IAotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhz
KSkKKyAgICBpZiAoaXRlcmF0aW9uID09IDIpIHsKKyAgICAgICAgc29sdmVyLmRyYWluKG1fdW5l
eGVjdXRlZE91dGdyb3d0aHMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIAog
ICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBwcmVmZXJyaW5nIHRoZSBvdXRncm93dGggY29uc3RyYWlu
dHMgLSB0aGUgb25lcyB0aGF0IG5lZWQgdG8gYmUgZml4cG9pbnRlZAogICAgIC8vIGV2ZW4gaW4g
YSBzdG9wLXRoZS13b3JsZCBHQyAtIHVudGlsIHRoZXkgc3RvcCBwcm9kdWNpbmcuIFRoZXkgaGF2
ZSBhIHRlbmRlbmN5IHRvIGdvIHRvdGFsbHkKQEAgLTIxNSwzMyArMTY0LDE2IEBAIGJvb2wgTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXIKICAgICAgICAgICAgIHJldHVybiBhLT52
b2xhdGlsaXR5KCkgPiBiLT52b2xhdGlsaXR5KCk7CiAgICAgICAgIH0pOwogICAgIAotICAgIGZv
ciAoTWFya2luZ0NvbnN0cmFpbnQqIGNvbnN0cmFpbnQgOiBtX29yZGVyZWQpIHsKLSAgICAgICAg
c2l6ZV90IGkgPSBjb25zdHJhaW50LT5pbmRleCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGV4
ZWN1dGlvbkNvbnRleHQuZGlkRXhlY3V0ZShpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBleGVjdXRpb25Db250ZXh0LmV4ZWN1dGUoaSk7Ci0gICAgICAgIAotICAgICAgICAvLyBP
bmNlIHdlJ3JlIGluIGNvbnZlcmdlbmNlLCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBsZXQg
c29tZSBtYXJraW5nIGhhcHBlbiBhbnl0aW1lCi0gICAgICAgIC8vIHdlIGZpbmQgd29yay4KLSAg
ICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGV4ZWN1dGUgYWxsIGNvbnN0cmFpbnRz
IHVudGlsIHRpbWVvdXQ/IE5vdCBjbGVhciBpZiB0aGF0J3MKLSAgICAgICAgLy8gYmV0dGVyIG9y
IHdvcnNlLiBNYXliZSBldmVuIGJldHRlciBpcyB0aGlzOgotICAgICAgICAvLyAtIElmIHRoZSB2
aXNpdG9yIGlzIGVtcHR5LCBrZWVwIHJ1bm5pbmcuCi0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0
b3IgaXMgaGFzIGF0IGxlYXN0IE4gdGhpbmdzLCByZXR1cm4uCi0gICAgICAgIC8vIC0gRWxzZSBy
dW4gdW50aWwgdGltZW91dC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NjgzMgotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRWaXNp
dFNvbWV0aGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBzb2x2
ZXIuY29udmVyZ2UobV9vcmRlcmVkKTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB3ZSd2ZSBjb252ZXJnZWQuIFRoYXQgaGFwcGVucyBpZiB3ZSBkaWQgbm90
IHZpc2l0IGFueXRoaW5nLgorICAgIHJldHVybiAhc29sdmVyLmRpZFZpc2l0U29tZXRoaW5nKCk7
CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVBbGwoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7Ci0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyA9IGZhbHNlOwogICAgIGZv
ciAoYXV0byYgY29uc3RyYWludCA6IG1fc2V0KQotICAgICAgICBjb25zdHJhaW50LT5leGVjdXRl
KHZpc2l0b3IsIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsK
KyAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiICIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Y2xhc3MgSGVhcDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOworCiBjbGFzcyBNYXJr
aW5nQ29uc3RyYWludFNldCB7CiBwdWJsaWM6Ci0gICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoKTsK
KyAgICBNYXJraW5nQ29uc3RyYWludFNldChIZWFwJik7CiAgICAgfk1hcmtpbmdDb25zdHJhaW50
U2V0KCk7CiAgICAgCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKQEAgLTQxLDE1ICs0NCw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZCgKICAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5h
bWUsCiAgICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSk7Ci0gICAgCi0gICAgdm9pZCBhZGQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0
ZWROYW1lLAotICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgOjpGdW5jdGlv
bjxkb3VibGUoU2xvdFZpc2l0b3ImKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsK
KyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAgICBDb25zdHJh
aW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWlu
dENvbmN1cnJlbmN5OjpDb25jdXJyZW50KTsKICAgICAKICAgICB2b2lkIGFkZChzdGQ6OnVuaXF1
ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTYwLDIxICs1NywxOSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXhlY3V0ZWQgYWxsIGNvbnN0
cmFpbnRzIGFuZCBub25lIG9mIHRoZW0gcHJvZHVjZWQgbmV3IHdvcmsuIFRoaXMKICAgICAvLyBh
c3N1bWVzIHRoYXQgeW91J3ZlIGFscmFlZHkgdmlzaXRlZCByb290cyBhbmQgZHJhaW5lZCBmcm9t
IHRoZXJlLgotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKAotICAgICAgICBTbG90VmlzaXRv
ciYsCi0gICAgICAgIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmlu
aXR5KCkpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJik7CiAgICAg
CiAgICAgLy8gU2ltcGx5IHJ1bnMgYWxsIGNvbnN0cmFpbnRzIHdpdGhvdXQgYW55IHNoZW5hbmln
YW5zLgogICAgIHZvaWQgZXhlY3V0ZUFsbChTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToK
LSAgICBjbGFzcyBFeGVjdXRpb25Db250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRpb25D
b250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKICAgICAK
LSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNU
aW1lIHRpbWVvdXQpOworICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRv
ciYpOwogICAgIAotICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBNb25vdG9uaWNUaW1lLCBC
aXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0
U29tZXRoaW5nKTsKKyAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgQml0VmVjdG9yJiB1bmV4
ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CiAg
ICAgCisgICAgSGVhcCYgbV9oZWFwOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRSb290czsK
ICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkT3V0Z3Jvd3RoczsKICAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pj4gbV9zZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNvbHZl
ci5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgCisKK01h
cmtpbmdDb25zdHJhaW50U29sdmVyOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5nQ29u
c3RyYWludFNldCYgc2V0KQorICAgIDogbV9oZWFwKHNldC5tX2hlYXApCisgICAgLCBtX21haW5W
aXNpdG9yKG1faGVhcC5jb2xsZWN0b3JTbG90VmlzaXRvcigpKQorICAgICwgbV9zZXQoc2V0KQor
eworICAgIG1faGVhcC5mb3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIG1fdmlzaXRDb3VudGVycy5hcHBlbmQoVmlzaXRD
b3VudGVyKHZpc2l0b3IpKTsKKyAgICAgICAgfSk7Cit9CisKK01hcmtpbmdDb25zdHJhaW50U29s
dmVyOjp+TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoKQoreworfQorCitib29sIE1hcmtpbmdDb25z
dHJhaW50U29sdmVyOjpkaWRWaXNpdFNvbWV0aGluZygpIGNvbnN0Cit7CisgICAgZm9yIChjb25z
dCBWaXNpdENvdW50ZXImIHZpc2l0Q291bnRlciA6IG1fdmlzaXRDb3VudGVycykgeworICAgICAg
ICBpZiAodmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXI6OmV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1i
ZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit7CisgICAgbV9waWNrTmV4
dElzU3RpbGxBY3RpdmUgPSB0cnVlOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX251bVRocmVhZHNU
aGF0TWF5UHJvZHVjZVdvcmspOworICAgIAorICAgIGlmIChPcHRpb25zOjp1c2VQYXJhbGxlbE1h
cmtpbmdDb25zdHJhaW50U29sdmVyKCkpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkp
CisgICAgICAgICAgICBkYXRhTG9nKHByZWZlcmVuY2UgPT0gUGFyYWxsZWxXb3JrRmlyc3QgPyAi
UCIgOiAiTiIsICI8Iik7CisgICAgICAgIAorICAgICAgICBtX2hlYXAucnVuRnVuY3Rpb25JblBh
cmFsbGVsKAorICAgICAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeyBydW5FeGVj
dXRpb25UaHJlYWQodmlzaXRvciwgcHJlZmVyZW5jZSwgcGlja05leHQpOyB9KTsKKyAgICAgICAg
CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiPiIp
OworICAgIH0gZWxzZQorICAgICAgICBydW5FeGVjdXRpb25UaHJlYWQobV9tYWluVmlzaXRvciwg
cHJlZmVyZW5jZSwgcGlja05leHQpOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BpY2tO
ZXh0SXNTdGlsbEFjdGl2ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbnVtVGhyZWFkc1RoYXRN
YXlQcm9kdWNlV29yayk7CisgICAgICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6
IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwpCisgICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4VG9SdW5d
LT5maW5pc2hQYXJhbGxlbFdvcmsobV9tYWluVmlzaXRvcik7CisgICAgbV9kaWRFeGVjdXRlSW5Q
YXJhbGxlbC5jbGVhcigpOworICAgIAorICAgIGlmICghbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHku
aXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhUb1J1biA6IG1fdG9FeGVj
dXRlU2VxdWVudGlhbGx5KQorICAgICAgICAgICAgZXhlY3V0ZSgqbV9zZXQubV9zZXRbaW5kZXhU
b1J1bl0pOworICAgICAgICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5jbGVhcigpOworICAgIH0K
KyAgICAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1w
dHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5iaXRD
b3VudCgpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZHJhaW4oQml0VmVj
dG9yJiB1bmV4ZWN1dGVkKQoreworICAgIGF1dG8gaXRlciA9IHVuZXhlY3V0ZWQuYmVnaW4oKTsK
KyAgICBhdXRvIGVuZCA9IHVuZXhlY3V0ZWQuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQor
ICAgICAgICByZXR1cm47CisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHsKKyAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuICppdGVyKys7CisgICAgICAg
IH0pOworICAgIGV4ZWN1dGUoTmV4dENvbnN0cmFpbnRGaXJzdCwgcGlja05leHQpOworICAgIHVu
ZXhlY3V0ZWQuY2xlYXJBbGwoKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6
Y29udmVyZ2UoY29uc3QgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4mIG9yZGVyKQoreworICAg
IGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYg
KG9yZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBzaXplX3Qg
aW5kZXggPSAwOworCisgICAgLy8gV2Ugd2FudCB0byBleGVjdXRlIHRoZSBmaXJzdCBjb25zdHJh
aW50IHNlcXVlbnRpYWxseSBpZiB3ZSB0aGluayBpdCB3aWxsIHF1aWNrbHkgZ2l2ZSB1cyBhCisg
ICAgLy8gcmVzdWx0LiBJZiB3ZSByYW4gaXQgaW4gcGFyYWxsZWwgdG8gb3RoZXIgY29uc3RyYWlu
dHMsIHRoZW4gd2UgbWlnaHQgZW5kIHVwIGhhdmluZyB0byB3YWl0IGZvcgorICAgIC8vIHRob3Nl
IG90aGVyIGNvbnN0cmFpbnRzIHRvIGZpbmlzaCwgd2hpY2ggd291bGQgYmUgYSB3YXN0ZSBvZiB0
aW1lIHNpbmNlIGR1cmluZyBjb252ZXJnZW5jZSBpdCdzCisgICAgLy8gZW1waXJpY2FsbHkgbW9z
dCBvcHRpbWFsIHRvIHJldHVybiB0byBkcmFpbmluZyBhcyBzb29uIGFzIGEgY29uc3RyYWludCBn
ZW5lcmF0ZXMgd29yay4gTW9zdAorICAgIC8vIGNvbnN0cmFpbnRzIGRvbid0IGdlbmVyYXRlIGFu
eSB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUsIGFuZCB3aGVuIHRoZXkgZG8gZ2VuZXJhdGUgd29yaywg
dGhleSB0ZW5kCisgICAgLy8gdG8gZ2VuZXJhdGUgZW5vdWdoIG9mIGl0IHRvIGZlZWQgYSBkZWNl
bnQgZHJhaW5pbmcgY3ljbGUuIFRoZXJlZm9yZSwgcGF1c2UgdGltZXMgYXJlIGxvd2VzdCBpZgor
ICAgIC8vIHdlIGdldCB0aGUgaGVjayBvdXQgb2YgaGVyZSBhcyBzb29uIGFzIGEgY29uc3RyYWlu
dCBnZW5lcmF0ZXMgd29yay4gSSB0aGluayB0aGF0IHBhcnQgb2Ygd2hhdAorICAgIC8vIG1ha2Vz
IHRoaXMgb3B0aW1hbCBpcyB0aGF0IHdlIGFsc28gbmV2ZXIgYWJvcnQgcnVubmluZyBhIGNvbnN0
cmFpbnQgZWFybHksIHNvIHdoZW4gd2UgZG8gcnVuCisgICAgLy8gb25lLCBpdCBoYXMgYW4gb3Bw
b3J0dW5pdHkgdG8gZ2VuZXJhdGUgYXMgbXVjaCB3b3JrIGFzIGl0IHBvc3NpYmx5IGNhbi4KKyAg
ICBpZiAob3JkZXJbaW5kZXhdLT5xdWlja1dvcmtFc3RpbWF0ZShtX21haW5WaXNpdG9yKSkgewor
ICAgICAgICBleGVjdXRlKCpvcmRlcltpbmRleCsrXSk7CisgICAgICAgIAorICAgICAgICBpZiAo
bV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKQorICAgICAgICAgICAgJiYgKG9yZGVyLmlz
RW1wdHkoKSB8fCBkaWRWaXNpdFNvbWV0aGluZygpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHsKKyAgICAgICAgICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRl
eCA+PSBvcmRlci5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQg
PSAqb3JkZXJbaW5kZXgrK107CisgICAgICAgICAgICByZXR1cm4gY29uc3RyYWludC5pbmRleCgp
OworICAgICAgICB9KTsKKyAgICAKKyAgICBleGVjdXRlKFBhcmFsbGVsV29ya0ZpcnN0LCBwaWNr
TmV4dCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoTWFya2lu
Z0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCit7CisgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KGNvbnN0
cmFpbnQuaW5kZXgoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjb25zdHJhaW50LnBy
ZXBhcmVUb0V4ZWN1dGUoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX21haW5WaXNpdG9yKTsKKyAgICBD
b25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUobV9t
YWluVmlzaXRvcik7CisgICAgZGlkRXhlY3V0ZShwYXJhbGxlbGlzbSwgY29uc3RyYWludC5pbmRl
eCgpKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9uVGhy
ZWFkKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2Us
IFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3sKKyAg
ICBmb3IgKDs7KSB7CisgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOworICAgICAgICB1
bnNpZ25lZCBpbmRleFRvUnVuOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRyeVBhcmFsbGVsV29yayA9IFsmXSAo
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxl
bC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gbV90b0V4
ZWN1dGVJblBhcmFsbGVsLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxX
b3JrTW9kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgYXV0byB0cnlOZXh0Q29uc3RyYWludCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IHBpY2tSZXN1bHQgPSBwaWNrTmV4dCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFwaWNrUmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9waWNr
TmV4dElzU3RpbGxBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldCgqcGlj
a1Jlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE1h
cmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LmNvbmN1cnJlbmN5KCkgPT0g
Q29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNrUmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNt
KCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmsrKzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RyYWludC5wcmVwYXJlVG9FeGVjdXRlKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHBy
ZWZlcmVuY2UgPT0gUGFyYWxsZWxXb3JrRmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRyeVBhcmFsbGVsV29yaygpIHx8IHRyeU5leHRDb25zdHJhaW50KCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodHJ5TmV4dENvbnN0cmFpbnQoKSB8fCB0cnlQYXJhbGxlbFdvcmsoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSBub3Ro
aW5nIGxlZnQgdG8gcnVuLiBUaGUgb25seSB3YXkgZm9yIHVzIHRvIGhhdmUgbW9yZSB3b3JrIGlz
CisgICAgICAgICAgICAgICAgLy8gaWYgc29tZW9uZSBpcyBydW5uaW5nIGEgY29uc3RyYWludCB0
aGF0IG1heSBwcm9kdWNlIHBhcmFsbGVsIHdvcmsuCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKCFtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmspCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogQW55IHdhaXRpbmcgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5pbmcgdGhl
IFNsb3RWaXNpdG9yLgorICAgICAgICAgICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQgd291bGQg
YmUgcHJvZml0YWJsZS4KKyAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6U2VxdWVudGlhbDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1hcmtpbmdDb25z
dHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkKKyAgICAgICAgICAg
IGNvbnN0cmFpbnQuZG9QYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKHZpc2l0b3IpOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
ZG9QYXJhbGxlbFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kaWRF
eGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwu
dGFrZUZpcnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPT0gaW5kZXhUb1J1bjsgfSk7CisgICAgICAgICAgICAgICAgICAgIG1f
dG9FeGVjdXRlSW5QYXJhbGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50
LnBhcmFsbGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKKyAgICAg
ICAgICAgICAgICAgICAgbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrLS07CisgICAgICAg
ICAgICAgICAgbV9leGVjdXRlZC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgaWYg
KHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleFRvUnVuKTsK
KyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleFRv
UnVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRFeGVjdXRlKENv
bnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAg
bV9leGVjdXRlZC5zZXQoaW5kZXgpOworICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5h
cHBlbmQoaW5kZXgpOworICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQml0
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRh
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
SGVhcDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ7CisKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNYXJraW5nQ29uc3RyYWludFNvbHZlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgCitwdWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoTWFya2lu
Z0NvbnN0cmFpbnRTZXQmKTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoKTsKKyAgICAK
KyAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3Q7CisgICAgCisgICAgZW51bSBTY2hl
ZHVsZXJQcmVmZXJlbmNlIHsKKyAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisgICAgICAgIE5l
eHRDb25zdHJhaW50Rmlyc3QKKyAgICB9OworCisgICAgdm9pZCBleGVjdXRlKFNjaGVkdWxlclBy
ZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4
dCk7CisgICAgCisgICAgdm9pZCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpOworICAgIAor
ICAgIHZvaWQgY29udmVyZ2UoY29uc3QgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4mIG9yZGVy
KTsKKyAgICAKKyAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3ImLCBTY2hlZHVs
ZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlj
a05leHQpOworICAgIAorICAgIHZvaWQgZGlkRXhlY3V0ZShDb25zdHJhaW50UGFyYWxsZWxpc20s
IHVuc2lnbmVkIGluZGV4KTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAgICBTbG90VmlzaXRvciYg
bV9tYWluVmlzaXRvcjsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CisgICAgQml0
VmVjdG9yIG1fZXhlY3V0ZWQ7CisgICAgRGVxdWU8dW5zaWduZWQsIDMyPiBtX3RvRXhlY3V0ZUlu
UGFyYWxsZWw7CisgICAgQml0VmVjdG9yIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldDsKKyAgICBW
ZWN0b3I8dW5zaWduZWQsIDMyPiBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsOworICAgIFZlY3Rvcjx1
bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5OworICAgIExvY2sgbV9sb2NrOwor
ICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1bnNpZ25lZCBtX251bVRocmVhZHNUaGF0
TWF5UHJvZHVjZVdvcmsgeyAwIH07CisgICAgYm9vbCBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSB7
IHRydWUgfTsKKyAgICBWZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL09wYXF1ZVJvb3RTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9PcGFxdWVSb290U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDkxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIE9wYXF1ZVJvb3RTZXQgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE9wYXF1ZVJvb3RTZXQpOwotcHVibGljOgotICAgIE9wYXF1ZVJv
b3RTZXQoKQotICAgICAgICA6IG1fbGFzdFF1ZXJpZWRSb290KG51bGxwdHIpCi0gICAgICAgICwg
bV9jb250YWluc0xhc3RRdWVyaWVkUm9vdChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9v
bCBjb250YWlucyh2b2lkKiByb290KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHJvb3QgIT0g
bV9sYXN0UXVlcmllZFJvb3QpIHsKLSAgICAgICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gcm9v
dDsKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBtX3Jvb3RzLmNvbnRh
aW5zKHJvb3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2NvbnRhaW5zTGFzdFF1ZXJp
ZWRSb290OwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9yb290cy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0g
ICAgewotICAgICAgICBtX3Jvb3RzLmNsZWFyKCk7Ci0gICAgICAgIG1fbGFzdFF1ZXJpZWRSb290
ID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCi0gICAgewotICAgICAgICBpZiAocm9v
dCA9PSBtX2xhc3RRdWVyaWVkUm9vdCkKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmll
ZFJvb3QgPSB0cnVlOwotICAgICAgICByZXR1cm4gbV9yb290cy5hZGQocm9vdCkuaXNOZXdFbnRy
eTsKLSAgICB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9yb290cy5zaXplKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmJlZ2luKCk7
Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5lbmQoKTsKLSAgICB9Ci0KLQotcHJpdmF0
ZToKLSAgICBIYXNoU2V0PHZvaWQqPiBtX3Jvb3RzOwotICAgIG11dGFibGUgdm9pZCogbV9sYXN0
UXVlcmllZFJvb3Q7Ci0gICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVu
Yz4KK2NsYXNzIFBhcmFsbGVsU291cmNlQWRhcHRlciA6IHB1YmxpYyBTaGFyZWRUYXNrPElubmVy
VHlwZSgpPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFy
ZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3Jh
cEZ1bmMpCisgICAgICAgIDogbV9vdXRlclNvdXJjZShvdXRlclNvdXJjZSkKKyAgICAgICAgLCBt
X3Vud3JhcEZ1bmModW53cmFwRnVuYykKKyAgICB7CisgICAgfQorICAgIAorICAgIElubmVyVHlw
ZSBydW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobV9pbm5lclNvdXJjZSkgewor
ICAgICAgICAgICAgICAgIGlmIChJbm5lclR5cGUgcmVzdWx0ID0gbV9pbm5lclNvdXJjZS0+cnVu
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAg
bV9pbm5lclNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1faW5uZXJTb3VyY2UgPSBtX3Vud3JhcEZ1bmMobV9vdXRlclNvdXJjZS0+cnVu
KCkpOworICAgICAgICB9IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAgICAgICAgcmV0dXJuIElu
bmVyVHlwZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxPdXRl
clR5cGUoKT4+IG1fb3V0ZXJTb3VyY2U7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8SW5uZXJUeXBl
KCk+PiBtX2lubmVyU291cmNlOworICAgIFVud3JhcEZ1bmMgbV91bndyYXBGdW5jOworICAgIExv
Y2sgbV9sb2NrOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJ
bm5lclR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitSZWY8UGFyYWxsZWxTb3VyY2VBZGFwdGVy
PE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPj4gY3JlYXRlUGFyYWxsZWxTb3VyY2VB
ZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0
IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFy
YWxsZWxTb3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPihvdXRl
clNvdXJjZSwgdW53cmFwRnVuYykpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlh
dGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYp
PiBleGVjdXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwg
Q29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQorICAgIDogTWFya2luZ0NvbnN0cmFp
bnQoV1RGTW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBj
b25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKQorICAgICwgbV9l
eGVjdXRlRnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQoreworfQorCitTaW1wbGVN
YXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKworQ29u
c3RyYWludFBhcmFsbGVsaXNtIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsK
KyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgYWxsb3dzIGZvciBhbiBpbmZvcm1hbCB3YXkgdG8gZGVm
aW5lIGNvbnN0cmFpbnRzLiBKdXN0IHBhc3MgYSBsYW1iZGEgdG8gdGhlIGNvbnN0cnVjdG9yLiBU
aGUgb25seQorLy8gZG93bnNpZGUgaXMgdGhhdCB0aGlzIG1ha2VzIGl0IGhhcmQgZm9yIGNvbnN0
cmFpbnRzIHRvIGJlIHN0YXRlZnVsLCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gYmUK
Ky8vIHBhcmFsbGVsLiBJbiB0aG9zZSBjYXNlcywgaXQncyBlYXNpZXIgdG8ganVzdCBzdWJjbGFz
cyBNYXJraW5nQ29uc3RyYWludC4KK2NsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IDogcHVi
bGljIE1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBT
aW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUs
IENTdHJpbmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAor
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludENvbmN1cnJl
bmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50KTsKKyAgICAKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKK3ByaXZhdGU6
CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVu
Y3Rpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OCw5ICs5OCw3IEBAIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogCiB2b2lkIFNsb3RWaXNp
dG9yOjpkaWRTdGFydE1hcmtpbmcoKQogewotICAgIGlmIChoZWFwKCktPmNvbGxlY3Rpb25TY29w
ZSgpID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9v
cGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkgbm93LgotICAg
IGVsc2UKKyAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2Nv
cGU6OkVkZW4pCiAgICAgICAgIHJlc2V0KCk7CiAKICAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFw
UHJvZmlsZXIgPSB2bSgpLmhlYXBQcm9maWxlcigpKQpAQCAtMTExLDcgKzEwOSw2IEBAIHZvaWQg
U2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0
KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5zaXplKCkpOwogICAgIG1f
Ynl0ZXNWaXNpdGVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcFNuYXBz
aG90QnVpbGRlciA9IG51bGxwdHI7CkBAIC0yNzcsMTEgKzI3NCwxMyBAQCB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJU
eXBlPgogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhD
b250YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtl
ZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAKICAgICBjb250
YWluZXIubm90ZU1hcmtlZCgpOwogICAgIAorICAgIC8vZGF0YUxvZygiTSgiLCBSYXdQb2ludGVy
KGNlbGwpLCAiKSIpOworICAgIAogICAgIG1fdmlzaXRDb3VudCsrOwogICAgIG1fYnl0ZXNWaXNp
dGVkICs9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwogCkBAIC0zNDYsNyArMzQ1LDcgQEAgcHJpdmF0
ZToKIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0
IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHko
Y2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0
Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAg
LTQzNSw3ICs0MzQsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkK
IAogdm9pZCBTbG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZChjb25zdCBBYnN0cmFj
dExvY2tlciYpCiB7Ci0gICAgbV9tdXRhdG9ySXNTdG9wcGVkID0gKG1faGVhcC5jb2xsZWN0b3JC
ZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRN
dXRhdG9yKTsKKyAgICBtX211dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFwLndvcmxkSXNTdG9wcGVk
KCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNp
dG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKCkKQEAgLTQ1Miw3ICs0NTEsNyBAQCBib29sIFNs
b3RWaXNpdG9yOjpoYXNBY2tub3dsZWRnZWRUaGF0VGhlCiAKIGJvb2wgU2xvdFZpc2l0b3I6Om11
dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tdXRhdG9y
SXNTdG9wcGVkID09IChtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3Bw
ZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7CisgICAgcmV0dXJuIG1fbXV0
YXRvcklzU3RvcHBlZCA9PSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXpl
Rm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6ZUZvclN0
b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4ICs0ODksNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAg
ICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KLSAgICAKLSAgICBtZXJnZUlmTmVj
ZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJh
aW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVzdGVkKQpAQCAtNTUwLDcgKzU0Nyw2IEBAIHNpemVfdCBT
bG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHIKICAgICB9CiAKICAgICBkb25hdGVBbGwo
KTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiAKICAgICByZXR1cm4gYnl0ZXNWaXNpdGVkKCk7
CiB9CkBAIC01NjEsMTcgKzU1NywxNiBAQCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1p
bmF0aW9uKCkKICAgICByZXR1cm4gZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1i
b29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlcikKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9z
aGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9u
dW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIp
OwogfQogCiBib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikK
IHsKLSAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCisgICAgcmV0dXJuICFpc0VtcHR5KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENv
bGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRN
dXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKQEAgLTU4MywxMiArNTc4LDE0IEBAIE5F
VkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3Rp
dmUgPSBmYWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0g
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAg
ICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwog
ICAgICAgICAgICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJl
ck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJP
ZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hp
bGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkp
CkBAIC02MjksMjggKzYyNiw1MSBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERy
YWluUmVzCiAKICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAg
ICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25W
YXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5
KTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2Vy
KQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAg
ICAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOwor
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1h
cmtlcnNTaG91bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5S
ZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3Rh
Y2soCi0gICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJh
dGlvblN0YXR1cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJv
bSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFj
ayksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFib251c1Rhc2sgJiYgaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFj
aE1hcmtTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3Rh
Y2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5z
dGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9u
ZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hl
YXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFj
dGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0
aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWlu
KHRpbWVvdXQpOworICAgICAgICBpZiAoYm9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rh
c2stPnJ1bigqdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBtYWluIHRo
cmVhZCBjb3VsZCBzdGlsbCBiZSBydW5uaW5nLCBhbmQgbWF5IHJ1biBmb3IgYSB3aGlsZS4gVW5s
ZXNzIHdlIGNsZWFyIHRoZSB0YXNrCisgICAgICAgICAgICAvLyBvdXJzZWx2ZXMsIHdlIHdpbGwg
a2VlcCBsb29waW5nIGFyb3VuZCB0cnlpbmcgdG8gcnVuIHRoZSB0YXNrLgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2lu
Z011dGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9
PSBib251c1Rhc2spCisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX2JvbnVzVmlzaXRvclRh
c2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgaXNBY3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAgLTY3MCwx
NSArNjkwLDE5IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAg
ICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxCiAgICAgICAgIHx8IChtX2hl
YXAubV93b3JsZFN0YXRlLmxvYWQoKSAmIEhlYXA6Om11dGF0b3JXYWl0aW5nQml0KQogICAgICAg
ICB8fCAhbV9oZWFwLmhhc0hlYXBBY2Nlc3MoKQotICAgICAgICB8fCBtX2hlYXAuY29sbGVjdG9y
QmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICB8fCBtX2hlYXAud29y
bGRJc1N0b3BwZWQoKSkgewogICAgICAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBvdmVy
IGRyYWluSW5QYXJhbGxlbCgpIHdoZW4gd2UgaGF2ZSBhIGNvbmN1cnJlbnQgbXV0YXRvciBidXQK
ICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGlzIG5vdCBwcm9maXRhYmxlLgogICAgICAgICByZXR1
cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVvdXQpOwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAg
CisgICAgZG9uYXRlQWxsKGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJl
dHVybiB3YWl0Rm9yVGVybWluYXRpb24odGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFy
ZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1Rp
bWUgdGltZW91dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtp
bmdNdXRleCk7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0
KSkKICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkBAIC03
MTEsNjEgKzczNSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFsbChjb25zdCBBYnN0cmEK
ICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAK
LXZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm9vdCkKLXsKLSAgICBpZiAo
IXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVS
b290cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdD
TWFya2VycygpID09IDEpIHsKLSAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJl
ZCBIYXNoU2V0LgotICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1l
cmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgotICAgIC8vIGEgd2hpbGUgdG8g
bWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAg
bWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJv
b3QpOwotfQotCi1ib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9v
dCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgcmV0dXJuIG1faGVhcC5tX29w
YXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwotfQotCi1UcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29u
dGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJv
b3QpCi0gICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotICAgIAotICAgIGlmIChtX29wYXF1
ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwot
ICAgIGlmIChtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0
dXJuIFRydWVUcmlTdGF0ZTsKLSAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKLX0KLQotdm9pZCBT
bG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQot
Ci12b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKLXsKLSAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlv
bnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVy
Z2VPcGFxdWVSb290cygpOwotfQotICAgIAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsK
ICAgICBpZiAoIW1faXNJblBhcmFsbGVsTW9kZSkgewpAQCAtNzg1LDE2ICs3NTQsNiBAQCB2b2lk
IFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uCiAgICAgZHJhaW4odGltZW91dCk7
CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQotewotICAgIHsKLSAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRl
eCk7Ci0gICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCi0gICAgICAgICAg
ICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgfQotICAgIG1fb3BhcXVlUm9v
dHMuY2xlYXIoKTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZl
c3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewog
ICAgIG1faGVhcC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1Jl
ZmVyZW5jZUhhcnZlc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRl
ICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKICNpbmNsdWRlICJWaXNp
dFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk1LDEwICs5NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFw
cGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5i
YXJyaWVyZWQoSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1
ZVJvb3Qodm9pZCopOworICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKLSAgICBUcmlTdGF0ZSBjb250YWlu
c09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7CisgICAgYm9vbCBjb250YWluc09wYXF1
ZVJvb3Qodm9pZCopIGNvbnN0OwogCiAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xs
ZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKQEAg
LTEyMSw2ICsxMTksOCBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbklu
UGFyYWxsZWwoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90
b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAg
IFNoYXJlZERyYWluUmVzdWx0IHdhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVv
dXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHBl
cmZvcm0gYW4gaW5jcmVtZW50IG9mIGRyYWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxraW5n
IGBieXRlc2Agd29ydGggb2YgZGF0YS4gVGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBhY2NpZGVu
dGFsbHkgd2FsayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBt
b3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpAQCAtMTI4LDggKzEyOCw2IEBAIHB1YmxpYzoKICAgICAv
LyByYXJlIGNhc2VzIGhhcHBlbiB0ZW1wb3JhcmlseSBldmVuIGlmIHdlJ3JlIG5vdCByZWFjaGlu
ZyB0ZXJtaW5hdGlvbikuCiAgICAgc2l6ZV90IHBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKHNp
emVfdCBieXRlcyk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZUlmTmVj
ZXNzYXJ5KCk7Ci0KICAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBv
ZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAg
ICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KICAg
ICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7CkBAIC0xOTQsMTAgKzE5Miw2
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENl
bGwqKTsKICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLQotICAgIHZvaWQgbWVy
Z2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNv
bnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOwpAQCAt
MjE1LDcgKzIwOSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3Rv
clN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAgIE9wYXF1ZVJv
b3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVyZXMgbm90
IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIGJvb2wgbV9pZ25vcmVOZXdP
cGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2RlLgogICAg
IAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDYgKzEzNiwyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZFZhCiAgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CiB9CiAKK2lubGlu
ZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKK3sKKyAgICBpZiAo
IXB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJv
b3RzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFoZWFwKCktPm1fb3BhcXVlUm9v
dHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5z
T3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFx
dWVSb290cy5jb250YWlucyhwdHIpOworfQorCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewogICAgIGlmIChtX2lzRmlyc3RW
aXNpdCkgewpAQCAtMTU5LDEyICsxNzYsMTIgQEAgaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpo
ZWFwKCkgY29uc3QKIAogaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQogewotICAgIHJldHVy
biAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogaW5saW5lIGNv
bnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAogewotICAgIHJldHVybiAqbV9oZWFwLm1f
dm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgiCiAjaW5jbHVkZSAi
UHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgog
CkBAIC04OCw1ICs4OSw0MiBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVt
cHR5CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFs
bG9jYXRvciooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpCit7CisgICAg
Y2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4geworICAg
IHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICAg
ICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvcjsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQpCisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3IgPSByZXN1bHQtPm5leHRBbGxv
Y2F0b3JJblN1YnNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxv
Y2F0b3I7CisgICAgICAgIExvY2sgbV9sb2NrOworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUYXNrKG1fZmlyc3RBbGxvY2F0b3IpKTsKK30KKworUmVmUHRyPFNoYXJlZFRh
c2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFy
a2VkQmxvY2tTb3VyY2UoKQoreworICAgIHJldHVybiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0
ZXI8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkQmxvY2s6OkhhbmRsZSo+KAorICAgICAgICBwYXJh
bGxlbEFsbG9jYXRvclNvdXJjZSgpLAorICAgICAgICBbXSAoTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IpIC0+IFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiB7Cisg
ICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPnBhcmFsbGVsTm90RW1wdHlCbG9ja1Nv
dXJjZSgpOworICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjks
MTcgKzY5LDI0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZv
aWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5jJik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJl
ZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gcGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UoKTsKKyAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZEJs
b2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAg
IHZvaWQgZm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAgIAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUq
KCk+PiBwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKTsKKyAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExhcmdlQWxsb2NhdGlvbihjb25z
dCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZv
ckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVh
Y2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNTMgQEAgdm9pZCBTdWJzcGFjZTo6Zm9yRWFj
aE1hcmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRD
ZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGNsYXNzIFRhc2sgOiBwdWJs
aWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgICAgICAgICAg
OiBtX3N1YnNwYWNlKHN1YnNwYWNlKQorICAgICAgICAgICAgLCBtX2Jsb2NrU291cmNlKHN1YnNw
YWNlLnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpKQorICAgICAgICAgICAgLCBt
X2Z1bmMoZnVuYykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1
bigpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkg
LT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuYyh2aXNp
dG9yLCBjZWxsLCBraW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbmVlZFRvVmlz
aXRMYXJnZUFsbG9jYXRpb25zKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9zdWJzcGFjZS5mb3JFYWNoTGFyZ2VB
bGxvY2F0aW9uKAorICAgICAgICAgICAgICAgIFsmXSAoTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uLT5pc01hcmtlZCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGFsbG9jYXRpb24tPmNlbGwo
KSwgbV9zdWJzcGFjZS5tX2F0dHJpYnV0ZXMuY2VsbEtpbmQpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN1YnNwYWNlJiBt
X3N1YnNwYWNlOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxl
KigpPj4gbV9ibG9ja1NvdXJjZTsKKyAgICAgICAgRnVuYyBtX2Z1bmM7CisgICAgICAgIExvY2sg
bV9sb2NrOworICAgICAgICBib29sIG1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zIHsgdHJ1
ZSB9OworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzLCBm
dW5jKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiB2b2lkIFN1YnNwYWNlOjpmb3JF
YWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3JFYWNoTWFya2VkQmxvY2so
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmlz
aXRDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBWaXNpdENvdW50ZXIoKSB7IH0KKyAgICAKKyAgICBW
aXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDogbV92aXNpdG9yKCZ2
aXNpdG9yKQorICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlzaXRvci52aXNpdENvdW50
KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0
IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92aXNpdG9yLT52aXNpdENvdW50KCkgLSBtX2lu
aXRpYWxWaXNpdENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU2xvdFZpc2l0b3Iq
IG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7
IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFZpc2l0aW5nVGltZW91dCB7Ci1wdWJsaWM6Ci0g
ICAgVmlzaXRpbmdUaW1lb3V0KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZpc2l0aW5nVGlt
ZW91dChTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fZGlkVmlzaXRTb21ldGhpbmcoZGlkVmlzaXRT
b21ldGhpbmcpCi0gICAgICAgICwgbV92aXNpdENvdW50QmVmb3JlKHZpc2l0b3IudmlzaXRDb3Vu
dCgpKQotICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgc2l6ZV90IHZpc2l0Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdENvdW50KCkgLSBtX3Zpc2l0Q291bnRCZWZvcmU7
Ci0gICAgfQotCi0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyhTbG90VmlzaXRvciYgdmlzaXRv
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nIHx8IHZp
c2l0Q291bnQodmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dChT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWRWaXNp
dFNvbWV0aGluZyh2aXNpdG9yKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAg
IAotcHJpdmF0ZToKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OwotICAg
IHNpemVfdCBtX3Zpc2l0Q291bnRCZWZvcmUgeyAwIH07Ci0gICAgTW9ub3RvbmljVGltZSBtX3Rp
bWVvdXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyAr
MTExLDcgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpz
VmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZENvbmN1cnJlbnRseShtYXJr
aW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChjb250YWluZXIuaXNN
YXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxK
U1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIyNTQwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzU0LDYgKzM1NCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZUFzeW5jSXRlcmF0aW9u
ID0gZmEKICAgICBcCiAgICAgdih1bnNpZ25lZCwgbWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVu
UmViYWxhbmNlLCAxMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG51bWJl
ck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoOCksIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoYm9vbCwgdXNlUGFyYWxsZWxNYXJraW5nQ29uc3RyYWludFNvbHZlciwgdHJ1
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgb3BhcXVlUm9vdE1lcmdlVGhy
ZXNob2xkLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgbWluSGVhcFV0
aWxpemF0aW9uLCAwLjgsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBtaW5NYXJr
ZWRCbG9ja1V0aWxpemF0aW9uLCAwLjksIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVy
aW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJl
dHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fZ2xv
YmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQ
cm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQcm90
b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6Omlz
TWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygp
IHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQcm90
b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAgICAg
cmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAgICByZXR1cm4g
SGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE3
LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29u
c3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGRvZXMgc29tZSBjaGFuZ2Vz
IHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIHBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZzoKKyAg
ICAgICAgCisgICAgICAgIC0gSSBmaW5hbGx5IHJlbW92ZWQgZGVwZW5kZW5jeVdpdGguIFRoaXMg
d2FzIGEgc2lsbHkgY29uc3RydWN0IHdob3NlIG9ubHkgcHVycG9zZSBpcyB0byBjb25mdXNlCisg
ICAgICAgICAgcGVvcGxlIGFib3V0IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIGRlcGVuZGVuY3kg
Y2hhaW4uIEkgdG9vayB0aGF0IGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdyZWFseQorICAgICAgICAg
IHNpbXBsaWZ5IHRoZSBHQydzIHVzZSBvZiBkZXBlbmRlbmN5IGNoYWluaW5nLgorICAgICAgICAK
KyAgICAgICAgLSBBZGRlZCBtb3JlIGxvZ2ljIHRvIERlcXVlPD4sIHNpbmNlIEkgdXNlIGl0IGZv
ciBwYXJ0IG9mIHRoZSBsb2FkIGJhbGFuY2VyLgorICAgICAgICAKKyAgICAgICAgLSBNYWRlIGl0
IHBvc3NpYmxlIHRvIHByb2ZpbGUgbG9jayBjb250ZW50aW9uLiBTZWUKKyAgICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMjUwI2MwIGZvciBzb21lIHBy
ZWxpbWluYXJ5IG1lYXN1cmVtZW50cy4KKyAgICAgICAgCisgICAgICAgIC0gSW50cm9kdWNlZCBo
b2xkTG9ja0lmLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBlcmZvcm0gcHJlZGljYXRlZCBsb2Nr
IGFjcXVpc2l0aW9uLiBXZSB1c2UgdGhhdAorICAgICAgICAgIHRvIHBpY2sgYSBsb2NrIGluIFdl
YkNvcmUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpkZXBlbmRlbmN5KToKKyAgICAgICAg
KFdURjo6RGVwZW5kZW5jeVdpdGg6OkRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6ZGVwZW5kZW5jeVdpdGgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3Iu
aDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRySGFz
aFNldC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Q29u
Y3VycmVudFB0ckhhc2hTZXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6
fkNvbmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hT
ZXQ6OmRlbGV0ZU9sZFRhYmxlcyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0
OjpjbGVhcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXpl
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3cpOgorICAgICAg
ICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKToKKyAgICAgICAgKFdU
Rjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9D
b25jdXJyZW50UHRySGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0
ckhhc2hTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6
OmFkZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpzaXplIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjptYXhMb2FkIGNvbnN0
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6Omhhc2gpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Y2FzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRQdHJIYXNoU2V0Ojpjb250YWluc0ltcGwgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJy
ZW50UHRySGFzaFNldDo6YWRkSW1wbCk6CisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAg
IChXVEY6OmlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KToKKyAgICAgICAgKiB3dGYvRmFzdE1h
bGxvYy5oOgorICAgICAgICAqIHd0Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6
OmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChXVEY6OmhvbGRM
b2NrSWYpOgorICAgICAgICAqIHd0Zi9TY29wZWRMYW1iZGEuaDoKKyAgICAgICAgKiB3dGYvU2hh
cmVkVGFzay5oOgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUpOgor
ICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFJlc3VsdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAq
IHd0Zi9TdGFja1Nob3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6U3RhY2tT
aG90KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RG
OjpTdGFja1Nob3Q6OmFycmF5IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpzaXpl
IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvciBib29sIGNvbnN0KToK
KyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6U3RhY2tTaG90OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojppc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3Bl
cmF0b3I+IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpkZWxldGVkVmFsdWVBcnJh
eSk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdEhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpT
dGFja1Nob3RIYXNoOjplcXVhbCk6CisgICAgICAgICogd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg6
IEFkZGVkLgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6U3RhY2tTaG90UHJvZmls
ZXIpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cHJvZmlsZSk6CisgICAgICAg
IChXVEY6OlN0YWNrU2hvdFByb2ZpbGVyOjpydW4pOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2Vy
cyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2lu
IFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBT
dHJpbmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi87IH07
CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUw
MDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKKwkJMEYzMENCNUExRkNERjEzNDAw
NEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAv
KiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5j
cHAgKi87IH07CiAJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3NDFGMjNE
NDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovOyB9OwogCQkwRjYwRjMyRjFERkNCRDFCMDA0
MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFBy
aW50U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4Myw2ICsxODQsOCBAQAogCQkwRjMwQkE4RDFFNzg3
MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzMEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzBCQThGMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMg
LyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJFQjRB
IC8qIExvY2tBbGdvcml0aG1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG1J
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQw
MDNDRkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAv
KiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5k
b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNiw2ICsyMjksOCBAQAogCQkw
RjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcgLyog
UHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRTdHJl
YW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDQxRkQxQzM3QjAwNzlD
NUIyIC8qIFN0YWNrU2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFj
a1Nob3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDUxRkQxQzM3QjAw
NzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFB
MTgxMEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9I
YXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEw
MDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN5c3RlbVRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5NCw2
ICs3OTksOCBAQAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRo
cmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUxQTgyNUEwMDQxMjNGRiAvKiBDb21waWxlci5oICov
LAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlBMkJCQyAvKiBDb21wbGV0aW9uSGFuZGxlci5oICov
LAorCQkJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgKi8sCisJCQkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNo
U2V0LmggKi8sCiAJCQkJMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlvbi5oICov
LAogCQkJCUUzOEM0MTI2MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCAqLywKIAkJCQlF
MzhDNDEyNzFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5oICovLApAQCAtMTAwNSw2ICsxMDEy
LDggQEAKIAkJCQlBOEE0NzMwRDE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJ
CQlBOEE0NzMwRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4
QTQ3MzBGMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5oICovLAorCQkJCTBGOURBQTA0
MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3QuaCAqLywKKwkJCQkwRjlEQUEwNTFGRDFDMzdC
MDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLywKIAkJCQlGRURBQ0QzQjE2MzBGODNG
MDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgKi8sCiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5
NjM0IC8qIFN0YWNrU3RhdHMuaCAqLywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyog
U3RhY2tUcmFjZS5jcHAgKi8sCkBAIC0xNDI2LDYgKzE0MzUsNyBAQAogCQkJCTBGODI0QTY4MUI3
NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3
NTJCMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50Q29kZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxRjE3NTJDMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjMwQ0I1QTFGQ0RGMTM0MDA0QjUzMjMgLyogQ29uY3VycmVu
dFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1MkQxRjNENDg2MDAwQzc0
OTUwIC8qIFBlcnNpc3RlbnRFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzYy
MTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDExICszNDYsMTYgQEAgQUxXQVlTX0lOTElORSBEZXBl
bmRlbmN5IG51bGxEZXBlbmRlbmN5KAogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9
IG51bGxwdHI+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5KFQgdmFsdWUpCiB7CiAgICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1
aW50NjRfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgdW5pb24g
eworICAgICAgICB1aW50MzJfdCBjb3B5OworICAgICAgICBUIHZhbHVlOworICAgIH0gdTsKKyAg
ICB1LmNvcHkgPSAwOworICAgIHUudmFsdWUgPSB2YWx1ZTsKICNpZiBDUFUoQVJNNjQpCiAgICAg
Ly8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3
aG9zZSBjb21wdXRhdGlvbgogICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4g
VGhpcyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgpAQCAtMzYzLDgwICszNjgs
MjAgQEAgQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YQogICAgIC8vIG9y
IGFuIGFjcXVpcmUgbG9hZC4KICAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAl
d1tpbl0iCiAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAg
OiBbaW5dICJyIihjb3B5KSk7CisgICAgICAgIDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxpZiBD
UFUoQVJNKQogICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKICAgICAg
ICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNv
cHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVw
ZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVu
Y2UoKTsKICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAg
VU5VU0VEX1BBUkFNKHUuY29weSk7CiAjZW5kaWYKICAgICByZXR1cm4gZGVwZW5kZW5jeTsKIH0K
IAotLy8gRklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBk
ZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERl
cGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7
Ci0gICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwotI2lm
IENQVShBUk02NCkKLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0i
Ci0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5d
ICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0s
ICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQot
ICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgbG9hZExvYWRGZW5jZSgpOwot
ICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKLSNlbmRpZgotICAg
IHJldHVybiBkZXBlbmRlbmN5OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNf
SU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBl
bmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9
IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQot
ewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1Ymxp
YzoKLSAgICBEZXBlbmRlbmN5V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5k
ZW5jeSgpKQotICAgICAgICAsIHZhbHVlKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVu
ZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAg
IDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQotICAgICAgICAsIHZhbHVlKHZhbHVlKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwotICAgIFQgdmFsdWU7Ci19
OwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBk
ZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewot
ICAgIHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRl
bmN5IGRlcGVuZGVuY3kpCiB7CkBAIC00NjksMTAgKzQxNCw4IEBAIEFMV0FZU19JTkxJTkUgVCYg
ZW5zdXJlUG9pbnRlcihBdG9taWM8VCoKIAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6
OkRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OkRlcGVuZGVuY3lXaXRoOwogdXNpbmcgV1RGOjpjb25z
dW1lOwogdXNpbmcgV1RGOjpkZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsK
IHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9C
aXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAog
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Ig
b3BlcmF0b3IrKyhpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9
ICp0aGlzOworICAgICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDcgQEAgc2V0KFdURl9I
RUFERVJTCiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29t
cGlsZXIuaAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKICAgICBDb25kaXRpb24uaAogICAg
IENyb3NzVGhyZWFkQ29waWVyLmgKICAgICBDcm9zc1RocmVhZFRhc2suaApAQCAtMTMyLDYgKzEz
Myw4IEBAIHNldChXVEZfSEVBREVSUwogICAgIFNlZ21lbnRlZFZlY3Rvci5oCiAgICAgU21hbGxQ
dHJTZXQuaAogICAgIFN0YWNrQm91bmRzLmgKKyAgICBTdGFja1Nob3QuaAorICAgIFN0YWNrU2hv
dFByb2ZpbGVyLmgKICAgICBTdGFja1N0YXRzLmgKICAgICBTdGFja1RyYWNlLmgKICAgICBTdGRM
aWJFeHRyYXMuaApAQCAtMjE4LDYgKzIyMSw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIENQVVRp
bWUuY3BwCiAgICAgQ2xvY2tUeXBlLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAorICAg
IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAg
IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29u
Y3VycmVudFB0ckhhc2hTZXQuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCitDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQo
KQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25j
dXJyZW50UHRySGFzaFNldCgpCit7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRl
bGV0ZU9sZFRhYmxlcygpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMg
bm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1p
Z2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQg
bWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAg
IG1fYWxsVGFibGVzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVl
X3B0cjxUYWJsZT4mIHRhYmxlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS5n
ZXQoKSAhPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIH0pOworfQorCit2b2lkIENv
bmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcigpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNh
c2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQo
KS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRp
ZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
IAorICAgIAorICAgIG1fYWxsVGFibGVzLmNsZWFyKCk7CisgICAgaW5pdGlhbGl6ZSgpOworfQor
Cit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKCkKK3sKKyAgICBjb25zdGV4
cHIgdW5zaWduZWQgaW5pdGlhbFNpemUgPSAzMjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+
IHRhYmxlID0gVGFibGU6OmNyZWF0ZShpbml0aWFsU2l6ZSk7CisgICAgbV90YWJsZS5zdG9yZVJl
bGF4ZWQodGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKHRhYmxl
KSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3coVGFibGUqIHRhYmxl
LCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9p
ZCogcHRyKQoreworICAgIGlmICh0YWJsZS0+bG9hZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJsZS0+
bWF4TG9hZCgpKQorICAgICAgICByZXR1cm4gcmVzaXplQW5kQWRkKHB0cik7CisgICAgCisgICAg
Zm9yICg7OykgeworICAgICAgICB2b2lkKiBvbGRFbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0u
Y29tcGFyZUV4Y2hhbmdlU3Ryb25nKG51bGxwdHIsIHB0cik7CisgICAgICAgIGlmICghb2xkRW50
cnkpIHsKKyAgICAgICAgICAgIGlmIChtX3RhYmxlLmxvYWQoKSAhPSB0YWJsZSkgeworICAgICAg
ICAgICAgICAgIC8vIFdlIGFkZGVkIGFuIGVudHJ5IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVlZCB0
byByZWV4ZWN1dGUgdGhlIGFkZCBvbiB0aGUgbmV3IHRhYmxlLgorICAgICAgICAgICAgICAgIHJl
dHVybiBhZGQocHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChvbGRFbnRyeSA9PSBwdHIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
Y3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVs
YXhlZCgpOworICAgIGlmICh0YWJsZS0+bG9hZC5sb2FkUmVsYXhlZCgpIDwgdGFibGUtPm1heExv
YWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4g
bmV3VGFibGUgPSBUYWJsZTo6Y3JlYXRlKHRhYmxlLT5zaXplICogMik7CisgICAgdW5zaWduZWQg
bWFzayA9IG5ld1RhYmxlLT5tYXNrOworICAgIHVuc2lnbmVkIGxvYWQgPSAwOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgKytpKSB7CisgICAgICAgIHZvaWQqIHB0
ciA9IHRhYmxlLT5hcnJheVtpXS5sb2FkUmVsYXhlZCgpOworICAgICAgICBpZiAoIXB0cikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRl
eCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRl
eDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgQXRvbWljPHZvaWQqPiYgZW50cnlS
ZWYgPSBuZXdUYWJsZS0+YXJyYXlbaW5kZXhdOworICAgICAgICAgICAgdm9pZCogZW50cnkgPSBl
bnRyeVJlZi5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAg
ICAgICAgICAgIGVudHJ5UmVmLnN0b3JlUmVsYXhlZChwdHIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkgIT0g
cHRyKTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGxvYWQrKzsKKyAgICB9CisgICAgCisgICAgbmV3VGFibGUtPmxvYWQuc3Rv
cmVSZWxheGVkKGxvYWQpOworICAgIAorICAgIG1fdGFibGUuc3RvcmUobmV3VGFibGUuZ2V0KCkp
OworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKG5ld1RhYmxlKSk7Cit9CisKK2Jvb2wg
Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAgcmVz
aXplSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpU
YWJsZTo6Y3JlYXRlKHVuc2lnbmVkIHNpemUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbmN1
cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gcmVzdWx0KG5ldyAoZmFzdE1hbGxvYyhPQkpFQ1RfT0ZG
U0VUT0YoVGFibGUsIGFycmF5KSArIHNpemVvZihBdG9taWM8dm9pZCo+KSAqIHNpemUpKSBUYWJs
ZSgpKTsKKyAgICByZXN1bHQtPnNpemUgPSBzaXplOworICAgIHJlc3VsdC0+bWFzayA9IHNpemUg
LSAxOworICAgIHJlc3VsdC0+bG9hZC5zdG9yZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9yZVJl
bGF4ZWQobnVsbHB0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEg
Y29uY3VycmVudCBoYXNoLWJhc2VkIHNldCBmb3IgcG9pbnRlcnMuIEl0J3Mgb3B0aW1pemVkIGZv
cjoKKy8vCisvLyAtIEhpZ2ggcmF0ZSBvZiBjb250YWlucygpIGNhbGxzLgorLy8gLSBIaWdoIHJh
dGUgb2YgYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgbmV3LiBhZGQoKSBjYWxs
cyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyAobm9wIGFkZHMpCisvLyAgIGRvbid0IG11dGF0ZSB0
aGUgdGFibGUgYXQgYWxsLgorLy8gLSBOb3QgdG9vIG1hbnkgdGhyZWFkcy4gSSBkb3VidCB0aGlz
IHNjYWxlcyBiZXlvbmQgfjQuIFRob3VnaCwgaXQgbWF5IGFjdHVhbGx5IHNjYWxlIGJldHRlciB0
aGFuIHRoYXQKKy8vICAgaWYgdGhlIHJhdGUgb2Ygbm9wIGFkZHMgaXMgYWJzdXJkbHkgaGlnaC4K
Ky8vCisvLyBJZiB3ZSB3YW50ZWQgdGhpcyB0byBzY2FsZSBiZXR0ZXIsIHRoZSBtYWluIGNoYW5n
ZSB3ZSdkIGhhdmUgdG8gbWFrZSBpcyBob3cgdGhpcyB0YWJsZSBkZXRlcm1pbmVzIHdoZW4KKy8v
IHRvIHJlc2l6ZS4gUmlnaHQgbm93IGl0J3MgYSBzaGFyZWQgY291bnRlci4gV2UgbG9jazt4YWRk
IHRoaXMgY291bnRlci4gT25lIGVhc3kgd2F5IHRvIG1ha2UgdGhhdAorLy8gc2NhbGFibGUgaXMg
dG8gcmVxdWlyZSBlYWNoIHRocmVhZCB0aGF0IHdvcmtzIHdpdGggdGhlIENvbmN1cnJlbnRQdHJI
YXNoU2V0IHRvIHJlZ2lzdGVyIGl0c2VsZiBmaXJzdC4KKy8vIFRoZW4gZWFjaCB0aHJlYWQgd291
bGQgaGF2ZSBzb21lIGRhdGEgc3RydWN0dXJlIHRoYXQgaGFzIGEgY291bnRlci4gV2UgY291bGQg
aW5zdGl0dXRlIHRoZSBwb2xpY3kgdGhhdAorLy8gZWFjaCB0aHJlYWQgc2ltcGx5IGluY3JlbWVu
dHMgaXRzIG93biBsb2FkIGNvdW50ZXIsIGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmUuIFRoZW4s
IGlmIGFueSBzZWFyY2ggdG8KKy8vIHJlc29sdmUgYSBjb2xsaXNpb24gZG9lcyBtb3JlIHRoYW4g
TiBpdGVyYXRpb25zLCB3ZSBjYW4gY29tcHV0ZSBhIGNvbWJpbmVkIGxvYWQgYnkgc3VtbWluZyB0
aGUgbG9hZAorLy8gY291bnRlcnMgb2YgYWxsIG9mIHRoZSB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVz
LgorLy8KKy8vIENvbmN1cnJlbnRQdHJIYXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNlZXMg
YSA5OCUgbm9wIGFkZCByYXRlIGluIFNwZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIGZv
Y3VzZXMgc28gbXVjaCBvbiBjYXNlcyB3aGVyZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdlLgor
Y2xhc3MgQ29uY3VycmVudFB0ckhhc2hTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENv
bmN1cnJlbnRQdHJIYXNoU2V0KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVi
bGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBDb25jdXJyZW50UHRySGFzaFNldCgpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB+Q29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb250YWluc0ltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRkSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHNpemVf
dCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxlLmxvYWRSZWxheGVk
KCktPmxvYWQubG9hZFJlbGF4ZWQoKTsKKyAgICB9CisgICAgCisgICAgLy8gT25seSBjYWxsIHdo
ZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJl
ZXMgdXAgbWVtb3J5IHdpdGhvdXQgY2hhbmdpbmcKKyAgICAvLyB0aGUgY29udGVudHMgb2YgdGhl
IHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygpOwor
ICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFk
IGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZyZWVzIHVwIGFsbCBtZW1vcnkgZXhjZXB0IGZvcgorICAg
IC8vIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBoYXNodGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgY2xlYXIoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RydWN0IFRhYmxlIHsKKyAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgbWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLyAy
OyB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0YWJs
ZS4KKyAgICAgICAgdW5zaWduZWQgbWFzazsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAg
IEF0b21pYzx1bnNpZ25lZD4gbG9hZDsKKyAgICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsxXTsK
KyAgICB9OworICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0cikKKyAgICB7
CisgICAgICAgIHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChwdHIpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHZvaWQqIGNhc3QoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFQpIDw9IHNpemVvZih2b2lkKiksICJ0eXBlIHRvbyBiaWciKTsKKyAgICAgICAgdW5pb24g
eworICAgICAgICAgICAgdm9pZCogcHRyOworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAg
fSB1OworICAgICAgICB1LnB0ciA9IG51bGxwdHI7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHUucHRyOworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zSW1w
bCh2b2lkKiBwdHIpIGNvbnN0CisgICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxl
LmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAg
ICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAg
ICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAg
ICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQuCisgICAgYm9vbCBh
ZGRJbXBsKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUu
bG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAg
ICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAg
ICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3codGFibGUs
IG1hc2ssIHN0YXJ0SW5kZXgsIGluZGV4LCBwdHIpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09
IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbmRleCA9
IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9
IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKTsKKworICAgIHZvaWQgcmVzaXpl
SWZOZWNlc3NhcnkoKTsKKyAgICBib29sIHJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpOworICAgIAor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+LCA0PiBtX2FsbFRhYmxlczsKKyAgICBB
dG9taWM8VGFibGUqPiBtX3RhYmxlOyAvLyBUaGlzIGlzIG5ldmVyIG51bGwuCisgICAgTG9jayBt
X2xvY2s7IC8vIFdlIGp1c3QgdXNlIHRoaXMgdG8gY29udHJvbCByZXNpemUgcmFjZXMuCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYs
IGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3Qg
ZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51
bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5z
IGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3QoY29u
c3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBm
b3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lv
biBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGluZSB2
b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBU
IERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXpl
KCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRh
a2VGaXJzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICB3
aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOwor
ICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6
dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9G
YXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsNyBAQCB1c2luZyBXVEY6
OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5FIGlubGluZQogI2Vu
ZGlmCiAKLSNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAotcHVibGljOiBcCisjZGVm
aW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogICAgIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIHZvaWQqIG9wZXJhdG9yIG5l
d1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgXApAQCAtMjYzLDcgKzI2
MiwxNSBAQCBwdWJsaWM6IFwKICAgICAgICAgQVNTRVJUKGxvY2F0aW9uKTsgXAogICAgICAgICBy
ZXR1cm4gbG9jYXRpb247IFwKICAgICB9IFwKKworI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRCBcCitwdWJsaWM6IFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKIHBy
aXZhdGU6IFwKIHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJU
aGlzTWFjcm8KIAorI2RlZmluZSBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQgXAorICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAordHlwZWRlZiBpbnQgX190aGlzSXNIZXJl
VG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybworCiAjZW5kaWYgLyogV1RGX0Zhc3RNYWxs
b2NfaCAqLwpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3Rm
L0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTYgQEAKICNpbmNsdWRlICJM
b2NrLmgiCiAKICNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaD4KKyNpbmNsdWRl
IDx3dGYvU3RhY2tTaG90UHJvZmlsZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK3N0YXRpYyBj
b25zdGV4cHIgYm9vbCBwcm9maWxlTG9ja0NvbnRlbnRpb24gPSBmYWxzZTsKKwogdm9pZCBMb2Nr
QmFzZTo6bG9ja1Nsb3coKQogeworICAgIGlmIChwcm9maWxlTG9ja0NvbnRlbnRpb24pCisgICAg
ICAgIFNUQUNLX1NIT1RfUFJPRklMRSg0LCAyLCA1KTsKICAgICBEZWZhdWx0TG9ja0FsZ29yaXRo
bTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvTG9ja2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja2VyLmgJKHJldmlzaW9uIDIyNTQwMykK
KysrIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEy
Miw2ICsxMjIsMTIgQEAgTG9ja2VyPExvY2tUeXBlPiBob2xkTG9jayhMb2NrVHlwZSYgbG9jawog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK0xvY2tlcjxMb2NrVHlwZT4gaG9sZExv
Y2tJZihMb2NrVHlwZSYgbG9jaywgYm9vbCBwcmVkaWNhdGUpCit7CisgICAgcmV0dXJuIExvY2tl
cjxMb2NrVHlwZT4ocHJlZGljYXRlID8gJmxvY2sgOiBudWxscHRyKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2NrZXI8TG9ja1R5cGU+IHRyeUhvbGRMb2NrKExvY2tUeXBl
JiBsb2NrKQogewogICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+Ojp0cnlMb2NrKGxvY2spOwpA
QCAtMTM0LDUgKzE0MCw2IEBAIHVzaW5nIFdURjo6TG9ja2VyOwogdXNpbmcgV1RGOjpOb0xvY2tp
bmdOZWNlc3NhcnlUYWc7CiB1c2luZyBXVEY6Ok5vTG9ja2luZ05lY2Vzc2FyeTsKIHVzaW5nIFdU
Rjo6aG9sZExvY2s7Cit1c2luZyBXVEY6OmhvbGRMb2NrSWY7CiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
U2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3Bl
ZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDEzIEBAIHByaXZhdGU6CiAK
IC8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFscmVhZHkgcmVmZXIgdG8gYSBmdW5jdG9yIGJ5IHJl
ZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBsaWZldGltZSBpcwogLy8gZ29vZC4gVGhpcyBqdXN0
IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhhdCBwb2ludHMgdG8geW91ciBmdW5jdG9yLgorLy8K
Ky8vIE5vdGUgdGhhdCB0aGlzIGlzIGFsd2F5cyB3cm9uZzoKKy8vCisvLyBhdXRvIHJlZiA9IHNj
b3BlZExhbWJkYVJlZihbLi4uXSAoLi4uKSB7Li4ufSk7CisvLworLy8gQmVjYXVzZSB0aGUgc2Nv
cGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIgdG8gdGhlIGxhbWJkYSBieSByZWZlcmVuY2UsIGFuZCB0
aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVyIHRoZQorLy8gc2VtaWNvbG9uLiBVc2Ugc2NvcGVkTGFt
YmRhKCkgaW4gdGhhdCBjYXNlLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBl
bmFtZSBGdW5jdG9yPgogU2NvcGVkTGFtYmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0
b3I+IHNjb3BlZExhbWJkYVJlZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewpJbmRleDogU291
cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1No
YXJlZFRhc2suaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFz
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKIC8v
IHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5b3Ug
d2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJlZCBi
ZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNr
PFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUgUGFz
c2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJlZFRh
c2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4u
Lik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5cGU7
CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2soKSB7
IH0KIApJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYv
U3RhY2tTaG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3RhY2tT
aG90IHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3QoKSB7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5M
SU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyAgICB7
CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgICBtX2FycmF5ID0gc3RkOjptYWtlX3Vu
aXF1ZTx2b2lkKltdPihzaXplKTsKKyAgICAgICAgICAgIGludCBpbnRTaXplID0gc2l6ZTsKKyAg
ICAgICAgICAgIFdURkdldEJhY2t0cmFjZShtX2FycmF5LmdldCgpLCAmaW50U2l6ZSk7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGludFNpemUpIDw9IHNp
emUpOworICAgICAgICAgICAgbV9zaXplID0gaW50U2l6ZTsKKyAgICAgICAgICAgIGlmICghbV9z
aXplKQorICAgICAgICAgICAgICAgIG1fYXJyYXkgPSBudWxscHRyOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIFN0YWNrU2hvdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisg
ICAgICAgIDogbV9hcnJheShkZWxldGVkVmFsdWVBcnJheSgpKQorICAgICAgICAsIG1fc2l6ZSgw
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90JiBvcGVyYXRvcj0oY29uc3QgU3Rh
Y2tTaG90JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lkKltdPiBu
ZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4ob3RoZXIubV9zaXplKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG90aGVyLm1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIG5ld0Fy
cmF5W2ldID0gb3RoZXIubV9hcnJheVtpXTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIubV9zaXpl
OworICAgICAgICBtX2FycmF5ID0gV1RGTW92ZShuZXdBcnJheSk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIp
CisgICAgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2b2lkKiog
YXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LmdldCgpOyB9CisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX2FycmF5OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9z
aXplICE9IG90aGVyLm1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3NpemU7IGktLTspIHsKKyAgICAgICAgICAgIGlm
IChtX2FycmF5W2ldICE9IG90aGVyLm1fYXJyYXlbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSBtX3NpemU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9z
aXplOyBpLS07KQorICAgICAgICAgICAgcmVzdWx0IF49IFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1f
YXJyYXlbaV0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fc2l6ZSAmJiBtX2FycmF5LmdldCgpID09IGRlbGV0ZWRWYWx1ZUFycmF5KCk7
CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgU3BlY3RydW08PiBoYXBweS4KKyAgICBib29sIG9w
ZXJhdG9yPihjb25zdCBTdGFja1Nob3QmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAor
cHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCoqIGRlbGV0ZWRWYWx1ZUFycmF5KCkgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PHZvaWQqKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KKyAgICAK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbV9hcnJheTsKKyAgICBzaXplX3QgbV9zaXpl
IHsgMCB9OworfTsKKworc3RydWN0IFN0YWNrU2hvdEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYgc2hvdCkgeyByZXR1cm4gc2hvdC5oYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdGFja1Nob3QmIGEsIGNvbnN0IFN0YWNrU2hvdCYg
YikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0YWNrU2hv
dD4geworICAgIHR5cGVkZWYgU3RhY2tTaG90SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRz
PFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U3RhY2tTaG90PiB7IH07CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9maWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
KyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+CisjaW5j
bHVkZSA8d3RmL1N0YWNrU2hvdC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvV29yZExvY2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNrU2hv
dFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3RQcm9maWxlcih1bnNpZ25lZCBudW1G
cmFtZXMsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCwgdW5zaWduZWQgc3RhY2tzVG9SZXBvcnQpCisg
ICAgICAgIDogbV9udW1GcmFtZXMobnVtRnJhbWVzKQorICAgICAgICAsIG1fZnJhbWVzVG9Ta2lw
KGZyYW1lc1RvU2tpcCkKKyAgICAgICAgLCBtX3N0YWNrc1RvUmVwb3J0KHN0YWNrc1RvUmVwb3J0
KQorICAgIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIlN0YWNrU2hvdFByb2ZpbGVyIiwgW3Ro
aXNdICgpIHsgcnVuKCk7IH0pOworICAgIH0KKworICAgIC8vIE5FVkVSX0lOTElORSBzbyB0aGF0
IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0YWJsZS4KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBwcm9m
aWxlKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAg
ICAgICAgbV9wcm9maWxlLmFkZChTdGFja1Nob3QobV9udW1GcmFtZXMgKyBtX2ZyYW1lc1RvU2tp
cCkpOworICAgICAgICBtX3RvdGFsQ291bnQrKzsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IE5PX1JFVFVSTiB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICBzbGVlcCgxX3MpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworICAgICAgICAgICAgYXV0byBsaXN0ID0gbV9wcm9maWxlLmJ1aWxkTGlzdCgpOworICAg
ICAgICAgICAgZGF0YUxvZygiXG5Ib3R0ZXN0IHN0YWNrcyBpbiAiLCBnZXRDdXJyZW50UHJvY2Vz
c0lEKCksICI6XG4iKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUoKSwg
Y291bnQgPSAwOyBpLS0gJiYgY291bnQgPCBtX3N0YWNrc1RvUmVwb3J0OyBjb3VudCsrKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBsaXN0W2ldOworICAgICAgICAgICAgICAgIGRh
dGFMb2coIlxuVG9wICMiLCBjb3VudCArIDEsICIgc3RhY2s6ICIsIGVudHJ5LmNvdW50ICogMTAw
IC8gbV90b3RhbENvdW50LCAiJVxuIik7CisgICAgICAgICAgICAgICAgU3RhY2tUcmFjZSB0cmFj
ZShlbnRyeS5rZXkuYXJyYXkoKSArIG1fZnJhbWVzVG9Ta2lwLCBlbnRyeS5rZXkuc2l6ZSgpIC0g
bV9mcmFtZXNUb1NraXApOworICAgICAgICAgICAgICAgIGRhdGFMb2codHJhY2UpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBXb3JkTG9jayBtX2xvY2s7CisgICAgU3BlY3RydW08U3RhY2tTaG90LCBkb3VibGU+
IG1fcHJvZmlsZTsKKyAgICBkb3VibGUgbV90b3RhbENvdW50IHsgMCB9OworICAgIHVuc2lnbmVk
IG1fbnVtRnJhbWVzOworICAgIHVuc2lnbmVkIG1fZnJhbWVzVG9Ta2lwOworICAgIHVuc2lnbmVk
IG1fc3RhY2tzVG9SZXBvcnQ7Cit9OworCisjZGVmaW5lIFNUQUNLX1NIT1RfUFJPRklMRShudW1G
cmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tzVG9SZXBvcnQpIGRvIHsgXAorICAgIHN0YXRpYyBT
dGFja1Nob3RQcm9maWxlciogc3RhY2tTaG90UHJvZmlsZXI7IFwKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgc3RhY2tTaG90UHJvZmlsZXJPbmNlRmxhZzsgXAorICAgIHN0ZDo6Y2FsbF9vbmNl
KHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWcsIFtdIHsgc3RhY2tTaG90UHJvZmlsZXIgPSBuZXcg
U3RhY2tTaG90UHJvZmlsZXIobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVwb3J0
KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQcm9maWxlci0+cHJvZmlsZSgpOyBcCit9IHdoaWxlIChm
YWxzZSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIy
NTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM0IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJl
Y2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlzIGNoYW5nZSBpcyBiZXN0IHRlc3RlZCB1
c2luZyBET00tR0MtaW50ZW5zaXZlCisgICAgICAgIGJlbmNobWFya3MgbGlrZSBTcGVlZG9tZXRl
ciBhbmQgRHJvbWFlby4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGFyYWxsZWxpemVzIHRoZSBE
T00ncyBvdXRwdXQgY29uc3RyYWludCwgYW5kIG1ha2VzIHNvbWUgc21hbGwgY2hhbmdlcyB0byBt
YWtlIHRoaXMgbW9yZQorICAgICAgICBzY2FsYWJsZS4KKworICAgICAgICAqIEZvcndhcmRpbmdI
ZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICog
Rm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OkRPTUdDT3V0
cHV0Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6
On5ET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRD
b25zdHJhaW50OjpleGVjdXRlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENv
bnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091
dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGll
bnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjplbnN1cmVFdmVudFRhcmdldERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEpOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2Vy
cyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI1NDAzKQor
KysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICsz
MjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRMb2FkZXIuY3BwCiBiaW5kaW5n
cy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAogYmluZGluZ3MvanMvQ2FsbFRyYWNlci5jcHAK
IGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJh
aW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAogYmluZGluZ3MvanMvR0ND
b250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KKwpJbmRleDogU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91
dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEsMiArMCwwIEBACi0j
cHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WaXNpdGluZ1RpbWVvdXQuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUxLDYgKzM1MSw3IEBACiAJ
CTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzE2NkUxQzg2OUQ4MzAwNEZGMERF
IC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAwNDQzQzNGIC8qIEludGVyc2VjdGlvbk9ic2Vy
dmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxi
YWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlv
bk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2Vy
dmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdD
T3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWlu
dC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVw
ZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjYyNTJGMThERTFC
MTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1MkQxOERFMUIxNTAwQTA3QzA1IC8qIEdlb21l
dHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI4
ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTQ0Niw2ICs1NDQ3
LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyc2Vj
dGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpTRE9NUXVhZEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWRDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJl
ZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUdDT3V0cHV0Q29uc3Ry
YWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTBFMUZEMUM2NjQw
MDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEwMDk3NUZERCAvKiBDU1NQcm9wZXJ0aWVzLmpzb24g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmpz
b247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpzb247IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc4MTYyREY5MTkwMEEz
RjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5ODAsNiArMjI5ODMsOCBAQAogCQkJCTk1MjA3NjAyMUYyNjc1RjkwMDdEMkFBQiAv
KiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJCQkwRjYwRjMyOTFERkJCMTA0MDA0MTZENkMgLyog
Q29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25W
TS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2NjMwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0
cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1
dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUxNkFEMjFGMzUyNTIwMDAzNEI2QkYgLyogRE9NUHJv
bWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdyYXBw
ZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIxRTAwMEQ4MTdFIC8qIERPTVdyYXBw
ZXJXb3JsZC5oICovLApAQCAtMjc1NDcsNiArMjc1NTIsNyBAQAogCQkJCTUxOEY1MDA0MTk0Q0FD
M0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFODBE
QTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWlu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQTdDMUYxODgzMjJGQzAwQzk1NEI1IC8qIEpTR2Vz
dHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgyQjc1MjExOThDQjZCMDBCRkIwMDUg
LyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTREMTRGMEMyNzVD
NjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisKKyNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgorI2luY2x1ZGUgPGhl
YXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQoVk0mIHZt
LCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KCJE
b21vIiwgIkRPTSBPdXRwdXQiLCBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkLCBD
b25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWwpCisgICAgLCBtX3ZtKHZtKQorICAgICwgbV9jbGllbnREYXRhKGNsaWVudERhdGEp
CisgICAgLCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKHZtLmhlYXAubXV0YXRvckV4ZWN1dGlvblZl
cnNpb24oKSkKK3sKK30KKworRE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25z
dHJhaW50KCkKK3sKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIERPTUdDT3V0cHV0Q29uc3Ry
YWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIEhlYXAmIGhlYXAgPSBtX3Zt
LmhlYXA7CisgICAgCisgICAgaWYgKGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSA9PSBt
X2xhc3RFeGVjdXRpb25WZXJzaW9uKQorICAgICAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpTZXF1ZW50aWFsOworICAgIAorICAgIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFw
Lm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV90
YXNrcy5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50RGF0YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWlu
dFNwYWNlKAorICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkgeworICAgICAgICAgICAg
YXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFwQ2VsbCogaGVhcENlbGws
IEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGlj
X2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRh
YmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgdmlzaXRvcik7
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3Rhc2tzLmFwcGVu
ZChzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoZnVuYykpOworICAgICAgICB9
KTsKKyAgICAKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDsKK30K
KyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBs
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoYXV0byYgdGFzayA6IG1fdGFza3Mp
CisgICAgICAgIHRhc2stPnJ1bih2aXNpdG9yKTsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0
cHV0Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7Cisg
ICAgbV90YXNrcy5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWlu
dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0
cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRh
c2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSlNWTUNsaWVudERhdGE7CisKK2NsYXNzIERPTUdDT3V0cHV0Q29uc3RyYWludCA6IHB1
YmxpYyBKU0M6Ok1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBET01HQ091dHB1dENv
bnN0cmFpbnQoSlNDOjpWTSYsIEpTVk1DbGllbnREYXRhJik7CisgICAgfkRPTUdDT3V0cHV0Q29u
c3RyYWludCgpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTQzo6Q29uc3RyYWludFBhcmFsbGVs
aXNtIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRv
UGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBm
aW5pc2hQYXJhbGxlbFdvcmtJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworICAgIEpTVk1DbGllbnREYXRhJiBtX2NsaWVudERh
dGE7CisgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsKKyAgICBWZWN0b3I8UmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4+IG1fdGFza3M7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDE0ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldl
YkNvcmVKU0NsaWVudERhdGEuaCIKIAorI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhlYXAvRmFzdE1hbGxvY0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2Vk
QWxsb2NhdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Zpc2l0
aW5nVGltZW91dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CkBAIC03NCw0MyArNzIsNyBA
QCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQoVk0qCiAgICAgSlNWTUNsaWVu
dERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEoKnZtKTsKICAgICB2bS0+Y2xp
ZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRoaXMgcG9pbnRlci4KICAgICAK
LSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50
PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29uc3RyYWludHMiLAotICAgICAg
ICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9uID0gdm0tPmhlYXAubXV0YXRv
ckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwg
Y29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFw
ID0gdm0tPmhlYXA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoZWFwLm11dGF0b3JF
eGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0RXhlY3V0aW9uVmVyc2lv
biA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKLQotICAgICAgICAgICAgLy8gV2Ug
aGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNvdW50IGhlcmUgb3Vyc2VsdmVzLiBXZSBuZWVkIHRv
IGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKLSAgICAgICAgICAgIC8vIG9wYXF1ZSByb290cyB0aGVu
IHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0aW9uIHlldC4gVGhlIHdheSB3ZSBzaWduYWwgdGhp
cyB0byB0aGUKLSAgICAgICAgICAgIC8vIGNvbnN0cmFpbnQgc29sdmVyIGlzIGJ5IGFkZGluZyB0
byB0aGUgdmlzaXQgY291bnQuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBudW1P
cGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9vdHMoKTsKLQotICAgICAgICAgICAg
Ly8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bVJl
dmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnREYXRhLT5mb3JFYWNoT3V0cHV0Q29uc3Ry
YWludFNwYWNlKAotICAgICAgICAgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8
SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPm1l
dGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2VsbCwgc2xvdFZpc2l0b3Ip
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVJldmlzaXRlZCsrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIoIiwgbnVtUmV2aXNp
dGVkLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90VmlzaXRvci5tZXJnZUlm
TmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRv
VmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBudW1PcGFxdWVSb290c0JlZm9yZSk7
Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQp
OwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoY29uc3RyYWludCkp
OworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6bWFrZV91bmlxdWU8RE9N
R0NPdXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7CiAgICAgICAgIAogICAgIGNs
aWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSgqdm0sIHRy
dWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJCZWZvcmVMb2Fk
RXZlbnQuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCisjaW5jbHVkZSAi
Q29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJDb250ZXh0TWVu
dUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIsNyArMjE2MywxNCBAQCBFdmVudFRhcmdldERhdGEqIE5v
ZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAKIEV2ZW50VGFyZ2V0RGF0YSogTm9kZTo6ZXZlbnRUYXJn
ZXREYXRhQ29uY3VycmVudGx5KCkKIHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZl
bnRUYXJnZXREYXRhTWFwTG9jayk7CisgICAgLy8gTm90IGhvbGRpbmcgdGhlIGxvY2sgd2hlbiB0
aGUgd29ybGQgaXMgc3RvcHBlZCBhY2NlbGVyYXRlcyBwYXJhbGxlbCBjb25zdHJhaW50IHNvbHZp
bmcsIHdoaWNoCisgICAgLy8gY2FsbHMgdGhpcyBmdW5jdGlvbiBmcm9tIG1hbnkgdGhyZWFkcy4g
UGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nIGNhbiBoYXBwZW4gd2l0aCB0aGUgd29ybGQKKyAg
ICAvLyBydW5uaW5nIG9yIHN0b3BwZWQsIGJ1dCBpZiB3ZSBkbyBpdCB3aXRoIGEgcnVubmluZyB3
b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5IG1peGluZyBjb25zdHJhaW50CisgICAgLy8gc29sdmlu
ZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJlZm9yZSwgdGhlIG1vc3QgbGlrZWx5IHRpbWUgZm9yIGNv
bnRlbnRpb24gb24gdGhpcyBsb2NrIGlzIHdoZW4gdGhlCisgICAgLy8gd29ybGQgaXMgc3RvcHBl
ZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0b3Bw
ZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdvcmxkCisgICAgLy8gbWVhbnMgdGhhdCB3ZSB3aWxsIG5l
dmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFyZ2V0IGRhdGEgbWFwLgorICAgIEpTQzo6Vk0qIHZtID0g
Y29tbW9uVk1Pck51bGwoKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYoc19ldmVudFRh
cmdldERhdGFNYXBMb2NrLCB2bSAmJiB2bS0+aGVhcC53b3JsZElzUnVubmluZygpKTsKICAgICBy
ZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRhKCkgPyBldmVudFRhcmdldERhdGFNYXAoKS5nZXQodGhp
cykgOiBudWxscHRyOwogfQogCkBAIC0yMTcxLDYgKzIxNzksOSBAQCBFdmVudFRhcmdldERhdGEm
IE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAgICAgaWYgKGhhc0V2ZW50VGFyZ2V0RGF0YSgpKQog
ICAgICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmdldCh0aGlzKTsKIAorICAgIEpT
Qzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwg
dm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CisKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAgc2V0SGFzRXZlbnRUYXJnZXREYXRhKHRy
dWUpOwogICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFwKCkuYWRkKHRoaXMsIHN0ZDo6bWFr
ZV91bmlxdWU8RXZlbnRUYXJnZXREYXRhPigpKS5pdGVyYXRvci0+dmFsdWU7CkBAIC0yMTc4LDYg
KzIxODksOCBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAKIHZv
aWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogeworICAgIEpTQzo6Vk0qIHZtID0gY29t
bW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJ
c1J1bm5pbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0
YU1hcExvY2spOwogICAgIGV2ZW50VGFyZ2V0RGF0YU1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIyNTQwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAqIFNjcmlwdHMv
cnVuLWpzYy1iZW5jaG1hcmtzOiBBZGQgc3BsYXktbGF0ZW5jeSB0ZXN0LCBzaW5jZSB0aGlzIGNo
YW5nZSBuZWVkZWQgdG8gYmUgY2FyZWZ1bGx5IHZhbGlkYXRlZCB3aXRoIHRoYXQgYmVuY2htYXJr
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOiBB
ZGRlZC4gVGhpcyBoYXMgdW5pdCB0ZXN0cyBvZiB0aGUgbmV3IGNvbmN1cnJlbnQgZGF0YSBzdHJ1
Y3R1cmUuIFRoZSB0ZXN0cyBmb2N1cyBvbiBjb3JyZWN0bmVzcyB1bmRlciBzZXJpYWwgZXhlY3V0
aW9uLCB3aGljaCBhcHBlYXJzIHRvIGJlIGVub3VnaCBmb3Igbm93IChpdCdzIHNvIGVhc3kgdG8g
Y2F0Y2ggYSBjb25jdXJyZW5jeSBidWcgYnkganVzdCBydW5uaW5nIHRoZSBHQykuCisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0xMi0wMSAgQWxpY2lhIEJveWEgR2FyY8Ot
YSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIFNhbXBsZU1hcC5jcHAg
QVBJIHRlc3RzIHRvIENNYWtlCkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJr
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwkocmV2aXNp
b24gMjI1NDAzKQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDggQEAgTE9OR1NQSURFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNU
U19QQVRIIAogVjhfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTdW5TcGlkZXIiICsg
InRlc3RzIiArICJ2OC12NiIKIFRBSUxCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRI
ICsgIlRhaWxCZW5jaDkwMDAiCiBNSUNST0JFTkNITUFSS1NfUEFUSCA9IE9QRU5TT1VSQ0VfUEFU
SCArICJKU1Rlc3RzIiArICJtaWNyb2JlbmNobWFya3MiCi1PQ1RBTkVfV1JBUFBFUl9QQVRIID0g
UEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIgKyAid3JhcHBlcnMiCitPUEVOU09VUkNF
X09DVEFORV9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIKK09DVEFORV9X
UkFQUEVSX1BBVEggPSBPUEVOU09VUkNFX09DVEFORV9QQVRIICsgIndyYXBwZXJzIgogSlNCRU5D
SF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIkpTQmVuY2giCiBTSVhTUEVFRF9QQVRI
ID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ0ZXN0cyIKIFNJWFNQRUVE
X1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAid3Jh
cHBlcnMiCkBAIC04NDEsNiArODQyLDIwIEBAIGNsYXNzIFNpbmdsZUZpbGVUaW1lZEJlbmNobWFy
a1BhcmFtZXRlcnMKICAgZW5kCiBlbmQKIAorIyBCZW5jaG1hcmsgdGhhdCBjb25zaXN0cyBvZiBh
IHNpbmdsZSBmaWxlIGFuZCBtdXN0IGJlIGxvYWRlZCBpbiBpdHMgb3duIGdsb2JhbCBvYmplY3Qg
ZWFjaAorIyB0aW1lIChpLmUuIHJ1bigpKSwgYnV0IHJldHVybnMgaXRzIHJlc3VsdCBpbiBhIGN1
c3RvbSB3YXkuCitjbGFzcyBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJz
CisgIGF0dHJfcmVhZGVyIDpiZW5jaFBhdGgKKyAgCisgIGRlZiBpbml0aWFsaXplKGJlbmNoUGF0
aCkKKyAgICBAYmVuY2hQYXRoID0gYmVuY2hQYXRoCisgIGVuZAorICAKKyAgZGVmIGtpbmQKKyAg
ICA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgIGVuZAorZW5kCisKICMgQmVuY2ht
YXJrIHRoYXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgZGF0YSBmaWxlcyB0aGF0IHNob3VsZCBi
ZSBsb2FkZWQgZ2xvYmFsbHksIGZvbGxvd2VkCiAjIGJ5IGEgY29tbWFuZCB0byBydW4gdGhlIGJl
bmNobWFyay4KIGNsYXNzIE11bHRpRmlsZVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycwpAQCAtOTY1
LDYgKzk4MCwyNSBAQCBkZWYgZW1pdEJlbmNoUnVuQ29kZUZpbGUobmFtZSwgcGxhbiwgYmVuCiAg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgaWYgKF9fYmVuY2hlcl9pbmRleCA+
PSAje3dhcm11cH0pIHByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTogI3twbGFuLml0ZXJhdGlv
bn06IFwiICsgKF9fYmVuY2hlcl9pbmRleCAtICN7d2FybXVwfSkgKyBcIjogVGltZTogXCIrKChf
X2FmdGVyLV9fYmVmb3JlKS9fX3J1bnMpKTsiKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIs
ZmlsZSwifSIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIje2JlbmNoUGFyYW1z
LnRlYXJEb3duQ29tbWFuZC5qc30iKQorICAgICAgZWxzaWYgYmVuY2hQYXJhbXMua2luZCA9PSA6
c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKKyAgICAg
ICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHZhciBfX2JlbmNoZXJfcmVzdWx0ID0ge3Zh
bHVlOiBudWxsfTsiKQorICAgICAgICAkcmVydW4udGltZXMgeworICAgICAgICAgIGRvdWJsZVB1
dHMoJHN0ZGVycixmaWxlLCIgICBydW4oX19iZW5jaGVyX3doYXQsIF9fYmVuY2hlcl9yZXN1bHQp
OyIpCisgICAgICAgIH0KKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIGlmIChf
X2JlbmNoZXJfcmVzdWx0LnZhbHVlID09IG51bGwpIikKKyAgICAgICAgZG91YmxlUHV0cygkc3Rk
ZXJyLGZpbGUsIiAgICAgIHRocm93IG5ldyBFcnJvcihcIk51bGwgcmVzdWx0XCIpOyIpCisgICAg
ICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICByZXR1cm4gX19iZW5jaGVyX3Jlc3VsdC52
YWx1ZTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCisgICAgICAgICR3
YXJtdXAudGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJfX2JlbmNo
ZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSIpCisgICAgICAgICAgZG91
YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3Vy
ZUdDCisgICAgICAgIH0KKyAgICAgICAgJGlubmVyLnRpbWVzIHsKKyAgICAgICAgICB8IGlubmVy
SW5kZXggfAorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJwcmludChcIiN7bmFt
ZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiAje2lubmVySW5kZXh9OiBUaW1lOiBc
IitfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSk7IikKKyAg
ICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1bmxlc3MgcGxhbi52bS5z
aG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQogICAgICAgZWxzZQogICAgICAgICByYWlzZSB1bmxl
c3MgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZVRpbWVkQmVuY2htYXJrCiAgICAgICAg
IGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hl
cl93aGF0KSB7IikKQEAgLTE1OTQsNiArMTYyOCwxOSBAQCBjbGFzcyBPY3RhbmVCZW5jaG1hcmsK
ICAgZW5kCiBlbmQKIAorY2xhc3MgQ3VzdG9tVGltZWRCZW5jaG1hcmsKKyAgaW5jbHVkZSBCZW5j
aG1hcmsKKyAgCisgIGRlZiBpbml0aWFsaXplKG5hbWUsIGZ1bGxQYXRoKQorICAgIEBuYW1lID0g
bmFtZQorICAgIEBmdWxsUGF0aCA9IGZ1bGxQYXRoCisgIGVuZAorICAKKyAgZGVmIGVtaXRSdW5D
b2RlKHBsYW4pCisgICAgZW1pdEJlbmNoUnVuQ29kZShmdWxsbmFtZSwgcGxhbiwgU2luZ2xlRmls
ZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycy5uZXcoZW5zdXJlRmlsZSgiQ3VzdG9tVGlt
ZWQtI3tAbmFtZX0iLCBAZnVsbFBhdGgpKSkKKyAgZW5kCitlbmQKKwogY2xhc3MgS3Jha2VuQmVu
Y2htYXJrCiAgIGluY2x1ZGUgQmVuY2htYXJrCiAgIApAQCAtMzAxMCw2ICszMDU3LDcgQEAgYmVn
aW4KICAgICB8IGFyZ3MgfAogICAgIE9DVEFORS5hZGQgT2N0YW5lQmVuY2htYXJrLm5ldygqYXJn
cykKICAgfQorICBPQ1RBTkUuYWRkIEN1c3RvbVRpbWVkQmVuY2htYXJrLm5ldygic3BsYXktbGF0
ZW5jeSIsIChPUEVOU09VUkNFX09DVEFORV9QQVRIICsgInNwbGF5LmpzIikudG9fcykKIAogICBL
UkFLRU4gPSBCZW5jaG1hcmtTdWl0ZS5uZXcoIktyYWtlbiIsIDphcml0aG1ldGljTWVhbiwgLTEp
CiAgIFsiYWktYXN0YXIiLCAiYXVkaW8tYmVhdC1kZXRlY3Rpb24iLCAiYXVkaW8tZGZ0IiwgImF1
ZGlvLWZmdCIsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIy
NTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTkzLDYgKzkzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElf
RElSfS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcAorICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKICAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL0RhdGVNYXRoLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAJ
CTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQy
M0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMTM5
RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAw
RjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMkMyMEI4MURD
RDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNwcCAqLzsg
fTsKKwkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjVC
MUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBG
M0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCOTRBNTFB
NzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovOyB9Owog
CQkwRjRGRkE5RTFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGRkE5
RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gKi87IH07
CiAJCTBGNTY1MUY3MUZDRTREREMwMDMxMEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFn
bWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTY1MUY2MUZDRTREREIwMDMxMEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5t
bSAqLzsgfTsKQEAgLTEwNzIsNiArMTA3Myw3IEBACiAJCTBGMTM5RTc1MUE0MjNBNTMwMEY1OTBG
NSAvKiBXZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFdlYWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2EvV2Vha09iakNQdHIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVBRjZDNEQwMDdBQjc1MyAvKiBXZWJDb3Jl
U3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcxRENENTQ0ODAwNTQyRDlFIC8qIFRpbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdFdmFs
dWF0ZUphdmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEZGQTlE
MUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNuYXBzaG90VmlhUmVuZGVySW5Db250
ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGRkFBMDFFRDNEMERFMDBG
NzExMUYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEltYWdlSU8uZnJh
bWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29y
azsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0yNTkzLDYgKzI1OTUsNyBAQAogCQkJCTI2
RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNTdHJpbmcuY3BwICovLAogCQkJCUU0MDAx
OTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgKi8sCiAJCQkJQTdBOTY2REEx
NDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCisJ
CQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAq
LywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0aW9uLmNwcCAqLywKIAkJ
CQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRUYXNrLmNwcCAqLywKIAkJ
CQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAgKi8sCkBAIC0zMTc5LDYg
KzMxODIsNyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMwMEZFQkNGMyAvKiBNZXRhQWxsb2NhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUZFMUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtl
ZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4QzM2MDBBOTdBQTcgLyog
TmV2ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMENCNUMxRkNFMTc5NjAw
NEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
ODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQ
dHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RG
OworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25hbWVzcGFjZSB7CisKKy8vIGBjb21t
YW5kc2AgaXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlzIHRoaW5nIHdoYXQgdG8gZG8uIEl0IGhh
cyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisvLyBUaGUgY2hhcmFjdGVy
IHBhaXJzIGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6CisvLworLy8gK3ggICAgIEFkZHMgJ3gnIHRv
IHRoZSBzZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBhbmQgYXNzZXJ0cyB0aGF0IGl0J3MgbmV3
LgorLy8gIXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgYW5kIGFzc2VydHMgdGhhdCBpdCB3YXMg
dGhlcmUgYWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIGluIHRoZSBzZXQK
Ky8vIC14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5vdCBpbiB0aGUgc2V0Cit2b2lkIGRvVGVz
dChjb25zdCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBDb25jdXJyZW50UHRySGFzaFNldCBzZXQ7
CisgICAgZm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0gY29tbWFuZHM7IGNvbW1hbmRbMF0gJiYg
Y29tbWFuZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb21tYW5kWzFdKSk7CisgICAgICAg
IHN3aXRjaCAoY29tbWFuZFswXSkgeworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHNldC5hZGQocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnISc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmFkZChwdHIpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNl
dC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoK
KyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0
LCBFbXB0eSkKK3sKKyAgICBkb1Rlc3QoIiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRy
SGFzaFNldCwgQWRkT25lRWxlbWVudCkKK3sKKyAgICBkb1Rlc3QoIit4PXgteS0wIik7Cit9CisK
K1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50TXVsdGlwbGVUaW1l
cykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4IXgheCF4IXg9eC15LTAiKTsKK30KKwor
VEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnRNYW55VGltZXMpCit7
CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgteS0wIXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQs
IEFkZExvdHNPZkVsZW1lbnRzKQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzAr
cSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6K3grYyt2K2IrbittK1ErVytF
K1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9
Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1i
PW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0t
LiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVu
dHNNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZSty
K3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraytsK3oreCtjK3YrYituK20rUStXK0UrUitUK1kr
VStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05
PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9
Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uITEhMiEz
ITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXgh
YyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFC
IU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWgh
aiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFM
IVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEh
cyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFG
IUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkh
dSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFP
IVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEh
dyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFS
IVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYh
NyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFu
IW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEh
MiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6
IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMh
ViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFn
IWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUoh
SyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFw
IWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMh
RCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQ
dHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c0FuZFF1ZXJ5U29tZUJlZm9yZUFkZGluZ1RoZVJl
c3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2kr
bytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1v
PXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1SLVQtWS1VLUktTy1QLUEt
Uy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZ
K1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9
OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1R
PVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOwor
fQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkU29tZUVsZW1lbnRzTXVsdGlw
bGVUaW1lc1RoZW5BZGRUaGVSZXN0QW5kUXVlcnlTb21lQmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sK
KyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCExITIhMyE0ITUhNiE3
ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUh
NiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0
ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCt5K3Ur
aStvK3ArYStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1p
PW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWItbi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAt
QS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTStsK3oreCtjK3YrYituK20rUStXK0UrUitU
K1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9
OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16PXg9Yz12PWI9bj1t
PVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>
<flag name="commit-queue"
          id="347431"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328258</attachid>
            <date>2017-12-02 15:14:22 -0800</date>
            <delta_ts>2017-12-02 16:44:43 -0800</delta_ts>
            <desc>I think I fixed the crash bug</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>272922</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIFRoaXMgbG9va3MgbGlrZSBhIDElIFNwZWVkb21ldGVy
CisgICAgICAgIHNwZWVkLXVwLgorICAgICAgICAKKyAgICAgICAgVGhlIGNvbnN0cmFpbnQgc29s
dmVyIHN1cHBvcnRzIHJ1bm5pbmcgY29uc3RyYWludHMgaW4gcGFyYWxsZWwgaW4gdHdvIGRpZmZl
cmVudCB3YXlzOgorICAgICAgICAKKyAgICAgICAgLSBSdW4gbXVsdGlwbGUgY29uc3RyYWludHMg
aW4gcGFyYWxsZWwgdG8gZWFjaCBvdGhlci4gVGhpcyBvbmx5IHdvcmtzIGZvciBjb25zdHJhaW50
cyB0aGF0IGNhbgorICAgICAgICAgIHRvbGVyYXRlIG90aGVyIGNvbnN0cmFpbnRzIHJ1bm5pbmcg
Y29uY3VycmVudGx5IHRvIHRoZW0gKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PQorICAgICAg
ICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCkuIFRoaXMgaXMgdGhlIG1vc3Qg
YmFzaWMga2luZCBvZiBwYXJhbGxlbGlzbSB0aGF0IHRoZQorICAgICAgICAgIGNvbnN0cmFpbnQg
c29sdmVyIHN1cHBvcnRzLiBBbGwgY29uc3RyYWludHMgZXhjZXB0IHRoZSBKU0MgU1BJIGNvbnN0
cmFpbnRzIGFyZSBjb25jdXJyZW50LiBXZQorICAgICAgICAgIGNvdWxkIHByb2JhYmx5IG1ha2Ug
dGhlbSBjb25jdXJyZW50LCBidXQgSSdtIHBsYXlpbmcgaXQgc2FmZSBmb3Igbm93LgorICAgICAg
ICAKKyAgICAgICAgLSBBIGNvbnN0cmFpbnQgY2FuIGNyZWF0ZSBwYXJhbGxlbCB3b3JrIGZvciBp
dHNlbGYsIHdoaWNoIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGludGVybGVhdmUKKyAgICAg
ICAgICB3aXRoIG90aGVyIHN0dWZmLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9ydCB0aGF0IGl0IGhh
cyBwYXJhbGxlbCB3b3JrIGJ5IHJldHVybmluZworICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlvbi4gVGhlbiB0aGUg
c29sdmVyIHdpbGwgYWxsb3cgdGhhdAorICAgICAgICAgIGNvbnN0cmFpbnQncyBkb1BhcmFsbGVs
V29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJrZXIgdGhyZWFkcyBh
cyBhcmUgYXZhaWxhYmxlLAorICAgICAgICAgIGZvciBhcyBsb25nIGFzIHRoYXQgZnVuY3Rpb24g
d2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9zc2libGUgdG8gaGF2
ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBhcmFsbGVsIHdvcmsu
CisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVtZW50ZWQgaW4gdGVy
bXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1cm5zIG91dCB0byBi
ZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAgICAgICAKKyAgICAg
ICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEgU2xvdFZpc2l0b3Iu
IFJ1bm5pbmcgb24gdGhlIG1hcmtlciB0aHJlYWRzIG1lYW5zIGhhdmluZworICAgICAgICAgIGFj
Y2VzcyB0byB0aG9zZSB0aHJlYWRzJyBTbG90VmlzaXRvcnMuIEFsc28sIGl0IG1lYW5zIGxlc3Mg
bG9hZCBiYWxhbmNpbmcuIFRoZSBzb2x2ZXIgd2lsbAorICAgICAgICAgIGNyZWF0ZSB3b3JrIG9u
IGVhY2ggbWFya2luZyB0aHJlYWQncyBTbG90VmlzaXRvci4gV2hlbiB0aGUgc29sdmVyIGlzIGRv
bmUgInN0ZWFsaW5nIiBhIG1hcmtlcgorICAgICAgICAgIHRocmVhZCwgdGhhdCB0aHJlYWQgd2ls
bCBoYXZlIHdvcmsgaXQgY2FuIHN0YXJ0IGRvaW5nIGltbWVkaWF0ZWx5LiBCZWZvcmUgdGhpcyBj
aGFuZ2UsIHdlIGhhZCB0bworICAgICAgICAgIGNvbnRyaWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkg
dGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9iYWwgd29ya2xpc3Qgc28gdGhhdCBpdCBj
b3VsZCBiZQorICAgICAgICAgIGRpc3RyaWJ1dGVkIHRvIHRoZSBtYXJrZXIgdGhyZWFkcyBieSBs
b2FkIGJhbGFuY2luZy4gVGhpcyBjaGFuZ2UgcHJvYmFibHkgaGVscHMgdG8gYXZvaWQgdGhhdAor
ICAgICAgICAgIGxvYWQgYmFsYW5jaW5nIHN0ZXAuCisgICAgICAgIAorICAgICAgICBBIGxvdCBv
ZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcgaXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEg
c3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcworICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0
IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFibGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0
cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQg
Y29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2VkIGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRo
aXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVs
IGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxsb2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMu
CisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJhbGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBv
dXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAg
ICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5l
eHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4uIGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20g
dGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9uZQorICAgICAgICB3aGVuIGl0IHJldHVybnMg
YSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3
YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAgICBkb25lIGlzIGluZGljYXRlZCBieSBudWxs
KS4KKyAgICAgICAgCisgICAgICAgIERldGFpbGVkIGFuYWx5c2lzIG9mIHRoZSBwZXJmb3JtYW5j
ZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBpbmRpY2F0ZSBhIGRlZmluaXRlIDElIFNwZWVkb21l
dGVyCisgICAgICAgIHByb2dyZXNzaW9uIGFuZCBubyBjaGFuZ2Ugb24gSmV0U3RyZWFtLiBJIGhh
dmUgZG9uZSB0aGUgU3BlZWRvbWV0ZXIgY29tcGFyaXNvbiBtYW55IHRpbWVzIG5vdyBhbmQKKyAg
ICAgICAgdGhlIHByb2dyZXNzaW9uIGlzIG5vdyBlYXNpbHkgcmVwcm9kdWNpYmxlIG9uIG15IG1h
Y2hpbmUuIEl0IHN0YXJ0ZWQgaW5pdGlhbGx5IGFzIGFuIHVucmVsaWFibGUKKyAgICAgICAgfjAu
NSUgc3BlZWQtdXAgb24gU3BlZWRvbWV0ZXIgYW5kIGEgcmVsaWFibGUgfjAuNSUgcmVncmVzc2lv
biBvbiBKZXRTdHJlYW0uIEFmdGVyIGZpeGluZyBsb3RzIG9mCisgICAgICAgIGJ1Z3MgaW4gdGhl
IGxvYWQgYmFsYW5jZXIgYW5kIHNvbWUgcmVhbGx5IGZ1bm55IHBhdGhvbG9naWVzLCB0aGUgSmV0
U3RyZWFtIHNjb3JlIGJlY2FtZSBuZXV0cmFsCisgICAgICAgIGFuZCB0aGUgU3BlZWRvbWV0ZXIg
c2NvcmUgZ290IGV2ZW4gYmV0dGVyLiAoV2VpcmRlc3QgcGF0aG9sb2d5IHRoYXQgSSBmaXhlZDog
aWYgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBzY2FuIGNvbnN0cmFpbnQgaXMgcnVuIGJ5IHNv
bWUgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIGFuZCB0aGUgbXV0YXRvciBoYXMgdGhl
IGNvbm4gW3NvCisgICAgICAgIHRoZSBtYWluIHRocmVhZCdzIHRvcCBmcmFtZXMgYXJlIHRoZSBH
QyBpdHNlbGZdIHRoZW4gd2Ugd2lsbCBzY2FuIHRoZSBtYWluIHRocmVhZCB0d2ljZSAtIG9uY2UK
KyAgICAgICAgdXNpbmcgQ3VycmVudFRocmVhZFN0YXRlIFt3aGljaCBjYXJlZnVsbHkgYXZvaWRz
IHNjYW5uaW5nIHRoZSBHQydzIHN0YWNrIGZyYW1lc10gYW5kIG9uY2UgYXMgaWYgaXQKKyAgICAg
ICAgd2FzIGEgcmFuZG9tIG5hdGl2ZSB0aHJlYWQgW3doaWNoIHdpbGwgc2NhbiB0aGUgR0MncyBm
cmFtZXNdOyB0aGUgbGF0dGVyIHNjYW4gd291bGQgcGljayB1cAorICAgICAgICBvYmplY3RzIHRo
YXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGhhZCBjb25zaWRlcmVkIGJ1dCByZWplY3RlZCwgd2hp
Y2ggd291bGQgc29tZXRpbWVzIGxlYWQgdG8KKyAgICAgICAgcnVuYXdheSBHQ3MuIEkgZml4ZWQg
dGhpcyBieSB0ZWFjaGluZyB0aGUgY29uc2VydmF0aXZlIHNjYW4gbm90IHRvIHNjYW4gdGhlIHRo
cmVhZCBydW5uaW5nIEdDCisgICAgICAgIHVzaW5nIHRoZSByYW5kb20gbmF0aXZlIHRocmVhZCBz
Y2FubmluZyBhbGdvcml0aG0uKQorCisgICAgICAgICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQp
OgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVl
VG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3Qu
Y3BwOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlKToKKyAgICAgICAgKiBoZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkZpeHBvaW50UGhhc2UpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
cmVzdW1lVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9y
RWFjaFNsb3RWaXNpdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d29ybGRJc1J1bm5pbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpydW5GdW5jdGlvbkluUGFyYWxsZWwpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6d29ybGRJc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxs
b2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkKToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oOgorICAgICAgICAoSlNDOjps
b2NrRHVyaW5nTWFya2luZyk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJj
ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFwL01h
cmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFyayk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAg
ICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2
ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNCZWdp
bik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpuZXdBY3RpdmVXZWFrU2V0c0VuZCk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1
aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtF
c3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwp
OgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnQ6Omxhc3RFeGVjdXRlUGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6cGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OkV4ZWN1dGlvbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkVmlzaXRT
b21ldGhpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6c2hvdWxkVGltZU91dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkcmFp
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpkaWRFeGVjdXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUpOiBEZWxldGVkLgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
Lmg6CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVy
Z2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9u
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1
dGUpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDogQWRkZWQuCisg
ICAgICAgICogaGVhcC9PcGFxdWVSb290U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9Q
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBhcmFsbGVsU291
cmNlQWRhcHRlcjo6UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50
OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdD
b25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpT
aW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9E
YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZy
b21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBhcmFsbGVsUGFz
c2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZUlmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVl
Um9vdHNJZlByb2ZpdGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VPcGFxdWVSb290cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9T
dWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNv
dXJjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxv
Y2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1
YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL1Zpc2l0Q291bnRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpW
aXNpdENvdW50ZXI6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAqIGhlYXAvVmlzaXRpbmdU
aW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9XZWFrQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKToKKwogMjAxNy0xMS0zMCAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBV
c2UgSlNGaXhlZEFycmF5IGZvciBvcF9uZXdfYXJyYXlfYnVmZmVyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMCwxMyArNTAwLDE2IEBAIGhlYXAv
SklUU3R1YlJvdXRpbmVTZXQuY3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCitoZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCiBoZWFwL01hcmtl
ZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAoraGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0yOTEsNiArMjkwLDcgQEAKIAkJ
MEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8q
IEFpck9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNDBFNEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzM0MUM0
NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBOTFDNDk3Rjc0MDBBNTc3RkEg
LyogQWlyT3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDE1NDVC
MUZEMjBCMjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDE1NDVBMUZEMjBCMUYwMDFCNThG
NiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAx
MzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTMxMiw2ICszMTIsOSBAQAogCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyog
U3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYy
MDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07CisJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAq
LzsgfTsKKwkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhD
NzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEQ4Qzc4MUZDQTNDRkEw
MDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlv
dXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi87IH07
CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTQsNiArMzU3LDcgQEAKIAkJMEY2
Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8q
IEFycmF5UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
OyB9OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IH07CisJCTBGNjQ1MzE4MUZEMjQ2QTcwMDI0
MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NDUzMTUxRkQyNDZBMDAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi87IH07CiAJCTBGNjRCMjcyMUE3ODRCQUYwMDZF
NEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY0QjI3
QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIg
LyogQWlyQXJnSW5saW5lcy5oICovOyB9OwpAQCAtNDQ2LDYgKzQ1MCw4IEBACiAJCTBGOUQzNjk1
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBE
RkdDbGVhblVwUGhhc2UuaCAqLzsgfTsKIAkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovOyB9OwogCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuaCAqLzsgfTsKKwkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAq
LzsgfTsKKwkJMEY5REFBMEExRkQxQzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFB
MDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovOyB9OwogCQkw
RjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyB9
OwogCQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgfTsKIAkJMEY5RkM4QzUx
NEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0OTks
NyArMTUwNSw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1NEQ1
MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVCRjcz
OCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5NzAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21O
YW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFFMDhG
MURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlu
a0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclBy
b3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xOTgxLDcgKzE5ODYsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIw
MEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUx
NzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxh
bklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5l
cy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjM0LDYgKzIyMzgsNyBAQAogCQkwRjNCRDFC
NjFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZH
SW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzFGMTgx
Qjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgcGF0aCA9
IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBw
YXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDE1NDVBMUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludENvbmN1cnJlbmN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
bHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI3MCw2ICsyMjc1LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAv
KiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJT
YW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5E
dW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5NzMwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzczMUZD
N0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1
NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRE
NzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDEsNiArMjM1MCw4IEBACiAJCTBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJyYXlNb2RlLmNw
cDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0Fy
cmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY0NTMxNTFGRDI0NkEw
MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlTd2l0Y2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRj
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwMyw2ICsyNTE0
LDkgQEAKIAkJMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQuaDsg
cGF0aCA9IGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5jcHA7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBGMUMzRTJD
NzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgcGF0
aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURB
QTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
cmFsbGVsU291cmNlQWRhcHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlF
MzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00MjY3LDcgKzQyODEsNiBAQAogCQlBREQwOUFGMzFGNjI0ODJF
MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAv
KiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5MzFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NDFFMDhGMUM5MDA1
OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmg7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk1MUUw
OEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0
b3IuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MTcsNiArNTUzMCw4IEBACiAJCQkJMEZEQ0UxMjgx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEy
RUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYy
MTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNDE1NDVB
MUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLywKKwkJCQkwRjRE
OEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJ
MEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJ
CQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2
RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjExLDE3ICs1NjI2LDIz
IEBACiAJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
Ki8sCiAJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcCAqLywKIAkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnRTZXQuaCAqLywKKwkJCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwICovLAorCQkJCTBGOURBQTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJr
U3RhY2suaCAqLywKKwkJCQkwRjY0NTMxNjFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAvKiBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3
QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJG
RCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oICovLAorCQkJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLywKIAkJCQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyog
UHJldmVudENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIw
OCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8q
IFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4
MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYw
MDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMy
QiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTU2NDMsNyArNTY2NCw3IEBACiAJCQkJ
MEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxv
b21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRp
b25hbEZpbmFsaXplci5oICovLAotCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNp
dGluZ1RpbWVvdXQuaCAqLywKKwkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgw
MDAsNiArODAyMSw3IEBACiAJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNp
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUNGOTg5MUU5RUQ2NTIwMEMxODY5MiAvKiBBaXJT
dGFja0FsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDE1NDVCMUZEMjBC
MjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MjAwLDYgKzgyMjIsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcw
MDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEz
QkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIz
RUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJy
aWVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q2FsbERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODI5Myw2ICs4MzE2LDcgQEAKIAkJCQlBNzdB
NDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY0NTMxODFGRDI0
NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg3NjgsNiArODc5Miw3IEBACiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8q
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtODkxNiw2ICs4OTQxLDcgQEAKIAkJCQlBNzQ4MkU5MzEx
NkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQz
MkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVD
NjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4
NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVy
cyAqLywKQEAgLTkwMzUsOSArOTA2MSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZG
IC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNB
M0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVS
b290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyog
T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0Myw2ICs5MjY5LDcgQEAK
IAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEExRkQxQzNE
MzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjgzLDcgKzkzMTAsNiBAQAogCQkJCTBGNkM3MzUxMUFD
OUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGlt
ZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYw
IC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyog
Vk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Miw3ICs5NzIsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRX
ZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQg
PSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAg
IGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNo
b3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGlj
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAogCiBib29sIENvZGVCbG9jazo6c2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewotICAg
IGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTExMzks
MTAgKzExMzksMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwog
I2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRp
b24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4g
JiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJh
bnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwpAQCAt
MTI0NiwxNCArMTI0NiwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5j
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8
Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGFs
bEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29t
bW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVS
ZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChk
ZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewogICAgICAgICAg
ICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3Bs
YW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93biBy
aWdodFRvUnVuLgotICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcGVk
IGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJlYWQo
Jm1fZGF0YSk7CiAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxlZCkg
ewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAu
d29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3Rv
cHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBs
YW5zLmFwcGVuZChtX3BsYW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFwLndv
cmxkSXNTdG9wcGVkKCkpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3BsYW5Db21waWxlZC5u
b3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAo
c2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgu
bV92bS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwogICAgIAogICAgIGlmIChzdGF0ZS5hbGxvY2F0
aW9uRmFpbGVkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDEyICs2NiwxMiBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+Ci1pbmxpbmUgdm9pZCBDb25zZXJ2YXRp
dmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIodm9pZCogcCwgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKK2lubGlu
ZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgbWFy
a0hvb2subWFyayhwKTsKIAogICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2ludGVyc0Zvck1h
cmtpbmcoCi0gICAgICAgIG1faGVhcCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwgcCwKKyAgICAg
ICAgbV9oZWFwLCBtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBmaWx0ZXIs
IHAsCiAgICAgICAgIFsmXSAodm9pZCogcCkgewogICAgICAgICAgICAgaWYgKG1fc2l6ZSA9PSBt
X2NhcGFjaXR5KQogICAgICAgICAgICAgICAgIGdyb3coKTsKQEAgLTk1LDggKzk1LDkgQEAgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogCiAgICAgVGlueUJsb29tRmls
dGVyIGZpbHRlciA9IG1faGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigpOyAvLyBN
YWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8gc2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3Qg
YWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxsb2NhdGVkLgogICAgIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uID0gbV9oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKTsKKyAg
ICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBtX2hlYXAub2JqZWN0U3BhY2Uo
KS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICBmb3IgKGNoYXIqKiBpdCA9IHN0YXRpY19j
YXN0PGNoYXIqKj4oYmVnaW4pOyBpdCAhPSBzdGF0aWNfY2FzdDxjaGFyKio+KGVuZCk7ICsraXQp
Ci0gICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwg
bWFya0hvb2spOworICAgICAgICBnZW5lcmljQWRkUG9pbnRlcigqaXQsIG1hcmtpbmdWZXJzaW9u
LCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGZpbHRlciwgbWFya0hvb2spOwogfQogCiBjbGFzcyBE
dW1teU1hcmtIb29rIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+Ci0gICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgSGVhcFZlcnNpb24s
IFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKKyAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVy
KHZvaWQqLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29rJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXJrSG9vaz4KICAgICB2b2lkIGdlbmVyaWNBZGRTcGFuKHZvaWQqLCB2b2lk
KiBlbmQsIE1hcmtIb29rJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
dHJhaW50Q29uY3VycmVuY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3Ry
YWludENvbmN1cnJlbmN5IDogdWludDhfdCB7CisgICAgU2VxdWVudGlhbCwKKyAgICBDb25jdXJy
ZW50Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitp
bmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWlu
dENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQoreworICAgIHN3aXRjaCAoY29uY3VycmVuY3kpIHsK
KyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsOgorICAgICAg
ICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlND
OjpDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQ6CisgICAgICAgIG91dC5wcmludCgi
Q29uY3VycmVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxs
ZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7CisgICAg
U2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAgICBz
d2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDoK
KyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVu
dGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSwxMiArMjA5LDExIEBAIGlubGluZSBjb25zdCBUIEdDU2VnbWVudGVkQXJyYXk8VD46OnJlbW8K
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogaW5saW5lIGJvb2wgR0NTZWdtZW50ZWRBcnJheTxUPjo6
aXNFbXB0eSgpCiB7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIGJlIHNhZmUgdG8gY2FsbCBjb25j
dXJyZW50bHkuIEl0J3MgaW1wb3J0YW50IHRvIHByZXNlcnZlIHRoYXQgY2FwYWJpbGl0eS4KICAg
ICBpZiAobV90b3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9zZWdtZW50cy5o
ZWFkKCktPm5leHQoKSkgewotICAgICAgICBBU1NFUlQobV9zZWdtZW50cy5oZWFkKCktPm5leHQo
KS0+bV90b3AgPT0gc19zZWdtZW50Q2FwYWNpdHkpOworICAgIGlmIChtX3NlZ21lbnRzLmhlYWQo
KS0+bmV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTWFjaGlu
ZVN0YWNrTWFya2VyLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIK
ICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkU3Bh
Y2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKQEAgLTY2LDYg
KzY3LDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtl
ZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgi
CiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjgxLDcgKzI4Myw3IEBAIEhlYXA6OkhlYXAoVk0qIHZt
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFr
ZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0
YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJr
U3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3Ry
YWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwg
bV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0
aGlzKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFr
ZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjpt
YWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTU5NCw3ICs1OTYsNyBAQCB2b2lk
IEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDCiAgICAgICAgIGZ1bmMoY29kZUJs
b2NrKTsKIH0KIAotdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQordm9p
ZCBIZWFwOjphc3NlcnRNYXJrU3RhY2tzRW1wdHkoKQogewogICAgIGJvb2wgb2sgPSB0cnVlOwog
ICAgIApAQCAtNjA4LDEyICs2MTAsMjEgQEAgdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3Rh
Y2tzRW1wdHkoKQogICAgICAgICBvayA9IGZhbHNlOwogICAgIH0KICAgICAKKyAgICBmb3JFYWNo
U2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBWaXNpdG9yICIsIFJhd1Bv
aW50ZXIoJnZpc2l0b3IpLCAiIGlzIG5vdCBlbXB0eSFcbiIpOworICAgICAgICAgICAgb2sgPSBm
YWxzZTsKKyAgICAgICAgfSk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQob2spOwogfQogCiB2
b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewot
ICAgIG1fbWFjaGluZVRocmVhZHMtPmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9q
aXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MsIG1fY3VycmVudFRocmVhZFN0YXRlKTsKKyAg
ICBtX21hY2hpbmVUaHJlYWRzLT5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0
U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzLCBtX2N1cnJlbnRUaHJlYWRTdGF0ZSwgbV9jdXJy
ZW50VGhyZWFkKTsKIH0KIAogdm9pZCBIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0
aXZlUm9vdHMmIHJvb3RzKQpAQCAtNzMwLDcgKzc0MSw3IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2lu
ZygpCiAgICAgICAgICAgICB2aXNpdG9yLnJlc2V0KCk7CiAgICAgICAgIH0pOwogCi0gICAgYXNz
ZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CisgICAgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7
CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKQEAgLTkxMSw3ICs5MjIsNyBA
QCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVy
c0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8v
IER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0
IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxs
IG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmplY3Qu
IElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBh
ZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0
LDE1ICs5MzUsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQog
ICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAg
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMg
b3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBp
c01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2Ug
ZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1h
cmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nh
bm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21p
Y0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUg
b2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAgICAg
ICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRo
aXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtlZENv
bmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAgICAg
ICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAgIC8v
IGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAgICAg
ICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlm
ZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBi
bGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sg
Y29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShD
ZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk1OSw3IEBAIHZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8v
IEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0
ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3Mg
T0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ug
d2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0x
MDkxLDYgKzExMDIsNyBAQCBhdXRvIEhlYXA6OnJ1bkN1cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciBj
CiB7CiAgICAgY2hlY2tDb25uKGNvbm4pOwogICAgIG1fY3VycmVudFRocmVhZFN0YXRlID0gY3Vy
cmVudFRocmVhZFN0YXRlOworICAgIG1fY3VycmVudFRocmVhZCA9ICZXVEY6OlRocmVhZDo6Y3Vy
cmVudCgpOwogICAgIAogICAgIGlmIChjb25uID09IEdDQ29uZHVjdG9yOjpNdXRhdG9yKQogICAg
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0oKSk7CkBAIC0xMjgzLDEzICsxMjk1LDExIEBAIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICB9CiAgICAgICAgIAog
ICAgIGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgbV9v
cGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAgICAgCiAgICAgICAgIG1fc2NoZWR1
bGVyLT5kaWRSZWFjaFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgYXNzZXJ0
U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0
b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRv
ciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3It
Pm1lcmdlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgCisgICAgICAgIGFzc2VydE1hcmtTdGFja3NF
bXB0eSgpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRvckRp
ZFJ1biBpbnRvIGFjY291bnQgd2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxpa2Vs
eSwKICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIHJvb3QgY29uc3RyYWludHMg
YWdhaW4gdW5sZXNzIHRoZSBtdXRhdG9yIGRpZCBydW4uIEF0IGEKQEAgLTEyOTcsMTcgKzEzMDcs
MTQgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAv
LyBlc3RpbWF0ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjgyOAogICAgICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZCB0aW1lb3V0LiBUaGlzIG9u
bHkgY29tZXMKLSAgICAgICAgLy8gaW50byBwbGF5IGlmIHdlJ3JlIGV4ZWN1dGluZyBjb25zdHJh
aW50cyBmb3IgdGhlIGZpcnN0IHRpbWUuIEJ1dCB0aGF0IHdpbGwgbWF0dGVyCi0gICAgICAgIC8v
IHdoZW4gd2UgaGF2ZSBkZWVwIHN0YWNrcyBvciBhIGxvdCBvZiBET00gc3R1ZmYuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzEKLSAgICAg
ICAgICAgIAogICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAg
ICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCku
Ci0gICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+
ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKKyAgICAgICAgYm9vbCBjb252ZXJnZWQgPSBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252
ZXJnZW5jZShzbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlIHNs
b3RWaXNpdG9yLmlzRW1wdHkoKSBjaGVjayBpcyBtb3N0IGxpa2VseSBub3QgbmVlZGVkLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzEwCiAg
ICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgIGFzc2VydE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzMjQsNiAr
MTMzMSwxNSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAg
ICAgIAogICAgIG1fc2NoZWR1bGVyLT5zeW5jaHJvbm91c0RyYWluaW5nRGlkU3RhbGwoKTsKIAor
ICAgIC8vIFRoaXMgaXMga2luZGEgdHJpY2t5LiBUaGUgdGVybWluYXRpb24gY2hlY2sgbG9va3Mg
YXQ6CisgICAgLy8KKyAgICAvLyAtIFdoZXRoZXIgdGhlIG1hcmtpbmcgdGhyZWFkcyBhcmUgYWN0
aXZlLiBJZiB0aGV5IGFyZSBub3QsIHRoaXMgbWVhbnMgdGhhdCB0aGUgbWFya2luZyB0aHJlYWRz
JworICAgIC8vICAgU2xvdFZpc2l0b3JzIGFyZSBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IGNvbGxlY3RvcidzIHNsb3QgdmlzaXRvciBpcyBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IHNoYXJlZCBtYXJrIHN0YWNrcyBhcmUgZW1wdHkuCisgICAgLy8KKyAgICAvLyBUaGlzIGRvZXNu
J3QgaGF2ZSB0byBjaGVjayB0aGUgbXV0YXRvciBTbG90VmlzaXRvciBiZWNhdXNlIHRoYXQgb25l
IGJlY29tZXMgZW1wdHkgYWZ0ZXIgZXZlcnkgR0MKKyAgICAvLyB3b3JrIGluY3JlbWVudCwgc28g
aXQgbXVzdCBiZSBlbXB0eSBub3cuCiAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWlu
YXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxvb3Bpbmcg
dG8gdGhlIHRvcCBpZiBydW5GaXhwb2ludFBoYXNlKCkuCiAgICAgICAgIApAQCAtMTQ4OSw2ICsx
NTA1LDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogICAgIGlm
IChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhjb25uLCAiOiBHb2luZyB0byBwaGFzZTogIiwgbV9u
ZXh0UGhhc2UsICIgKGZyb20gIiwgbV9jdXJyZW50UGhhc2UsICIpXG4iKTsKICAgICAKKyAgICBt
X3BoYXNlVmVyc2lvbisrOworICAgIAogICAgIGJvb2wgc3VzcGVuZGVkQmVmb3JlID0gd29ybGRT
aG91bGRCZVN1c3BlbmRlZChtX2N1cnJlbnRQaGFzZSk7CiAgICAgYm9vbCBzdXNwZW5kZWRBZnRl
ciA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQobV9uZXh0UGhhc2UpOwogICAgIApAQCAtMTUyNiw3
ICsxNTQ0LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogCiB2
b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgY29ubikKIHsKLSAgICBpZiAo
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmIChtX3dv
cmxkSXNTdG9wcGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiB3b3JsZCBhbHJlYWR5IHN0
b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0xNTM3LDcgKzE1NTUsNyBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25k
dWN0b3IgCiAgICAgbV9tdXRhdG9yRGlkUnVuID0gZmFsc2U7CiAKICAgICBzdXNwZW5kQ29tcGls
ZXJUaHJlYWRzKCk7Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCA9IHRydWU7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IHRydWU7CiAKICAgICBmb3JFYWNoU2xv
dFZpc2l0b3IoCiAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CkBAIC0x
NTc0LDExICsxNTkyLDExIEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OnJlc3VtZVRoZVBlcmlw
aGUKICAgICAKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAwOwogICAgIAotICAgIGlmICghbV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmICghbV93b3Js
ZElzU3RvcHBlZCkgewogICAgICAgICBkYXRhTG9nKCJGYXRhbDogY29sbGVjdG9yIGRvZXMgbm90
IGJlbGlldmUgdGhhdCB0aGUgd29ybGQgaXMgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IGZhbHNl
OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZDogd2Ug
d2FudCB0byBncmFiIHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQogICAgIC8v
IGJlY29tZSBhdmFpbGFibGUuIFdlIGJhc2ljYWxseSB3YW50IGEgbG9ja0FueSgpIG1ldGhvZCB0
aGF0IHdpbGwgbG9jayB3aGF0ZXZlciBsb2NrIGlzIGF2YWlsYWJsZQpAQCAtMjU3OCw3ICsyNTk2
LDExIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDAp
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKKyAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNl
VGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAg
ICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAt
MjU4NywxMiArMjYwOSwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
ICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNpb247CiAgICAgICAgIH0sCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsyNjM3
LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAg
ICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
ICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjYy
MSw3ICsyNjQ1LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwpA
QCAtMjY0MSwyMSArMjY2NSwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIg
Um91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVjdFNw
YWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwK
LSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
ICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xv
dFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjg4LDcgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAgICAg
ICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJl
bmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2ODQsNyArMjcwOCw3IEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAogICAgICAg
ICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdzIGJs
YWNrLgpAQCAtMjY5NSwyMyArMjcxOSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXll
ZCk7CiAgICAgCi0gICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCi0gICAgICAgICJNcm1zIiwgIk11
dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKLSAgICAgICAgICAgIC8vIEluZGlj
YXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKLSAgICAgICAgICAg
IHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3Rh
Y2stPnNpemUoKTsKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXpl
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiKCIsIHNpemUsICIpIik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOwotICAgICAgICAgICAgbV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHNs
b3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewotICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludD4oKnRoaXMpKTsKIH0KIAogdm9pZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQpCkBAIC0yNzk0LDE2
ICsyODAyLDYgQEAgdm9pZCBIZWFwOjphbGxvd0NvbGxlY3Rpb24oKQogICAgIG1fY29sbGVjdENv
bnRpbnVvdXNseUxvY2sudW5sb2NrKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgZnVu
YygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0
b3IpOwotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TXV0YXRv
clNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5j
ZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCArMjg0NSwyNCBAQCB2b2lkIEhlYXA6OnJlbW92ZUhlYXBG
aW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJlbW92ZUZp
cnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBIZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgbV9ib251c1Zpc2l0b3JUYXNrID0g
dGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwor
dm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiB0YXNrKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxSZWZDb3VudCA9IHRhc2st
PnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5y
dW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVs
bHB0cik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011
dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2stPnJlZkNvdW50KCkgPiBpbml0aWFsUmVmQ291bnQp
CisgICAgICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KG1fbWFya2luZ011
dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi
V2Vha0hhbmRsZU93bmVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgog
I2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNzMsNiArNzQsNyBA
QCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFj
aGluZVRocmVhZHM7CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKK2NsYXNzIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogY2xhc3MgTWFya2VkQXJndW1l
bnRCdWZmZXI7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKQEAgLTExNCw3ICsxMTYsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9
IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRp
YyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAg
c3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xNTQsNyArMTU1LDggQEAg
cHVibGljOgogICAgIE11dGF0b3JTdGF0ZSBtdXRhdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X211dGF0b3JTdGF0ZTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBjb2xs
ZWN0aW9uU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3Rpb25TY29wZTsgfQogICAgIGJv
b2wgaGFzSGVhcEFjY2VzcygpIGNvbnN0OwotICAgIGJvb2wgY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNTdG9wcGVkKCkgY29u
c3Q7CisgICAgYm9vbCB3b3JsZElzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuICF3b3JsZElzU3Rv
cHBlZCgpOyB9CiAKICAgICAvLyBXZSdyZSBhbHdheXMgYnVzeSBvbiB0aGUgY29sbGVjdGlvbiB0
aHJlYWRzLiBPbiB0aGUgbWFpbiB0aHJlYWQsIHRoaXMgcmV0dXJucyB0cnVlIGlmIHdlJ3JlCiAg
ICAgLy8gaGVscGluZyBoZWFwLgpAQCAtMzQ5LDYgKzM1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFsbG93Q29sbGVjdGlvbigpOwogICAgIAogICAgIHVpbnQ2NF90IG11dGF0b3JFeGVjdXRpb25W
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbjsgfQorICAg
IHVpbnQ2NF90IHBoYXNlVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2VWZXJzaW9uOyB9
CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTM1OCw2ICszNjEs
MTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNv
bnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQgcmVtb3ZlSGVhcEZpbmFsaXpl
ckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOworICAgIAorICAgIHZvaWQg
cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4p
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBydW5GdW5jdGlv
bkluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHJ1blRhc2tJblBh
cmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPihmdW5jKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRp
bmdTY29wZTsKQEAgLTM3Myw2ICszODcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBI
ZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9j
azsKQEAgLTUyNSw4ICs1NDAsMTAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB2b2lkIGFzc2VydFNoYXJl
ZE1hcmtTdGFja3NFbXB0eSgpOworICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAK
KyAgICB2b2lkIHNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4pOworICAgIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAg
Y29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5
Y2xlOwpAQCAtNTc5LDkgKzU5Niw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFNsb3RWaXNpdG9y
Kj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9yczsKICAgICBMb2NrIG1fcGFyYWxsZWxT
bG90VmlzaXRvckxvY2s7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJik7Ci0KICAgICBIYW5kbGVTZXQgbV9o
YW5kbGVTZXQ7CiAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUJsb2NrU2V0PiBtX2NvZGVCbG9ja3M7CkBAIC02MzMsOCArNjQ3LDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAg
fTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CiAKLSAg
ICBMb2NrIG1fb3BhcXVlUm9vdHNNdXRleDsKLSAgICBIYXNoU2V0PGNvbnN0IHZvaWQqPiBtX29w
YXF1ZVJvb3RzOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdHM7CiAKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCkBAIC02
NDIsNiArNjU1LDcgQEAgcHJpdmF0ZToKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25h
bEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKIAogICAgIFBhcmFs
bGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+IG1fYm9udXNWaXNpdG9yVGFzazsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2NhdGVkIHsgMCB9OwpAQCAt
NjU3LDcgKzY3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5lZWRG
aW5hbGl6ZUJpdCA9IDF1IDw8IDR1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9y
V2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMg
YXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3Rh
dGU7Ci0gICAgYm9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fd29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIE1vbm90
b25pY1RpbWUgbV9iZWZvcmVHQzsKICAgICBNb25vdG9uaWNUaW1lIG1fYWZ0ZXJHQzsKICAgICBN
b25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CkBAIC02NzIsNiArNjg2LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fdGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JE
aWRSdW4geyB0cnVlIH07CiAgICAgdWludDY0X3QgbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbiB7
IDAgfTsKKyAgICB1aW50NjRfdCBtX3BoYXNlVmVyc2lvbiB7IDAgfTsKICAgICBCb3g8TG9jaz4g
bV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fdGhy
ZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3YWl0IG9uIHRoaXMuIEl0IHdv
dWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJl
YWQ7CkBAIC02OTMsNiArNzA4LDcgQEAgcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9iYXJyaWVy
c0V4ZWN1dGVkIHsgMCB9OwogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50
VGhyZWFkU3RhdGUgeyBudWxscHRyIH07CisgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVh
ZCB7IG51bGxwdHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2lu
dGVyLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDMwICs2Mywy
MCBAQCBpbmxpbmUgYm9vbCBIZWFwOjpoYXNIZWFwQWNjZXNzKCkgY29uc3QKICAgICByZXR1cm4g
bV93b3JsZFN0YXRlLmxvYWQoKSAmIGhhc0FjY2Vzc0JpdDsKIH0KIAotaW5saW5lIGJvb2wgSGVh
cDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdAoraW5saW5l
IGJvb2wgSGVhcDo6d29ybGRJc1N0b3BwZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOworICAgIHJldHVybiBtX3dvcmxkSXNT
dG9wcGVkOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gaW5zdGFuY2UgbWV0aG9k
LCBzbyB0aGF0IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJzaW9uKCkgcXVpY2tseS4KKy8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5ODgKIEFMV0FZU19JTkxJ
TkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFTU0VS
VChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwt
PmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRp
b24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJs
b2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgpLT5o
ZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdDZWxs
KQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2Vs
bCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBj
ZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBibG9j
ayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29uY3Vy
cmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1Zl
cnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCktPmhl
YXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlTX0lO
TElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkBAIC0xNzksMTkgKzE2OSwxOSBAQCBpbmxpbmUgdm9p
ZCBIZWFwOjpyZWxlYXNlU29vbihSZXRhaW5QdHI8CiAKIGlubGluZSB2b2lkIEhlYXA6OmluY3Jl
bWVudERlZmVycmFsRGVwdGgoKQogewotICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1f
Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOworICAgIEFTU0VSVCghbWF5
QmVHQ1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwogICAgIG1fZGVmZXJyYWxEZXB0aCsr
OwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKLSAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNT
dG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQogewotICAgIEFTU0VSVCghbWF5
QmVHQ1RocmVhZCgpIHx8IG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQp
OworICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwogICAg
IG1fZGVmZXJyYWxEZXB0aC0tOwogICAgIAogICAgIGlmIChVTkxJS0VMWShtX2RpZERlZmVyR0NX
b3JrKSkgewpAQCAtMjY5LDQgKzI1OSwxNCBAQCBpbmxpbmUgdm9pZCBIZWFwOjpzdG9wSWZOZWNl
c3NhcnkoKQogICAgICAgICBzdG9wSWZOZWNlc3NhcnlTbG93KCk7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBm
dW5jKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9y
TG9jayk7CisgICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgZnVuYygqbV9t
dXRhdG9yU2xvdFZpc2l0b3IpOworICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFs
bGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgK
IHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0g
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQo
SGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAgICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwo
Y2VsbCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBVdGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFV0aWwuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFV0aWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gYmVmb3JlIGxpdmVuZXNzIGRhdGEgaXMgY2xlYXJlZCB0byBiZSBhY2N1cmF0ZS4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHN0YXRpYyB2b2lkIGZpbmRHQ09iamVjdFBvaW50
ZXJzRm9yTWFya2luZygKLSAgICAgICAgSGVhcCYgaGVhcCwgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIHZvaWQqIHBhc3NlZFBvaW50ZXIsCi0gICAg
ICAgIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgIEhlYXAmIGhlYXAsIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIFRpbnlCbG9v
bUZpbHRlciBmaWx0ZXIsCisgICAgICAgIHZvaWQqIHBhc3NlZFBvaW50ZXIsIGNvbnN0IEZ1bmMm
IGZ1bmMpCiAgICAgewogICAgICAgICBjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2NrKj4mIHNldCA9
IGhlYXAub2JqZWN0U3BhY2UoKS5ibG9ja3MoKS5zZXQoKTsKICAgICAgICAgCkBAIC04OCw3ICs4
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAmJiBzZXQuY29udGFpbnMocHJldmlvdXND
YW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNDYW5kaWRhdGUtPmhhbmRsZSgp
LmNlbGxLaW5kKCkgPT0gSGVhcENlbGw6OkF1eGlsaWFyeSkgewogICAgICAgICAgICAgICAgIHBy
ZXZpb3VzUG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihwcmV2aW91c0NhbmRpZGF0ZS0+aGFu
ZGxlKCkuY2VsbEFsaWduKHByZXZpb3VzUG9pbnRlcikpOwotICAgICAgICAgICAgICAgIGlmIChw
cmV2aW91c0NhbmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgaXNN
YXJraW5nLCBwcmV2aW91c1BvaW50ZXIpKQorICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0Nh
bmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0
ZWRWZXJzaW9uLCBpc01hcmtpbmcsIHByZXZpb3VzUG9pbnRlcikpCiAgICAgICAgICAgICAgICAg
ICAgIGZ1bmMocHJldmlvdXNQb2ludGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgICAgIGF1dG8gdHJ5UG9pbnRlciA9IFsmXSAodm9pZCogcG9pbnRlcikgewotICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgaXNN
YXJraW5nLCBwb2ludGVyKSkKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmhhbmRsZSgpLmlz
TGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgaXNNYXJraW5n
LCBwb2ludGVyKSkKICAgICAgICAgICAgICAgICBmdW5jKHBvaW50ZXIpOwogICAgICAgICB9Owog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9u
LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdl
QWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNN
YXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzTWFya2VkKEhlYXBDZWxsKiwgRGVwZW5kZW5jeSkgeyByZXR1cm4gaXNNYXJrZWQo
KTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVy
c2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CisgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2Vk
KCk7IH0KICAgICBib29sIGlzTGl2ZSgpIHsgcmV0dXJuIGlzTWFya2VkKCkgfHwgaXNOZXdseUFs
bG9jYXRlZCgpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNWYWxpZENlbGwoKSBjb25zdCB7IHJldHVy
biBtX2hhc1ZhbGlkQ2VsbDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9j
a0R1cmluZ01hcmtpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Mb2NrRHVyaW5nTWFya2luZy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDE0ICsz
Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gVXNlIHRoaXMgbG9jayBzY29wZSBsaWtlIHNvOgog
Ly8gYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyhoZWFwLCBsb2NrKTsKIHRlbXBsYXRl
PHR5cGVuYW1lIExvY2tUeXBlPgotTG9ja2VyPExvY2tUeXBlPiBsb2NrRHVyaW5nTWFya2luZyhI
ZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFzc2VkTG9jaykKK2F1dG8gbG9ja0R1cmluZ01hcmtpbmco
SGVhcCYgaGVhcCwgTG9ja1R5cGUmIHBhc3NlZExvY2spCiB7Ci0gICAgTG9ja1R5cGUqIGxvY2s7
Ci0gICAgaWYgKGhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpCi0gICAgICAgIGxvY2sgPSAm
cGFzc2VkTG9jazsKLSAgICBlbHNlCi0gICAgICAgIGxvY2sgPSBudWxscHRyOwotICAgIHJldHVy
biBMb2NrZXI8TG9ja1R5cGU+KGxvY2spOworICAgIHJldHVybiBob2xkTG9ja0lmKHBhc3NlZExv
Y2ssIGhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNr
TWFya2VyLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3
IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFMKICAgICAqc2l6ZSAr
PSBzdGFjay5zZWNvbmQ7CiB9CiAKLWJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRo
cmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBidWZmZXIsIHNp
emVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplKQorYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29w
eU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGJ1
ZmZlciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNpemUsIFRocmVhZCYgY3VycmVudFRocmVh
ZEZvckdDKQogewogICAgIC8vIFByZXZlbnQgdHdvIFZNcyBmcm9tIHN1c3BlbmRpbmcgZWFjaCBv
dGhlcidzIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZSwKICAgICAvLyB3aGljaCBjYW4gY2F1c2Ug
ZGVhZGxvY2s6IDxyZGFyOi8vcHJvYmxlbS8yMDMwMDg0Mj4uCkBAIC0xNDUsMTMgKzE0NSwxNCBA
QCBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTCiAgICAgKnNpemUgPSAw
OwogCiAgICAgVGhyZWFkJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Ci0gICAg
Y29uc3QgYXV0byYgdGhyZWFkcyA9IG1fdGhyZWFkR3JvdXAtPnRocmVhZHMobG9ja2VyKTsKKyAg
ICBjb25zdCBMaXN0SGFzaFNldDxSZWY8VGhyZWFkPj4mIHRocmVhZHMgPSBtX3RocmVhZEdyb3Vw
LT50aHJlYWRzKGxvY2tlcik7CiAgICAgQml0VmVjdG9yIGlzU3VzcGVuZGVkKHRocmVhZHMuc2l6
ZSgpKTsKIAogICAgIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgICAgICBmb3Ig
KGF1dG8mIHRocmVhZCA6IHRocmVhZHMpIHsKLSAgICAgICAgICAgIGlmICh0aHJlYWQuZ2V0KCkg
IT0gY3VycmVudFRocmVhZCkgeworICAgICAgICBmb3IgKGNvbnN0IFJlZjxUaHJlYWQ+JiB0aHJl
YWQgOiB0aHJlYWRzKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkLmdldCgpICE9IGN1cnJlbnRU
aHJlYWQKKyAgICAgICAgICAgICAgICAmJiB0aHJlYWQuZ2V0KCkgIT0gY3VycmVudFRocmVhZEZv
ckdDKSB7CiAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSB0aHJlYWQtPnN1c3BlbmQoKTsK
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBpc1N1c3Bl
bmRlZC5zZXQoaW5kZXgpOwpAQCAtMTk5LDcgKzIwMCw3IEBAIHN0YXRpYyB2b2lkIGdyb3dCdWZm
ZXIoc2l6ZV90IHNpemUsIHZvaWQKICAgICAqYnVmZmVyID0gZmFzdE1hbGxvYygqY2FwYWNpdHkp
OwogfQogCi12b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRT
dHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcywgQ3VycmVudFRocmVhZFN0YXRl
KiBjdXJyZW50VGhyZWFkU3RhdGUpCit2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJS
b3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcywgQ3Vy
cmVudFRocmVhZFN0YXRlKiBjdXJyZW50VGhyZWFkU3RhdGUsIFRocmVhZCogY3VycmVudFRocmVh
ZCkKIHsKICAgICBpZiAoY3VycmVudFRocmVhZFN0YXRlKQogICAgICAgICBnYXRoZXJGcm9tQ3Vy
cmVudFRocmVhZChjb25zZXJ2YXRpdmVSb290cywgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tz
LCAqY3VycmVudFRocmVhZFN0YXRlKTsKQEAgLTIwOCw3ICsyMDksNyBAQCB2b2lkIE1hY2hpbmVU
aHJlYWRzOjpnYXRoZXJDb25zZXJ2YXRpdmVSCiAgICAgc2l6ZV90IGNhcGFjaXR5ID0gMDsKICAg
ICB2b2lkKiBidWZmZXIgPSBudWxscHRyOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV90
aHJlYWRHcm91cC0+Z2V0TG9jaygpKTsKLSAgICB3aGlsZSAoIXRyeUNvcHlPdGhlclRocmVhZFN0
YWNrcyhsb2NrZXIsIGJ1ZmZlciwgY2FwYWNpdHksICZzaXplKSkKKyAgICB3aGlsZSAoIXRyeUNv
cHlPdGhlclRocmVhZFN0YWNrcyhsb2NrZXIsIGJ1ZmZlciwgY2FwYWNpdHksICZzaXplLCAqY3Vy
cmVudFRocmVhZCkpCiAgICAgICAgIGdyb3dCdWZmZXIoc2l6ZSwgJmJ1ZmZlciwgJmNhcGFjaXR5
KTsKIAogICAgIGlmICghYnVmZmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCw3IEBAIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKIHB1YmxpYzoKICAgICBNYWNo
aW5lVGhyZWFkcygpOwogCi0gICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2
YXRpdmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRo
cmVhZFN0YXRlKik7CisgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRp
dmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVh
ZFN0YXRlKiwgVGhyZWFkKik7CiAKICAgICAvLyBPbmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBieSBj
bGllbnRzIHRoYXQgY2FuIHVzZSB0aGUgc2FtZSBoZWFwIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4K
ICAgICB2b2lkIGFkZEN1cnJlbnRUaHJlYWQoKSB7IG1fdGhyZWFkR3JvdXAtPmFkZEN1cnJlbnRU
aHJlYWQoKTsgfQpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVyRnJv
bUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENv
ZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCiAgICAgdm9pZCB0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFjayhUaHJlYWQmLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsK
LSAgICBib29sIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYs
IHZvaWQqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCopOworICAgIGJvb2wgdHJ5Q29weU90aGVy
VGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCosIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90KiwgVGhyZWFkJik7CiAKICAgICBzdGQ6OnNoYXJlZF9wdHI8VGhyZWFkR3JvdXA+
IG1fdGhyZWFkR3JvdXA7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWlu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6Ok1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCisgICAgOiBNYXJraW5nQ29uc3RyYWludCgi
TXNtIiwgIk1hcmsgU3RhY2sgTWVyZ2luZyIsIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eUV4ZWN1dGlvbikKKyAgICAsIG1faGVhcChoZWFwKQoreworfQorCitNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludDo6fk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCkKK3sKK30KKworZG91Ymxl
IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRv
ciYpCit7CisgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1f
aGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKK30KKwordm9pZCBNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUgZW5z
dXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3QgbmVl
ZCB0byBwcm9kdWNlCisgICAgLy8gYW55bW9yZSB3b3JrLgorICAgIHNpemVfdCBzaXplID0gbV9o
ZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+
c2l6ZSgpOworICAgIHZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOworICAgIAorICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCIoIiwgc2l6ZSwgIikiKTsKK30K
KworQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVj
dXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2hlYXAubV9tdXRhdG9yTWFy
a1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKKyAgICBtX2hl
YXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygp
KTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJh
aW50IHsKK3B1YmxpYzoKKyAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJik7Cisg
ICAgfk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3Ry
YWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgCitw
cml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NCw2ICs0NDQsMzMgQEAgdm9pZCBNYXJr
ZWRBbGxvY2F0b3I6OmFzc2VydE5vVW5zd2VwdCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJrZWRB
bGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7CisgICAgY2xhc3MgVGFz
ayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAgICAg
ICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAg
ICBtX2luZGV4ID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkuZmluZEJpdChtX2luZGV4
LCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxvY2tz
LnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBtX2FsbG9jYXRvci5tX2Jsb2Nrc1ttX2luZGV4KytdOworICAgICAgICB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7Cisg
ICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICB9
OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykpOworfQorCiB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91
dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRyaWJ1
dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYv
RmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwMyw2ICsxMDQsOCBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29u
c3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRU
YXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2Uo
KTsKKyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICB2
b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjMsMTUgKzIyMywxOSBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3co
SGVhcFZlCiAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5nIHRo
aW5ncy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBz
cGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICAgICAgaWYgKGhhbmRsZSgpLm1f
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikgewotICAgICAg
ICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5ld2x5QWxsb2NhdGVk
LiBJZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKLSAgICAgICAgICAgIC8vIHRoZW4gaW52
YWxpZGF0ZSBuZXdseUFsbG9jYXRlZCBhbmQgc2V0IGFsbG9jYXRlZC4KLSAgICAgICAgICAgIGhh
bmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWQubWVyZ2VBbmRDbGVhcihtX21hcmtzKTsKKyAgICAgICAg
ICAgIC8vIFdoZW4gZG8gd2UgZ2V0IGhlcmU/IFRoZSBibG9jayBjb3VsZCBub3QgaGF2ZSBiZWVu
IGZpbGxlZCB1cC4gVGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMgd291bGQKKyAgICAgICAgICAgIC8v
IGhhdmUgaGFkIHRvIGJlIGNyZWF0ZWQgc2luY2UgdGhlIGVuZCBvZiB0aGUgbGFzdCBjb2xsZWN0
aW9uLiBUaGUgb25seSB0aGluZ3MgdGhhdCBjcmVhdGUKKyAgICAgICAgICAgIC8vIHRoZW0gYXJl
IGFib3V0VG9NYXJrU2xvdywgbGFzdENoYW5jZVRvRmluYWxpemUsIGFuZCBzdG9wQWxsb2NhdGlu
Zy4gSWYgaXQgaGFkIGJlZW4KKyAgICAgICAgICAgIC8vIGFib3V0VG9NYXJrU2xvdywgdGhlbiB3
ZSBzaG91bGRuJ3QgYmUgaGVyZSBzaW5jZSB0aGUgbWFya3Mgd291bGRuJ3QgYmUgc3RhbGUgYW55
bW9yZS4gSXQKKyAgICAgICAgICAgIC8vIGNhbm5vdCBiZSBsYXN0Q2hhbmNlVG9GaW5hbGl6ZS4g
U28gaXQgbXVzdCBiZSBzdG9wQWxsb2NhdGluZy4gVGhhdCBtZWFucyB0aGF0IHdlIGp1c3QKKyAg
ICAgICAgICAgIC8vIGNvbXB1dGVkIHRoZSBuZXdseUFsbG9jYXRlZCBiaXRzIGp1c3QgYmVmb3Jl
IHRoZSBzdGFydCBvZiBhbiBpbmNyZW1lbnQuIFdoZW4gd2UgYXJlIGluIHRoYXQKKyAgICAgICAg
ICAgIC8vIG1vZGUsIGl0IHNlZW1zIGFzIGlmIG5ld2x5QWxsb2NhdGVkIHNob3VsZCBzdWJzdW1l
IG1hcmtzLgorICAgICAgICAgICAgQVNTRVJUKGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWQuc3Vi
c3VtZXMobV9tYXJrcykpOworICAgICAgICAgICAgbV9tYXJrcy5jbGVhckFsbCgpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgY29udGVudHMgb2YgbmV3bHlB
bGxvY2F0ZWQgd2l0aCBtYXJrZWQuIElmIHdlIGdldCB0aGUgZnVsbCBzZXQgb2YKLSAgICAgICAg
ICAgIC8vIGJpdHMgdGhlbiBpbnZhbGlkYXRlIG5ld2x5QWxsb2NhdGVkIGFuZCBzZXQgYWxsb2Nh
dGVkLgogICAgICAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zZXRBbmRDbGVhciht
X21hcmtzKTsKKyAgICAgICAgICAgIGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uOwogICAgICAgICB9Ci0gICAgICAgIGhhbmRsZSgpLm1fbmV3
bHlBbGxvY2F0ZWRWZXJzaW9uID0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOwogICAgIH0KICAgICBj
bGVhckhhc0FueU1hcmtlZCgpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC0zNjYs
MTYgKzM3MCw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbUEKICAg
ICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CiB9CiAKLWJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6
aXNMaXZlKGNvbnN0IEhlYXBDZWxsKiBjZWxsKQotewotICAgIHJldHVybiBpc0xpdmUoc3BhY2Uo
KS0+bWFya2luZ1ZlcnNpb24oKSwgc3BhY2UoKS0+aXNNYXJraW5nKCksIGNlbGwpOwotfQotCi1i
b29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZUNlbGwoY29uc3Qgdm9pZCogcCkKLXsKLSAg
ICByZXR1cm4gaXNMaXZlQ2VsbChzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFjZSgpLT5p
c01hcmtpbmcoKSwgcCk7Ci19Ci0KICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2b2lkIE1hcmtlZEJs
b2NrOjphc3NlcnRWYWxpZENlbGwoVk0mIHZtLCBIZWFwQ2VsbCogY2VsbCkgY29uc3QKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYxLDggKzE2MSw4IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtD
b3VudCgpOwogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgaW5saW5l
IGJvb2wgaXNMaXZlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBib29sIGlzTWFya2luZywg
Y29uc3QgSGVhcENlbGwqKTsKLSAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlQ2VsbChIZWFwVmVy
c2lvbiBtYXJraW5nVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKKyAgICAg
ICAgYm9vbCBpc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5l
d2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7Cisg
ICAgICAgIGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24s
IEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0
IHZvaWQqKTsKIAogICAgICAgICBib29sIGlzTGl2ZShjb25zdCBIZWFwQ2VsbCopOwogICAgICAg
ICBib29sIGlzTGl2ZUNlbGwoY29uc3Qgdm9pZCopOwpAQCAtMjU4LDcgKzI1OCw2IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFy
a2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7
CiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgYm9vbCB0
ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICAgICAgCkBAIC0y
ODAsNyArMjc5LDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBhcmVN
YXJrc1N0YWxlKCk7CiAgICAgYm9vbCBhcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uKTsKLSAgICBEZXBlbmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERlcGVu
ZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIAogICAgIERlcGVuZGVuY3kg
YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKQEAgLTQ5
OCwxOCArNDk2LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKEgK
ICAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAotQUxX
QVlTX0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFs
ZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQotewotICAgIEhlYXBW
ZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwotICAgIHJldHVybiBkZXBlbmRlbmN5
V2l0aChkZXBlbmRlbmN5KHZlcnNpb24pLCB2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKTsKLX0K
LQogaW5saW5lIERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkocmVzdWx0LnZhbHVl
KSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAo
VU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFib3V0VG9NYXJr
U2xvdyhtYXJraW5nVmVyc2lvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRlbmN5OworICAg
IHJldHVybiBkZXBlbmRlbmN5KHZlcnNpb24pOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjphc3NlcnRNYXJrc05vdFN0YWxlKCkKQEAgLTUyNCwxNSArNTE2LDEwIEBAIGlu
bGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyhjb24KIAogaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lk
KiBwKQogewotICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSA/IGZhbHNl
IDogaXNNYXJrZWRSYXcocCk7Ci19Ci0KLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtl
ZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkK
LXsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5n
VmVyc2lvbik7Ci0gICAgaWYgKHJlc3VsdC52YWx1ZSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9u
ID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5n
VmVyc2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9tYXJrcy5nZXQo
YXRvbU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworICAgIHJldHVybiBtX21hcmtzLmdl
dChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KHZlcnNpb24pKTsKIH0KIAogaW5saW5lIGJvb2wg
TWFya2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVwZW5kZW5j
eSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5s
aW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODYsMTcgKzg2LDQ2IEBAIGlu
bGluZSBib29sIE1hcmtlZEJsb2NrOjptYXJrc0NvbnZleUxpdmUKICAgICAgICAgfHwgTWFya2Vk
U3BhY2U6Om5leHRWZXJzaW9uKG1fbWFya2luZ1ZlcnNpb24pID09IG1hcmtpbmdWZXJzaW9uOwog
fQogCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCogY2VsbCkKK2lu
bGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2lu
ZywgY29uc3QgSGVhcENlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7
Ci0gICAgCi0gICAgaWYgKFVOTElLRUxZKGhhc0FueU5ld2x5QWxsb2NhdGVkKCkpKSB7Ci0gICAg
ICAgIGlmIChpc05ld2x5QWxsb2NhdGVkKGNlbGwpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAogICAgIGlmIChhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5n
TmVjZXNzYXJ5LCB0aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrSWYobV9ibG9jay0+bV9sb2NrLCBpc01hcmtpbmcpOyAvLyBQcm90ZWN0IGFn
YWluc3QgY29uY3VycmVudCBhYm91dFRvTWFya1Nsb3coKS4KKyAgICAKKyAgICBBU1NFUlQoIWlz
RnJlZUxpc3RlZCgpKTsKKyAgICAKKyAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgd2hpbGUgaG9s
ZGluZyB0aGUgbG9jayBiZWNhdXNlIG1hcmtzIG1pZ2h0IGJlIHN0YWxlLiBJbiB0aGF0IGNhc2Us
IG5ld2x5CisgICAgLy8gYWxsb2NhdGVkIHdpbGwgbm90IHlldCBiZSB2YWxpZC4gQ29uc2lkZXIg
dGhpcyBpbnRlcmxlYXZpbmcuCisgICAgLy8gCisgICAgLy8gT25lIHRocmVhZCBpcyBkb2luZyB0
aGlzOgorICAgIC8vCisgICAgLy8gMSkgSXNMaXZlQ2hlY2tzTmV3bHlBbGxvY2F0ZWQ6IFdlIGNo
ZWNrIGlmIG5ld2x5IGFsbG9jYXRlZCBpcyB2YWxpZC4gSWYgaXQgaXMgdmFsaWQsIGFuZCB0aGUg
Yml0IGlzCisgICAgLy8gICAgc2V0LCB3ZSByZXR1cm4gdHJ1ZS4gTGV0J3MgYXNzdW1lIHRoYXQg
dGhpcyBleGVjdXRlcyBhdG9taWNhbGx5LiBJdCBkb2Vzbid0IGhhdmUgdG8gaW4gZ2VuZXJhbCwK
KyAgICAvLyAgICBidXQgd2UgY2FuIGFzc3VtZSB0aGF0IGZvciB0aGUgcHVycG9zZSBvZiBzZWVp
bmcgdGhpcyBidWcuCisgICAgLy8KKyAgICAvLyAyKSBJc0xpdmVDaGVja3NNYXJrczogSGF2aW5n
IGZhaWxlZCB0aGF0LCB3ZSBjaGVjayB0aGUgbWFyayBiaXRzLiBUaGlzIHN0ZXAgaW1wbGllcyB0
aGUgcmVzdCBvZgorICAgIC8vICAgIHRoaXMgZnVuY3Rpb24uIEl0IGhhcHBlbnMgdW5kZXIgYSBs
b2NrIHNvIGl0J3MgYXRvbWljLgorICAgIC8vCisgICAgLy8gQW5vdGhlciB0aHJlYWQgaXMgZG9p
bmc6CisgICAgLy8KKyAgICAvLyAxKSBBYm91dFRvTWFya1Nsb3c6IFRoaXMgaXMgdGhlIGVudGly
ZSBhYm91dFRvTWFya1Nsb3cgZnVuY3Rpb24sIGFuZCBsZXQncyBzYXkgaXQncyBhdG9taWMuIEl0
CisgICAgLy8gICAgc29ydGEgaXMgc2luY2UgaXQgaG9sZHMgYSBsb2NrLCBidXQgdGhhdCBkb2Vz
bid0IGFjdHVhbGx5IG1ha2UgaXQgYXRvbWljIHdpdGggcmVzcGVjdCB0bworICAgIC8vICAgIElz
TGl2ZUNoZWNrc05ld2x5QWxsb2NhdGVkLCBzaW5jZSB0aGF0IGRvZXMgbm90IGhvbGQgYSBsb2Nr
IGluIG91ciBzY2VuYXJpby4KKyAgICAvLworICAgIC8vIFRoZSBoYXJtZnVsIGludGVybGVhdmlu
ZyBoYXBwZW5zIGlmIHdlIHN0YXJ0IG91dCB3aXRoIGEgYmxvY2sgdGhhdCBoYXMgc3RhbGUgbWFy
ayBiaXRzIHRoYXQKKyAgICAvLyBub25ldGhlbGVzcyBjb252ZXkgbGl2ZW5lc3MgZHVyaW5nIG1h
cmtpbmcgKHRoZSBvZmYtYnktb25lIHZlcnNpb24gdHJpY2spLiBUaGUgaW50ZXJsZWF2aW5nIGlz
CisgICAgLy8ganVzdDoKKyAgICAvLworICAgIC8vIElzTGl2ZUNoZWNrc05ld2x5QWxsb2NhdGVk
IEFib3V0VG9NYXJrU2xvdyBJc0xpdmVDaGVja3NNYXJrcworICAgIC8vCisgICAgLy8gV2Ugc3Rh
cnRlZCB3aXRoIHZhbGlkIG1hcmtzIGJ1dCBpbnZhbGlkIG5ld2x5IGFsbG9jYXRlZC4gU28sIHRo
ZSBmaXJzdCBwYXJ0IGRvZXNuJ3QgdGhpbmsgdGhhdAorICAgIC8vIGFueXRoaW5nIGlzIGxpdmUs
IGJ1dCBkdXRpZnVsbHkgZHJvcHMgZG93biB0byB0aGUgbWFya3Mgc3RlcC4gQnV0IGluIHRoZSBt
ZWFudGltZSwgd2UgY2xlYXIgdGhlCisgICAgLy8gbWFyayBiaXRzIGFuZCB0cmFuc2ZlciB0aGVp
ciBjb250ZW50cyBpbnRvIG5ld2x5QWxsb2NhdGVkLiBTbyBJc0xpdmVDaGVja3NNYXJrcyBhbHNv
IHNlZXMgbm90aGluZworICAgIC8vIGxpdmUuIE9vb3BzIQorICAgIEhlYXBWZXJzaW9uIG15TmV3
bHlBbGxvY2F0ZWRWZXJzaW9uID0gbV9uZXdseUFsbG9jYXRlZFZlcnNpb247CisgICAgaWYgKG15
TmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikKKyAgICAgICAg
cmV0dXJuIGlzTmV3bHlBbGxvY2F0ZWQoY2VsbCk7CiAgICAgCiAgICAgTWFya2VkQmxvY2smIGJs
b2NrID0gdGhpcy0+YmxvY2soKTsKICAgICAKQEAgLTExMCwxMSArMTM5LDIxIEBAIGlubGluZSBi
b29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZSgKICAgICByZXR1cm4gYmxvY2subV9tYXJr
cy5nZXQoYmxvY2suYXRvbU51bWJlcihjZWxsKSk7CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGJvb2wg
aXNNYXJraW5nLCBjb25zdCB2b2lkKiBwKQoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6aXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3
bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3Qgdm9pZCogcCkKIHsKICAg
ICBpZiAoIW1fYmxvY2stPmlzQXRvbShwKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBpc0xpdmUobWFya2luZ1ZlcnNpb24sIGlzTWFya2luZywgc3RhdGljX2Nhc3Q8Y29uc3Qg
SGVhcENlbGwqPihwKSk7CisgICAgcmV0dXJuIGlzTGl2ZShtYXJraW5nVmVyc2lvbiwgbmV3bHlB
bGxvY2F0ZWRWZXJzaW9uLCBpc01hcmtpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEhlYXBDZWxsKj4o
cCkpOworfQorCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoY29uc3Qg
SGVhcENlbGwqIGNlbGwpCit7CisgICAgcmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJraW5nVmVy
c2lvbigpLCBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKSwgc3BhY2UoKS0+aXNNYXJr
aW5nKCksIGNlbGwpOworfQorCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xp
dmVDZWxsKGNvbnN0IHZvaWQqIHApCit7CisgICAgcmV0dXJuIGlzTGl2ZUNlbGwoc3BhY2UoKS0+
bWFya2luZ1ZlcnNpb24oKSwgc3BhY2UoKS0+bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCksIHNwYWNl
KCktPmlzTWFya2luZygpLCBwKTsKIH0KIAogLy8gVGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdHJ1
ZSBmb3Igc3BlY2lhbGl6YXRpb24gdG8ga2ljayBpbjoKQEAgLTM4Niw2ICs0MjUsMTUgQEAgaW5s
aW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBNYQogdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CiBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZv
ckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogeworICAgIC8vIEZJWE1FOiBU
aGlzIGlzIG5vdCBjdXJyZW50bHkgZWZmaWNpZW50IHRvIHVzZSBpbiB0aGUgY29uc3RyYWludCBz
b2x2ZXIgYmVjYXVzZSBpc0xpdmUoKSBncmFicyBhCisgICAgLy8gbG9jayB0byBwcm90ZWN0IGl0
c2VsZiBmcm9tIGNvbmN1cnJlbnQgY2FsbHMgdG8gYWJvdXRUb01hcmtTbG93KCkuIEJ1dCB3ZSBj
b3VsZCBnZXQgYXJvdW5kIHRoaXMgYnkKKyAgICAvLyBoYXZpbmcgdGhpcyBmdW5jdGlvbiBncmFi
IHRoZSBsb2NrIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGl0ZXJhdGlvbiwgYW5kIGNoZWNrIGlmIHRo
ZSBtYXJraW5nIHZlcnNpb24KKyAgICAvLyBjaGFuZ2VkLiBJZiBpdCBkaWQsIGp1c3QgcnVuIGFn
YWluLiBJbnNpZGUgdGhlIGxvb3AsIHdlIG9ubHkgbmVlZCB0byBlbnN1cmUgdGhhdCBpZiBhIHJh
Y2Ugd2VyZSB0bworICAgIC8vIGhhcHBlbiwgd2Ugd2lsbCBqdXN0IG92ZXJsb29rIG9iamVjdHMu
IEkgdGhpbmsgdGhhdCBiZWNhdXNlIG9mIGhvdyBhYm91dFRvTWFya1Nsb3coKSBkb2VzIHRoaW5n
cywKKyAgICAvLyBhIHJhY2Ugb3VnaHQgdG8gbWVhbiB0aGF0IGl0IGp1c3QgcmV0dXJucyBmYWxz
ZSB3aGVuIGl0IHNob3VsZCBoYXZlIHJldHVybmVkIHRydWUgLSBidXQgdGhpcyBpcworICAgIC8v
IHNvbWV0aGluZyB0aGF0IHdvdWxkIGhhdmUgdG8gYmUgdmVyaWZpZWQgY2FyZWZ1bGx5LgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTUKKyAgICAK
ICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwogICAgIGZv
ciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVy
Q2VsbCkgewogICAgICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhl
YXBDZWxsKj4oJm1fYmxvY2stPmF0b21zKClbaV0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjEs
NyArNDIxLDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6ZW5kTWFya2luZygpCiAgICAgICAgICAgICAg
ICAgaGFuZGxlLT5yZXNldEFsbG9jYXRlZCgpOwogICAgICAgICAgICAgfSk7CiAgICAgfQotICAg
ICAgICAKKyAgICAKICAgICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IG5leHRWZXJzaW9uKG1f
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xh
cmdlQWxsb2NhdGlvbnNPZmZzZXRGb3JUaGlzQ29sbGVjdGlvbjsgaSA8IG1fbGFyZ2VBbGxvY2F0
aW9ucy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDYgKzE2NSwxMSBAQCBwdWJsaWM6
CiAgICAgLy8gV2hlbiB0aGlzIGlzIHRydWUgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQg
YnV0IHRoZSBtYXJrIGJpdHMgaGF2ZW4ndCBjb252ZXJnZWQgeWV0LgogICAgIGJvb2wgaXNNYXJr
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc01hcmtpbmc7IH0KICAgICAKKyAgICBXZWFrU2V0KiBh
Y3RpdmVXZWFrU2V0c0JlZ2luKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9
CisgICAgV2Vha1NldCogYWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtT
ZXRzLmVuZCgpOyB9CisgICAgV2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0
dXJuIG1fbmV3QWN0aXZlV2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2
ZVdlYWtTZXRzRW5kKCkgeyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQorICAg
IAogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAg
ICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc3RkOjphcnJheTxzaXplX3QsIG51bVNp
emVDbGFzc2VzPiBzX3NpemVDbGFzc0ZvclNpemVTdGVwOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywzMCArMjcsMTggQEAKICNpbmNsdWRlICJNYXJraW5nQ29uc3Ry
YWludC5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZpc2l0Q291bnRl
ci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25z
dHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAg
OjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4
ZWN1dGVGdW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQotICAg
IDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQotICAgICwgbV9uYW1lKFdURk1v
dmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlv
bikpCi0gICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0eSkKLXsKLX0KK3N0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29u
c3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBl
eGVjdXRlRnVuY3Rpb24sCi0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVp
Y2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGls
aXR5KQorTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2
aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHks
IENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNt
IHBhcmFsbGVsaXNtKQogICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQog
ICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZN
b3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24o
V1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSkKICAgICAsIG1fdm9sYXRpbGl0eSh2
b2xhdGlsaXR5KQorICAgICwgbV9jb25jdXJyZW5jeShjb25jdXJyZW5jeSkKKyAgICAsIG1fcGFy
YWxsZWxpc20ocGFyYWxsZWxpc20pCiB7CiB9CiAKQEAgLTYzLDE0ICs1MSw3NCBAQCB2b2lkIE1h
cmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsK
IH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRv
ciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0
cmFpbnRQYXJhbGxlbGlzbSBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbSByZXN1bHQgPSBleGVjdXRlSW1wbCh2aXNpdG9yKTsKKyAg
ICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYg
KHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygi
KCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291
bnQoKSwgIiBpbiBleGVjdXRlKSIpOworICAgIGlmIChyZXN1bHQgPT0gQ29uc3RyYWludFBhcmFs
bGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAvLyBJdCdzIGlsbGVnYWwgdG8gcHJvZHVjZSBw
YXJhbGxlbCB3b3JrIGlmIHlvdSBoYXZlbid0IGFkdmVydGlzZWQgaXQgdXBmcm9udCBiZWNhdXNl
IHRoZSBzb2x2ZXIKKyAgICAgICAgLy8gaGFzIG9wdGltaXphdGlvbnMgZm9yIGNvbnN0cmFpbnRz
IHRoYXQgcHJvbWlzZSB0byBuZXZlciBwcm9kdWNlIHBhcmFsbGVsIHdvcmsuCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fcGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJh
bGxlbCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29u
c3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAw
OworfQorCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0Vz
dGltYXRlKHZpc2l0b3IpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9F
eGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAg
IGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGlu
Z1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAgIG1fZXhl
Y3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRD
b3VudCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0
U29tZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOwor
ICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgcHJlcGFyZVRvRXhl
Y3V0ZUltcGwoY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIHZpc2l0b3IpOworICAgIG1fbGFzdFZp
c2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIGlmICh2ZXJib3NlICYm
IHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZp
YXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4g
cHJlcGFyZVRvRXhlY3V0ZSkiKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJh
bGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0
Q291bnRlcih2aXNpdG9yKTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAg
aWYgKHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxv
ZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0
Q291bnQoKSwgIiBpbiBkb1BhcmFsbGVsV29yaykiKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNp
dENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWlu
dDo6ZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0
Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1w
bCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENv
dW50KCk7CisgICAgaWYgKHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAg
ICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRD
b3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBmaW5pc2hQYXJhbGxlbFdvcmspIik7Cit9CisKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgU2xvdFZpc2l0b3ImKQoreworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpk
b1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdv
cmtJbXBsKFNsb3RWaXNpdG9yJikKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgIkNvbnN0cmFpbnRDb25jdXJyZW5jeS5oIgorI2luY2x1ZGUgIkNvbnN0cmFp
bnRQYXJhbGxlbGlzbS5oIgogI2luY2x1ZGUgIkNvbnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5j
bHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3
dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00NCwx
NyArNDQsMTEgQEAgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJh
aW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAg
ICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAgICAgQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAg
IENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVu
dCwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpTZXF1ZW50aWFsKTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3Ry
YWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAg
ICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHkpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJr
aW5nQ29uc3RyYWludCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdD
b25zdHJhaW50KCk7CiAgICAgCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CiAgICAgCkBAIC02NSwzMiArNTksMzkgQEAgcHVibGljOgogICAgIAogICAgIHNp
emVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0K
ICAgICAKLSAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0
aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20g
ZXhlY3V0ZShTbG90VmlzaXRvciYpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1
YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAK
KyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKICAgICAKLSAg
ICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewot
ICAgICAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICByZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0
b3IpOwotICAgIH0KLSAgICAKLSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dv
cmtFc3RpbWF0ZSh2aXNpdG9yKTsKLSAgICB9CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3Im
KTsKKyAgICAKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAg
ICAgCisgICAgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KCkgY29uc3QgeyByZXR1
cm4gbV9jb25jdXJyZW5jeTsgfQorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlz
bSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207IH0KKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAw
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1w
bChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNp
dG9yJik7CisgICAgdmlydHVhbCB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYp
OworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7
CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsg
Ly8gU28gaXQgY2FuIHNldCBtX2luZGV4LgogICAgIAogICAgIHVuc2lnbmVkIG1faW5kZXggeyBV
SU5UX01BWCB9OwogICAgIENTdHJpbmcgbV9hYmJyZXZpYXRlZE5hbWU7CiAgICAgQ1N0cmluZyBt
X25hbWU7Ci0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdU
aW1lb3V0JiB0aW1lb3V0KT4gbV9leGVjdXRlRnVuY3Rpb247Ci0gICAgOjpGdW5jdGlvbjxkb3Vi
bGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwogICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IG1fdm9sYXRpbGl0eTsKKyAgICBDb25zdHJhaW50Q29uY3VycmVuY3kg
bV9jb25jdXJyZW5jeTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9wYXJhbGxlbGlzbTsK
ICAgICBzaXplX3QgbV9sYXN0VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2MCArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSAiU3VwZXJT
YW1wbGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFya2lu
Z0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQgewotcHVibGljOgotICAgIEV4ZWN1dGlv
bkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICwg
bV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nOwotICAgIH0KLSAgICAKLSAgICBib29s
IHNob3VsZFRpbWVPdXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29t
ZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICAvLyBS
ZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KLSAgICBib29sIGRyYWluKEJpdFZlY3RvciYg
dW5leGVjdXRlZCkKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRl
ZCkgewotICAgICAgICAgICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVk
LmNsZWFyKGluZGV4KTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0KLQotICAgIHZvaWQgZXhlY3V0ZShzaXplX3Qg
aW5kZXgpCi0gICAgewotICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNp
dG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVk
LnNldChpbmRleCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBNYXJraW5nQ29uc3RyYWlu
dFNldCYgbV9zZXQ7Ci0gICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBNb25vdG9uaWNU
aW1lIG1fdGltZW91dDsKLSAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKLSAgICBib29sIG1fZGlk
VmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OwotfTsKLQotTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1h
cmtpbmdDb25zdHJhaW50U2V0KCkKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3Ry
YWludFNldChIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCiB7CiB9CiAKQEAgLTEwNywx
OCArNjUsOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAg
bV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0
cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5KQotewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdD
b25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1v
dmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7Ci19Ci0KLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OmFkZCgKLSAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAg
IDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBl
eGVjdXRlRnVuY3Rpb24sCi0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVp
Y2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGls
aXR5KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlv
biwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5
IGNvbmN1cnJlbmN5KQogewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJh
aW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRp
bGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50
PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rp
b24pLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJh
aW50U2V0OjphZGQoCkBAIC0xMzEsOSArODAsOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0
OjphZGQoCiAgICAgbV9zZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29s
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIHJl
c3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvciwgdGltZW91dCk7CisgICAgYm9v
bCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTE0OCwyNyArOTcsMjcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJv
bnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGlt
ZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1
dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZl
ciBzb2x2ZXIoKnRoaXMpOwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlvbiA9IG1faXRlcmF0
aW9uKys7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2co
ImkjIiwgaXRlcmF0aW9uLCAiOiIpOwogCi0gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJh
aW50cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwg
dGhlbgotICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1
dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgLy8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBhbnkgdmlzaXRvciBk
cmFpbmluZywgc28gaXQncyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25zdHJhaW50cyBvdGhl
cgotICAgIC8vIHRoYW4gcm9vdHMuCi0gICAgaWYgKGl0ZXJhdGlvbiA9PSAxKQorICAgIGlmIChp
dGVyYXRpb24gPT0gMSkgeworICAgICAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFu
eSB2aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0
cmFpbnRzCisgICAgICAgIC8vIG90aGVyIHRoYW4gcm9vdHMuCisgICAgICAgIHNvbHZlci5kcmFp
bihtX3VuZXhlY3V0ZWRSb290cyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAg
Ci0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMp
KQorICAgIGlmIChpdGVyYXRpb24gPT0gMikgeworICAgICAgICBzb2x2ZXIuZHJhaW4obV91bmV4
ZWN1dGVkT3V0Z3Jvd3Rocyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCiAg
ICAgLy8gV2Ugd2FudCB0byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50
cyAtIHRoZSBvbmVzIHRoYXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBh
IHN0b3AtdGhlLXdvcmxkIEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZl
IGEgdGVuZGVuY3kgdG8gZ28gdG90YWxseQpAQCAtMjE1LDMzICsxNjQsMTYgQEAgYm9vbCBNYXJr
aW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgogICAgICAgICAgICAgcmV0dXJuIGEtPnZv
bGF0aWxpdHkoKSA+IGItPnZvbGF0aWxpdHkoKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9y
IChNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCA6IG1fb3JkZXJlZCkgewotICAgICAgICBz
aXplX3QgaSA9IGNvbnN0cmFpbnQtPmluZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhl
Y3V0aW9uQ29udGV4dC5kaWRFeGVjdXRlKGkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9u
Y2Ugd2UncmUgaW4gY29udmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBz
b21lIG1hcmtpbmcgaGFwcGVuIGFueXRpbWUKLSAgICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAg
ICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMg
dW50aWwgdGltZW91dD8gTm90IGNsZWFyIGlmIHRoYXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Ig
d29yc2UuIE1heWJlIGV2ZW4gYmV0dGVyIGlzIHRoaXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZp
c2l0b3IgaXMgZW1wdHksIGtlZXAgcnVubmluZy4KLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRv
ciBpcyBoYXMgYXQgbGVhc3QgTiB0aGluZ3MsIHJldHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1
biB1bnRpbCB0aW1lb3V0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2ODMyCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0
U29tZXRoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHNvbHZl
ci5jb252ZXJnZShtX29yZGVyZWQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIFJl
dHVybiB0cnVlIGlmIHdlJ3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlmIHdlIGRpZCBub3Qg
dmlzaXQgYW55dGhpbmcuCisgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsK
IH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9y
IChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUo
dmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwor
ICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjps
b2dHQygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBIZWFwOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CisKIGNsYXNzIE1hcmtp
bmdDb25zdHJhaW50U2V0IHsKIHB1YmxpYzoKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOwor
ICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmKTsKICAgICB+TWFya2luZ0NvbnN0cmFpbnRT
ZXQoKTsKICAgICAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwpAQCAtNDEsMTUgKzQ0LDkg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZp
c2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5KTsKLSAgICAKLSAgICB2b2lkIGFkZCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsCi0gICAgICAgIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNs
b3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9u
PGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50
Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQpOwogICAgIAogICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVl
X3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIApAQCAtNjAsMjEgKzU3LDE5IEBAIHB1Ymxp
YzoKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3Ry
YWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFz
c3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20g
dGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RWaXNpdG9y
JiwKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKICAgICAK
ICAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdh
bnMuCiAgICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgot
ICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNv
bnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogICAgIAot
ICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYsIE1vbm90b25pY1Rp
bWUgdGltZW91dCk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9y
Jik7CiAgICAgCi0gICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJp
dFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRT
b21ldGhpbmcpOworICAgIGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRWZWN0b3ImIHVuZXhl
Y3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAg
ICAKKyAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOwog
ICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3NldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyAKKworTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25z
dHJhaW50U2V0JiBzZXQpCisgICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKKyAgICAsIG1fbWFpblZp
c2l0b3IobV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX3NldChzZXQpCit7
CisgICAgbV9oZWFwLmZvckVhY2hTbG90VmlzaXRvcigKKyAgICAgICAgWyZdIChTbG90VmlzaXRv
ciYgdmlzaXRvcikgeworICAgICAgICAgICAgbV92aXNpdENvdW50ZXJzLmFwcGVuZChWaXNpdENv
dW50ZXIodmlzaXRvcikpOworICAgICAgICB9KTsKK30KKworTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6On5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpCit7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6OmRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0
IFZpc2l0Q291bnRlciYgdmlzaXRDb3VudGVyIDogbV92aXNpdENvdW50ZXJzKSB7CisgICAgICAg
IGlmICh2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNv
bHZlcjo6ZXhlY3V0ZShTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJk
YTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3sKKyAgICBtX3BpY2tOZXh0
SXNTdGlsbEFjdGl2ZSA9IHRydWU7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbnVtVGhyZWFkc1Ro
YXRNYXlQcm9kdWNlV29yayk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnVzZVBhcmFsbGVsTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
KyAgICAgICAgICAgIGRhdGFMb2cocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCA/ICJQ
IiA6ICJOIiwgIjwiKTsKKyAgICAgICAgCisgICAgICAgIG1faGVhcC5ydW5GdW5jdGlvbkluUGFy
YWxsZWwoCisgICAgICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJ1bkV4ZWN1
dGlvblRocmVhZCh2aXNpdG9yLCBwcmVmZXJlbmNlLCBwaWNrTmV4dCk7IH0pOworICAgICAgICAK
KyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCI+Iik7
CisgICAgfSBlbHNlCisgICAgICAgIHJ1bkV4ZWN1dGlvblRocmVhZChtX21haW5WaXNpdG9yLCBw
cmVmZXJlbmNlLCBwaWNrTmV4dCk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGlja05l
eHRJc1N0aWxsQWN0aXZlKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9udW1UaHJlYWRzVGhhdE1h
eVByb2R1Y2VXb3JrKTsKKyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDog
bV9kaWRFeGVjdXRlSW5QYXJhbGxlbCkKKyAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0t
PmZpbmlzaFBhcmFsbGVsV29yayhtX21haW5WaXNpdG9yKTsKKyAgICBtX2RpZEV4ZWN1dGVJblBh
cmFsbGVsLmNsZWFyKCk7CisgICAgCisgICAgaWYgKCFtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV90b0V4ZWN1
dGVTZXF1ZW50aWFsbHkpCisgICAgICAgICAgICBleGVjdXRlKCptX3NldC5tX3NldFtpbmRleFRv
UnVuXSk7CisgICAgICAgIG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmNsZWFyKCk7CisgICAgfQor
ICAgICAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0
eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENv
dW50KCkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkcmFpbihCaXRWZWN0
b3ImIHVuZXhlY3V0ZWQpCit7CisgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOwor
ICAgIGF1dG8gZW5kID0gdW5leGVjdXRlZC5lbmQoKTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisg
ICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpY2tOZXh0ID0gc2NvcGVkTGFtYmRhPHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+KCk+KAorICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4geworICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsKKyAgICAgICAg
fSk7CisgICAgZXhlY3V0ZShOZXh0Q29uc3RyYWludEZpcnN0LCBwaWNrTmV4dCk7CisgICAgdW5l
eGVjdXRlZC5jbGVhckFsbCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpj
b252ZXJnZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpCit7CisgICAg
aWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAo
b3JkZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIHNpemVfdCBp
bmRleCA9IDA7CisKKyAgICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbnN0cmFp
bnQgc2VxdWVudGlhbGx5IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVpY2tseSBnaXZlIHVzIGEKKyAg
ICAvLyByZXN1bHQuIElmIHdlIHJhbiBpdCBpbiBwYXJhbGxlbCB0byBvdGhlciBjb25zdHJhaW50
cywgdGhlbiB3ZSBtaWdodCBlbmQgdXAgaGF2aW5nIHRvIHdhaXQgZm9yCisgICAgLy8gdGhvc2Ug
b3RoZXIgY29uc3RyYWludHMgdG8gZmluaXNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRp
bWUgc2luY2UgZHVyaW5nIGNvbnZlcmdlbmNlIGl0J3MKKyAgICAvLyBlbXBpcmljYWxseSBtb3N0
IG9wdGltYWwgdG8gcmV0dXJuIHRvIGRyYWluaW5nIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdl
bmVyYXRlcyB3b3JrLiBNb3N0CisgICAgLy8gY29uc3RyYWludHMgZG9uJ3QgZ2VuZXJhdGUgYW55
IHdvcmsgbW9zdCBvZiB0aGUgdGltZSwgYW5kIHdoZW4gdGhleSBkbyBnZW5lcmF0ZSB3b3JrLCB0
aGV5IHRlbmQKKyAgICAvLyB0byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2Vu
dCBkcmFpbmluZyBjeWNsZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisg
ICAgLy8gd2UgZ2V0IHRoZSBoZWNrIG91dCBvZiBoZXJlIGFzIHNvb24gYXMgYSBjb25zdHJhaW50
IGdlbmVyYXRlcyB3b3JrLiBJIHRoaW5rIHRoYXQgcGFydCBvZiB3aGF0CisgICAgLy8gbWFrZXMg
dGhpcyBvcHRpbWFsIGlzIHRoYXQgd2UgYWxzbyBuZXZlciBhYm9ydCBydW5uaW5nIGEgY29uc3Ry
YWludCBlYXJseSwgc28gd2hlbiB3ZSBkbyBydW4KKyAgICAvLyBvbmUsIGl0IGhhcyBhbiBvcHBv
cnR1bml0eSB0byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2libHkgY2FuLgorICAg
IGlmIChvcmRlcltpbmRleF0tPnF1aWNrV29ya0VzdGltYXRlKG1fbWFpblZpc2l0b3IpKSB7Cisg
ICAgICAgIGV4ZWN1dGUoKm9yZGVyW2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgIGlmICht
X3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAob3JkZXIuaXNF
bXB0eSgpIHx8IGRpZFZpc2l0U29tZXRoaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBhdXRvIHBpY2tOZXh0ID0gc2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+KCk+KAorICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
eworICAgICAgICAgICAgaWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4
ID49IG9yZGVyLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9
ICpvcmRlcltpbmRleCsrXTsKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50LmluZGV4KCk7
CisgICAgICAgIH0pOworICAgIAorICAgIGV4ZWN1dGUoUGFyYWxsZWxXb3JrRmlyc3QsIHBpY2tO
ZXh0KTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYXJraW5n
Q29uc3RyYWludCYgY29uc3RyYWludCkKK3sKKyAgICBpZiAobV9leGVjdXRlZC5nZXQoY29uc3Ry
YWludC5pbmRleCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNvbnN0cmFpbnQucHJl
cGFyZVRvRXhlY3V0ZShOb0xvY2tpbmdOZWNlc3NhcnksIG1fbWFpblZpc2l0b3IpOworICAgIENv
bnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZShtX21h
aW5WaXNpdG9yKTsKKyAgICBkaWRFeGVjdXRlKHBhcmFsbGVsaXNtLCBjb25zdHJhaW50LmluZGV4
KCkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJl
YWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwg
U2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAg
IGZvciAoOzspIHsKKyAgICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4VG9SdW47CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVs
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhl
Y3V0ZUluUGFyYWxsZWwuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdv
cmtNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBhdXRvIHRyeU5leHRDb25zdHJhaW50ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fcGlja05leHRJc1N0aWxsQWN0aXZlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gcGlja1Jlc3VsdCA9IHBpY2tOZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXBpY2tSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BpY2tO
ZXh0SXNTdGlsbEFjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KCpwaWNr
UmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgTWFy
a2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbKnBpY2tSZXN1bHRdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PSBD
b25zdHJhaW50Q29uY3VycmVuY3k6OlNlcXVlbnRpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5hcHBlbmQoKnBpY2tSZXN1bHQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxpc20o
KSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yaysrOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhUb1J1biA9ICpwaWNrUmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdHJhaW50LnByZXBhcmVUb0V4ZWN1dGUobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHJl
ZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dHJ5UGFyYWxsZWxXb3JrKCkgfHwgdHJ5TmV4dENvbnN0cmFpbnQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0cnlOZXh0Q29uc3RyYWludCgpIHx8IHRyeVBhcmFsbGVsV29yaygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIG5vdGhp
bmcgbGVmdCB0byBydW4uIFRoZSBvbmx5IHdheSBmb3IgdXMgdG8gaGF2ZSBtb3JlIHdvcmsgaXMK
KyAgICAgICAgICAgICAgICAvLyBpZiBzb21lb25lIGlzIHJ1bm5pbmcgYSBjb25zdHJhaW50IHRo
YXQgbWF5IHByb2R1Y2UgcGFyYWxsZWwgd29yay4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoIW1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yaykKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBBbnkgd2FpdGluZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1c3QgcnVubmluZyB0aGUg
U2xvdFZpc2l0b3IuCisgICAgICAgICAgICAgICAgLy8gSSB3b25kZXIgaWYgdGhhdCB3b3VsZCBi
ZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpTZXF1ZW50aWFsOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTWFya2luZ0NvbnN0
cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl07CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKQorICAgICAgICAgICAg
Y29uc3RyYWludC5kb1BhcmFsbGVsV29yayh2aXNpdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChk
b1BhcmFsbGVsV29ya01vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBh
cmFsbGVsU2V0LmdldChpbmRleFRvUnVuKSkgeworICAgICAgICAgICAgICAgICAgICBtX2RpZEV4
ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC50
YWtlRmlyc3QoCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIHZhbHVlKSB7
IHJldHVybiB2YWx1ZSA9PSBpbmRleFRvUnVuOyB9KTsKKyAgICAgICAgICAgICAgICAgICAgbV90
b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmNsZWFyKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQu
cGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICAg
ICAgICAgICAgICAgICBtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmstLTsKKyAgICAgICAg
ICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICBpZiAo
cGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAg
ICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4pOwor
ICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4VG9S
dW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1dGUoQ29u
c3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBt
X2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFw
cGVuZChpbmRleCk7CisgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXgp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNv
bHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRW
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBI
ZWFwOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNl
dDsKKworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE1hcmtpbmdDb25zdHJhaW50U29sdmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICAKK3B1YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5n
Q29uc3RyYWludFNldCYpOworICAgIH5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpOworICAgIAor
ICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIFNjaGVk
dWxlclByZWZlcmVuY2UgeworICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgTmV4
dENvbnN0cmFpbnRGaXJzdAorICAgIH07CisKKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJl
ZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0
KTsKKyAgICAKKyAgICB2b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCk7CisgICAgCisg
ICAgdm9pZCBjb252ZXJnZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIp
OworICAgIAorICAgIHZvaWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOworICAgIAorcHJp
dmF0ZToKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxl
clByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNr
TmV4dCk7CisgICAgCisgICAgdm9pZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSwg
dW5zaWduZWQgaW5kZXgpOworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNsb3RWaXNpdG9yJiBt
X21haW5WaXNpdG9yOworICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKKyAgICBCaXRW
ZWN0b3IgbV9leGVjdXRlZDsKKyAgICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5Q
YXJhbGxlbDsKKyAgICBCaXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZl
Y3Rvcjx1bnNpZ25lZCwgMzI+IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgVmVjdG9yPHVu
c2lnbmVkLCAzMj4gbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7Cisg
ICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtVGhyZWFkc1RoYXRN
YXlQcm9kdWNlV29yayB7IDAgfTsKKyAgICBib29sIG1fcGlja05leHRJc1N0aWxsQWN0aXZlIHsg
dHJ1ZSB9OworICAgIFZlY3RvcjxWaXNpdENvdW50ZXIsIDE2PiBtX3Zpc2l0Q291bnRlcnM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShub25leGlzdGVudCkKQEAgLTEsOTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgT3BhcXVlUm9vdFNldCB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoT3BhcXVlUm9vdFNldCk7Ci1wdWJsaWM6Ci0gICAgT3BhcXVlUm9v
dFNldCgpCi0gICAgICAgIDogbV9sYXN0UXVlcmllZFJvb3QobnVsbHB0cikKLSAgICAgICAgLCBt
X2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29s
IGNvbnRhaW5zKHZvaWQqIHJvb3QpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAocm9vdCAhPSBt
X2xhc3RRdWVyaWVkUm9vdCkgewotICAgICAgICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSByb290
OwotICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IG1fcm9vdHMuY29udGFp
bnMocm9vdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY29udGFpbnNMYXN0UXVlcmll
ZFJvb3Q7Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3Jvb3RzLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAg
ICB7Ci0gICAgICAgIG1fcm9vdHMuY2xlYXIoKTsKLSAgICAgICAgbV9sYXN0UXVlcmllZFJvb3Qg
PSBudWxscHRyOwotICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgYm9vbCBhZGQodm9pZCogcm9vdCkKLSAgICB7Ci0gICAgICAgIGlmIChyb290
ID09IG1fbGFzdFF1ZXJpZWRSb290KQotICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVk
Um9vdCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmFkZChyb290KS5pc05ld0VudHJ5
OwotICAgIH0KLQotICAgIGludCBzaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3Jvb3RzLnNpemUoKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuYmVnaW4oKTsK
LSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmVuZCgpOwotICAgIH0KLQotCi1wcml2YXRl
OgotICAgIEhhc2hTZXQ8dm9pZCo+IG1fcm9vdHM7Ci0gICAgbXV0YWJsZSB2b2lkKiBtX2xhc3RR
dWVyaWVkUm9vdDsKLSAgICBtdXRhYmxlIGJvb2wgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5hbWUgSW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5j
PgorY2xhc3MgUGFyYWxsZWxTb3VyY2VBZGFwdGVyIDogcHVibGljIFNoYXJlZFRhc2s8SW5uZXJU
eXBlKCk+IHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNoYXJl
ZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53cmFw
RnVuYykKKyAgICAgICAgOiBtX291dGVyU291cmNlKG91dGVyU291cmNlKQorICAgICAgICAsIG1f
dW53cmFwRnVuYyh1bndyYXBGdW5jKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5uZXJUeXBl
IHJ1bigpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChtX2lubmVyU291cmNlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKElubmVyVHlwZSByZXN1bHQgPSBtX2lubmVyU291cmNlLT5ydW4o
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBt
X2lubmVyU291cmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9pbm5lclNvdXJjZSA9IG1fdW53cmFwRnVuYyhtX291dGVyU291cmNlLT5ydW4o
KSk7CisgICAgICAgIH0gd2hpbGUgKG1faW5uZXJTb3VyY2UpOworICAgICAgICByZXR1cm4gSW5u
ZXJUeXBlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE91dGVy
VHlwZSgpPj4gbV9vdXRlclNvdXJjZTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxJbm5lclR5cGUo
KT4+IG1faW5uZXJTb3VyY2U7CisgICAgVW53cmFwRnVuYyBtX3Vud3JhcEZ1bmM7CisgICAgTG9j
ayBtX2xvY2s7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElu
bmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4KK1JlZjxQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8
T3V0ZXJUeXBlLCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+PiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFk
YXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29uc3Qg
VW53cmFwRnVuYyYgdW53cmFwRnVuYykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBlLCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+KG91dGVy
U291cmNlLCB1bndyYXBGdW5jKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVN
YXJraW5nQ29uc3RyYWludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0
ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+
IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBD
b25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3kpCisgICAgOiBNYXJraW5nQ29uc3RyYWlu
dChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNv
bmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpCisgICAgLCBtX2V4
ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCit7Cit9CisKK1NpbXBsZU1h
cmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKQoreworfQorCitDb25z
dHJhaW50UGFyYWxsZWxpc20gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOwor
ICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworLy8gVGhpcyBhbGxvd3MgZm9yIGFuIGluZm9ybWFsIHdheSB0byBkZWZp
bmUgY29uc3RyYWludHMuIEp1c3QgcGFzcyBhIGxhbWJkYSB0byB0aGUgY29uc3RydWN0b3IuIFRo
ZSBvbmx5CisvLyBkb3duc2lkZSBpcyB0aGF0IHRoaXMgbWFrZXMgaXQgaGFyZCBmb3IgY29uc3Ry
YWludHMgdG8gYmUgc3RhdGVmdWwsIHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBiZQor
Ly8gcGFyYWxsZWwuIEluIHRob3NlIGNhc2VzLCBpdCdzIGVhc2llciB0byBqdXN0IHN1YmNsYXNz
IE1hcmtpbmdDb25zdHJhaW50LgorY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgOiBwdWJs
aWMgTWFya2luZ0NvbnN0cmFpbnQgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwg
Q1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50Q29uY3VycmVu
Y3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQpOworICAgIAorICAgIEpTX0VY
UE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpOworICAgIAorcHJpdmF0ZToK
KyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVy
cmlkZTsKKworICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5j
dGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4
LDkgKzk4LDcgQEAgU2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiAKIHZvaWQgU2xvdFZpc2l0
b3I6OmRpZFN0YXJ0TWFya2luZygpCiB7Ci0gICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3Bl
KCkgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29w
YXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cuCi0gICAg
ZWxzZQorICAgIGlmIChoZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29w
ZTo6RWRlbikKICAgICAgICAgcmVzZXQoKTsKIAogICAgIGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQ
cm9maWxlciA9IHZtKCkuaGVhcFByb2ZpbGVyKCkpCkBAIC0xMTEsNyArMTA5LDYgQEAgdm9pZCBT
bG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQo
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9i
eXRlc1Zpc2l0ZWQgPSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNo
b3RCdWlsZGVyID0gbnVsbHB0cjsKQEAgLTI3Nyw3ICsyNzQsNyBAQCB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBl
PgogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhDb250
YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChj
ZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKICAgICAKICAgICBjb250YWlu
ZXIubm90ZU1hcmtlZCgpOwpAQCAtMzQ2LDcgKzM0Myw3IEBAIHByaXZhdGU6CiAKIEFMV0FZU19J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwp
CiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2Nv
cGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCkBAIC00MzUsNyArNDMyLDcg
QEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCiAKIHZvaWQgU2xvdFZp
c2l0b3I6OnVwZGF0ZU11dGF0b3JJc1N0b3BwZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewot
ICAgIG1fbXV0YXRvcklzU3RvcHBlZCA9IChtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhl
V29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7CisgICAg
bV9tdXRhdG9ySXNTdG9wcGVkID0gKG1faGVhcC53b3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRp
bWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6dXBkYXRlTXV0
YXRvcklzU3RvcHBlZCgpCkBAIC00NTIsNyArNDQ5LDcgQEAgYm9vbCBTbG90VmlzaXRvcjo6aGFz
QWNrbm93bGVkZ2VkVGhhdFRoZQogCiBib29sIFNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVk
SXNVcFRvRGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZCA9PSAo
bV9oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9w
dGltaXplRm9yU3RvcHBlZE11dGF0b3IpOworICAgIHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQg
PT0gKG1faGVhcC53b3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRh
dG9yKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6b3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigp
CkBAIC00OTAsOCArNDg3LDYgQEAgTkVWRVJfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWlu
KE1vbgogICAgICAgICBtX3JpZ2h0VG9SdW4uc2FmZXBvaW50KCk7CiAgICAgICAgIGRvbmF0ZUtu
b3duUGFyYWxsZWwoKTsKICAgICB9Ci0gICAgCi0gICAgbWVyZ2VJZk5lY2Vzc2FyeSgpOwogfQog
CiBzaXplX3QgU2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKHNpemVfdCBi
eXRlc1JlcXVlc3RlZCkKQEAgLTU1MCw3ICs1NDUsNiBAQCBzaXplX3QgU2xvdFZpc2l0b3I6OnBl
cmZvcm1JbmNyZW1lbnRPZkRyCiAgICAgfQogCiAgICAgZG9uYXRlQWxsKCk7Ci0gICAgbWVyZ2VJ
Zk5lY2Vzc2FyeSgpOwogCiAgICAgcmV0dXJuIGJ5dGVzVmlzaXRlZCgpOwogfQpAQCAtNTYxLDE3
ICs1NTUsMTYgQEAgYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbigpCiAgICAg
cmV0dXJuIGRpZFJlYWNoVGVybWluYXRpb24obG9ja2VyKTsKIH0KIAotYm9vbCBTbG90VmlzaXRv
cjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYpCitib29sIFNsb3RW
aXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIp
CiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKQotICAgICAgICAmJiAhbV9oZWFwLm1fbnVtYmVyT2ZB
Y3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCkKLSAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1h
cmtTdGFjay0+aXNFbXB0eSgpOworICAgIHJldHVybiAhbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQ
YXJhbGxlbE1hcmtlcnMKKyAgICAgICAgJiYgIWhhc1dvcmsobG9ja2VyKTsKIH0KIAogYm9vbCBT
bG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0gICAgcmV0dXJu
ICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgIHJldHVy
biAhaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKQogICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFj
ay0+aXNFbXB0eSgpOwogfQogCkBAIC01ODMsMTIgKzU3NiwxNCBAQCBORVZFUl9JTkxJTkUgU2xv
dFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICBib29sIGlzQWN0aXZlID0gZmFsc2U7CiAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90Vmlz
aXRvciYpPj4gYm9udXNUYXNrOworICAgICAgICAKICAgICAgICAgewotICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKICAgICAgICAgICAgIGlm
IChpc0FjdGl2ZSkKICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFs
bGVsTWFya2Vycy0tOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxs
ZWxNYXJrZXJzKys7Ci0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHNoYXJlZERyYWlu
TW9kZSA9PSBNYXN0ZXJEcmFpbikgewogICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQpAQCAtNjI5LDI4ICs2
MjQsNTEgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlcwogCiAgICAg
ICAgICAgICAgICAgYXV0byBpc1JlYWR5ID0gWyZdICgpIC0+IGJvb2wgewogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaGFzV29yayhsb2NrZXIpCisgICAgICAgICAgICAgICAgICAgICAgICB8
fCBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBt
X2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVu
dGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91dCwgaXNSZWFkeSk7CiAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzaykKKyAgICAgICAgICAgICAgICAg
ICAgYm9udXNUYXNrID0gbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzazsKKyAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhp
dCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3JFYWNoTWFya1N0YWNrKAotICAgICAgICAg
ICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgewot
ICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3RhY2spLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghYm9udXNU
YXNrICYmIGlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCisg
ICAgICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRp
b25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc3RlYWxTb21lQ2VsbHNG
cm9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFj
ayhzdGFjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZX
YWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1h
cmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFy
a2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAg
ICAgICAgaWYgKGJvbnVzVGFzaykgeworICAgICAgICAgICAgYm9udXNUYXNrLT5ydW4oKnRoaXMp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUgbWFpbiB0aHJlYWQgY291bGQgc3Rp
bGwgYmUgcnVubmluZywgYW5kIG1heSBydW4gZm9yIGEgd2hpbGUuIFVubGVzcyB3ZSBjbGVhciB0
aGUgdGFzaworICAgICAgICAgICAgLy8gb3Vyc2VsdmVzLCB3ZSB3aWxsIGtlZXAgbG9vcGluZyBh
cm91bmQgdHJ5aW5nIHRvIHJ1biB0aGUgdGFzay4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAg
ICAgICAgICAgICAgaWYgKG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPT0gYm9udXNUYXNrKQor
ICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID0gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1f
aGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc0VtcHR5
KCkpOworICAgICAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIGlzQWN0aXZlID0gdHJ1ZTsKICAgICB9CiB9CkBAIC02NzAsMTUgKzY4OCwxOSBAQCBT
bG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgaWYgKE9wdGlvbnM6
Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMQogICAgICAgICB8fCAobV9oZWFwLm1fd29ybGRTdGF0
ZS5sb2FkKCkgJiBIZWFwOjptdXRhdG9yV2FpdGluZ0JpdCkKICAgICAgICAgfHwgIW1faGVhcC5o
YXNIZWFwQWNjZXNzKCkKLSAgICAgICAgfHwgbV9oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRo
ZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgfHwgbV9oZWFwLndvcmxkSXNTdG9wcGVkKCkp
IHsKICAgICAgICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gb3ZlciBkcmFpbkluUGFyYWxs
ZWwoKSB3aGVuIHdlIGhhdmUgYSBjb25jdXJyZW50IG11dGF0b3IgYnV0CiAgICAgICAgIC8vIG90
aGVyd2lzZSBpdCBpcyBub3QgcHJvZml0YWJsZS4KICAgICAgICAgcmV0dXJuIGRyYWluSW5QYXJh
bGxlbCh0aW1lb3V0KTsKICAgICB9CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9t
YXJraW5nTXV0ZXgpOwotICAgIGRvbmF0ZUFsbChsb2NrZXIpOwotICAgIAorICAgIGRvbmF0ZUFs
bChob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpKTsKKyAgICByZXR1cm4gd2FpdEZvclRl
cm1pbmF0aW9uKHRpbWVvdXQpOworfQorCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQg
U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCit7
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAg
IGZvciAoOzspIHsKICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAg
ICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwpAQCAtNzExLDYxICs3MzMsNiBA
QCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbGwoY29uc3QgQWJzdHJhCiAgICAgbV9oZWFwLm1f
bWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogfQogCi12b2lkIFNsb3RWaXNp
dG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvb3QpCi17Ci0gICAgaWYgKCFyb290KQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAx
KSB7Ci0gICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4KLSAg
ICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBz
aGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KLSAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0
IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdlLgotICAgIG1lcmdlT3BhcXVlUm9v
dHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLX0KLQotYm9v
bCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3QpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKCFt
X2lzSW5QYXJhbGxlbE1vZGUpOwotICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5jb250
YWlucyhyb290KTsKLX0KLQotVHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9v
dFRyaVN0YXRlKHZvaWQqIHJvb3QpIGNvbnN0Ci17Ci0gICAgaWYgKCFyb290KQotICAgICAgICBy
ZXR1cm4gRmFsc2VUcmlTdGF0ZTsKLSAgICAKLSAgICBpZiAobV9vcGFxdWVSb290cy5jb250YWlu
cyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4KTsKLSAgICBpZiAobV9oZWFw
Lm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCkpCi0gICAgICAgIHJldHVybiBUcnVlVHJpU3Rh
dGU7Ci0gICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6Om1l
cmdlSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKLX0KLQotdm9pZCBTbG90Vmlz
aXRvcjo6bWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpCi17Ci0gICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX29wYXF1ZVJvb3RzLnNpemUoKSkgPCBPcHRpb25zOjpvcGFxdWVSb290
TWVyZ2VUaHJlc2hvbGQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1lcmdlT3BhcXVlUm9vdHMo
KTsKLX0KLSAgICAKIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCiB7CiAgICAgaWYgKCFtX2lz
SW5QYXJhbGxlbE1vZGUpIHsKQEAgLTc4NSwxNiArNzUyLDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6
ZG9uYXRlQW5kRHJhaW4oTW9ub3RvbgogICAgIGRyYWluKHRpbWVvdXQpOwogfQogCi12b2lkIFNs
b3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzKCkKLXsKLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgICAgICBm
b3IgKGF1dG8qIHJvb3QgOiBtX29wYXF1ZVJvb3RzKQotICAgICAgICAgICAgbV9oZWFwLm1fb3Bh
cXVlUm9vdHMuYWRkKHJvb3QpOwotICAgIH0KLSAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7Ci19
Ci0KIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlciogd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikKIHsKICAgICBtX2hlYXAubV93
ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMu
aCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIK
LSNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAj
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CkBAIC05NSwxMCArOTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJh
cnJpZXJlZChKU1ZhbHVlKTsKICAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTQ2Vs
bCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsK
KyAgICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJv
b3Qgd2FzIG5ldy4KICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGNvbnRhaW5zT3Bh
cXVlUm9vdCh2b2lkKikgY29uc3Q7Ci0gICAgVHJpU3RhdGUgY29udGFpbnNPcGFxdWVSb290VHJp
U3RhdGUodm9pZCopIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBj
b25zdDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNF
bXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQogCkBAIC0xMjEsNiArMTE5LDgg
QEAgcHVibGljOgogCiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsKE1vbm90
b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogICAgIFNoYXJl
ZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbFBhc3NpdmVseShNb25vdG9uaWNUaW1lIHRpbWVv
dXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICAKKyAgICBTaGFyZWREcmFpblJl
c3VsdCB3YWl0Rm9yVGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3Rvbmlj
VGltZTo6aW5maW5pdHkoKSk7CiAKICAgICAvLyBBdHRlbXB0cyB0byBwZXJmb3JtIGFuIGluY3Jl
bWVudCBvZiBkcmFpbmluZyB0aGF0IGludm9sdmVzIG9ubHkgd2Fsa2luZyBgYnl0ZXNgIHdvcnRo
IG9mIGRhdGEuIFRoaXMKICAgICAvLyBpcyBsaWtlbHkgdG8gYWNjaWRlbnRhbGx5IHdhbGsgbW9y
ZSBvciBsZXNzIHRoYW4gdGhhdC4gSXQgd2lsbCB1c3VhbGx5IG1hcmsgbW9yZSB0aGFuIGJ5dGVz
LiBJdCBtYXkKQEAgLTEyOCw4ICsxMjgsNiBAQCBwdWJsaWM6CiAgICAgLy8gcmFyZSBjYXNlcyBo
YXBwZW4gdGVtcG9yYXJpbHkgZXZlbiBpZiB3ZSdyZSBub3QgcmVhY2hpbmcgdGVybWluYXRpb24p
LgogICAgIHNpemVfdCBwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyhzaXplX3QgYnl0ZXMpOwog
ICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VJZk5lY2Vzc2FyeSgpOwotCiAg
ICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBhdXhpbGlhcnkgb2Ygc29tZSBzaXplIHRo
YXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBkb24ndCBkbwogICAgIC8vIHRoaXMgdGhl
biB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCiAgICAgdm9pZCBtYXJrQXV4
aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOwpAQCAtMTk0LDEwICsxOTIsNiBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKEhlYXBDZWxsKik7CiAgICAgCi0g
ICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0KLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJ
ZlByb2ZpdGFibGUoKTsKLQogICAgIHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsK
ICAgICAKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKQEAgLTIxNSw3ICsyMDksNiBA
QCBwcml2YXRlOgogCiAgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKICAgICBN
YXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKLSAgICBPcGFxdWVSb290U2V0IG1fb3BhcXVl
Um9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRo
ZSBnYXJiYWdlIGNvbGxlY3Rvci4KICAgICBib29sIG1faWdub3JlTmV3T3BhcXVlUm9vdHMgeyBm
YWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcgbW9kZS4KICAgICAKICAgICBzaXplX3Qg
bV9ieXRlc1Zpc2l0ZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2
ICsxMzYsMjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYQogICAg
ICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwogfQogCitpbmxpbmUgYm9vbCBTbG90Vmlz
aXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmFkZChwdHIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV92aXNpdENvdW50Kys7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCogcHRyKSBjb25zdAoreworICAgIHJldHVybiBoZWFwKCktPm1fb3BhcXVlUm9vdHMuY29udGFp
bnMocHRyKTsKK30KKwogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAobV9pc0ZpcnN0VmlzaXQpIHsKQEAgLTE1
OSwxMiArMTc2LDEyIEBAIGlubGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0CiAK
IGlubGluZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKIHsKLSAgICByZXR1cm4gKm1faGVhcC5tX3Zt
OworICAgIHJldHVybiAqbV9oZWFwLnZtKCk7CiB9CiAKIGlubGluZSBjb25zdCBWTSYgU2xvdFZp
c2l0b3I6OnZtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKm1faGVhcC5tX3ZtOworICAgIHJldHVy
biAqbV9oZWFwLnZtKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIlBhcmFsbGVsU291cmNlQWRhcHRlci5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0
aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIApAQCAtODgsNSArODks
NDIgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vic3BhY2U6OmZpbmRFbXB0eQogICAgIHJldHVy
biBudWxscHRyOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+PiBT
dWJzcGFjZTo6cGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UoKQoreworICAgIGNsYXNzIFRhc2sgOiBw
dWJsaWMgU2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFRhc2soTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgICAgICAgICA6IG1fYWxs
b2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBNYXJrZWRBbGxvY2F0b3IqIHJ1bigpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIE1hcmtlZEFsbG9j
YXRvciogcmVzdWx0ID0gbV9hbGxvY2F0b3I7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAg
ICAgICAgICAgICAgIG1fYWxsb2NhdG9yID0gcmVzdWx0LT5uZXh0QWxsb2NhdG9ySW5TdWJzcGFj
ZSgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICBwcml2YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgICAg
ICBMb2NrIG1fbG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFz
ayhtX2ZpcnN0QWxsb2NhdG9yKSk7Cit9CisKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKCk+PiBTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNl
KCkKK3sKKyAgICByZXR1cm4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVyPE1hcmtlZEFsbG9j
YXRvciosIE1hcmtlZEJsb2NrOjpIYW5kbGUqPigKKyAgICAgICAgcGFyYWxsZWxBbGxvY2F0b3JT
b3VyY2UoKSwKKyAgICAgICAgW10gKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSAtPiBSZWZQ
dHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4geworICAgICAgICAgICAgaWYg
KCFhbGxvY2F0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICByZXR1cm4gYWxsb2NhdG9yLT5wYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKTsKKyAgICAg
ICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE3ICs2OSwyNCBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hBbGxv
Y2F0b3IoY29uc3QgRnVuYyYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFs
bG9jYXRvciooKT4+IHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCk7CisgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRCbG9jayhjb25zdCBGdW5j
Jik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hO
b3RFbXB0eU1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxO
b3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCk7CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KICAgICB2b2lkIGZvckVhY2hMYXJnZUFsbG9jYXRpb24oY29uc3QgRnVuYyYpOwogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2Vs
bChjb25zdCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBS
ZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNoTWFya2VkQ2VsbElu
UGFyYWxsZWwoY29uc3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAg
ICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDYgKzg0LDUzIEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsKGNv
bnN0IEYKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK1JlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwo
Y29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNoYXJlZFRhc2s8
dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKFN1YnNwYWNl
JiBzdWJzcGFjZSwgY29uc3QgRnVuYyYgZnVuYykKKyAgICAgICAgICAgIDogbV9zdWJzcGFjZShz
dWJzcGFjZSkKKyAgICAgICAgICAgICwgbV9ibG9ja1NvdXJjZShzdWJzcGFjZS5wYXJhbGxlbE5v
dEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKSkKKyAgICAgICAgICAgICwgbV9mdW5jKGZ1bmMpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBydW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChNYXJr
ZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgeworICAgICAg
ICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCisgICAgICAgICAgICAgICAgICAg
IFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0
YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgY2VsbCwga2lu
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0
aW9ucykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIG1fbmVl
ZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1fc3Vic3BhY2UuZm9yRWFjaExhcmdlQWxsb2NhdGlvbigKKyAg
ICAgICAgICAgICAgICBbJl0gKExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbikgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbi0+aXNNYXJrZWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZnVuYyh2aXNpdG9yLCBhbGxvY2F0aW9uLT5jZWxsKCksIG1fc3Vic3BhY2Uu
bV9hdHRyaWJ1dGVzLmNlbGxLaW5kKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBTdWJzcGFjZSYgbV9zdWJzcGFjZTsKKyAg
ICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IG1fYmxvY2tT
b3VyY2U7CisgICAgICAgIEZ1bmMgbV9mdW5jOworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICAg
ICAgYm9vbCBtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyB7IHRydWUgfTsKKyAgICB9Owor
ICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcywgZnVuYykpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaExpdmVDZWxsKGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yRWFjaE1hcmtlZEJsb2NrKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZpc2l0Q291bnRlciB7Citw
dWJsaWM6CisgICAgVmlzaXRDb3VudGVyKCkgeyB9CisgICAgCisgICAgVmlzaXRDb3VudGVyKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcigmdmlzaXRvcikKKyAgICAg
ICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgpKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7IHJldHVybiAqbV92
aXNpdG9yOyB9CisgICAgCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmlzaXRvci0+dmlzaXRDb3VudCgpIC0gbV9pbml0aWFsVmlzaXRDb3Vu
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFNsb3RWaXNpdG9yKiBtX3Zpc2l0b3IgeyBu
dWxscHRyIH07CisgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAwIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlz
aXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIK
LSNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBWaXNpdGluZ1RpbWVvdXQgewotcHVibGljOgotICAgIFZpc2l0aW5nVGlt
ZW91dCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBWaXNpdGluZ1RpbWVvdXQoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91
dCkKLSAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZpc2l0U29tZXRoaW5nKQotICAg
ICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0Q291bnQoKSkKLSAgICAgICAg
LCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCB2aXNp
dENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENvdW50QmVmb3JlOwotICAgIH0KLQotICAg
IGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8fCB2aXNpdENvdW50KHZpc2l0
b3IpOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcodmlz
aXRvcikgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0g
ICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKLSAgICBzaXplX3QgbV92aXNp
dENvdW50QmVmb3JlIHsgMCB9OwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a0Jsb2NrLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQg
V2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1ZhbHVlKCk7Ci0gICAg
ICAgIGlmIChjb250YWluZXIuaXNNYXJrZWRDb25jdXJyZW50bHkobWFya2luZ1ZlcnNpb24sIGpz
VmFsdWUuYXNDZWxsKCkpKQorICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkKG1hcmtpbmdW
ZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KGpzVmFs
dWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvcikpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1NCw2ICsz
NTQsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVBc3luY0l0ZXJhdGlvbiA9IGZhCiAgICAgXAog
ICAgIHYodW5zaWduZWQsIG1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSwgMTAw
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkdDTWFya2Vycywg
Y29tcHV0ZU51bWJlck9mR0NNYXJrZXJzKDgpLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJv
b2wsIHVzZVBhcmFsbGVsTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIsIHRydWUsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYodW5zaWduZWQsIG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCwgMTAwMCwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIG1pbkhlYXBVdGlsaXphdGlvbiwgMC44
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgbWluTWFya2VkQmxvY2tVdGlsaXph
dGlvbiwgMC45LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEw
MSwxNCArMTEwMSwxNCBAQCBib29sIFN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKCkKICAgICAv
LyBoYXMgYW55IGxhcmdlIHByb3BlcnR5IG5hbWVzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTczMzQKICAgICAKLSAgICByZXR1cm4gKCFtX2dsb2Jh
bE9iamVjdCB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX2dsb2JhbE9iamVjdC5nZXQo
KSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0
KCkgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkp
KTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01hcmtlZChtX2dsb2Jh
bE9iamVjdC5nZXQoKSkpCisgICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJv
dG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWQoc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkp
KTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIGlmICghaXNDaGVhcER1cmluZ0dDKCkpCi0gICAgICAgIHJldHVybiBIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2Vk
KHRoaXMpOwogICAgIAogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpcyk7CiAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBkb2VzIHNvbWUgY2hhbmdlcyB0byBtYWtlIGl0IGVh
c2llciB0byBkbyBwYXJhbGxlbCBjb25zdHJhaW50IHNvbHZpbmc6CisgICAgICAgIAorICAgICAg
ICAtIEkgZmluYWxseSByZW1vdmVkIGRlcGVuZGVuY3lXaXRoLiBUaGlzIHdhcyBhIHNpbGx5IGNv
bnN0cnVjdCB3aG9zZSBvbmx5IHB1cnBvc2UgaXMgdG8gY29uZnVzZQorICAgICAgICAgIHBlb3Bs
ZSBhYm91dCB3aGF0IGl0IG1lYW5zIHRvIGhhdmUgYSBkZXBlbmRlbmN5IGNoYWluLiBJIHRvb2sg
dGhhdCBhcyBhbiBvcHBvcnR1bml0eSB0byBncmVhbHkKKyAgICAgICAgICBzaW1wbGlmeSB0aGUg
R0MncyB1c2Ugb2YgZGVwZW5kZW5jeSBjaGFpbmluZy4KKyAgICAgICAgCisgICAgICAgIC0gQWRk
ZWQgbW9yZSBsb2dpYyB0byBEZXF1ZTw+LCBzaW5jZSBJIHVzZSBpdCBmb3IgcGFydCBvZiB0aGUg
bG9hZCBiYWxhbmNlci4KKyAgICAgICAgCisgICAgICAgIC0gTWFkZSBpdCBwb3NzaWJsZSB0byBw
cm9maWxlIGxvY2sgY29udGVudGlvbi4gU2VlCisgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDI1MCNjMCBmb3Igc29tZSBwcmVsaW1pbmFyeSBtZWFz
dXJlbWVudHMuCisgICAgICAgIAorICAgICAgICAtIEludHJvZHVjZWQgaG9sZExvY2tJZiwgd2hp
Y2ggbWFrZXMgaXQgZWFzeSB0byBwZXJmb3JtIHByZWRpY2F0ZWQgbG9jayBhY3F1aXNpdGlvbi4g
V2UgdXNlIHRoYXQKKyAgICAgICAgICB0byBwaWNrIGEgbG9jayBpbiBXZWJDb3JlLgorCisgICAg
ICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0F0b21p
Y3MuaDoKKyAgICAgICAgKFdURjo6ZGVwZW5kZW5jeSk6CisgICAgICAgIChXVEY6OkRlcGVuZGVu
Y3lXaXRoOjpEZXBlbmRlbmN5V2l0aCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmRlcGVuZGVu
Y3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmg6CisgICAgICAgIChX
VEY6OkJpdFZlY3Rvcjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OkNvbmN1cnJlbnRQdHJIYXNo
U2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25jdXJyZW50UHRy
SGFzaFNldCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpkZWxldGVPbGRU
YWJsZXMpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Y2xlYXIpOgorICAg
ICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRTbG93KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQ
dHJIYXNoU2V0OjpUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3dGYvQ29uY3VycmVudFB0ckhh
c2hTZXQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpjb250
YWlucyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGQpOgorICAgICAg
ICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6bWF4TG9hZCBjb25zdCk6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpoYXNoKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFB0ckhhc2hTZXQ6OmNhc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6
Y29udGFpbnNJbXBsIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6
OmFkZEltcGwpOgorICAgICAgICAqIHd0Zi9EZXF1ZS5oOgorICAgICAgICAoV1RGOjppbmxpbmVD
YXBhY2l0eT46OnRha2VGaXJzdCk6CisgICAgICAgICogd3RmL0Zhc3RNYWxsb2MuaDoKKyAgICAg
ICAgKiB3dGYvTG9jay5jcHA6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrU2xvdyk6Cisg
ICAgICAgICogd3RmL0xvY2tlci5oOgorICAgICAgICAoV1RGOjpob2xkTG9ja0lmKToKKyAgICAg
ICAgKiB3dGYvU2NvcGVkTGFtYmRhLmg6CisgICAgICAgICogd3RmL1NoYXJlZFRhc2suaDoKKyAg
ICAgICAgKFdURjo6U2hhcmVkVGFzazxQYXNzZWRSZXN1bHRUeXBlKToKKyAgICAgICAgKFdURjo6
U2hhcmVkVGFzazxSZXN1bHRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvU3RhY2tTaG90
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6OlN0YWNrU2hvdCk6CisgICAgICAg
IChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojph
cnJheSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6
OlN0YWNrU2hvdDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6
aGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6aXNIYXNoVGFibGVEZWxldGVk
VmFsdWUgY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6Om9wZXJhdG9yPiBjb25zdCk6
CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6ZGVsZXRlZFZhbHVlQXJyYXkpOgorICAgICAgICAo
V1RGOjpTdGFja1Nob3RIYXNoOjpoYXNoKToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90SGFzaDo6
ZXF1YWwpOgorICAgICAgICAqIHd0Zi9TdGFja1Nob3RQcm9maWxlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OlN0YWNrU2hvdFByb2ZpbGVyKToKKyAgICAgICAg
KFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OnByb2ZpbGUpOgorICAgICAgICAoV1RGOjpTdGFja1No
b3RQcm9maWxlcjo6cnVuKToKKwogMjAxNy0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIEludGVybmFscy50ZXJtaW5hdGVTZXJ2aWNlV29ya2Vy
LCBhbmQgdGhlIGFiaWxpdHkgdG8gcmVzdGFydCBzZXJ2aWNlIHdvcmtlcnMgZm9yIHBvc3RNZXNz
YWdlLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCQkwRjBGNTI2QjFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEY1MjY5
MUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwICovOyB9OwogCQkwRjMwQkE5MDFF
Nzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4NDcgLyogR2xv
YmFsVmVyc2lvbi5jcHAgKi87IH07CisJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwICovOyB9OwogCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDNEOEVGMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICovOyB9OwogCQkw
RjVCRjE3NjFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNzQxRjIzRDQ5QTAwMjlEOTFEIC8q
IEdpZ2FjYWdlLmNwcCAqLzsgfTsKIAkJMEY2MEYzMkYxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tl
ZFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAg
Ki87IH07CkBAIC0xODMsNiArMTg0LDggQEAKIAkJMEYzMEJBOEQxRTc4NzA4RTAwMkNBODQ3IC8q
IExvZ2dpbmdIYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dp
bmdIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBCQThFMUU3ODcw
OEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2dnaW5nSGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjMwQkE4RjFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hUcmFpdHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hUcmFpdHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQ
dHJIYXNoU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1
cnJlbnRQdHJIYXNoU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMENC
NTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRQdHJIYXNoU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMzFERDcwMUYxMzA4QkMwMDcyRUI0QSAvKiBMb2NrQWxnb3Jp
dGhtSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0OEM3RDFGNDdBQTlEMDAzQ0ZFRjIgLyogU3Ry
aW5nVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ZlY3Rvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmFuZG9tLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjYsNiArMjI5LDggQEAKIAkJMEY5RDMzNUMxNjVEQkE3
MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWxlUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUUxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW50U3RyZWFtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1No
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tTaG90Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTA1MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFj
a1Nob3RQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1No
b3RQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxODE4MEZB
MjE4MDA5QjZCNEQgLyogQmFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJh
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZC
NEQgLyogQmFnVG9IYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lz
dGVtVHJhY2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFj
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTQsNiArNzk5LDggQEAKIAkJ
CQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJ
CQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVB
QjFGNENENjFFMDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1
ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBG
MzBDQjU5MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJ
CTBGREI2OThEMUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEy
NjFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2
ODAwNDI5NTdEIC8qIENQVVRpbWUuaCAqLywKQEAgLTEwMDUsNiArMTAxMiw4IEBACiAJCQkJQThB
NDczMEQxNTFBODI1QjAwNDEyM0ZGIC8qIFNwZWN0cnVtLmggKi8sCiAJCQkJQThBNDczMEUxNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmNwcCAqLywKIAkJCQlBOEE0NzMwRjE1MUE4MjVC
MDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuaCAqLywKKwkJCQkwRjlEQUEwNDFGRDFDMzdCMDA3OUM1
QjIgLyogU3RhY2tTaG90LmggKi8sCisJCQkJMEY5REFBMDUxRkQxQzM3QjAwNzlDNUIyIC8qIFN0
YWNrU2hvdFByb2ZpbGVyLmggKi8sCiAJCQkJRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0
YWNrU3RhdHMuY3BwICovLAogCQkJCUZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0
YXRzLmggKi8sCiAJCQkJMzEzRURFQzk3NzhFNDlDOUJFQTkxQ0ZDIC8qIFN0YWNrVHJhY2UuY3Bw
ICovLApAQCAtMTQyNiw2ICsxNDM1LDcgQEAKIAkJCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQg
LyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyQjFGM0Q0ODYwMDBD
NzQ5NTAgLyogUGVyc2lzdGVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUy
QzFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJEMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0
ZW50RW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM2MjE2NURCQTczMDA1QUQz
ODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBG
OTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0NiwxMSArMzQ2LDE2IEBAIEFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVw
ZW5kZW5jeSgKICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA4Pjo6dHlwZSogPSBudWxscHRyPgordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShU
IHZhbHVlKQogewogICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDY0X3QgY29weSA9
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUpOworICAgIHVuaW9uIHsKKyAgICAgICAgdWlu
dDMyX3QgY29weTsKKyAgICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5ID0gMDsK
KyAgICB1LnZhbHVlID0gdmFsdWU7CiAjaWYgQ1BVKEFSTTY0KQogICAgIC8vIENyZWF0ZSBhIG1h
Z2ljYWwgemVybyB2YWx1ZSB0aHJvdWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRp
b24KICAgICAvLyBpc24ndCB2aXNpYmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0
aGVuIHVzYWJsZSBhcyBhbiBvZmZzZXQgaW4KQEAgLTM2Myw4MCArMzY4LDIwIEBAIEFMV0FZU19J
TkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmEKICAgICAvLyBvciBhbiBhY3F1aXJlIGxv
YWQuCiAgICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgogICAgICAg
ICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29w
eSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBh
c20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCiAgICAgICAgIDogW2RlcGVuZGVu
Y3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7CisgICAgICAg
IDogW2luXSAiciIodS5jb3B5KSk7CiAjZWxzZQogICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVl
ZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KICAgICBsb2FkTG9hZEZlbmNlKCk7CiAgICAgZGVw
ZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOworICAgIFVOVVNFRF9QQVJBTSh1
LmNvcHkpOwogI2VuZGlmCiAgICAgcmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKLS8vIEZJWE1FOiBU
aGlzIGNvZGUgaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgb3RoZXIgZGVwZW5kZW5jeSgpIG92
ZXJsb2FkLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQw
NQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihU
KSA9PSA0Pjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3koVCB2YWx1ZSkKLXsKLSAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQzMl90
IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0g
ICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtk
ZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwot
I2VsaWYgQ1BVKEFSTSkKLSAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0i
Ci0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5d
ICJyIihjb3B5KSk7Ci0jZWxzZQotICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5
ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVwZW5k
ZW5jeTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHNpemVvZihUKSA9PSAyPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRl
bmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNf
Y2FzdDx1aW50MzJfdD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSAxPjo6dHlwZSogPSBudWxscHRyPgotQUxX
QVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
ZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXN0cnVjdCBEZXBlbmRlbmN5V2l0aCB7Ci1wdWJsaWM6Ci0gICAgRGVwZW5k
ZW5jeVdpdGgoKQotICAgICAgICA6IGRlcGVuZGVuY3kobnVsbERlcGVuZGVuY3koKSkKLSAgICAg
ICAgLCB2YWx1ZSgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBl
bmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotICAgICAgICA6IGRlcGVuZGVuY3ko
ZGVwZW5kZW5jeSkKLSAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKLSAgICBUIHZhbHVlOwotfTsKLSAgICAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgRGVwZW5kZW5jeVdpdGg8VD4gZGVwZW5kZW5jeVdpdGgo
RGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGVw
ZW5kZW5jeVdpdGg8VD4oZGVwZW5kZW5jeSwgdmFsdWUpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogaW5saW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KQogewpAQCAtNDY5LDEwICs0MTQsOCBAQCBBTFdBWVNfSU5MSU5FIFQmIGVuc3VyZVBvaW50ZXIo
QXRvbWljPFQqCiAKIHVzaW5nIFdURjo6QXRvbWljOwogdXNpbmcgV1RGOjpEZXBlbmRlbmN5Owot
dXNpbmcgV1RGOjpEZXBlbmRlbmN5V2l0aDsKIHVzaW5nIFdURjo6Y29uc3VtZTsKIHVzaW5nIFdU
Rjo6ZGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6ZGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmVu
c3VyZVBvaW50ZXI7CiB1c2luZyBXVEY6Om51bGxEZXBlbmRlbmN5OwogCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsMTMgQEAgcHVibGljOiAKICAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgICAgfQogCisgICAgICAgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50
KQorICAgICAgICB7CisgICAgICAgICAgICBpdGVyYXRvciByZXN1bHQgPSAqdGhpczsKKyAgICAg
ICAgICAgICsrKCp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KwogICAgICAgICBib29sIGlzQXRFbmQoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA+PSBtX2JpdFZlY3Rvci0+c2l6ZSgpOwpJbmRleDogU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsxOCw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIENs
b2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKKyAgICBD
b25jdXJyZW50UHRySGFzaFNldC5oCiAgICAgQ29uZGl0aW9uLmgKICAgICBDcm9zc1RocmVhZENv
cGllci5oCiAgICAgQ3Jvc3NUaHJlYWRUYXNrLmgKQEAgLTEzMiw2ICsxMzMsOCBAQCBzZXQoV1RG
X0hFQURFUlMKICAgICBTZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBT
dGFja0JvdW5kcy5oCisgICAgU3RhY2tTaG90LmgKKyAgICBTdGFja1Nob3RQcm9maWxlci5oCiAg
ICAgU3RhY2tTdGF0cy5oCiAgICAgU3RhY2tUcmFjZS5oCiAgICAgU3RkTGliRXh0cmFzLmgKQEAg
LTIxOCw2ICsyMjEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBDUFVUaW1lLmNwcAogICAgIENs
b2NrVHlwZS5jcHAKICAgICBDb21waWxhdGlvblRocmVhZC5jcHAKKyAgICBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAKICAgICBDcm9zc1RocmVhZENvcGllci5jcHAKICAgICBDcnlwdG9ncmFwaGlj
VXRpbGl0aWVzLmNwcAogICAgIENyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcApJbmRl
eDogU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRQdHJIYXNo
U2V0LmgiCisKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
Q29uY3VycmVudFB0ckhhc2hTZXQ6OkNvbmN1cnJlbnRQdHJIYXNoU2V0KCkKK3sKKyAgICBpbml0
aWFsaXplKCk7Cit9CisKK0NvbmN1cnJlbnRQdHJIYXNoU2V0Ojp+Q29uY3VycmVudFB0ckhhc2hT
ZXQoKQoreworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0OjpkZWxldGVPbGRUYWJsZXMo
KQoreworICAgIC8vIFRoaXMgaXMganVzdCBpbiBjYXNlLiBJdCBkb2VzIG5vdCBtYWtlIGl0IE9L
IGZvciBvdGhlciB0aHJlYWRzIHRvIGNhbGwgYWRkKCkuIEJ1dCBpdCBtaWdodCBwcmV2ZW50Cisg
ICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBpZiB3ZSBkaWQgbWFrZSB0aGF0IG1pc3Rha2UuCisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOyAKKyAgICAKKyAgICBtX2FsbFRhYmxlcy5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+JiB0
YWJsZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gdGFibGUuZ2V0KCkgIT0gbV90YWJs
ZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB9KTsKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFz
aFNldDo6Y2xlYXIoKQoreworICAgIC8vIFRoaXMgaXMganVzdCBpbiBjYXNlLiBJdCBkb2VzIG5v
dCBtYWtlIGl0IE9LIGZvciBvdGhlciB0aHJlYWRzIHRvIGNhbGwgYWRkKCkuIEJ1dCBpdCBtaWdo
dCBwcmV2ZW50CisgICAgLy8gc29tZSBiYWQgY3Jhc2hlcyBpZiB3ZSBkaWQgbWFrZSB0aGF0IG1p
c3Rha2UuCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOyAKKyAgICAKKyAgICBt
X2FsbFRhYmxlcy5jbGVhcigpOworICAgIGluaXRpYWxpemUoKTsKK30KKwordm9pZCBDb25jdXJy
ZW50UHRySGFzaFNldDo6aW5pdGlhbGl6ZSgpCit7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGlu
aXRpYWxTaXplID0gMzI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiB0YWJsZSA9IFRhYmxl
OjpjcmVhdGUoaW5pdGlhbFNpemUpOworICAgIG1fdGFibGUuc3RvcmVSZWxheGVkKHRhYmxlLmdl
dCgpKTsKKyAgICBtX2FsbFRhYmxlcy5hcHBlbmQoV1RGTW92ZSh0YWJsZSkpOworfQorCitib29s
IENvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRTbG93KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFz
aywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgaW5kZXgsIHZvaWQqIHB0cikKK3sKKyAg
ICBpZiAodGFibGUtPmxvYWQuZXhjaGFuZ2VBZGQoMSkgPj0gdGFibGUtPm1heExvYWQoKSkKKyAg
ICAgICAgcmV0dXJuIHJlc2l6ZUFuZEFkZChwdHIpOworICAgIAorICAgIGZvciAoOzspIHsKKyAg
ICAgICAgdm9pZCogb2xkRW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmNvbXBhcmVFeGNoYW5n
ZVN0cm9uZyhudWxscHRyLCBwdHIpOworICAgICAgICBpZiAoIW9sZEVudHJ5KSB7CisgICAgICAg
ICAgICBpZiAobV90YWJsZS5sb2FkKCkgIT0gdGFibGUpIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBhZGRlZCBhbiBlbnRyeSB0byBhbiBvbGQgdGFibGUhIFdlIG5lZWQgdG8gcmVleGVjdXRlIHRo
ZSBhZGQgb24gdGhlIG5ldyB0YWJsZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkKHB0cik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAob2xkRW50cnkgPT0gcHRyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgfQorfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNo
U2V0OjpyZXNpemVJZk5lY2Vzc2FyeSgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICBp
ZiAodGFibGUtPmxvYWQubG9hZFJlbGF4ZWQoKSA8IHRhYmxlLT5tYXhMb2FkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IG5ld1RhYmxlID0gVGFi
bGU6OmNyZWF0ZSh0YWJsZS0+c2l6ZSAqIDIpOworICAgIHVuc2lnbmVkIG1hc2sgPSBuZXdUYWJs
ZS0+bWFzazsKKyAgICB1bnNpZ25lZCBsb2FkID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGFibGUtPnNpemU7ICsraSkgeworICAgICAgICB2b2lkKiBwdHIgPSB0YWJsZS0+YXJy
YXlbaV0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikg
JiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZv
ciAoOzspIHsKKyAgICAgICAgICAgIEF0b21pYzx2b2lkKj4mIGVudHJ5UmVmID0gbmV3VGFibGUt
PmFycmF5W2luZGV4XTsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5ID0gZW50cnlSZWYubG9hZFJl
bGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50cnkpIHsKKyAgICAgICAgICAgICAgICBlbnRy
eVJlZi5zdG9yZVJlbGF4ZWQocHRyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5ICE9IHB0cik7CisgICAgICAg
ICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBs
b2FkKys7CisgICAgfQorICAgIAorICAgIG5ld1RhYmxlLT5sb2FkLnN0b3JlUmVsYXhlZChsb2Fk
KTsKKyAgICAKKyAgICBtX3RhYmxlLnN0b3JlKG5ld1RhYmxlLmdldCgpKTsKKyAgICBtX2FsbFRh
Ymxlcy5hcHBlbmQoV1RGTW92ZShuZXdUYWJsZSkpOworfQorCitib29sIENvbmN1cnJlbnRQdHJI
YXNoU2V0OjpyZXNpemVBbmRBZGQodm9pZCogcHRyKQoreworICAgIHJlc2l6ZUlmTmVjZXNzYXJ5
KCk7CisgICAgcmV0dXJuIGFkZChwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q29uY3VycmVu
dFB0ckhhc2hTZXQ6OlRhYmxlPiBDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU6OmNyZWF0ZSh1
bnNpZ25lZCBzaXplKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFzaFNl
dDo6VGFibGU+IHJlc3VsdChuZXcgKGZhc3RNYWxsb2MoT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBh
cnJheSkgKyBzaXplb2YoQXRvbWljPHZvaWQqPikgKiBzaXplKSkgVGFibGUoKSk7CisgICAgcmVz
dWx0LT5zaXplID0gc2l6ZTsKKyAgICByZXN1bHQtPm1hc2sgPSBzaXplIC0gMTsKKyAgICByZXN1
bHQtPmxvYWQuc3RvcmVSZWxheGVkKDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpCisgICAgICAgIHJlc3VsdC0+YXJyYXlbaV0uc3RvcmVSZWxheGVkKG51bGxwdHIp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyBhIGNvbmN1cnJlbnQgaGFz
aC1iYXNlZCBzZXQgZm9yIHBvaW50ZXJzLiBJdCdzIG9wdGltaXplZCBmb3I6CisvLworLy8gLSBI
aWdoIHJhdGUgb2YgY29udGFpbnMoKSBjYWxscy4KKy8vIC0gSGlnaCByYXRlIG9mIGFkZCgpIGNh
bGxzIHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIG5ldy4gYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBh
ZGQgYW55dGhpbmcgKG5vcCBhZGRzKQorLy8gICBkb24ndCBtdXRhdGUgdGhlIHRhYmxlIGF0IGFs
bC4KKy8vIC0gTm90IHRvbyBtYW55IHRocmVhZHMuIEkgZG91YnQgdGhpcyBzY2FsZXMgYmV5b25k
IH40LiBUaG91Z2gsIGl0IG1heSBhY3R1YWxseSBzY2FsZSBiZXR0ZXIgdGhhbiB0aGF0CisvLyAg
IGlmIHRoZSByYXRlIG9mIG5vcCBhZGRzIGlzIGFic3VyZGx5IGhpZ2guCisvLworLy8gSWYgd2Ug
d2FudGVkIHRoaXMgdG8gc2NhbGUgYmV0dGVyLCB0aGUgbWFpbiBjaGFuZ2Ugd2UnZCBoYXZlIHRv
IG1ha2UgaXMgaG93IHRoaXMgdGFibGUgZGV0ZXJtaW5lcyB3aGVuCisvLyB0byByZXNpemUuIFJp
Z2h0IG5vdyBpdCdzIGEgc2hhcmVkIGNvdW50ZXIuIFdlIGxvY2s7eGFkZCB0aGlzIGNvdW50ZXIu
IE9uZSBlYXN5IHdheSB0byBtYWtlIHRoYXQKKy8vIHNjYWxhYmxlIGlzIHRvIHJlcXVpcmUgZWFj
aCB0aHJlYWQgdGhhdCB3b3JrcyB3aXRoIHRoZSBDb25jdXJyZW50UHRySGFzaFNldCB0byByZWdp
c3RlciBpdHNlbGYgZmlyc3QuCisvLyBUaGVuIGVhY2ggdGhyZWFkIHdvdWxkIGhhdmUgc29tZSBk
YXRhIHN0cnVjdHVyZSB0aGF0IGhhcyBhIGNvdW50ZXIuIFdlIGNvdWxkIGluc3RpdHV0ZSB0aGUg
cG9saWN5IHRoYXQKKy8vIGVhY2ggdGhyZWFkIHNpbXBseSBpbmNyZW1lbnRzIGl0cyBvd24gbG9h
ZCBjb3VudGVyLCBpbiBpdHMgb3duIGRhdGEgc3RydWN0dXJlLiBUaGVuLCBpZiBhbnkgc2VhcmNo
IHRvCisvLyByZXNvbHZlIGEgY29sbGlzaW9uIGRvZXMgbW9yZSB0aGFuIE4gaXRlcmF0aW9ucywg
d2UgY2FuIGNvbXB1dGUgYSBjb21iaW5lZCBsb2FkIGJ5IHN1bW1pbmcgdGhlIGxvYWQKKy8vIGNv
dW50ZXJzIG9mIGFsbCBvZiB0aGUgdGhyZWFkIGRhdGEgc3RydWN0dXJlcy4KKy8vCisvLyBDb25j
dXJyZW50UHRySGFzaFNldCdzIG1haW4gdXNlciwgdGhlIEdDLCBzZWVzIGEgOTglIG5vcCBhZGQg
cmF0ZSBpbiBTcGVlZG9tZXRlci4gVGhhdCdzIHdoeSB0aGlzCisvLyBmb2N1c2VzIHNvIG11Y2gg
b24gY2FzZXMgd2hlcmUgdGhlIHRhYmxlIGRvZXMgbm90IGNoYW5nZS4KK2NsYXNzIENvbmN1cnJl
bnRQdHJIYXNoU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50UHRySGFz
aFNldCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgQ29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgfkNvbmN1cnJlbnRQdHJIYXNoU2V0KCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBib29sIGNvbnRhaW5zKFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
Y29udGFpbnNJbXBsKGNhc3QodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBib29sIGFkZChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
ZEltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV90YWJsZS5sb2FkUmVsYXhlZCgpLT5sb2FkLmxvYWRS
ZWxheGVkKCk7CisgICAgfQorICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRo
YXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZyZWVzIHVwIG1lbW9yeSB3
aXRob3V0IGNoYW5naW5nCisgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZS4KKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVPbGRUYWJsZXMoKTsKKyAgICAKKyAgICAvLyBP
bmx5IGNhbGwgd2hlbiB5b3Uga25vdyB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQo
KS4gVGhpcyBmcmVlcyB1cCBhbGwgbWVtb3J5IGV4Y2VwdCBmb3IKKyAgICAvLyB0aGUgc21hbGxl
c3QgcG9zc2libGUgaGFzaHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFy
KCk7CisgICAgCitwcml2YXRlOgorICAgIHN0cnVjdCBUYWJsZSB7CisgICAgICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8VGFibGU+IGNyZWF0ZSh1bnNpZ25lZCBzaXplKTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIG1heExvYWQoKSBjb25zdCB7IHJldHVybiBzaXplIC8gMjsgfQorICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgc2l6ZTsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAgIHVu
c2lnbmVkIG1hc2s7IC8vIFRoaXMgaXMgaW1tdXRhYmxlLgorICAgICAgICBBdG9taWM8dW5zaWdu
ZWQ+IGxvYWQ7CisgICAgICAgIEF0b21pYzx2b2lkKj4gYXJyYXlbMV07CisgICAgfTsKKyAgICAK
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaCh2b2lkKiBwdHIpCisgICAgeworICAgICAgICByZXR1
cm4gUHRySGFzaDx2b2lkKj46Omhhc2gocHRyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0
aWFsaXplKCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkKiBjYXN0
KFQgdmFsdWUpCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA8PSBzaXpl
b2Yodm9pZCopLCAidHlwZSB0b28gYmlnIik7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAg
IHZvaWQqIHB0cjsKKyAgICAgICAgICAgIFQgdmFsdWU7CisgICAgICAgIH0gdTsKKyAgICAgICAg
dS5wdHIgPSBudWxscHRyOworICAgICAgICB1LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVy
biB1LnB0cjsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb250YWluc0ltcGwodm9pZCogcHRyKSBj
b25zdAorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgp
OworICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUtPm1hc2s7CisgICAgICAgIHVuc2lnbmVk
IHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5
ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFl
bnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoZW50
cnkgPT0gcHRyKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaW5k
ZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRl
eCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgYSBuZXcgZW50cnkgd2FzIGFkZGVkLgorICAgIGJvb2wgYWRkSW1wbCh2b2lkKiBw
dHIpCisgICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7
CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQg
c3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
c3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdm9pZCogZW50cnkg
PSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVu
dHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBhZGRTbG93KHRhYmxlLCBtYXNrLCBzdGFydElu
ZGV4LCBpbmRleCwgcHRyKTsKKyAgICAgICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAm
IG1hc2s7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBhZGRT
bG93KFRhYmxlKiB0YWJsZSwgdW5zaWduZWQgbWFzaywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5z
aWduZWQgaW5kZXgsIHZvaWQqIHB0cik7CisKKyAgICB2b2lkIHJlc2l6ZUlmTmVjZXNzYXJ5KCk7
CisgICAgYm9vbCByZXNpemVBbmRBZGQodm9pZCogcHRyKTsKKyAgICAKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFRhYmxlPiwgND4gbV9hbGxUYWJsZXM7CisgICAgQXRvbWljPFRhYmxlKj4g
bV90YWJsZTsgLy8gVGhpcyBpcyBuZXZlciBudWxsLgorICAgIExvY2sgbV9sb2NrOyAvLyBXZSBq
dXN0IHVzZSB0aGlzIHRvIGNvbnRyb2wgcmVzaXplIHJhY2VzLgorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKK3VzaW5nIFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw2ICsxMDAsMTEgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5
cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25zdCBGdW5jJik7
CiAgICAgCisgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdo
aWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YK
KyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFQgdGFrZUZpcnN0KGNvbnN0IEZ1bmMmKTsKKwog
ICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBj
YWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKICAgICAvLyBU
IGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgpAQCAtNTcxLDYgKzU3NiwyNSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT46OmFwCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OnRha2VGaXJzdChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHVuc2lnbmVk
IGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gdGhpcy0+c2l6ZSgpOworICAgIHdoaWxl
IChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgVCBjYW5kaWRhdGUgPSB0YWtlRmlyc3QoKTsKKyAg
ICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0p
CisgICAgICAgICAgICAgICAgcHJlcGVuZCh0YWtlTGFzdCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBjYW5kaWRhdGU7CisgICAgICAgIH0KKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgYXBwZW5k
KFdURk1vdmUoY2FuZGlkYXRlKSk7CisgICAgfQorICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiBpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpJbmRleDogU291cmNlL1dU
Ri93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxs
b2MuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDcgQEAgdXNpbmcgV1RGOjpmYXN0QWxpZ25lZEZy
ZWU7CiAjZGVmaW5lIFdURl9QUklWQVRFX0lOTElORSBpbmxpbmUKICNlbmRpZgogCi0jZGVmaW5l
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIFwKLXB1YmxpYzogXAorI2RlZmluZSBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRF9JTVBMIFwKICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lk
KiBwKSB7IHJldHVybiBwOyB9IFwKICAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZv
aWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIFwKQEAgLTI2Myw3ICsyNjIsMTUgQEAgcHVibGlj
OiBcCiAgICAgICAgIEFTU0VSVChsb2NhdGlvbik7IFwKICAgICAgICAgcmV0dXJuIGxvY2F0aW9u
OyBcCiAgICAgfSBcCisKKyNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAorcHVibGlj
OiBcCisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfSU1QTCBcCiBwcml2YXRlOiBcCiB0eXBl
ZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xvbkFmdGVyVGhpc01hY3JvCiAKKyNk
ZWZpbmUgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEIFwKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRF9JTVBMIFwKK3R5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNv
bG9uQWZ0ZXJUaGlzTWFjcm8KKwogI2VuZGlmIC8qIFdURl9GYXN0TWFsbG9jX2ggKi8KSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xv
Y2suY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDE2IEBACiAjaW5jbHVkZSAiTG9jay5oIgogCiAjaW5j
bHVkZSA8d3RmL0xvY2tBbGdvcml0aG1JbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hv
dFByb2ZpbGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCitzdGF0aWMgY29uc3RleHByIGJvb2wg
cHJvZmlsZUxvY2tDb250ZW50aW9uID0gZmFsc2U7CisKIHZvaWQgTG9ja0Jhc2U6OmxvY2tTbG93
KCkKIHsKKyAgICBpZiAocHJvZmlsZUxvY2tDb250ZW50aW9uKQorICAgICAgICBTVEFDS19TSE9U
X1BST0ZJTEUoNCwgMiwgNSk7CiAgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1f
Ynl0ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Mb2NrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAj
ZGVmaW5lIExvY2tlcl9oCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFj
ZSBXVEYgewpAQCAtNjQsNiArNjUsNyBAQCBwdWJsaWM6CiAKICAgICB+TG9ja2VyKCkKICAgICB7
CisgICAgICAgIGNvbXBpbGVyRmVuY2UoKTsKICAgICAgICAgaWYgKG1fbG9ja2FibGUpCiAgICAg
ICAgICAgICBtX2xvY2thYmxlLT51bmxvY2soKTsKICAgICB9CkBAIC0xMDgsNiArMTEwLDcgQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChtX2xvY2thYmxlKQogICAgICAgICAgICAgbV9s
b2NrYWJsZS0+bG9jaygpOworICAgICAgICBjb21waWxlckZlbmNlKCk7CiAgICAgfQogICAgIAog
ICAgIFQqIG1fbG9ja2FibGU7CkBAIC0xMjIsNiArMTI1LDEyIEBAIExvY2tlcjxMb2NrVHlwZT4g
aG9sZExvY2soTG9ja1R5cGUmIGxvY2sKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+
CitMb2NrZXI8TG9ja1R5cGU+IGhvbGRMb2NrSWYoTG9ja1R5cGUmIGxvY2ssIGJvb2wgcHJlZGlj
YXRlKQoreworICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+KHByZWRpY2F0ZSA/ICZsb2NrIDog
bnVsbHB0cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogTG9ja2VyPExvY2tU
eXBlPiB0cnlIb2xkTG9jayhMb2NrVHlwZSYgbG9jaykKIHsKICAgICByZXR1cm4gTG9ja2VyPExv
Y2tUeXBlPjo6dHJ5TG9jayhsb2NrKTsKQEAgLTEzNCw1ICsxNDMsNiBAQCB1c2luZyBXVEY6Okxv
Y2tlcjsKIHVzaW5nIFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnOwogdXNpbmcgV1RGOjpOb0xv
Y2tpbmdOZWNlc3Nhcnk7CiB1c2luZyBXVEY6OmhvbGRMb2NrOwordXNpbmcgV1RGOjpob2xkTG9j
a0lmOwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTc0
LDYgKzE3NCwxMyBAQCBwcml2YXRlOgogCiAvLyBUaGlzIGlzIGZvciB3aGVuIHlvdSBhbHJlYWR5
IHJlZmVyIHRvIGEgZnVuY3RvciBieSByZWZlcmVuY2UsIGFuZCB5b3Uga25vdyBpdHMgbGlmZXRp
bWUgaXMKIC8vIGdvb2QuIFRoaXMganVzdCBjcmVhdGVzIGEgU2NvcGVkTGFtYmRhIHRoYXQgcG9p
bnRzIHRvIHlvdXIgZnVuY3Rvci4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBpcyBhbHdheXMgd3Jv
bmc6CisvLworLy8gYXV0byByZWYgPSBzY29wZWRMYW1iZGFSZWYoWy4uLl0gKC4uLikgey4uLn0p
OworLy8KKy8vIEJlY2F1c2UgdGhlIHNjb3BlZExhbWJkYVJlZiB3aWxsIHJlZmVyIHRvIHRoZSBs
YW1iZGEgYnkgcmVmZXJlbmNlLCBhbmQgdGhlIGxhbWJkYSB3aWxsIGRpZSBhZnRlciB0aGUKKy8v
IHNlbWljb2xvbi4gVXNlIHNjb3BlZExhbWJkYSgpIGluIHRoYXQgY2FzZS4KIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KIFNjb3BlZExhbWJkYVJlZkZ1
bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGFSZWYoY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTks
MTEgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBzdGF0ZSBpbiBtZW1iZXIgZmllbGRzLiBUaGlzIGNh
biBiZSBtb3JlIG5hdHVyYWwgaWYgeW91IHdhbnQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB3
aGF0CiAvLyBzdGF0ZSBpcyBzaGFyZWQgYmV0d2VlbiBpbnN0YW5jZXMgb2YgdGhlIHRhc2suCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotY2xhc3Mg
U2hhcmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+
IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFBhc3NlZFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50VHlwZXM+CitjbGFzcyBTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlw
ZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFBhc3NlZFJl
c3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewogcHVibGljOgorICAgIHR5cGVkZWYgUGFz
c2VkUmVzdWx0VHlwZSBSZXN1bHRUeXBlOworICAgIAogICAgIFNoYXJlZFRhc2soKSB7IH0KICAg
ICB2aXJ0dWFsIH5TaGFyZWRUYXNrKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNr
U2hvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFN0YWNrU2hvdCB7CitwdWJsaWM6CisgICAgU3RhY2tTaG90KCkg
eyB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSBTdGFja1Nob3Qoc2l6ZV90IHNpemUpCisgICAg
ICAgIDogbV9zaXplKHNpemUpCisgICAgeworICAgICAgICBpZiAoc2l6ZSkgeworICAgICAgICAg
ICAgbV9hcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4oc2l6ZSk7CisgICAgICAgICAg
ICBpbnQgaW50U2l6ZSA9IHNpemU7CisgICAgICAgICAgICBXVEZHZXRCYWNrdHJhY2UobV9hcnJh
eS5nZXQoKSwgJmludFNpemUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nh
c3Q8c2l6ZV90PihpbnRTaXplKSA8PSBzaXplKTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IGludFNp
emU7CisgICAgICAgICAgICBpZiAoIW1fc2l6ZSkKKyAgICAgICAgICAgICAgICBtX2FycmF5ID0g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTdGFja1Nob3QoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYXJyYXkoZGVsZXRlZFZhbHVlQXJy
YXkoKSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0YWNr
U2hvdCYgb3BlcmF0b3I9KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpCisgICAgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbmV3QXJyYXkgPSBzdGQ6Om1ha2VfdW5pcXVlPHZvaWQq
W10+KG90aGVyLm1fc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvdGhlci5tX3NpemU7
IGktLTspCisgICAgICAgICAgICBuZXdBcnJheVtpXSA9IG90aGVyLm1fYXJyYXlbaV07CisgICAg
ICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9hcnJheSA9IFdURk1vdmUobmV3
QXJyYXkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIFN0YWNrU2hv
dChjb25zdCBTdGFja1Nob3QmIG90aGVyKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsK
KyAgICB9CisgICAgCisgICAgdm9pZCoqIGFycmF5KCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS5n
ZXQoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9hcnJheTsg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdGFja1Nob3QmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1fc2l6ZSAhPSBvdGhlci5tX3NpemUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9zaXpl
OyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9hcnJheVtpXSAhPSBvdGhlci5tX2FycmF5W2ld
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9zaXplOworICAgICAgICAKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIHJlc3VsdCBe
PSBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX2FycmF5W2ldKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NpemUgJiYgbV9hcnJheS5nZXQo
KSA9PSBkZWxldGVkVmFsdWVBcnJheSgpOworICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIFNwZWN0
cnVtPD4gaGFwcHkuCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgU3RhY2tTaG90JikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQqKiBkZWxl
dGVkVmFsdWVBcnJheSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKio+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMSkpOyB9CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPHZvaWQqW10+IG1f
YXJyYXk7CisgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKK307CisKK3N0cnVjdCBTdGFja1Nob3RI
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTdGFja1Nob3QmIHNob3QpIHsg
cmV0dXJuIHNob3QuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RhY2tT
aG90JiBhLCBjb25zdCBTdGFja1Nob3QmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxTdGFja1Nob3Q+IHsKKyAgICB0eXBlZGVmIFN0YWNrU2hvdEhhc2gg
SGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVt
cGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxTdGFja1Nob3Q+IDogU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPFN0YWNrU2hvdD4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNl
L1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9TdGFja1Nob3RQcm9maWxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0
YWNrU2hvdFByb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1
ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KKyNpbmNsdWRlIDx3dGYvU3BlY3RydW0uaD4KKyNpbmNsdWRl
IDx3dGYvU3RhY2tUcmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1Nob3QuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBTdGFja1Nob3RQcm9maWxlciB7CitwdWJsaWM6CisgICAgU3RhY2tT
aG90UHJvZmlsZXIodW5zaWduZWQgbnVtRnJhbWVzLCB1bnNpZ25lZCBmcmFtZXNUb1NraXAsIHVu
c2lnbmVkIHN0YWNrc1RvUmVwb3J0KQorICAgICAgICA6IG1fbnVtRnJhbWVzKG51bUZyYW1lcykK
KyAgICAgICAgLCBtX2ZyYW1lc1RvU2tpcChmcmFtZXNUb1NraXApCisgICAgICAgICwgbV9zdGFj
a3NUb1JlcG9ydChzdGFja3NUb1JlcG9ydCkKKyAgICB7CisgICAgICAgIFRocmVhZDo6Y3JlYXRl
KCJTdGFja1Nob3RQcm9maWxlciIsIFt0aGlzXSAoKSB7IHJ1bigpOyB9KTsKKyAgICB9CisKKyAg
ICAvLyBORVZFUl9JTkxJTkUgc28gdGhhdCBmcmFtZXNUb1NraXAgaXMgcHJlZGljdGFibGUuCisg
ICAgTkVWRVJfSU5MSU5FIHZvaWQgcHJvZmlsZSgpCisgICAgeworICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIG1fcHJvZmlsZS5hZGQoU3RhY2tTaG90KG1f
bnVtRnJhbWVzICsgbV9mcmFtZXNUb1NraXApKTsKKyAgICAgICAgbV90b3RhbENvdW50Kys7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBOT19SRVRVUk4gdm9pZCBydW4oKQorICAgIHsKKyAg
ICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgc2xlZXAoMV9zKTsKKyAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGF1dG8gbGlzdCA9IG1f
cHJvZmlsZS5idWlsZExpc3QoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuSG90dGVzdCBzdGFj
a3MgaW4gIiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiOlxuIik7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gbGlzdC5zaXplKCksIGNvdW50ID0gMDsgaS0tICYmIGNvdW50IDwgbV9zdGFj
a3NUb1JlcG9ydDsgY291bnQrKykgeworICAgICAgICAgICAgICAgIGF1dG8mIGVudHJ5ID0gbGlz
dFtpXTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcblRvcCAjIiwgY291bnQgKyAxLCAiIHN0
YWNrOiAiLCBlbnRyeS5jb3VudCAqIDEwMCAvIG1fdG90YWxDb3VudCwgIiVcbiIpOworICAgICAg
ICAgICAgICAgIFN0YWNrVHJhY2UgdHJhY2UoZW50cnkua2V5LmFycmF5KCkgKyBtX2ZyYW1lc1Rv
U2tpcCwgZW50cnkua2V5LnNpemUoKSAtIG1fZnJhbWVzVG9Ta2lwKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKHRyYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIlxu
Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgV29yZExvY2sgbV9sb2NrOworICAgIFNw
ZWN0cnVtPFN0YWNrU2hvdCwgZG91YmxlPiBtX3Byb2ZpbGU7CisgICAgZG91YmxlIG1fdG90YWxD
b3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUZyYW1lczsKKyAgICB1bnNpZ25lZCBtX2Zy
YW1lc1RvU2tpcDsKKyAgICB1bnNpZ25lZCBtX3N0YWNrc1RvUmVwb3J0OworfTsKKworI2RlZmlu
ZSBTVEFDS19TSE9UX1BST0ZJTEUobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVw
b3J0KSBkbyB7IFwKKyAgICBzdGF0aWMgU3RhY2tTaG90UHJvZmlsZXIqIHN0YWNrU2hvdFByb2Zp
bGVyOyBcCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YWNrU2hvdFByb2ZpbGVyT25jZUZs
YWc7IFwKKyAgICBzdGQ6OmNhbGxfb25jZShzdGFja1Nob3RQcm9maWxlck9uY2VGbGFnLCBbXSB7
IHN0YWNrU2hvdFByb2ZpbGVyID0gbmV3IFN0YWNrU2hvdFByb2ZpbGVyKG51bUZyYW1lcywgZnJh
bWVzVG9Ta2lwLCBzdGFja3NUb1JlcG9ydCk7IH0pOyBcCisgICAgc3RhY2tTaG90UHJvZmlsZXIt
PnByb2ZpbGUoKTsgXAorfSB3aGlsZSAoZmFsc2UpCisKK30gLy8gbmFtZXNwYWNlIFdURgorCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBz
aG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhp
cyBjaGFuZ2UgaXMgYmVzdCB0ZXN0ZWQgdXNpbmcgRE9NLUdDLWludGVuc2l2ZQorICAgICAgICBi
ZW5jaG1hcmtzIGxpa2UgU3BlZWRvbWV0ZXIgYW5kIERyb21hZW8uCisgICAgICAgIAorICAgICAg
ICBUaGlzIHBhcmFsbGVsaXplcyB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0cmFpbnQsIGFuZCBtYWtl
cyBzb21lIHNtYWxsIGNoYW5nZXMgdG8gbWFrZSB0aGlzIG1vcmUKKyAgICAgICAgc2NhbGFibGUu
CisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJh
aW50Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdU
aW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RP
TUdDT3V0cHV0Q29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NP
dXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdHJhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0ltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdv
cmtJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKToKKyAgICAg
ICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpldmVudFRhcmdldERh
dGFDb25jdXJyZW50bHkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZW5zdXJlRXZlbnRUYXJn
ZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyRXZlbnRUYXJnZXREYXRhKToK
KwogMjAxNy0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIEludGVybmFscy50ZXJtaW5hdGVTZXJ2aWNlV29ya2VyLCBhbmQgdGhlIGFiaWxpdHkg
dG8gcmVzdGFydCBzZXJ2aWNlIHdvcmtlcnMgZm9yIHBvc3RNZXNzYWdlLgpJbmRleDogU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0zMjEsNiArMzIxLDcgQEAgYmluZGluZ3MvanMvQ2FjaGVkTW9kdWxl
U2NyaXB0TG9hZGVyLmNwcAogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0RmV0Y2hlci5jcHAKIGJp
bmRpbmdzL2pzL0NhbGxUcmFjZXIuY3BwCiBiaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKK2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAKIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5jcHAKIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKIGJpbmRpbmdzL2pzL0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKyNw
cmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NpbXBsZU1hcmtpbmdDb25zdHJh
aW50Lmg+CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlz
aXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDIgKzAsMCBAQAotI3ByYWdtYSBvbmNlCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVmlzaXRpbmdUaW1lb3V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTM1MSw2ICszNTEsNyBAQAogCQkwRjg3MTY3MDFDODY5RDgzMDA0RkYwREUgLyogTGVu
Z3RoUG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODcxNjZFMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOEI0NTcyMURDM0ZCQTMwMDQ0
M0MzRiAvKiBJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhCNDU3MTFEQzNGQkEzMDA0NDNDM0YgLyog
SW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovOyB9OwogCQkwRjhCNDU3NjFEQzQxREJB
MDA0NDNDM0YgLyogSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhCNDU3NDFEQzQxREJBMDA0NDND
M0YgLyogSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CisJCTBGOURBQTBG
MUZEMUM2NkEwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTBFMUZEMUM2NjQwMDc5QzVC
MiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLzsgfTsKIAkJMEZBMjREN0ExNjJERjkxOTAw
QTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyNEQ3ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhp
Y3NMYXllclVwZGF0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkI2MjUyRjE4REUxQjE1MDBBMDdDMDUgLyogR2VvbWV0cnlVdGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjYyNTJE
MThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjg4OTBBMTY3RDJGQTEwMDEwQ0RB
NSAvKiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCODg5MDgxNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9sbGlu
Z1RyZWVTdGlja3lOb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTU0NDYsNiArNTQ0Nyw4IEBACiAJCTBGOEI0NTc0MURDNDFEQkEwMDQ0M0Mz
RiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTRBMzk1MUVGMUIxMDUwMEZCQUZGQiAvKiBKU0RPTVF1
YWRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01R
dWFkQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5N0E2NTcxNTVE
QTgxRTAwRkFERDRDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMEMxRkQxQzY2MzAwNzlDNUIyIC8q
IERPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBET01HQ091dHB1dENvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjlEQUEwRTFGRDFDNjY0MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUdDT3V0cHV0Q29uc3RyYWlu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEwODUyQjFFNkZCNTVBMDA5NzVG
REQgLyogQ1NTUHJvcGVydGllcy5qc29uICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5qc29uOyBwYXRoID0gQ1NTUHJvcGVydGllcy5qc29uOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyNEQ3NzE2MkRGOTE5MDBBM0Y0QzAgLyog
R3JhcGhpY3NMYXllclVwZGF0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NMYXllclVwZGF0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkEyNEQ3ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NMYXllclVwZGF0ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOTgwLDYgKzIyOTgzLDggQEAKIAkJCQk5
NTIwNzYwMjFGMjY3NUY5MDA3RDJBQUIgLyogQ2FsbFRyYWNlclR5cGVzLmggKi8sCiAJCQkJMEY2
MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLywKIAkJCQkwRjYwRjMyQTFE
RkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uaCAqLywKKwkJCQkwRjlEQUEwQzFGRDFDNjYzMDA3
OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjlEQUEwRTFGRDFD
NjY0MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmggKi8sCiAJCQkJN0M1MTZBRDIx
RjM1MjUyMDAwMzRCNkJGIC8qIERPTVByb21pc2VQcm94eS5oICovLAogCQkJCUJDNTNEQTQ3MTE0
MzEzNEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3BwICovLAogCQkJCUJDNTNEQTJEMTE0
MzEyMUUwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuaCAqLywKQEAgLTI3NTQ3LDYgKzI3NTUy
LDcgQEAKIAkJCQk1MThGNTAwNDE5NENBQzNBMDA4MUJBQUUgLyogSlNHYW1lcGFkQnV0dG9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTgwREE2NDBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU4MERBNjYwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpT
R2VvcG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURBQTBGMUZEMUM2NkEwMDc5QzVC
MiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREE3QzFG
MTg4MzIyRkMwMEM5NTRCNSAvKiBKU0dlc3R1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODQ4MkI3NTIxMTk4Q0I2QjAwQkZCMDA1IC8qIEpTSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzk0RDE0RjBDMjc1QzY4MDA2QkM2MTcgLyogSlNIaXN0b3J5LmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5o
IgorCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvSGVh
cElubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KKyNp
bmNsdWRlIDxoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvU3Vic3Bh
Y2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK0RPTUdDT3V0cHV0Q29uc3RyYWludDo6RE9N
R0NPdXRwdXRDb25zdHJhaW50KFZNJiB2bSwgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEpCisg
ICAgOiBNYXJraW5nQ29uc3RyYWludCgiRG9tbyIsICJET00gT3V0cHV0IiwgQ29uc3RyYWludFZv
bGF0aWxpdHk6OlNlbGRvbUdyZXllZCwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50
LCBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICwgbV92bSh2bSkKKyAgICAs
IG1fY2xpZW50RGF0YShjbGllbnREYXRhKQorICAgICwgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbih2
bS5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkpCit7Cit9CisKK0RPTUdDT3V0cHV0Q29u
c3RyYWludDo6fkRPTUdDT3V0cHV0Q29uc3RyYWludCgpCit7Cit9CisKK0NvbnN0cmFpbnRQYXJh
bGxlbGlzbSBET01HQ091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikK
K3sKKyAgICBIZWFwJiBoZWFwID0gbV92bS5oZWFwOworICAgIAorICAgIGlmIChoZWFwLm11dGF0
b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVyc2lvbikKKyAgICAgICAg
cmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAKKyAgICBtX2xh
c3RFeGVjdXRpb25WZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOworICAg
IAorICAgIFJFTEVBU0VfQVNTRVJUKG1fdGFza3MuaXNFbXB0eSgpKTsKKyAgICBtX2NsaWVudERh
dGEuZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKKyAgICAgICAgWyZdIChTdWJzcGFjZSYg
c3Vic3BhY2UpIHsKKyAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlz
aXRvciwgSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAg
ICAgIEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAg
ICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENv
bnN0cmFpbnRzKGNlbGwsIHZpc2l0b3IpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV90YXNrcy5hcHBlbmQoc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBh
cmFsbGVsKGZ1bmMpKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgcmV0dXJuIENvbnN0cmFpbnRQ
YXJhbGxlbGlzbTo6UGFyYWxsZWw7Cit9CisgICAgICAgIAordm9pZCBET01HQ091dHB1dENvbnN0
cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBm
b3IgKGF1dG8mIHRhc2sgOiBtX3Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4odmlzaXRvcik7Cit9
CisgICAgICAgIAordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29y
a0ltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIG1fdGFza3MuY2xlYXIoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01H
Q091dHB1dENvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5o
PgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVk1DbGllbnREYXRhOworCitjbGFzcyBE
T01HQ091dHB1dENvbnN0cmFpbnQgOiBwdWJsaWMgSlNDOjpNYXJraW5nQ29uc3RyYWludCB7Citw
dWJsaWM6CisgICAgRE9NR0NPdXRwdXRDb25zdHJhaW50KEpTQzo6Vk0mLCBKU1ZNQ2xpZW50RGF0
YSYpOworICAgIH5ET01HQ091dHB1dENvbnN0cmFpbnQoKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAg
ICBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9y
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoSlNDOjpTbG90VmlzaXRv
ciYpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RW
aXNpdG9yJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyAgICBK
U1ZNQ2xpZW50RGF0YSYgbV9jbGllbnREYXRhOworICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlv
blZlcnNpb247CisgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4+PiBtX3Rhc2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0Ns
aWVudERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAKKyNpbmNsdWRl
ICJET01HQ091dHB1dENvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlIDxoZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg+CiAjaW5jbHVk
ZSA8aGVhcC9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvTWFya2luZ0NvbnN0cmFpbnQu
aD4KLSNpbmNsdWRlIDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxo
ZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8aGVhcC9WaXNpdGluZ1RpbWVvdXQuaD4KICNpbmNsdWRlIDxydW50aW1l
L0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9WTS5oPgpAQCAtNzQsNDMgKzcyLDcgQEAgdm9pZCBKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1h
bFdvcmxkKFZNKgogICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gbmV3IEpTVk1DbGll
bnREYXRhKCp2bSk7CiAgICAgdm0tPmNsaWVudERhdGEgPSBjbGllbnREYXRhOyAvLyB+Vk0gZGVs
ZXRlcyB0aGlzIHBvaW50ZXIuCiAgICAgCi0gICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtl
X3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oCi0gICAgICAgICJXY29jIiwgIldlYkNvcmUgT3V0
cHV0IENvbnN0cmFpbnRzIiwKLSAgICAgICAgW3ZtLCBjbGllbnREYXRhLCBsYXN0RXhlY3V0aW9u
VmVyc2lvbiA9IHZtLT5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCldCi0gICAgICAgIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIG11dGFibGUg
ewotICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLT5oZWFwOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpID09IGxhc3RFeGVjdXRp
b25WZXJzaW9uKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbGFzdEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9u
KCk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFuYWdlIHRoZSB2aXNpdCBjb3VudCBo
ZXJlIG91cnNlbHZlcy4gV2UgbmVlZCB0byBrbm93IHRoYXQgaWYgdGhpcyBhZGRzCi0gICAgICAg
ICAgICAvLyBvcGFxdWUgcm9vdHMgdGhlbiB3ZSBjYW5ub3QgZGVjbGFyZSB0ZXJtaW5hdGlvbiB5
ZXQuIFRoZSB3YXkgd2Ugc2lnbmFsIHRoaXMgdG8gdGhlCi0gICAgICAgICAgICAvLyBjb25zdHJh
aW50IHNvbHZlciBpcyBieSBhZGRpbmcgdG8gdGhlIHZpc2l0IGNvdW50LgotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzaXplX3QgbnVtT3BhcXVlUm9vdHNCZWZvcmUgPSBoZWFwLm51bU9wYXF1
ZVJvb3RzKCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgcGFyYWxsZWwhCi0g
ICAgICAgICAgICB1bnNpZ25lZCBudW1SZXZpc2l0ZWQgPSAwOwotICAgICAgICAgICAgY2xpZW50
RGF0YS0+Zm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZSgKLSAgICAgICAgICAgICAgICBbJl0g
KFN1YnNwYWNlJiBzdWJzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBzdWJzcGFjZS5mb3JF
YWNoTWFya2VkQ2VsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGhl
YXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpT
Q2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSgqdm0pLT52aXNpdE91dHB1dENvbnN0
cmFpbnRzKGNlbGwsIHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1SZXZpc2l0ZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZygiKCIsIG51bVJldmlzaXRlZCwgIikiKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2xvdFZpc2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzbG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoaGVhcC5udW1PcGFxdWVSb290cygp
IC0gbnVtT3BhcXVlUm9vdHNCZWZvcmUpOwotICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKLSAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3Ry
YWludChXVEZNb3ZlKGNvbnN0cmFpbnQpKTsKKyAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3Ry
YWludChzdGQ6Om1ha2VfdW5pcXVlPERPTUdDT3V0cHV0Q29uc3RyYWludD4oKnZtLCAqY2xpZW50
RGF0YSkpOwogICAgICAgICAKICAgICBjbGllbnREYXRhLT5tX25vcm1hbFdvcmxkID0gRE9NV3Jh
cHBlcldvcmxkOjpjcmVhdGUoKnZtLCB0cnVlKTsKICAgICB2bS0+bV90eXBlZEFycmF5Q29udHJv
bGxlciA9IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBdHRy
LmgiCiAjaW5jbHVkZSAiQmVmb3JlTG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0
YXRpb25TY29wZS5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRU
cmVlQW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1z
LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCkBAIC0yMTYyLDcgKzIxNjMs
MTQgQEAgRXZlbnRUYXJnZXREYXRhKiBOb2RlOjpldmVudFRhcmdldERhdGEoKQogCiBFdmVudFRh
cmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpCiB7Ci0gICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOworICAgIC8vIE5v
dCBob2xkaW5nIHRoZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0b3BwZWQgYWNjZWxlcmF0ZXMg
cGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nLCB3aGljaAorICAgIC8vIGNhbGxzIHRoaXMgZnVu
Y3Rpb24gZnJvbSBtYW55IHRocmVhZHMuIFBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZyBjYW4g
aGFwcGVuIHdpdGggdGhlIHdvcmxkCisgICAgLy8gcnVubmluZyBvciBzdG9wcGVkLCBidXQgaWYg
d2UgZG8gaXQgd2l0aCBhIHJ1bm5pbmcgd29ybGQsIHRoZW4gd2UncmUgdXN1YWxseSBtaXhpbmcg
Y29uc3RyYWludAorICAgIC8vIHNvbHZpbmcgd2l0aCBvdGhlciB3b3JrLiBUaGVyZWZvcmUsIHRo
ZSBtb3N0IGxpa2VseSB0aW1lIGZvciBjb250ZW50aW9uIG9uIHRoaXMgbG9jayBpcyB3aGVuIHRo
ZQorICAgIC8vIHdvcmxkIGlzIHN0b3BwZWQuIFdlIGRvbid0IGhhdmUgdG8gaG9sZCB0aGUgbG9j
ayB3aGVuIHRoZSB3b3JsZCBpcyBzdG9wcGVkLCBiZWNhdXNlIGEgc3RvcHBlZCB3b3JsZAorICAg
IC8vIG1lYW5zIHRoYXQgd2Ugd2lsbCBuZXZlciBtdXRhdGUgdGhlIGV2ZW50IHRhcmdldCBkYXRh
IG1hcC4KKyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9ja0lmKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jaywgdm0gJiYgdm0tPmhlYXAu
d29ybGRJc1J1bm5pbmcoKSk7CiAgICAgcmV0dXJuIGhhc0V2ZW50VGFyZ2V0RGF0YSgpID8gZXZl
bnRUYXJnZXREYXRhTWFwKCkuZ2V0KHRoaXMpIDogbnVsbHB0cjsKIH0KIApAQCAtMjE3MSw2ICsy
MTc5LDkgQEAgRXZlbnRUYXJnZXREYXRhJiBOb2RlOjplbnN1cmVFdmVudFRhcmdldAogICAgIGlm
IChoYXNFdmVudFRhcmdldERhdGEoKSkKICAgICAgICAgcmV0dXJuICpldmVudFRhcmdldERhdGFN
YXAoKS5nZXQodGhpcyk7CiAKKyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIXZtIHx8IHZtLT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOworCiAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAg
IHNldEhhc0V2ZW50VGFyZ2V0RGF0YSh0cnVlKTsKICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0
YU1hcCgpLmFkZCh0aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPEV2ZW50VGFyZ2V0RGF0YT4oKSkuaXRl
cmF0b3ItPnZhbHVlOwpAQCAtMjE3OCw2ICsyMTg5LDggQEAgRXZlbnRUYXJnZXREYXRhJiBOb2Rl
OjplbnN1cmVFdmVudFRhcmdldAogCiB2b2lkIE5vZGU6OmNsZWFyRXZlbnRUYXJnZXREYXRhKCkK
IHsKKyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgUkVMRUFTRV9BU1NF
UlQoIXZtIHx8IHZtLT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOwogICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2soc19ldmVudFRhcmdldERhdGFNYXBMb2NrKTsKICAgICBldmVudFRhcmdldERhdGFN
YXAoKS5yZW1vdmUodGhpcyk7CiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91
bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrczogQWRkIHNwbGF5LWxh
dGVuY3kgdGVzdCwgc2luY2UgdGhpcyBjaGFuZ2UgbmVlZGVkIHRvIGJlIGNhcmVmdWxseSB2YWxp
ZGF0ZWQgd2l0aCB0aGF0IGJlbmNobWFyay4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Nv
bmN1cnJlbnRQdHJIYXNoU2V0LmNwcDogQWRkZWQuIFRoaXMgaGFzIHVuaXQgdGVzdHMgb2YgdGhl
IG5ldyBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlLiBUaGUgdGVzdHMgZm9jdXMgb24gY29ycmVj
dG5lc3MgdW5kZXIgc2VyaWFsIGV4ZWN1dGlvbiwgd2hpY2ggYXBwZWFycyB0byBiZSBlbm91Z2gg
Zm9yIG5vdyAoaXQncyBzbyBlYXN5IHRvIGNhdGNoIGEgY29uY3VycmVuY3kgYnVnIGJ5IGp1c3Qg
cnVubmluZyB0aGUgR0MpLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTct
MTItMDEgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdIEFkZCBTYW1wbGVNYXAuY3BwIEFQSSB0ZXN0cyB0byBDTWFrZQpJbmRleDogVG9vbHMv
U2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9y
dW4tanNjLWJlbmNobWFya3MJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1NjcmlwdHMvcnVu
LWpzYy1iZW5jaG1hcmtzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIExPTkdTUElE
RVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAKIFY4X1BBVEggPSBQRVJGT1JNQU5DRVRF
U1RTX1BBVEggKyAiU3VuU3BpZGVyIiArICJ0ZXN0cyIgKyAidjgtdjYiCiBUQUlMQkVOQ0hfUEFU
SCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJUYWlsQmVuY2g5MDAwIgogTUlDUk9CRU5DSE1B
UktTX1BBVEggPSBPUEVOU09VUkNFX1BBVEggKyAiSlNUZXN0cyIgKyAibWljcm9iZW5jaG1hcmtz
IgotT0NUQU5FX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJPY3RhbmUi
ICsgIndyYXBwZXJzIgorT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNf
UEFUSCArICJPY3RhbmUiCitPQ1RBTkVfV1JBUFBFUl9QQVRIID0gT1BFTlNPVVJDRV9PQ1RBTkVf
UEFUSCArICJ3cmFwcGVycyIKIEpTQkVOQ0hfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAr
ICJKU0JlbmNoIgogU0lYU1BFRURfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhT
cGVlZCIgKyAidGVzdHMiCiBTSVhTUEVFRF9XUkFQUEVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RT
X1BBVEggKyAiU2l4U3BlZWQiICsgIndyYXBwZXJzIgpAQCAtODQxLDYgKzg0MiwyMCBAQCBjbGFz
cyBTaW5nbGVGaWxlVGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCiAgIGVuZAogZW5kCiAKKyMgQmVu
Y2htYXJrIHRoYXQgY29uc2lzdHMgb2YgYSBzaW5nbGUgZmlsZSBhbmQgbXVzdCBiZSBsb2FkZWQg
aW4gaXRzIG93biBnbG9iYWwgb2JqZWN0IGVhY2gKKyMgdGltZSAoaS5lLiBydW4oKSksIGJ1dCBy
ZXR1cm5zIGl0cyByZXN1bHQgaW4gYSBjdXN0b20gd2F5LgorY2xhc3MgU2luZ2xlRmlsZUN1c3Rv
bVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycworICBhdHRyX3JlYWRlciA6YmVuY2hQYXRoCisgIAor
ICBkZWYgaW5pdGlhbGl6ZShiZW5jaFBhdGgpCisgICAgQGJlbmNoUGF0aCA9IGJlbmNoUGF0aAor
ICBlbmQKKyAgCisgIGRlZiBraW5kCisgICAgOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFy
aworICBlbmQKK2VuZAorCiAjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3Jl
IGRhdGEgZmlsZXMgdGhhdCBzaG91bGQgYmUgbG9hZGVkIGdsb2JhbGx5LCBmb2xsb3dlZAogIyBi
eSBhIGNvbW1hbmQgdG8gcnVuIHRoZSBiZW5jaG1hcmsuCiBjbGFzcyBNdWx0aUZpbGVUaW1lZEJl
bmNobWFya1BhcmFtZXRlcnMKQEAgLTk2NSw2ICs5ODAsMjUgQEAgZGVmIGVtaXRCZW5jaFJ1bkNv
ZGVGaWxlKG5hbWUsIHBsYW4sIGJlbgogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
ICAgIGlmIChfX2JlbmNoZXJfaW5kZXggPj0gI3t3YXJtdXB9KSBwcmludChcIiN7bmFtZX06ICN7
cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiBcIiArIChfX2JlbmNoZXJfaW5kZXggLSAje3dh
cm11cH0pICsgXCI6IFRpbWU6IFwiKygoX19hZnRlci1fX2JlZm9yZSkvX19ydW5zKSk7IikKICAg
ICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0iKQogICAgICAgICBkb3VibGVQdXRzKCRz
dGRlcnIsZmlsZSwiI3tiZW5jaFBhcmFtcy50ZWFyRG93bkNvbW1hbmQuanN9IikKKyAgICAgIGVs
c2lmIGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyawor
ICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5jaGVyX3J1bihf
X2JlbmNoZXJfd2hhdCkgeyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICB2
YXIgX19iZW5jaGVyX3Jlc3VsdCA9IHt2YWx1ZTogbnVsbH07IikKKyAgICAgICAgJHJlcnVuLnRp
bWVzIHsKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcnVuKF9fYmVuY2hl
cl93aGF0LCBfX2JlbmNoZXJfcmVzdWx0KTsiKQorICAgICAgICB9CisgICAgICAgIGRvdWJsZVB1
dHMoJHN0ZGVycixmaWxlLCIgICBpZiAoX19iZW5jaGVyX3Jlc3VsdC52YWx1ZSA9PSBudWxsKSIp
CisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgICB0aHJvdyBuZXcgRXJyb3Io
XCJOdWxsIHJlc3VsdFwiKTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAg
cmV0dXJuIF9fYmVuY2hlcl9yZXN1bHQudmFsdWU7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3Rk
ZXJyLGZpbGUsIn0iKQorICAgICAgICAkd2FybXVwLnRpbWVzIHsKKyAgICAgICAgICBkb3VibGVQ
dXRzKCRzdGRlcnIsZmlsZSwiX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5p
bnNwZWN0fSkiKQorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJnYygpOyIpIHVu
bGVzcyBwbGFuLnZtLnNob3VsZE1lYXN1cmVHQworICAgICAgICB9CisgICAgICAgICRpbm5lci50
aW1lcyB7CisgICAgICAgICAgfCBpbm5lckluZGV4IHwKKyAgICAgICAgICBkb3VibGVQdXRzKCRz
dGRlcnIsZmlsZSwicHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19OiAje3BsYW4uaXRlcmF0aW9u
fTogI3tpbm5lckluZGV4fTogVGltZTogXCIrX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJl
bmNoUGF0aC5pbnNwZWN0fSkpOyIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUs
ImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KICAgICAg
IGVsc2UKICAgICAgICAgcmFpc2UgdW5sZXNzIGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZp
bGVUaW1lZEJlbmNobWFyawogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rp
b24gX19iZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCkBAIC0xNTk0LDYgKzE2MjgsMTkg
QEAgY2xhc3MgT2N0YW5lQmVuY2htYXJrCiAgIGVuZAogZW5kCiAKK2NsYXNzIEN1c3RvbVRpbWVk
QmVuY2htYXJrCisgIGluY2x1ZGUgQmVuY2htYXJrCisgIAorICBkZWYgaW5pdGlhbGl6ZShuYW1l
LCBmdWxsUGF0aCkKKyAgICBAbmFtZSA9IG5hbWUKKyAgICBAZnVsbFBhdGggPSBmdWxsUGF0aAor
ICBlbmQKKyAgCisgIGRlZiBlbWl0UnVuQ29kZShwbGFuKQorICAgIGVtaXRCZW5jaFJ1bkNvZGUo
ZnVsbG5hbWUsIHBsYW4sIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFya1BhcmFtZXRlcnMu
bmV3KGVuc3VyZUZpbGUoIkN1c3RvbVRpbWVkLSN7QG5hbWV9IiwgQGZ1bGxQYXRoKSkpCisgIGVu
ZAorZW5kCisKIGNsYXNzIEtyYWtlbkJlbmNobWFyawogICBpbmNsdWRlIEJlbmNobWFyawogICAK
QEAgLTMwMTAsNiArMzA1Nyw3IEBAIGJlZ2luCiAgICAgfCBhcmdzIHwKICAgICBPQ1RBTkUuYWRk
IE9jdGFuZUJlbmNobWFyay5uZXcoKmFyZ3MpCiAgIH0KKyAgT0NUQU5FLmFkZCBDdXN0b21UaW1l
ZEJlbmNobWFyay5uZXcoInNwbGF5LWxhdGVuY3kiLCAoT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCAr
ICJzcGxheS5qcyIpLnRvX3MpCiAKICAgS1JBS0VOID0gQmVuY2htYXJrU3VpdGUubmV3KCJLcmFr
ZW4iLCA6YXJpdGhtZXRpY01lYW4sIC0xKQogICBbImFpLWFzdGFyIiwgImF1ZGlvLWJlYXQtZGV0
ZWN0aW9uIiwgImF1ZGlvLWRmdCIsICJhdWRpby1mZnQiLApJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIHNldChUZXN0V1RG
X1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIu
Y3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NTdHJpbmcuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9u
cy5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NvbmRpdGlvbi5j
cHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ3Jvc3NUaHJlYWRUYXNrLmNw
cAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5jcHAKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxh
dGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGll
c0NvY29hLm1tICovOyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyogUGxhdGZvcm1V
dGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29h
Lm1tICovOyB9OwogCQkwRjJDMjBCODFEQ0Q1NDUwMDA1NDJEOUUgLyogVGltZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDMjBCNzFEQ0Q1NDQ4
MDA1NDJEOUUgLyogVGltZS5jcHAgKi87IH07CisJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAv
KiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUzMjMgLyogQ29uY3VycmVudFB0
ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjNCOTRBNzFBNzcyNjc0MDBERTMyNzIgLyogV0tXZWJW
aWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1
YXRlSmF2YVNjcmlwdC5tbSAqLzsgfTsKIAkJMEY0RkZBOUUxRUQzQUE4NTAwRjcxMTFGIC8qIFNu
YXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90Vmlh
UmVuZGVySW5Db250ZXh0Lm1tICovOyB9OwogCQkwRjU2NTFGNzFGQ0U0RERDMDAzMTBGQkMgLyog
Tm9IaXN0b3J5SXRlbVNjcm9sbFRvRnJhZ21lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU2NTFGNjFGQ0U0RERCMDAzMTBGQkMgLyogTm9IaXN0
b3J5SXRlbVNjcm9sbFRvRnJhZ21lbnQubW0gKi87IH07CkBAIC0xMDcyLDYgKzEwNzMsNyBAQAog
CQkwRjEzOUU3NTFBNDIzQTUzMDBGNTkwRjUgLyogV2Vha09iakNQdHIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWFrT2JqQ1B0ci5tbTsgcGF0aCA9IGNvY29h
L1dlYWtPYmpDUHRyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3QkJENDE1
QUY2QzREMDA3QUI3NTMgLyogV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVTdGF0aXN0aWNzV2l0
aE5vV2ViUHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkMyMEI3
MURDRDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1
QjFGQ0UxNzkyMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tX
ZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFS
ZW5kZXJJbkNvbnRleHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0RkZBQTAxRUQzRDBERTAwRjcxMTFGIC8qIEltYWdlSU8uZnJhbWV3b3JrICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFt
ZXdvcms7IG5hbWUgPSBJbWFnZUlPLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvSW1hZ2VJTy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwpAQCAt
MjU5Myw2ICsyNTk1LDcgQEAKIAkJCQkyNkYxQjQ0MjE1Q0E0MzRGMDBEMUU0QkYgLyogQXRvbWlj
U3RyaW5nLmNwcCAqLywKIAkJCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0
ZXIuY3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGht
ZXRpY09wZXJhdGlvbnMuY3BwICovLAorCQkJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBD
b25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCiAJCQkJMEZFQUUzNjcxQjdEMTlDQjAwQ0UxN0Yy
IC8qIENvbmRpdGlvbi5jcHAgKi8sCiAJCQkJNTE3MTRFQjkxRDA4NzQxNjAwNDcyM0M0IC8qIENy
b3NzVGhyZWFkVGFzay5jcHAgKi8sCiAJCQkJMjZBMkM3MkUxNUUyRTczQzAwNUIxQTE0IC8qIENT
dHJpbmcuY3BwICovLApAQCAtMzE3OSw2ICszMTgyLDcgQEAKIAkJCQk3QzgzREVGNjFEMEE1OTBD
MDBGRUJDRjMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVG
RTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3
RDU0RjMxRjMzOEMzNjAwQTk3QUE3IC8qIE5ldmVyRGVzdHJveWVkLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMTFEMEE1OTBDMDBGRUJDRjMgLyogT3B0aW9u
YWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3N0JBQTMxRDlBRkZGQzAwNUZDNTY4IC8qIE9w
dGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMg
LyogT1NPYmplY3RQdHIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25l
eGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewor
CituYW1lc3BhY2UgeworCisvLyBgY29tbWFuZHNgIGlzIGEgc3RyaW5nIHRoYXQgdGVsbHMgdGhp
cyB0aGluZyB3aGF0IHRvIGRvLiBJdCBoYXMgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBvZiBjaGFy
YWN0ZXJzLgorLy8gVGhlIGNoYXJhY3RlciBwYWlycyBhcmUgY29tbWFuZHMuIENvbW1hbmRzOgor
Ly8KKy8vICt4ICAgICBBZGRzICd4JyB0byB0aGUgc2V0IChjYXN0cyAneCcgdG8gYSB2b2lkKikg
YW5kIGFzc2VydHMgdGhhdCBpdCdzIG5ldy4KKy8vICF4ICAgICBBZGRzICd4JyB0byB0aGUgc2V0
IGFuZCBhc3NlcnRzIHRoYXQgaXQgd2FzIHRoZXJlIGFscmVhZHkuCisvLyA9eCAgICAgQXNzZXJ0
cyB0aGF0ICd4JyBpcyBpbiB0aGUgc2V0CisvLyAteCAgICAgQXNzZXJ0cyB0aGF0ICd4JyBpcyBu
b3QgaW4gdGhlIHNldAordm9pZCBkb1Rlc3QoY29uc3QgY2hhciogY29tbWFuZHMpCit7CisgICAg
Q29uY3VycmVudFB0ckhhc2hTZXQgc2V0OworICAgIGZvciAoY29uc3QgY2hhciogY29tbWFuZCA9
IGNvbW1hbmRzOyBjb21tYW5kWzBdICYmIGNvbW1hbmRbMV07IGNvbW1hbmQgKz0gMikgeworICAg
ICAgICB2b2lkKiBwdHIgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oY29tbWFuZFsxXSkpOworICAgICAgICBzd2l0Y2ggKGNvbW1hbmRbMF0pIHsKKyAgICAgICAg
Y2FzZSAnKyc6CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQuYWRkKHB0cikpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyEnOgorICAgICAgICAgICAgRVhQRUNUX0ZBTFNF
KHNldC5hZGQocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnPSc6Cisg
ICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNv
bnRhaW5zKHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitURVNU
KFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgRW1wdHkpCit7CisgICAgZG9UZXN0KCIiKTsKK30K
KworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnQpCit7CisgICAg
ZG9UZXN0KCIreD14LXktMCIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwg
QWRkT25lRWxlbWVudE11bHRpcGxlVGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgh
eCF4IXgheCF4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBB
ZGRPbmVFbGVtZW50TWFueVRpbWVzKQoreworICAgIGRvVGVzdCgiK3gheCF4IXgheCF4IXgheCF4
IXgheD14LXktMCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4Iik7Cit9CisKK1RFU1Qo
V1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50cykKK3sKKyAgICBkb1Rl
c3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2gr
aitrK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytM
K1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9
cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1G
PUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0
ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzTWFueVRpbWVzKQoreworICAgIGRvVGVzdCgiKzEr
MiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6
K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0Mr
VitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1n
PWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9
Sz1MPVo9WD1DPVY9Qj1OPU0tLiExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFv
IXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEh
UyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFy
IXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkh
VSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5
ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEh
VyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0
ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMh
diFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFO
IU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWoh
ayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFa
IVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMh
ZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFH
IUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUh
aSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQ
IUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXch
ZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFU
IVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITch
OCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFt
IVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSIpOwor
fQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNBbmRR
dWVyeVNvbWVCZWZvcmVBZGRpbmdUaGVSZXN0KQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2
KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2s9MT0yPTM9ND01PTY9
Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9ay1sLXoteC1jLXYtYi1u
LW0tUS1XLUUtUi1ULVktVS1JLU8tUC1BLVMtRC1GLUctSC1KLUstTC1aLVgtQy1WLUItTi1NK2wr
eit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytMK1orWCtD
K1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9
Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9SD1K
PUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hT
ZXQsIEFkZFNvbWVFbGVtZW50c011bHRpcGxlVGltZXNUaGVuQWRkVGhlUmVzdEFuZFF1ZXJ5U29t
ZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4Kzkr
MCtxK3crZStyK3QhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4
ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYh
NyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1
ITYhNyE4ITkhMCFxIXchZSFyIXQreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9
Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1i
LW4tbS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0r
bCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitY
K0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9
Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1I
PUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328264</attachid>
            <date>2017-12-02 16:44:43 -0800</date>
            <delta_ts>2017-12-02 18:35:37 -0800</delta_ts>
            <desc>trying to fix the regression from my bugfix</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>288653</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIFRoaXMgbG9va3MgbGlrZSBhIDElIFNwZWVkb21ldGVy
CisgICAgICAgIHNwZWVkLXVwLgorICAgICAgICAKKyAgICAgICAgVGhlIGNvbnN0cmFpbnQgc29s
dmVyIHN1cHBvcnRzIHJ1bm5pbmcgY29uc3RyYWludHMgaW4gcGFyYWxsZWwgaW4gdHdvIGRpZmZl
cmVudCB3YXlzOgorICAgICAgICAKKyAgICAgICAgLSBSdW4gbXVsdGlwbGUgY29uc3RyYWludHMg
aW4gcGFyYWxsZWwgdG8gZWFjaCBvdGhlci4gVGhpcyBvbmx5IHdvcmtzIGZvciBjb25zdHJhaW50
cyB0aGF0IGNhbgorICAgICAgICAgIHRvbGVyYXRlIG90aGVyIGNvbnN0cmFpbnRzIHJ1bm5pbmcg
Y29uY3VycmVudGx5IHRvIHRoZW0gKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PQorICAgICAg
ICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCkuIFRoaXMgaXMgdGhlIG1vc3Qg
YmFzaWMga2luZCBvZiBwYXJhbGxlbGlzbSB0aGF0IHRoZQorICAgICAgICAgIGNvbnN0cmFpbnQg
c29sdmVyIHN1cHBvcnRzLiBBbGwgY29uc3RyYWludHMgZXhjZXB0IHRoZSBKU0MgU1BJIGNvbnN0
cmFpbnRzIGFyZSBjb25jdXJyZW50LiBXZQorICAgICAgICAgIGNvdWxkIHByb2JhYmx5IG1ha2Ug
dGhlbSBjb25jdXJyZW50LCBidXQgSSdtIHBsYXlpbmcgaXQgc2FmZSBmb3Igbm93LgorICAgICAg
ICAKKyAgICAgICAgLSBBIGNvbnN0cmFpbnQgY2FuIGNyZWF0ZSBwYXJhbGxlbCB3b3JrIGZvciBp
dHNlbGYsIHdoaWNoIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGludGVybGVhdmUKKyAgICAg
ICAgICB3aXRoIG90aGVyIHN0dWZmLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9ydCB0aGF0IGl0IGhh
cyBwYXJhbGxlbCB3b3JrIGJ5IHJldHVybmluZworICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlvbi4gVGhlbiB0aGUg
c29sdmVyIHdpbGwgYWxsb3cgdGhhdAorICAgICAgICAgIGNvbnN0cmFpbnQncyBkb1BhcmFsbGVs
V29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJrZXIgdGhyZWFkcyBh
cyBhcmUgYXZhaWxhYmxlLAorICAgICAgICAgIGZvciBhcyBsb25nIGFzIHRoYXQgZnVuY3Rpb24g
d2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9zc2libGUgdG8gaGF2
ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBhcmFsbGVsIHdvcmsu
CisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVtZW50ZWQgaW4gdGVy
bXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1cm5zIG91dCB0byBi
ZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAgICAgICAKKyAgICAg
ICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEgU2xvdFZpc2l0b3Iu
IFJ1bm5pbmcgb24gdGhlIG1hcmtlciB0aHJlYWRzIG1lYW5zIGhhdmluZworICAgICAgICAgIGFj
Y2VzcyB0byB0aG9zZSB0aHJlYWRzJyBTbG90VmlzaXRvcnMuIEFsc28sIGl0IG1lYW5zIGxlc3Mg
bG9hZCBiYWxhbmNpbmcuIFRoZSBzb2x2ZXIgd2lsbAorICAgICAgICAgIGNyZWF0ZSB3b3JrIG9u
IGVhY2ggbWFya2luZyB0aHJlYWQncyBTbG90VmlzaXRvci4gV2hlbiB0aGUgc29sdmVyIGlzIGRv
bmUgInN0ZWFsaW5nIiBhIG1hcmtlcgorICAgICAgICAgIHRocmVhZCwgdGhhdCB0aHJlYWQgd2ls
bCBoYXZlIHdvcmsgaXQgY2FuIHN0YXJ0IGRvaW5nIGltbWVkaWF0ZWx5LiBCZWZvcmUgdGhpcyBj
aGFuZ2UsIHdlIGhhZCB0bworICAgICAgICAgIGNvbnRyaWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkg
dGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9iYWwgd29ya2xpc3Qgc28gdGhhdCBpdCBj
b3VsZCBiZQorICAgICAgICAgIGRpc3RyaWJ1dGVkIHRvIHRoZSBtYXJrZXIgdGhyZWFkcyBieSBs
b2FkIGJhbGFuY2luZy4gVGhpcyBjaGFuZ2UgcHJvYmFibHkgaGVscHMgdG8gYXZvaWQgdGhhdAor
ICAgICAgICAgIGxvYWQgYmFsYW5jaW5nIHN0ZXAuCisgICAgICAgIAorICAgICAgICBBIGxvdCBv
ZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcgaXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEg
c3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcworICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0
IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFibGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0
cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQg
Y29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2VkIGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRo
aXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVs
IGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxsb2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMu
CisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJhbGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBv
dXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAg
ICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5l
eHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4uIGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20g
dGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9uZQorICAgICAgICB3aGVuIGl0IHJldHVybnMg
YSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3
YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAgICBkb25lIGlzIGluZGljYXRlZCBieSBudWxs
KS4KKyAgICAgICAgCisgICAgICAgIERldGFpbGVkIGFuYWx5c2lzIG9mIHRoZSBwZXJmb3JtYW5j
ZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBpbmRpY2F0ZSBhIGRlZmluaXRlIDElIFNwZWVkb21l
dGVyCisgICAgICAgIHByb2dyZXNzaW9uIGFuZCBubyBjaGFuZ2Ugb24gSmV0U3RyZWFtLiBJIGhh
dmUgZG9uZSB0aGUgU3BlZWRvbWV0ZXIgY29tcGFyaXNvbiBtYW55IHRpbWVzIG5vdyBhbmQKKyAg
ICAgICAgdGhlIHByb2dyZXNzaW9uIGlzIG5vdyBlYXNpbHkgcmVwcm9kdWNpYmxlIG9uIG15IG1h
Y2hpbmUuIEl0IHN0YXJ0ZWQgaW5pdGlhbGx5IGFzIGFuIHVucmVsaWFibGUKKyAgICAgICAgfjAu
NSUgc3BlZWQtdXAgb24gU3BlZWRvbWV0ZXIgYW5kIGEgcmVsaWFibGUgfjAuNSUgcmVncmVzc2lv
biBvbiBKZXRTdHJlYW0uIEFmdGVyIGZpeGluZyBsb3RzIG9mCisgICAgICAgIGJ1Z3MgaW4gdGhl
IGxvYWQgYmFsYW5jZXIgYW5kIHNvbWUgcmVhbGx5IGZ1bm55IHBhdGhvbG9naWVzLCB0aGUgSmV0
U3RyZWFtIHNjb3JlIGJlY2FtZSBuZXV0cmFsCisgICAgICAgIGFuZCB0aGUgU3BlZWRvbWV0ZXIg
c2NvcmUgZ290IGV2ZW4gYmV0dGVyLiAoV2VpcmRlc3QgcGF0aG9sb2d5IHRoYXQgSSBmaXhlZDog
aWYgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBzY2FuIGNvbnN0cmFpbnQgaXMgcnVuIGJ5IHNv
bWUgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIGFuZCB0aGUgbXV0YXRvciBoYXMgdGhl
IGNvbm4gW3NvCisgICAgICAgIHRoZSBtYWluIHRocmVhZCdzIHRvcCBmcmFtZXMgYXJlIHRoZSBH
QyBpdHNlbGZdIHRoZW4gd2Ugd2lsbCBzY2FuIHRoZSBtYWluIHRocmVhZCB0d2ljZSAtIG9uY2UK
KyAgICAgICAgdXNpbmcgQ3VycmVudFRocmVhZFN0YXRlIFt3aGljaCBjYXJlZnVsbHkgYXZvaWRz
IHNjYW5uaW5nIHRoZSBHQydzIHN0YWNrIGZyYW1lc10gYW5kIG9uY2UgYXMgaWYgaXQKKyAgICAg
ICAgd2FzIGEgcmFuZG9tIG5hdGl2ZSB0aHJlYWQgW3doaWNoIHdpbGwgc2NhbiB0aGUgR0MncyBm
cmFtZXNdOyB0aGUgbGF0dGVyIHNjYW4gd291bGQgcGljayB1cAorICAgICAgICBvYmplY3RzIHRo
YXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGhhZCBjb25zaWRlcmVkIGJ1dCByZWplY3RlZCwgd2hp
Y2ggd291bGQgc29tZXRpbWVzIGxlYWQgdG8KKyAgICAgICAgcnVuYXdheSBHQ3MuIEkgZml4ZWQg
dGhpcyBieSB0ZWFjaGluZyB0aGUgY29uc2VydmF0aXZlIHNjYW4gbm90IHRvIHNjYW4gdGhlIHRo
cmVhZCBydW5uaW5nIEdDCisgICAgICAgIHVzaW5nIHRoZSByYW5kb20gbmF0aXZlIHRocmVhZCBz
Y2FubmluZyBhbGdvcml0aG0uKQorCisgICAgICAgICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQp
OgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVl
VG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3Qu
Y3BwOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlKToKKyAgICAgICAgKiBoZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkZpeHBvaW50UGhhc2UpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
cmVzdW1lVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9y
RWFjaFNsb3RWaXNpdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d29ybGRJc1J1bm5pbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpydW5GdW5jdGlvbkluUGFyYWxsZWwpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6d29ybGRJc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxs
b2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkKToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oOgorICAgICAgICAoSlNDOjps
b2NrRHVyaW5nTWFya2luZyk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJj
ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFwL01h
cmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFyayk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAg
ICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2
ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNCZWdp
bik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpuZXdBY3RpdmVXZWFrU2V0c0VuZCk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1
aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtF
c3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwp
OgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnQ6Omxhc3RFeGVjdXRlUGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6cGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OkV4ZWN1dGlvbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkVmlzaXRT
b21ldGhpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6c2hvdWxkVGltZU91dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkcmFp
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpkaWRFeGVjdXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUpOiBEZWxldGVkLgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
Lmg6CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVy
Z2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9u
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1
dGUpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDogQWRkZWQuCisg
ICAgICAgICogaGVhcC9PcGFxdWVSb290U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9Q
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBhcmFsbGVsU291
cmNlQWRhcHRlcjo6UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50
OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdD
b25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpT
aW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9E
YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZy
b21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBhcmFsbGVsUGFz
c2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZUlmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVl
Um9vdHNJZlByb2ZpdGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VPcGFxdWVSb290cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9T
dWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNv
dXJjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxv
Y2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1
YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL1Zpc2l0Q291bnRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpW
aXNpdENvdW50ZXI6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAqIGhlYXAvVmlzaXRpbmdU
aW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9XZWFrQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKToKKwogMjAxNy0xMS0zMCAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBV
c2UgSlNGaXhlZEFycmF5IGZvciBvcF9uZXdfYXJyYXlfYnVmZmVyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMCwxMyArNTAwLDE2IEBAIGhlYXAv
SklUU3R1YlJvdXRpbmVTZXQuY3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCitoZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCiBoZWFwL01hcmtl
ZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAoraGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0yOTEsNiArMjkwLDcgQEAKIAkJ
MEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8q
IEFpck9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNDBFNEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzM0MUM0
NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBOTFDNDk3Rjc0MDBBNTc3RkEg
LyogQWlyT3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDE1NDVC
MUZEMjBCMjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDE1NDVBMUZEMjBCMUYwMDFCNThG
NiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAx
MzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTMxMiw2ICszMTIsOSBAQAogCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyog
U3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYy
MDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07CisJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAq
LzsgfTsKKwkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhD
NzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEQ4Qzc4MUZDQTNDRkEw
MDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlv
dXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi87IH07
CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTQsNiArMzU3LDcgQEAKIAkJMEY2
Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8q
IEFycmF5UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
OyB9OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IH07CisJCTBGNjQ1MzE4MUZEMjQ2QTcwMDI0
MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NDUzMTUxRkQyNDZBMDAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi87IH07CiAJCTBGNjRCMjcyMUE3ODRCQUYwMDZF
NEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY0QjI3
QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIg
LyogQWlyQXJnSW5saW5lcy5oICovOyB9OwpAQCAtNDQ2LDYgKzQ1MCw4IEBACiAJCTBGOUQzNjk1
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBE
RkdDbGVhblVwUGhhc2UuaCAqLzsgfTsKIAkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovOyB9OwogCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuaCAqLzsgfTsKKwkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAq
LzsgfTsKKwkJMEY5REFBMEExRkQxQzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFB
MDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovOyB9OwogCQkw
RjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyB9
OwogCQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgfTsKIAkJMEY5RkM4QzUx
NEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0OTks
NyArMTUwNSw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1NEQ1
MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVCRjcz
OCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5NzAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21O
YW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFFMDhG
MURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlu
a0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclBy
b3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xOTgxLDcgKzE5ODYsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIw
MEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUx
NzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxh
bklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5l
cy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjM0LDYgKzIyMzgsNyBAQAogCQkwRjNCRDFC
NjFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZH
SW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzFGMTgx
Qjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgcGF0aCA9
IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBw
YXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDE1NDVBMUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludENvbmN1cnJlbmN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
bHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI3MCw2ICsyMjc1LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAv
KiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJT
YW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5E
dW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5NzMwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzczMUZD
N0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1
NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRE
NzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDEsNiArMjM1MCw4IEBACiAJCTBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJyYXlNb2RlLmNw
cDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0Fy
cmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY0NTMxNTFGRDI0NkEw
MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlTd2l0Y2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRj
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwMyw2ICsyNTE0
LDkgQEAKIAkJMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQuaDsg
cGF0aCA9IGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5jcHA7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBGMUMzRTJD
NzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgcGF0
aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURB
QTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
cmFsbGVsU291cmNlQWRhcHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlF
MzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00MjY3LDcgKzQyODEsNiBAQAogCQlBREQwOUFGMzFGNjI0ODJF
MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAv
KiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5MzFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NDFFMDhGMUM5MDA1
OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmg7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk1MUUw
OEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0
b3IuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MTcsNiArNTUzMCw4IEBACiAJCQkJMEZEQ0UxMjgx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEy
RUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYy
MTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNDE1NDVB
MUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLywKKwkJCQkwRjRE
OEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJ
MEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJ
CQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2
RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjExLDE3ICs1NjI2LDIz
IEBACiAJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
Ki8sCiAJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcCAqLywKIAkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnRTZXQuaCAqLywKKwkJCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwICovLAorCQkJCTBGOURBQTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJr
U3RhY2suaCAqLywKKwkJCQkwRjY0NTMxNjFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAvKiBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3
QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJG
RCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oICovLAorCQkJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLywKIAkJCQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyog
UHJldmVudENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIw
OCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8q
IFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4
MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYw
MDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMy
QiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTU2NDMsNyArNTY2NCw3IEBACiAJCQkJ
MEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxv
b21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRp
b25hbEZpbmFsaXplci5oICovLAotCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNp
dGluZ1RpbWVvdXQuaCAqLywKKwkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgw
MDAsNiArODAyMSw3IEBACiAJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNp
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUNGOTg5MUU5RUQ2NTIwMEMxODY5MiAvKiBBaXJT
dGFja0FsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDE1NDVCMUZEMjBC
MjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MjAwLDYgKzgyMjIsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcw
MDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEz
QkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIz
RUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJy
aWVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q2FsbERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODI5Myw2ICs4MzE2LDcgQEAKIAkJCQlBNzdB
NDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY0NTMxODFGRDI0
NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg3NjgsNiArODc5Miw3IEBACiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8q
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtODkxNiw2ICs4OTQxLDcgQEAKIAkJCQlBNzQ4MkU5MzEx
NkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQz
MkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVD
NjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4
NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVy
cyAqLywKQEAgLTkwMzUsOSArOTA2MSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZG
IC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNB
M0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVS
b290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyog
T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0Myw2ICs5MjY5LDcgQEAK
IAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEExRkQxQzNE
MzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjgzLDcgKzkzMTAsNiBAQAogCQkJCTBGNkM3MzUxMUFD
OUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGlt
ZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYw
IC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyog
Vk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Miw3ICs5NzIsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRX
ZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQg
PSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAg
IGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNo
b3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGlj
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAogCiBib29sIENvZGVCbG9jazo6c2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewotICAg
IGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTExMzks
MTAgKzExMzksMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwog
I2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRp
b24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4g
JiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJh
bnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwpAQCAt
MTI0NiwxNCArMTI0NiwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5j
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8
Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGFs
bEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29t
bW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVS
ZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChk
ZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewogICAgICAgICAg
ICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3Bs
YW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93biBy
aWdodFRvUnVuLgotICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcGVk
IGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJlYWQo
Jm1fZGF0YSk7CiAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxlZCkg
ewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAu
d29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3Rv
cHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBs
YW5zLmFwcGVuZChtX3BsYW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFwLndv
cmxkSXNTdG9wcGVkKCkpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3BsYW5Db21waWxlZC5u
b3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAo
c2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgu
bV92bS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwogICAgIAogICAgIGlmIChzdGF0ZS5hbGxvY2F0
aW9uRmFpbGVkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDEyICs2NiwxMiBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+Ci1pbmxpbmUgdm9pZCBDb25zZXJ2YXRp
dmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIodm9pZCogcCwgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKK2lubGlu
ZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgbWFy
a0hvb2subWFyayhwKTsKIAogICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2ludGVyc0Zvck1h
cmtpbmcoCi0gICAgICAgIG1faGVhcCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwgcCwKKyAgICAg
ICAgbV9oZWFwLCBtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBmaWx0ZXIs
IHAsCiAgICAgICAgIFsmXSAodm9pZCogcCkgewogICAgICAgICAgICAgaWYgKG1fc2l6ZSA9PSBt
X2NhcGFjaXR5KQogICAgICAgICAgICAgICAgIGdyb3coKTsKQEAgLTk1LDggKzk1LDkgQEAgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogCiAgICAgVGlueUJsb29tRmls
dGVyIGZpbHRlciA9IG1faGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigpOyAvLyBN
YWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8gc2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3Qg
YWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxsb2NhdGVkLgogICAgIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uID0gbV9oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKTsKKyAg
ICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBtX2hlYXAub2JqZWN0U3BhY2Uo
KS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICBmb3IgKGNoYXIqKiBpdCA9IHN0YXRpY19j
YXN0PGNoYXIqKj4oYmVnaW4pOyBpdCAhPSBzdGF0aWNfY2FzdDxjaGFyKio+KGVuZCk7ICsraXQp
Ci0gICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwg
bWFya0hvb2spOworICAgICAgICBnZW5lcmljQWRkUG9pbnRlcigqaXQsIG1hcmtpbmdWZXJzaW9u
LCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGZpbHRlciwgbWFya0hvb2spOwogfQogCiBjbGFzcyBE
dW1teU1hcmtIb29rIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+Ci0gICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgSGVhcFZlcnNpb24s
IFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKKyAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVy
KHZvaWQqLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29rJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXJrSG9vaz4KICAgICB2b2lkIGdlbmVyaWNBZGRTcGFuKHZvaWQqLCB2b2lk
KiBlbmQsIE1hcmtIb29rJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
dHJhaW50Q29uY3VycmVuY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3Ry
YWludENvbmN1cnJlbmN5IDogdWludDhfdCB7CisgICAgU2VxdWVudGlhbCwKKyAgICBDb25jdXJy
ZW50Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitp
bmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWlu
dENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQoreworICAgIHN3aXRjaCAoY29uY3VycmVuY3kpIHsK
KyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsOgorICAgICAg
ICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlND
OjpDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQ6CisgICAgICAgIG91dC5wcmludCgi
Q29uY3VycmVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxs
ZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7CisgICAg
U2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAgICBz
d2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDoK
KyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVu
dGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSwxMiArMjA5LDExIEBAIGlubGluZSBjb25zdCBUIEdDU2VnbWVudGVkQXJyYXk8VD46OnJlbW8K
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogaW5saW5lIGJvb2wgR0NTZWdtZW50ZWRBcnJheTxUPjo6
aXNFbXB0eSgpCiB7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIGJlIHNhZmUgdG8gY2FsbCBjb25j
dXJyZW50bHkuIEl0J3MgaW1wb3J0YW50IHRvIHByZXNlcnZlIHRoYXQgY2FwYWJpbGl0eS4KICAg
ICBpZiAobV90b3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9zZWdtZW50cy5o
ZWFkKCktPm5leHQoKSkgewotICAgICAgICBBU1NFUlQobV9zZWdtZW50cy5oZWFkKCktPm5leHQo
KS0+bV90b3AgPT0gc19zZWdtZW50Q2FwYWNpdHkpOworICAgIGlmIChtX3NlZ21lbnRzLmhlYWQo
KS0+bmV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTWFjaGlu
ZVN0YWNrTWFya2VyLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIK
ICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkU3Bh
Y2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKQEAgLTY2LDYg
KzY3LDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtl
ZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgi
CiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjgxLDcgKzI4Myw3IEBAIEhlYXA6OkhlYXAoVk0qIHZt
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFr
ZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0
YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJr
U3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3Ry
YWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwg
bV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0
aGlzKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFr
ZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjpt
YWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTU5NCw3ICs1OTYsNyBAQCB2b2lk
IEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDCiAgICAgICAgIGZ1bmMoY29kZUJs
b2NrKTsKIH0KIAotdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQordm9p
ZCBIZWFwOjphc3NlcnRNYXJrU3RhY2tzRW1wdHkoKQogewogICAgIGJvb2wgb2sgPSB0cnVlOwog
ICAgIApAQCAtNjA4LDEyICs2MTAsMjEgQEAgdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3Rh
Y2tzRW1wdHkoKQogICAgICAgICBvayA9IGZhbHNlOwogICAgIH0KICAgICAKKyAgICBmb3JFYWNo
U2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBWaXNpdG9yICIsIFJhd1Bv
aW50ZXIoJnZpc2l0b3IpLCAiIGlzIG5vdCBlbXB0eSFcbiIpOworICAgICAgICAgICAgb2sgPSBm
YWxzZTsKKyAgICAgICAgfSk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQob2spOwogfQogCiB2
b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewot
ICAgIG1fbWFjaGluZVRocmVhZHMtPmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9q
aXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MsIG1fY3VycmVudFRocmVhZFN0YXRlKTsKKyAg
ICBtX21hY2hpbmVUaHJlYWRzLT5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0
U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzLCBtX2N1cnJlbnRUaHJlYWRTdGF0ZSwgbV9jdXJy
ZW50VGhyZWFkKTsKIH0KIAogdm9pZCBIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0
aXZlUm9vdHMmIHJvb3RzKQpAQCAtNzMwLDcgKzc0MSw3IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2lu
ZygpCiAgICAgICAgICAgICB2aXNpdG9yLnJlc2V0KCk7CiAgICAgICAgIH0pOwogCi0gICAgYXNz
ZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CisgICAgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7
CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKQEAgLTkxMSw3ICs5MjIsNyBA
QCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVy
c0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8v
IER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0
IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxs
IG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmplY3Qu
IElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBh
ZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0
LDE1ICs5MzUsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQog
ICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAg
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMg
b3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBp
c01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2Ug
ZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1h
cmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nh
bm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21p
Y0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUg
b2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAgICAg
ICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRo
aXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtlZENv
bmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAgICAg
ICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAgIC8v
IGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAgICAg
ICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlm
ZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBi
bGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sg
Y29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShD
ZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk1OSw3IEBAIHZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8v
IEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0
ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3Mg
T0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ug
d2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0x
MDkxLDYgKzExMDIsNyBAQCBhdXRvIEhlYXA6OnJ1bkN1cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciBj
CiB7CiAgICAgY2hlY2tDb25uKGNvbm4pOwogICAgIG1fY3VycmVudFRocmVhZFN0YXRlID0gY3Vy
cmVudFRocmVhZFN0YXRlOworICAgIG1fY3VycmVudFRocmVhZCA9ICZXVEY6OlRocmVhZDo6Y3Vy
cmVudCgpOwogICAgIAogICAgIGlmIChjb25uID09IEdDQ29uZHVjdG9yOjpNdXRhdG9yKQogICAg
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0oKSk7CkBAIC0xMjgzLDEzICsxMjk1LDExIEBAIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICB9CiAgICAgICAgIAog
ICAgIGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgbV9v
cGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAgICAgCiAgICAgICAgIG1fc2NoZWR1
bGVyLT5kaWRSZWFjaFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgYXNzZXJ0
U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0
b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRv
ciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3It
Pm1lcmdlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgCisgICAgICAgIGFzc2VydE1hcmtTdGFja3NF
bXB0eSgpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRvckRp
ZFJ1biBpbnRvIGFjY291bnQgd2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxpa2Vs
eSwKICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIHJvb3QgY29uc3RyYWludHMg
YWdhaW4gdW5sZXNzIHRoZSBtdXRhdG9yIGRpZCBydW4uIEF0IGEKQEAgLTEyOTcsMTcgKzEzMDcs
MTQgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAv
LyBlc3RpbWF0ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjgyOAogICAgICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZCB0aW1lb3V0LiBUaGlzIG9u
bHkgY29tZXMKLSAgICAgICAgLy8gaW50byBwbGF5IGlmIHdlJ3JlIGV4ZWN1dGluZyBjb25zdHJh
aW50cyBmb3IgdGhlIGZpcnN0IHRpbWUuIEJ1dCB0aGF0IHdpbGwgbWF0dGVyCi0gICAgICAgIC8v
IHdoZW4gd2UgaGF2ZSBkZWVwIHN0YWNrcyBvciBhIGxvdCBvZiBET00gc3R1ZmYuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzEKLSAgICAg
ICAgICAgIAogICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAg
ICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCku
Ci0gICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+
ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKKyAgICAgICAgYm9vbCBjb252ZXJnZWQgPSBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252
ZXJnZW5jZShzbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlIHNs
b3RWaXNpdG9yLmlzRW1wdHkoKSBjaGVjayBpcyBtb3N0IGxpa2VseSBub3QgbmVlZGVkLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzEwCiAg
ICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgIGFzc2VydE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzMjQsNiAr
MTMzMSwxNSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAg
ICAgIAogICAgIG1fc2NoZWR1bGVyLT5zeW5jaHJvbm91c0RyYWluaW5nRGlkU3RhbGwoKTsKIAor
ICAgIC8vIFRoaXMgaXMga2luZGEgdHJpY2t5LiBUaGUgdGVybWluYXRpb24gY2hlY2sgbG9va3Mg
YXQ6CisgICAgLy8KKyAgICAvLyAtIFdoZXRoZXIgdGhlIG1hcmtpbmcgdGhyZWFkcyBhcmUgYWN0
aXZlLiBJZiB0aGV5IGFyZSBub3QsIHRoaXMgbWVhbnMgdGhhdCB0aGUgbWFya2luZyB0aHJlYWRz
JworICAgIC8vICAgU2xvdFZpc2l0b3JzIGFyZSBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IGNvbGxlY3RvcidzIHNsb3QgdmlzaXRvciBpcyBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IHNoYXJlZCBtYXJrIHN0YWNrcyBhcmUgZW1wdHkuCisgICAgLy8KKyAgICAvLyBUaGlzIGRvZXNu
J3QgaGF2ZSB0byBjaGVjayB0aGUgbXV0YXRvciBTbG90VmlzaXRvciBiZWNhdXNlIHRoYXQgb25l
IGJlY29tZXMgZW1wdHkgYWZ0ZXIgZXZlcnkgR0MKKyAgICAvLyB3b3JrIGluY3JlbWVudCwgc28g
aXQgbXVzdCBiZSBlbXB0eSBub3cuCiAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWlu
YXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxvb3Bpbmcg
dG8gdGhlIHRvcCBpZiBydW5GaXhwb2ludFBoYXNlKCkuCiAgICAgICAgIApAQCAtMTQ4OSw2ICsx
NTA1LDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogICAgIGlm
IChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhjb25uLCAiOiBHb2luZyB0byBwaGFzZTogIiwgbV9u
ZXh0UGhhc2UsICIgKGZyb20gIiwgbV9jdXJyZW50UGhhc2UsICIpXG4iKTsKICAgICAKKyAgICBt
X3BoYXNlVmVyc2lvbisrOworICAgIAogICAgIGJvb2wgc3VzcGVuZGVkQmVmb3JlID0gd29ybGRT
aG91bGRCZVN1c3BlbmRlZChtX2N1cnJlbnRQaGFzZSk7CiAgICAgYm9vbCBzdXNwZW5kZWRBZnRl
ciA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQobV9uZXh0UGhhc2UpOwogICAgIApAQCAtMTUyNiw3
ICsxNTQ0LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogCiB2
b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgY29ubikKIHsKLSAgICBpZiAo
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmIChtX3dv
cmxkSXNTdG9wcGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiB3b3JsZCBhbHJlYWR5IHN0
b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0xNTM3LDcgKzE1NTUsNyBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25k
dWN0b3IgCiAgICAgbV9tdXRhdG9yRGlkUnVuID0gZmFsc2U7CiAKICAgICBzdXNwZW5kQ29tcGls
ZXJUaHJlYWRzKCk7Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCA9IHRydWU7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IHRydWU7CiAKICAgICBmb3JFYWNoU2xv
dFZpc2l0b3IoCiAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CkBAIC0x
NTc0LDExICsxNTkyLDExIEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OnJlc3VtZVRoZVBlcmlw
aGUKICAgICAKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAwOwogICAgIAotICAgIGlmICghbV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmICghbV93b3Js
ZElzU3RvcHBlZCkgewogICAgICAgICBkYXRhTG9nKCJGYXRhbDogY29sbGVjdG9yIGRvZXMgbm90
IGJlbGlldmUgdGhhdCB0aGUgd29ybGQgaXMgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IGZhbHNl
OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZDogd2Ug
d2FudCB0byBncmFiIHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQogICAgIC8v
IGJlY29tZSBhdmFpbGFibGUuIFdlIGJhc2ljYWxseSB3YW50IGEgbG9ja0FueSgpIG1ldGhvZCB0
aGF0IHdpbGwgbG9jayB3aGF0ZXZlciBsb2NrIGlzIGF2YWlsYWJsZQpAQCAtMjU3OCw3ICsyNTk2
LDExIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDAp
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKKyAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNl
VGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAg
ICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAt
MjU4NywxMiArMjYwOSwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
ICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNpb247CiAgICAgICAgIH0sCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsyNjM3
LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAg
ICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
ICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjYy
MSw3ICsyNjQ1LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwpA
QCAtMjY0MSwyMSArMjY2NSwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIg
Um91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVjdFNw
YWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwK
LSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
ICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xv
dFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjg4LDcgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAgICAg
ICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJl
bmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2ODQsNyArMjcwOCw3IEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAogICAgICAg
ICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdzIGJs
YWNrLgpAQCAtMjY5NSwyMyArMjcxOSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXll
ZCk7CiAgICAgCi0gICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCi0gICAgICAgICJNcm1zIiwgIk11
dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKLSAgICAgICAgICAgIC8vIEluZGlj
YXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKLSAgICAgICAgICAg
IHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3Rh
Y2stPnNpemUoKTsKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXpl
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiKCIsIHNpemUsICIpIik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOwotICAgICAgICAgICAgbV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHNs
b3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewotICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludD4oKnRoaXMpKTsKIH0KIAogdm9pZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQpCkBAIC0yNzk0LDE2
ICsyODAyLDYgQEAgdm9pZCBIZWFwOjphbGxvd0NvbGxlY3Rpb24oKQogICAgIG1fY29sbGVjdENv
bnRpbnVvdXNseUxvY2sudW5sb2NrKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgZnVu
YygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0
b3IpOwotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TXV0YXRv
clNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5j
ZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCArMjg0NSwyNCBAQCB2b2lkIEhlYXA6OnJlbW92ZUhlYXBG
aW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJlbW92ZUZp
cnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBIZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgbV9ib251c1Zpc2l0b3JUYXNrID0g
dGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwor
dm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiB0YXNrKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxSZWZDb3VudCA9IHRhc2st
PnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5y
dW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVs
bHB0cik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011
dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2stPnJlZkNvdW50KCkgPiBpbml0aWFsUmVmQ291bnQp
CisgICAgICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KG1fbWFya2luZ011
dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi
V2Vha0hhbmRsZU93bmVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgog
I2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNzMsNiArNzQsNyBA
QCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFj
aGluZVRocmVhZHM7CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKK2NsYXNzIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogY2xhc3MgTWFya2VkQXJndW1l
bnRCdWZmZXI7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKQEAgLTExNCw3ICsxMTYsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9
IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRp
YyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAg
c3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xNTQsNyArMTU1LDggQEAg
cHVibGljOgogICAgIE11dGF0b3JTdGF0ZSBtdXRhdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X211dGF0b3JTdGF0ZTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBjb2xs
ZWN0aW9uU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3Rpb25TY29wZTsgfQogICAgIGJv
b2wgaGFzSGVhcEFjY2VzcygpIGNvbnN0OwotICAgIGJvb2wgY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNTdG9wcGVkKCkgY29u
c3Q7CisgICAgYm9vbCB3b3JsZElzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuICF3b3JsZElzU3Rv
cHBlZCgpOyB9CiAKICAgICAvLyBXZSdyZSBhbHdheXMgYnVzeSBvbiB0aGUgY29sbGVjdGlvbiB0
aHJlYWRzLiBPbiB0aGUgbWFpbiB0aHJlYWQsIHRoaXMgcmV0dXJucyB0cnVlIGlmIHdlJ3JlCiAg
ICAgLy8gaGVscGluZyBoZWFwLgpAQCAtMzQ5LDYgKzM1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFsbG93Q29sbGVjdGlvbigpOwogICAgIAogICAgIHVpbnQ2NF90IG11dGF0b3JFeGVjdXRpb25W
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbjsgfQorICAg
IHVpbnQ2NF90IHBoYXNlVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2VWZXJzaW9uOyB9
CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTM1OCw2ICszNjEs
MTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNv
bnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQgcmVtb3ZlSGVhcEZpbmFsaXpl
ckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOworICAgIAorICAgIHZvaWQg
cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4p
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBydW5GdW5jdGlv
bkluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHJ1blRhc2tJblBh
cmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPihmdW5jKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRp
bmdTY29wZTsKQEAgLTM3Myw2ICszODcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBI
ZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9j
azsKQEAgLTUyNSw4ICs1NDAsMTAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB2b2lkIGFzc2VydFNoYXJl
ZE1hcmtTdGFja3NFbXB0eSgpOworICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAK
KyAgICB2b2lkIHNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4pOworICAgIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAg
Y29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5
Y2xlOwpAQCAtNTc5LDkgKzU5Niw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFNsb3RWaXNpdG9y
Kj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9yczsKICAgICBMb2NrIG1fcGFyYWxsZWxT
bG90VmlzaXRvckxvY2s7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJik7Ci0KICAgICBIYW5kbGVTZXQgbV9o
YW5kbGVTZXQ7CiAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUJsb2NrU2V0PiBtX2NvZGVCbG9ja3M7CkBAIC02MzMsOCArNjQ3LDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAg
fTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CiAKLSAg
ICBMb2NrIG1fb3BhcXVlUm9vdHNNdXRleDsKLSAgICBIYXNoU2V0PGNvbnN0IHZvaWQqPiBtX29w
YXF1ZVJvb3RzOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdHM7CiAKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCkBAIC02
NDIsNiArNjU1LDcgQEAgcHJpdmF0ZToKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25h
bEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKIAogICAgIFBhcmFs
bGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+IG1fYm9udXNWaXNpdG9yVGFzazsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2NhdGVkIHsgMCB9OwpAQCAt
NjU3LDcgKzY3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5lZWRG
aW5hbGl6ZUJpdCA9IDF1IDw8IDR1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9y
V2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMg
YXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3Rh
dGU7Ci0gICAgYm9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fd29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIE1vbm90
b25pY1RpbWUgbV9iZWZvcmVHQzsKICAgICBNb25vdG9uaWNUaW1lIG1fYWZ0ZXJHQzsKICAgICBN
b25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CkBAIC02NzIsNiArNjg2LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fdGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JE
aWRSdW4geyB0cnVlIH07CiAgICAgdWludDY0X3QgbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbiB7
IDAgfTsKKyAgICB1aW50NjRfdCBtX3BoYXNlVmVyc2lvbiB7IDAgfTsKICAgICBCb3g8TG9jaz4g
bV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fdGhy
ZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3YWl0IG9uIHRoaXMuIEl0IHdv
dWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJl
YWQ7CkBAIC02OTMsNiArNzA4LDcgQEAgcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9iYXJyaWVy
c0V4ZWN1dGVkIHsgMCB9OwogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50
VGhyZWFkU3RhdGUgeyBudWxscHRyIH07CisgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVh
ZCB7IG51bGxwdHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2lu
dGVyLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDMwICs2Mywy
MCBAQCBpbmxpbmUgYm9vbCBIZWFwOjpoYXNIZWFwQWNjZXNzKCkgY29uc3QKICAgICByZXR1cm4g
bV93b3JsZFN0YXRlLmxvYWQoKSAmIGhhc0FjY2Vzc0JpdDsKIH0KIAotaW5saW5lIGJvb2wgSGVh
cDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdAoraW5saW5l
IGJvb2wgSGVhcDo6d29ybGRJc1N0b3BwZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOworICAgIHJldHVybiBtX3dvcmxkSXNT
dG9wcGVkOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gaW5zdGFuY2UgbWV0aG9k
LCBzbyB0aGF0IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJzaW9uKCkgcXVpY2tseS4KKy8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5ODgKIEFMV0FZU19JTkxJ
TkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFTU0VS
VChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwt
PmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRp
b24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJs
b2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgpLT5o
ZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdDZWxs
KQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2Vs
bCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBj
ZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBibG9j
ayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29uY3Vy
cmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1Zl
cnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCktPmhl
YXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlTX0lO
TElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkBAIC0xNzksMTkgKzE2OSwxOSBAQCBpbmxpbmUgdm9p
ZCBIZWFwOjpyZWxlYXNlU29vbihSZXRhaW5QdHI8CiAKIGlubGluZSB2b2lkIEhlYXA6OmluY3Jl
bWVudERlZmVycmFsRGVwdGgoKQogewotICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1f
Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOworICAgIEFTU0VSVCghbWF5
QmVHQ1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwogICAgIG1fZGVmZXJyYWxEZXB0aCsr
OwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKLSAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNT
dG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQogewotICAgIEFTU0VSVCghbWF5
QmVHQ1RocmVhZCgpIHx8IG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQp
OworICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwogICAg
IG1fZGVmZXJyYWxEZXB0aC0tOwogICAgIAogICAgIGlmIChVTkxJS0VMWShtX2RpZERlZmVyR0NX
b3JrKSkgewpAQCAtMjY5LDQgKzI1OSwxNCBAQCBpbmxpbmUgdm9pZCBIZWFwOjpzdG9wSWZOZWNl
c3NhcnkoKQogICAgICAgICBzdG9wSWZOZWNlc3NhcnlTbG93KCk7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBm
dW5jKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9y
TG9jayk7CisgICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgZnVuYygqbV9t
dXRhdG9yU2xvdFZpc2l0b3IpOworICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFs
bGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgK
IHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0g
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQo
SGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAgICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwo
Y2VsbCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBVdGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFV0aWwuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFV0aWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gYmVmb3JlIGxpdmVuZXNzIGRhdGEgaXMgY2xlYXJlZCB0byBiZSBhY2N1cmF0ZS4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHN0YXRpYyB2b2lkIGZpbmRHQ09iamVjdFBvaW50
ZXJzRm9yTWFya2luZygKLSAgICAgICAgSGVhcCYgaGVhcCwgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIHZvaWQqIHBhc3NlZFBvaW50ZXIsCi0gICAg
ICAgIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgIEhlYXAmIGhlYXAsIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIFRpbnlCbG9v
bUZpbHRlciBmaWx0ZXIsCisgICAgICAgIHZvaWQqIHBhc3NlZFBvaW50ZXIsIGNvbnN0IEZ1bmMm
IGZ1bmMpCiAgICAgewogICAgICAgICBjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2NrKj4mIHNldCA9
IGhlYXAub2JqZWN0U3BhY2UoKS5ibG9ja3MoKS5zZXQoKTsKICAgICAgICAgCkBAIC04OCw3ICs4
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAmJiBzZXQuY29udGFpbnMocHJldmlvdXND
YW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNDYW5kaWRhdGUtPmhhbmRsZSgp
LmNlbGxLaW5kKCkgPT0gSGVhcENlbGw6OkF1eGlsaWFyeSkgewogICAgICAgICAgICAgICAgIHBy
ZXZpb3VzUG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihwcmV2aW91c0NhbmRpZGF0ZS0+aGFu
ZGxlKCkuY2VsbEFsaWduKHByZXZpb3VzUG9pbnRlcikpOwotICAgICAgICAgICAgICAgIGlmIChw
cmV2aW91c0NhbmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgaXNN
YXJraW5nLCBwcmV2aW91c1BvaW50ZXIpKQorICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0Nh
bmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0
ZWRWZXJzaW9uLCBpc01hcmtpbmcsIHByZXZpb3VzUG9pbnRlcikpCiAgICAgICAgICAgICAgICAg
ICAgIGZ1bmMocHJldmlvdXNQb2ludGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgICAgIGF1dG8gdHJ5UG9pbnRlciA9IFsmXSAodm9pZCogcG9pbnRlcikgewotICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgaXNN
YXJraW5nLCBwb2ludGVyKSkKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmhhbmRsZSgpLmlz
TGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgaXNNYXJraW5n
LCBwb2ludGVyKSkKICAgICAgICAgICAgICAgICBmdW5jKHBvaW50ZXIpOwogICAgICAgICB9Owog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9u
LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdl
QWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNN
YXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzTWFya2VkKEhlYXBDZWxsKiwgRGVwZW5kZW5jeSkgeyByZXR1cm4gaXNNYXJrZWQo
KTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVy
c2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CisgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2Vk
KCk7IH0KICAgICBib29sIGlzTGl2ZSgpIHsgcmV0dXJuIGlzTWFya2VkKCkgfHwgaXNOZXdseUFs
bG9jYXRlZCgpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNWYWxpZENlbGwoKSBjb25zdCB7IHJldHVy
biBtX2hhc1ZhbGlkQ2VsbDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9j
a0R1cmluZ01hcmtpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Mb2NrRHVyaW5nTWFya2luZy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDE0ICsz
Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gVXNlIHRoaXMgbG9jayBzY29wZSBsaWtlIHNvOgog
Ly8gYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyhoZWFwLCBsb2NrKTsKIHRlbXBsYXRl
PHR5cGVuYW1lIExvY2tUeXBlPgotTG9ja2VyPExvY2tUeXBlPiBsb2NrRHVyaW5nTWFya2luZyhI
ZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFzc2VkTG9jaykKK2F1dG8gbG9ja0R1cmluZ01hcmtpbmco
SGVhcCYgaGVhcCwgTG9ja1R5cGUmIHBhc3NlZExvY2spCiB7Ci0gICAgTG9ja1R5cGUqIGxvY2s7
Ci0gICAgaWYgKGhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpCi0gICAgICAgIGxvY2sgPSAm
cGFzc2VkTG9jazsKLSAgICBlbHNlCi0gICAgICAgIGxvY2sgPSBudWxscHRyOwotICAgIHJldHVy
biBMb2NrZXI8TG9ja1R5cGU+KGxvY2spOworICAgIHJldHVybiBob2xkTG9ja0lmKHBhc3NlZExv
Y2ssIGhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNr
TWFya2VyLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3
IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFMKICAgICAqc2l6ZSAr
PSBzdGFjay5zZWNvbmQ7CiB9CiAKLWJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRo
cmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBidWZmZXIsIHNp
emVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplKQorYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29w
eU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGJ1
ZmZlciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNpemUsIFRocmVhZCYgY3VycmVudFRocmVh
ZEZvckdDKQogewogICAgIC8vIFByZXZlbnQgdHdvIFZNcyBmcm9tIHN1c3BlbmRpbmcgZWFjaCBv
dGhlcidzIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZSwKICAgICAvLyB3aGljaCBjYW4gY2F1c2Ug
ZGVhZGxvY2s6IDxyZGFyOi8vcHJvYmxlbS8yMDMwMDg0Mj4uCkBAIC0xNDUsMTMgKzE0NSwxNCBA
QCBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTCiAgICAgKnNpemUgPSAw
OwogCiAgICAgVGhyZWFkJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Ci0gICAg
Y29uc3QgYXV0byYgdGhyZWFkcyA9IG1fdGhyZWFkR3JvdXAtPnRocmVhZHMobG9ja2VyKTsKKyAg
ICBjb25zdCBMaXN0SGFzaFNldDxSZWY8VGhyZWFkPj4mIHRocmVhZHMgPSBtX3RocmVhZEdyb3Vw
LT50aHJlYWRzKGxvY2tlcik7CiAgICAgQml0VmVjdG9yIGlzU3VzcGVuZGVkKHRocmVhZHMuc2l6
ZSgpKTsKIAogICAgIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgICAgICBmb3Ig
KGF1dG8mIHRocmVhZCA6IHRocmVhZHMpIHsKLSAgICAgICAgICAgIGlmICh0aHJlYWQuZ2V0KCkg
IT0gY3VycmVudFRocmVhZCkgeworICAgICAgICBmb3IgKGNvbnN0IFJlZjxUaHJlYWQ+JiB0aHJl
YWQgOiB0aHJlYWRzKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkLmdldCgpICE9IGN1cnJlbnRU
aHJlYWQKKyAgICAgICAgICAgICAgICAmJiB0aHJlYWQuZ2V0KCkgIT0gY3VycmVudFRocmVhZEZv
ckdDKSB7CiAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSB0aHJlYWQtPnN1c3BlbmQoKTsK
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBpc1N1c3Bl
bmRlZC5zZXQoaW5kZXgpOwpAQCAtMTk5LDcgKzIwMCw3IEBAIHN0YXRpYyB2b2lkIGdyb3dCdWZm
ZXIoc2l6ZV90IHNpemUsIHZvaWQKICAgICAqYnVmZmVyID0gZmFzdE1hbGxvYygqY2FwYWNpdHkp
OwogfQogCi12b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRT
dHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcywgQ3VycmVudFRocmVhZFN0YXRl
KiBjdXJyZW50VGhyZWFkU3RhdGUpCit2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJS
b3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcywgQ3Vy
cmVudFRocmVhZFN0YXRlKiBjdXJyZW50VGhyZWFkU3RhdGUsIFRocmVhZCogY3VycmVudFRocmVh
ZCkKIHsKICAgICBpZiAoY3VycmVudFRocmVhZFN0YXRlKQogICAgICAgICBnYXRoZXJGcm9tQ3Vy
cmVudFRocmVhZChjb25zZXJ2YXRpdmVSb290cywgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tz
LCAqY3VycmVudFRocmVhZFN0YXRlKTsKQEAgLTIwOCw3ICsyMDksNyBAQCB2b2lkIE1hY2hpbmVU
aHJlYWRzOjpnYXRoZXJDb25zZXJ2YXRpdmVSCiAgICAgc2l6ZV90IGNhcGFjaXR5ID0gMDsKICAg
ICB2b2lkKiBidWZmZXIgPSBudWxscHRyOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV90
aHJlYWRHcm91cC0+Z2V0TG9jaygpKTsKLSAgICB3aGlsZSAoIXRyeUNvcHlPdGhlclRocmVhZFN0
YWNrcyhsb2NrZXIsIGJ1ZmZlciwgY2FwYWNpdHksICZzaXplKSkKKyAgICB3aGlsZSAoIXRyeUNv
cHlPdGhlclRocmVhZFN0YWNrcyhsb2NrZXIsIGJ1ZmZlciwgY2FwYWNpdHksICZzaXplLCAqY3Vy
cmVudFRocmVhZCkpCiAgICAgICAgIGdyb3dCdWZmZXIoc2l6ZSwgJmJ1ZmZlciwgJmNhcGFjaXR5
KTsKIAogICAgIGlmICghYnVmZmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCw3IEBAIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKIHB1YmxpYzoKICAgICBNYWNo
aW5lVGhyZWFkcygpOwogCi0gICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2
YXRpdmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRo
cmVhZFN0YXRlKik7CisgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRp
dmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVh
ZFN0YXRlKiwgVGhyZWFkKik7CiAKICAgICAvLyBPbmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBieSBj
bGllbnRzIHRoYXQgY2FuIHVzZSB0aGUgc2FtZSBoZWFwIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4K
ICAgICB2b2lkIGFkZEN1cnJlbnRUaHJlYWQoKSB7IG1fdGhyZWFkR3JvdXAtPmFkZEN1cnJlbnRU
aHJlYWQoKTsgfQpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVyRnJv
bUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENv
ZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCiAgICAgdm9pZCB0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFjayhUaHJlYWQmLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsK
LSAgICBib29sIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYs
IHZvaWQqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCopOworICAgIGJvb2wgdHJ5Q29weU90aGVy
VGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCosIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90KiwgVGhyZWFkJik7CiAKICAgICBzdGQ6OnNoYXJlZF9wdHI8VGhyZWFkR3JvdXA+
IG1fdGhyZWFkR3JvdXA7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWlu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6Ok1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCisgICAgOiBNYXJraW5nQ29uc3RyYWludCgi
TXNtIiwgIk1hcmsgU3RhY2sgTWVyZ2luZyIsIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRC
eUV4ZWN1dGlvbikKKyAgICAsIG1faGVhcChoZWFwKQoreworfQorCitNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludDo6fk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCkKK3sKK30KKworZG91Ymxl
IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRv
ciYpCit7CisgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1f
aGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKK30KKwordm9pZCBNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUgZW5z
dXJlcyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3QgbmVl
ZCB0byBwcm9kdWNlCisgICAgLy8gYW55bW9yZSB3b3JrLgorICAgIHNpemVfdCBzaXplID0gbV9o
ZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+
c2l6ZSgpOworICAgIHZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOworICAgIAorICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCIoIiwgc2l6ZSwgIikiKTsKK30K
KworQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVj
dXRlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2hlYXAubV9tdXRhdG9yTWFy
a1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKKyAgICBtX2hl
YXAubV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygp
KTsKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJh
aW50IHsKK3B1YmxpYzoKKyAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJik7Cisg
ICAgfk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3Ry
YWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgCitw
cml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NCw2ICs0NDQsMzMgQEAgdm9pZCBNYXJr
ZWRBbGxvY2F0b3I6OmFzc2VydE5vVW5zd2VwdCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJrZWRB
bGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpCit7CisgICAgY2xhc3MgVGFz
ayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAgICAg
ICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAg
ICBtX2luZGV4ID0gbV9hbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkuZmluZEJpdChtX2luZGV4
LCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxvY2tz
LnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBtX2FsbG9jYXRvci5tX2Jsb2Nrc1ttX2luZGV4KytdOworICAgICAgICB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7Cisg
ICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICB9
OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcykpOworfQorCiB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91
dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRyaWJ1
dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYv
RmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwMyw2ICsxMDQsOCBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29u
c3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRU
YXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2Uo
KTsKKyAgICAKICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICB2
b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAi
U3dlZXBpbmdTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTIy
MywxNSArMjI0LDE5IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUK
ICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcgdGhpbmdzLlxu
Iik7CiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHNwYWNlKCkt
Pm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogICAgICAgICBpZiAoaGFuZGxlKCkubV9uZXdseUFs
bG9jYXRlZFZlcnNpb24gPT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7Ci0gICAgICAgICAgICAv
LyBNZXJnZSB0aGUgY29udGVudHMgb2YgbWFya2VkIGludG8gbmV3bHlBbGxvY2F0ZWQuIElmIHdl
IGdldCB0aGUgZnVsbCBzZXQgb2YgYml0cwotICAgICAgICAgICAgLy8gdGhlbiBpbnZhbGlkYXRl
IG5ld2x5QWxsb2NhdGVkIGFuZCBzZXQgYWxsb2NhdGVkLgotICAgICAgICAgICAgaGFuZGxlKCku
bV9uZXdseUFsbG9jYXRlZC5tZXJnZUFuZENsZWFyKG1fbWFya3MpOworICAgICAgICAgICAgLy8g
V2hlbiBkbyB3ZSBnZXQgaGVyZT8gVGhlIGJsb2NrIGNvdWxkIG5vdCBoYXZlIGJlZW4gZmlsbGVk
IHVwLiBUaGUgbmV3bHlBbGxvY2F0ZWQgYml0cyB3b3VsZAorICAgICAgICAgICAgLy8gaGF2ZSBo
YWQgdG8gYmUgY3JlYXRlZCBzaW5jZSB0aGUgZW5kIG9mIHRoZSBsYXN0IGNvbGxlY3Rpb24uIFRo
ZSBvbmx5IHRoaW5ncyB0aGF0IGNyZWF0ZQorICAgICAgICAgICAgLy8gdGhlbSBhcmUgYWJvdXRU
b01hcmtTbG93LCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSwgYW5kIHN0b3BBbGxvY2F0aW5nLiBJZiBp
dCBoYWQgYmVlbgorICAgICAgICAgICAgLy8gYWJvdXRUb01hcmtTbG93LCB0aGVuIHdlIHNob3Vs
ZG4ndCBiZSBoZXJlIHNpbmNlIHRoZSBtYXJrcyB3b3VsZG4ndCBiZSBzdGFsZSBhbnltb3JlLiBJ
dAorICAgICAgICAgICAgLy8gY2Fubm90IGJlIGxhc3RDaGFuY2VUb0ZpbmFsaXplLiBTbyBpdCBt
dXN0IGJlIHN0b3BBbGxvY2F0aW5nLiBUaGF0IG1lYW5zIHRoYXQgd2UganVzdAorICAgICAgICAg
ICAgLy8gY29tcHV0ZWQgdGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMganVzdCBiZWZvcmUgdGhlIHN0
YXJ0IG9mIGFuIGluY3JlbWVudC4gV2hlbiB3ZSBhcmUgaW4gdGhhdAorICAgICAgICAgICAgLy8g
bW9kZSwgaXQgc2VlbXMgYXMgaWYgbmV3bHlBbGxvY2F0ZWQgc2hvdWxkIHN1YnN1bWUgbWFya3Mu
CisgICAgICAgICAgICBBU1NFUlQoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zdWJzdW1lcyht
X21hcmtzKSk7CisgICAgICAgICAgICBtX21hcmtzLmNsZWFyQWxsKCk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiBuZXdseUFsbG9jYXRl
ZCB3aXRoIG1hcmtlZC4gSWYgd2UgZ2V0IHRoZSBmdWxsIHNldCBvZgotICAgICAgICAgICAgLy8g
Yml0cyB0aGVuIGludmFsaWRhdGUgbmV3bHlBbGxvY2F0ZWQgYW5kIHNldCBhbGxvY2F0ZWQuCiAg
ICAgICAgICAgICBoYW5kbGUoKS5tX25ld2x5QWxsb2NhdGVkLnNldEFuZENsZWFyKG1fbWFya3Mp
OworICAgICAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBuZXdseUFs
bG9jYXRlZFZlcnNpb247CiAgICAgICAgIH0KLSAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9j
YXRlZFZlcnNpb24gPSBuZXdseUFsbG9jYXRlZFZlcnNpb247CiAgICAgfQogICAgIGNsZWFySGFz
QW55TWFya2VkKCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTM2NiwxNiArMzcx
LDYgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRSZW1vdmVGcm9tQQogICAgIG1fYWxs
b2NhdG9yID0gbnVsbHB0cjsKIH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUo
Y29uc3QgSGVhcENlbGwqIGNlbGwpCi17Ci0gICAgcmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJr
aW5nVmVyc2lvbigpLCBzcGFjZSgpLT5pc01hcmtpbmcoKSwgY2VsbCk7Ci19Ci0KLWJvb2wgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChjb25zdCB2b2lkKiBwKQotewotICAgIHJldHVy
biBpc0xpdmVDZWxsKHNwYWNlKCktPm1hcmtpbmdWZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2lu
ZygpLCBwKTsKLX0KLQogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgTWFya2VkQmxvY2s6OmFz
c2VydFZhbGlkQ2VsbChWTSYgdm0sIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3
dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvU3RhbXBlZExvY2suaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtMTYxLDggKzE2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1h
cmtDb3VudCgpOwogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgaW5s
aW5lIGJvb2wgaXNMaXZlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBib29sIGlzTWFya2lu
ZywgY29uc3QgSGVhcENlbGwqKTsKLSAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlQ2VsbChIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKKyAg
ICAgICAgYm9vbCBpc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9u
IG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7
CisgICAgICAgIGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNv
bnN0IHZvaWQqKTsKIAogICAgICAgICBib29sIGlzTGl2ZShjb25zdCBIZWFwQ2VsbCopOwogICAg
ICAgICBib29sIGlzTGl2ZUNlbGwoY29uc3Qgdm9pZCopOwpAQCAtMjU4LDcgKzI1OSw2IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJr
ZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlz
TWFya2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lk
Kik7CiAgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICAgICAgCkBA
IC0yODAsNyArMjgwLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBh
cmVNYXJrc1N0YWxlKCk7CiAgICAgYm9vbCBhcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uKTsKLSAgICBEZXBlbmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERl
cGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIAogICAgIERlcGVuZGVu
Y3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKQEAg
LTMxOCw3ICszMTcsNyBAQCBwcml2YXRlOgogICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+
IG1fbWFya3M7CiAKICAgICBib29sIG1fbmVlZHNEZXN0cnVjdGlvbjsKLSAgICBMb2NrIG1fbG9j
azsKKyAgICBTdGFtcGVkTG9jayBtX2xvY2s7CiAgICAgCiAgICAgLy8gVGhlIGFjdHVhbCBtYXJr
IGNvdW50IGNhbiBiZSBjb21wdXRlZCBieSBkb2luZzogbV9iaWFzZWRNYXJrQ291bnQgLSBtX21h
cmtDb3VudEJpYXMuIE5vdGUKICAgICAvLyB0aGF0IHRoaXMgY291bnQgaXMgcmFjeS4gSXQgd2ls
bCBhY2N1cmF0ZWx5IGRldGVjdCB3aGV0aGVyIG9yIG5vdCBleGFjdGx5IHplcm8gdGhpbmdzIHdl
cmUKQEAgLTQ5OCwxOCArNDk3LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJr
c1N0YWxlKEgKICAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsK
IH0KIAotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJl
TWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQotewot
ICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwotICAgIHJldHVybiBk
ZXBlbmRlbmN5V2l0aChkZXBlbmRlbmN5KHZlcnNpb24pLCB2ZXJzaW9uICE9IG1hcmtpbmdWZXJz
aW9uKTsKLX0KLQogaW5saW5lIERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NT
dGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkocmVz
dWx0LnZhbHVlKSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsK
KyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFi
b3V0VG9NYXJrU2xvdyhtYXJraW5nVmVyc2lvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRl
bmN5OworICAgIHJldHVybiBkZXBlbmRlbmN5KHZlcnNpb24pOwogfQogCiBpbmxpbmUgdm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjphc3NlcnRNYXJrc05vdFN0YWxlKCkKQEAgLTUyNCwxNSArNTE3
LDEwIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyhjb24KIAogaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBj
b25zdCB2b2lkKiBwKQogewotICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9u
KSA/IGZhbHNlIDogaXNNYXJrZWRSYXcocCk7Ci19Ci0KLWlubGluZSBib29sIE1hcmtlZEJsb2Nr
Ojppc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qg
dm9pZCogcCkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5j
eShtYXJraW5nVmVyc2lvbik7Ci0gICAgaWYgKHJlc3VsdC52YWx1ZSkKKyAgICBIZWFwVmVyc2lv
biB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAh
PSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9t
YXJrcy5nZXQoYXRvbU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworICAgIHJldHVybiBt
X21hcmtzLmdldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KHZlcnNpb24pKTsKIH0KIAogaW5s
aW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
ICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtODYsMzUgKzg3LDc5IEBAIGlubGluZSBib29sIE1hcmtl
ZEJsb2NrOjptYXJrc0NvbnZleUxpdmUKICAgICAgICAgfHwgTWFya2VkU3BhY2U6Om5leHRWZXJz
aW9uKG1fbWFya2luZ1ZlcnNpb24pID09IG1hcmtpbmdWZXJzaW9uOwogfQogCi1pbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24s
IGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCogY2VsbCkKK2lubGluZSBib29sIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZl
cnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENl
bGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgCi0gICAgaWYg
KFVOTElLRUxZKGhhc0FueU5ld2x5QWxsb2NhdGVkKCkpKSB7Ci0gICAgICAgIGlmIChpc05ld2x5
QWxsb2NhdGVkKGNlbGwpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAog
ICAgIGlmIChhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlz
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgTWFya2VkQmxvY2smIGJsb2NrID0g
dGhpcy0+YmxvY2soKTsKKyAgICBhdXRvIGlzTGl2ZUltcGwgPSBbJl0gKCkgLT4gYm9vbCB7Cisg
ICAgICAgIEFTU0VSVCghaXNGcmVlTGlzdGVkKCkpOwogICAgIAotICAgIGlmIChibG9jay5hcmVN
YXJrc1N0YWxlKCkpIHsKLSAgICAgICAgaWYgKCFpc01hcmtpbmcpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICghYmxvY2subWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01h
cmtpbmcobWFya2luZ1ZlcnNpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
KyAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgYmVj
YXVzZSBtYXJrcyBtaWdodCBiZSBzdGFsZS4gSW4gdGhhdCBjYXNlLCBuZXdseQorICAgICAgICAv
LyBhbGxvY2F0ZWQgd2lsbCBub3QgeWV0IGJlIHZhbGlkLiBDb25zaWRlciB0aGlzIGludGVybGVh
dmluZy4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIE9uZSB0aHJlYWQgaXMgZG9pbmcgdGhpczoK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gMSkgSXNMaXZlQ2hlY2tzTmV3bHlBbGxvY2F0ZWQ6IFdl
IGNoZWNrIGlmIG5ld2x5IGFsbG9jYXRlZCBpcyB2YWxpZC4gSWYgaXQgaXMgdmFsaWQsIGFuZCB0
aGUgYml0IGlzCisgICAgICAgIC8vICAgIHNldCwgd2UgcmV0dXJuIHRydWUuIExldCdzIGFzc3Vt
ZSB0aGF0IHRoaXMgZXhlY3V0ZXMgYXRvbWljYWxseS4gSXQgZG9lc24ndCBoYXZlIHRvIGluIGdl
bmVyYWwsCisgICAgICAgIC8vICAgIGJ1dCB3ZSBjYW4gYXNzdW1lIHRoYXQgZm9yIHRoZSBwdXJw
b3NlIG9mIHNlZWluZyB0aGlzIGJ1Zy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMikgSXNMaXZl
Q2hlY2tzTWFya3M6IEhhdmluZyBmYWlsZWQgdGhhdCwgd2UgY2hlY2sgdGhlIG1hcmsgYml0cy4g
VGhpcyBzdGVwIGltcGxpZXMgdGhlIHJlc3Qgb2YKKyAgICAgICAgLy8gICAgdGhpcyBmdW5jdGlv
bi4gSXQgaGFwcGVucyB1bmRlciBhIGxvY2sgc28gaXQncyBhdG9taWMuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEFub3RoZXIgdGhyZWFkIGlzIGRvaW5nOgorICAgICAgICAvLworICAgICAgICAv
LyAxKSBBYm91dFRvTWFya1Nsb3c6IFRoaXMgaXMgdGhlIGVudGlyZSBhYm91dFRvTWFya1Nsb3cg
ZnVuY3Rpb24sIGFuZCBsZXQncyBzYXkgaXQncyBhdG9taWMuIEl0CisgICAgICAgIC8vICAgIHNv
cnRhIGlzIHNpbmNlIGl0IGhvbGRzIGEgbG9jaywgYnV0IHRoYXQgZG9lc24ndCBhY3R1YWxseSBt
YWtlIGl0IGF0b21pYyB3aXRoIHJlc3BlY3QgdG8KKyAgICAgICAgLy8gICAgSXNMaXZlQ2hlY2tz
TmV3bHlBbGxvY2F0ZWQsIHNpbmNlIHRoYXQgZG9lcyBub3QgaG9sZCBhIGxvY2sgaW4gb3VyIHNj
ZW5hcmlvLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgaGFybWZ1bCBpbnRlcmxlYXZpbmcg
aGFwcGVucyBpZiB3ZSBzdGFydCBvdXQgd2l0aCBhIGJsb2NrIHRoYXQgaGFzIHN0YWxlIG1hcmsg
Yml0cyB0aGF0CisgICAgICAgIC8vIG5vbmV0aGVsZXNzIGNvbnZleSBsaXZlbmVzcyBkdXJpbmcg
bWFya2luZyAodGhlIG9mZi1ieS1vbmUgdmVyc2lvbiB0cmljaykuIFRoZSBpbnRlcmxlYXZpbmcg
aXMKKyAgICAgICAgLy8ganVzdDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSXNMaXZlQ2hlY2tz
TmV3bHlBbGxvY2F0ZWQgQWJvdXRUb01hcmtTbG93IElzTGl2ZUNoZWNrc01hcmtzCisgICAgICAg
IC8vCisgICAgICAgIC8vIFdlIHN0YXJ0ZWQgd2l0aCB2YWxpZCBtYXJrcyBidXQgaW52YWxpZCBu
ZXdseSBhbGxvY2F0ZWQuIFNvLCB0aGUgZmlyc3QgcGFydCBkb2Vzbid0IHRoaW5rIHRoYXQKKyAg
ICAgICAgLy8gYW55dGhpbmcgaXMgbGl2ZSwgYnV0IGR1dGlmdWxseSBkcm9wcyBkb3duIHRvIHRo
ZSBtYXJrcyBzdGVwLiBCdXQgaW4gdGhlIG1lYW50aW1lLCB3ZSBjbGVhciB0aGUKKyAgICAgICAg
Ly8gbWFyayBiaXRzIGFuZCB0cmFuc2ZlciB0aGVpciBjb250ZW50cyBpbnRvIG5ld2x5QWxsb2Nh
dGVkLiBTbyBJc0xpdmVDaGVja3NNYXJrcyBhbHNvIHNlZXMgbm90aGluZworICAgICAgICAvLyBs
aXZlLiBPb29wcyEKKyAgICAgICAgSGVhcFZlcnNpb24gbXlOZXdseUFsbG9jYXRlZFZlcnNpb24g
PSBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbjsKKyAgICAgICAgaWYgKG15TmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikKKyAgICAgICAgICAgIHJldHVybiBpc05l
d2x5QWxsb2NhdGVkKGNlbGwpOworICAgIAorICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSB0
aGlzLT5ibG9jaygpOworICAgIAorICAgICAgICBpZiAoYmxvY2suYXJlTWFya3NTdGFsZShtYXJr
aW5nVmVyc2lvbikpIHsKKyAgICAgICAgICAgIGlmICghaXNNYXJraW5nKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghYmxvY2subWFya3NDb252ZXlMaXZl
bmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgcmV0dXJuIGJsb2NrLm1fbWFya3MuZ2V0KGJsb2Nr
LmF0b21OdW1iZXIoY2VsbCkpOworICAgICAgICByZXR1cm4gYmxvY2subV9tYXJrcy5nZXQoYmxv
Y2suYXRvbU51bWJlcihjZWxsKSk7CisgICAgfTsKKyAgICAKKyAgICBpZiAoIWlzTWFya2luZykK
KyAgICAgICAgcmV0dXJuIGlzTGl2ZUltcGwoKTsKKyAgICAKKyAgICByZXR1cm4gbV9ibG9jay0+
bV9sb2NrLmRvT3B0aW1pemVkUmVhZChpc0xpdmVJbXBsKTsKIH0KIAotaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwg
Ym9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqIHApCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6
SGFuZGxlOjppc0xpdmVDZWxsKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lv
biBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCB2b2lkKiBwKQog
ewogICAgIGlmICghbV9ibG9jay0+aXNBdG9tKHApKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIGlzTGl2ZShtYXJraW5nVmVyc2lvbiwgaXNNYXJraW5nLCBzdGF0aWNfY2FzdDxj
b25zdCBIZWFwQ2VsbCo+KHApKTsKKyAgICByZXR1cm4gaXNMaXZlKG1hcmtpbmdWZXJzaW9uLCBu
ZXdseUFsbG9jYXRlZFZlcnNpb24sIGlzTWFya2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgSGVhcENl
bGwqPihwKSk7Cit9CisKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZShj
b25zdCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICByZXR1cm4gaXNMaXZlKHNwYWNlKCktPm1hcmtp
bmdWZXJzaW9uKCksIHNwYWNlKCktPm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpLCBzcGFjZSgpLT5p
c01hcmtpbmcoKSwgY2VsbCk7Cit9CisKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzTGl2ZUNlbGwoY29uc3Qgdm9pZCogcCkKK3sKKyAgICByZXR1cm4gaXNMaXZlQ2VsbChzcGFj
ZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKSwg
c3BhY2UoKS0+aXNNYXJraW5nKCksIHApOwogfQogCiAvLyBUaGUgZm9sbG93aW5nIGhhcyB0byBi
ZSB0cnVlIGZvciBzcGVjaWFsaXphdGlvbiB0byBraWNrIGluOgpAQCAtMzg2LDYgKzQzMSwxNSBA
QCBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIE1hCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rvcj4KIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CisgICAgLy8gRklY
TUU6IFRoaXMgaXMgbm90IGN1cnJlbnRseSBlZmZpY2llbnQgdG8gdXNlIGluIHRoZSBjb25zdHJh
aW50IHNvbHZlciBiZWNhdXNlIGlzTGl2ZSgpIGdyYWJzIGEKKyAgICAvLyBsb2NrIHRvIHByb3Rl
Y3QgaXRzZWxmIGZyb20gY29uY3VycmVudCBjYWxscyB0byBhYm91dFRvTWFya1Nsb3coKS4gQnV0
IHdlIGNvdWxkIGdldCBhcm91bmQgdGhpcyBieQorICAgIC8vIGhhdmluZyB0aGlzIGZ1bmN0aW9u
IGdyYWIgdGhlIGxvY2sgYmVmb3JlIGFuZCBhZnRlciB0aGUgaXRlcmF0aW9uLCBhbmQgY2hlY2sg
aWYgdGhlIG1hcmtpbmcgdmVyc2lvbgorICAgIC8vIGNoYW5nZWQuIElmIGl0IGRpZCwganVzdCBy
dW4gYWdhaW4uIEluc2lkZSB0aGUgbG9vcCwgd2Ugb25seSBuZWVkIHRvIGVuc3VyZSB0aGF0IGlm
IGEgcmFjZSB3ZXJlIHRvCisgICAgLy8gaGFwcGVuLCB3ZSB3aWxsIGp1c3Qgb3Zlcmxvb2sgb2Jq
ZWN0cy4gSSB0aGluayB0aGF0IGJlY2F1c2Ugb2YgaG93IGFib3V0VG9NYXJrU2xvdygpIGRvZXMg
dGhpbmdzLAorICAgIC8vIGEgcmFjZSBvdWdodCB0byBtZWFuIHRoYXQgaXQganVzdCByZXR1cm5z
IGZhbHNlIHdoZW4gaXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgdHJ1ZSAtIGJ1dCB0aGlzIGlzCisg
ICAgLy8gc29tZXRoaW5nIHRoYXQgd291bGQgaGF2ZSB0byBiZSB2ZXJpZmllZCBjYXJlZnVsbHku
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDMxNQor
ICAgIAogICAgIEhlYXBDZWxsOjpLaW5kIGtpbmQgPSBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7CiAg
ICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRv
bXNQZXJDZWxsKSB7CiAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMoKVtpXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyMSw3ICs0MjEsNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjplbmRNYXJraW5nKCkKICAgICAgICAg
ICAgICAgICBoYW5kbGUtPnJlc2V0QWxsb2NhdGVkKCk7CiAgICAgICAgICAgICB9KTsKICAgICB9
Ci0gICAgICAgIAorICAgIAogICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gbmV4dFZlcnNp
b24obV9uZXdseUFsbG9jYXRlZFZlcnNpb24pOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbGFyZ2VBbGxvY2F0aW9uc09mZnNldEZvclRoaXNDb2xsZWN0aW9uOyBpIDwgbV9sYXJnZUFs
bG9jYXRpb25zLnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDExIEBAIHB1
YmxpYzoKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZmxp
cHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9vbCBp
c01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQogICAgIAorICAgIFdlYWtT
ZXQqIGFjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmJlZ2lu
KCk7IH0KKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1fYWN0aXZl
V2Vha1NldHMuZW5kKCk7IH0KKyAgICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0JlZ2luKCkg
eyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCogbmV3
QWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9
CisgICAgCiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkp
OwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNpemVfdCwg
bnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAy
MjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsyNywxOCBAQAogI2luY2x1ZGUgIk1hcmtpbmdD
b25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmlzaXRD
b3VudGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1NYXJraW5nQ29uc3RyYWludDo6TWFya2lu
Z0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwK
LSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkp
Ci0gICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCi0gICAgLCBtX25hbWUo
V1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1
bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQotewotfQorc3RhdGljIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtp
bmdDb25zdHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
Ci0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYp
PiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZv
bGF0aWxpdHkpCitNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBh
YmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRp
bGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxs
ZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5h
bWUpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9u
KFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5j
dGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pKQogICAgICwgbV92b2xhdGls
aXR5KHZvbGF0aWxpdHkpCisgICAgLCBtX2NvbmN1cnJlbmN5KGNvbmN1cnJlbmN5KQorICAgICwg
bV9wYXJhbGxlbGlzbShwYXJhbGxlbGlzbSkKIHsKIH0KIApAQCAtNjMsMTQgKzUxLDc0IEBAIHZv
aWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3RhdHMoKQogICAgIG1fbGFzdFZpc2l0Q291bnQg
PSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQor
Q29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7
CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHJlc3VsdCA9IGV4ZWN1dGVJbXBsKHZpc2l0b3Ip
OworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAg
ICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBkYXRh
TG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlz
aXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7CisgICAgaWYgKHJlc3VsdCA9PSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIC8vIEl0J3MgaWxsZWdhbCB0byBwcm9k
dWNlIHBhcmFsbGVsIHdvcmsgaWYgeW91IGhhdmVuJ3QgYWR2ZXJ0aXNlZCBpdCB1cGZyb250IGJl
Y2F1c2UgdGhlIHNvbHZlcgorICAgICAgICAvLyBoYXMgb3B0aW1pemF0aW9ucyBmb3IgY29uc3Ry
YWludHMgdGhhdCBwcm9taXNlIHRvIG5ldmVyIHByb2R1Y2UgcGFyYWxsZWwgd29yay4KKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9wYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZG91YmxlIE1hcmtp
bmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCit7CisgICAgcmV0
dXJuIDA7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tX
b3JrRXN0aW1hdGUodmlzaXRvcik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBh
cmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2Vy
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAg
ICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0IHZp
c2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7Ci0gICAg
bV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBtX2xhc3RW
aXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgZGlk
VmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRv
cik7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBwcmVwYXJl
VG9FeGVjdXRlSW1wbChjb25zdHJhaW50U29sdmluZ0xvY2tlciwgdmlzaXRvcik7CisgICAgbV9s
YXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJv
c2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFi
YnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwg
IiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpk
b1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIg
dmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGRvUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsK
KyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBk
YXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIu
dmlzaXRDb3VudCgpLCAiIGluIGRvUGFyYWxsZWxXb3JrKSIpOworICAgIHsKKyAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBtX2xhc3RWaXNpdENvdW50ICs9
IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25z
dHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
VmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBmaW5pc2hQYXJhbGxlbFdv
cmtJbXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZp
c2l0Q291bnQoKTsKKyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgp
KQorICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2
aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGZpbmlzaFBhcmFsbGVsV29yaykiKTsKK30K
Kwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVf
Rk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFs
bGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAko
cmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEyIEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQ29uc3RyYWludENvbmN1cnJlbmN5LmgiCisjaW5jbHVkZSAiQ29u
c3RyYWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIK
LSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1
ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAg
LTQ0LDE3ICs0NCwxMSBAQCBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0Nv
bnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
Ci0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICBDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAg
ICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25j
dXJyZW50LAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdD
b25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAg
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
fk1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWFy
a2luZ0NvbnN0cmFpbnQoKTsKICAgICAKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXg7IH0KICAgICAKQEAgLTY1LDMyICs1OSwzOSBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3Vu
dDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0
U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwor
ICAgIAorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwogICAg
IAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24o
dmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1
aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAgIH0KKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1
dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90Vmlz
aXRvciYpOworICAgIAorICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIGZpbmlzaFBhcmFsbGVsV29yayhTbG90VmlzaXRvciYpOwogICAgIAogICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7
IH0KICAgICAKKyAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3koKSBjb25zdCB7
IHJldHVybiBtX2NvbmN1cnJlbmN5OyB9CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFs
bGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3Im
KSA9IDA7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1
dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xv
dFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNp
dG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0
b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50
U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRl
eCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3Ry
aW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9u
PGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRDb25jdXJy
ZW5jeSBtX2NvbmN1cnJlbmN5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVs
aXNtOwogICAgIHNpemVfdCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9sb2Nr
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYwICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKICNpbmNsdWRlICJPcHRp
b25zLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBN
YXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgRXhl
Y3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlz
aXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAg
ICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7Ci0gICAgfQotICAgIAotICAg
IGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlz
aXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAgIAotICAg
IC8vIFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMgb3V0LgotICAgIGJvb2wgZHJhaW4oQml0VmVj
dG9yJiB1bmV4ZWN1dGVkKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4
ZWN1dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAgICAgICAgICAgIHVuZXhl
Y3V0ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhlY3V0ZWQuZ2V0KGluZGV4KTsgfQotCi0gICAgdm9pZCBleGVjdXRlKHNp
emVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZSht
X3Zpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7Ci0gICAgICAgIG1fZXhl
Y3V0ZWQuc2V0KGluZGV4KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE1hcmtpbmdDb25z
dHJhaW50U2V0JiBtX3NldDsKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIE1vbm90
b25pY1RpbWUgbV90aW1lb3V0OwotICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOwotICAgIGJvb2wg
bV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci19OwotCi1NYXJraW5nQ29uc3RyYWludFNl
dDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdD
b25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsKIH0KIApAQCAt
MTA3LDE4ICs2NSw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kK
ICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFk
ZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQo
U2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rpb24sIENvbnN0cmFp
bnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCi17Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFy
a2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwg
V1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkpKTsKLX0KLQotdm9pZCBNYXJraW5nQ29uc3Ry
YWludFNldDo6YWRkKAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUs
Ci0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYp
PiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZv
bGF0aWxpdHkpCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZp
YXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1
bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3Vy
cmVuY3kgY29uY3VycmVuY3kpCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0Nv
bnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92
ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2
b2xhdGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShm
dW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5KSk7CiB9CiAKIHZvaWQgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTEzMSw5ICs4MCw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTZXQ6OmFkZCgKICAgICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAK
LWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRv
ciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJv
b2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAg
ICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtMTQ4LDI3ICs5NywyNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dh
dmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9u
aWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVy
Z2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEV4ZWN1dGlvbkNvbnRleHQg
ZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyIHNvbHZlcigqdGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9p
dGVyYXRpb24rKzsKICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0
YUxvZygiaSMiLCBpdGVyYXRpb24sICI6Iik7CiAKLSAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNv
bnN0cmFpbnRzIHRoYXQgd2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5
Y2xlLCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlmICgh
ZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNp
dG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRz
IG90aGVyCi0gICAgLy8gdGhhbiByb290cy4KLSAgICBpZiAoaXRlcmF0aW9uID09IDEpCisgICAg
aWYgKGl0ZXJhdGlvbiA9PSAxKSB7CisgICAgICAgIC8vIEZpcnN0IGl0ZXJhdGlvbiBpcyBiZWZv
cmUgYW55IHZpc2l0b3IgZHJhaW5pbmcsIHNvIGl0J3MgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkg
Y29uc3RyYWludHMKKyAgICAgICAgLy8gb3RoZXIgdGhhbiByb290cy4KKyAgICAgICAgc29sdmVy
LmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
ICAgICAKLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jv
d3RocykpCisgICAgaWYgKGl0ZXJhdGlvbiA9PSAyKSB7CisgICAgICAgIHNvbHZlci5kcmFpbiht
X3VuZXhlY3V0ZWRPdXRncm93dGhzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAg
ICAKICAgICAvLyBXZSB3YW50IHRvIGtlZXAgcHJlZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0
cmFpbnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50ZWQKICAgICAvLyBldmVu
IGluIGEgc3RvcC10aGUtd29ybGQgR0MgLSB1bnRpbCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBUaGV5
IGhhdmUgYSB0ZW5kZW5jeSB0byBnbyB0b3RhbGx5CkBAIC0yMTUsMzMgKzE2NCwxNiBAQCBib29s
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgICAgICAgICByZXR1cm4g
YS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0eSgpOwogICAgICAgICB9KTsKICAgICAKLSAg
ICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRlcmVkKSB7Ci0gICAg
ICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUoaSkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVjdXRlKGkpOwotICAgICAgICAKLSAgICAgICAg
Ly8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8g
bGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGltZQotICAgICAgICAvLyB3ZSBmaW5kIHdvcmsu
Ci0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25zdHJh
aW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCi0gICAgICAgIC8vIGJldHRl
ciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKLSAgICAgICAgLy8gLSBJZiB0
aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBydW5uaW5nLgotICAgICAgICAvLyAtIElmIHRoZSB2
aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgotICAgICAgICAvLyAtIEVs
c2UgcnVuIHVudGlsIHRpbWVvdXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjY4MzIKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlk
VmlzaXRTb21ldGhpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
c29sdmVyLmNvbnZlcmdlKG1fb3JkZXJlZCk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAg
Ly8gUmV0dXJuIHRydWUgaWYgd2UndmUgY29udmVyZ2VkLiBUaGF0IGhhcHBlbnMgaWYgd2UgZGlk
IG5vdCB2aXNpdCBhbnl0aGluZy4KKyAgICByZXR1cm4gIXNvbHZlci5kaWRWaXNpdFNvbWV0aGlu
ZygpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKICAg
ICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhl
Y3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKKwogY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnRTZXQgewogcHVibGljOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0
KCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQoSGVhcCYpOwogICAgIH5NYXJraW5nQ29uc3Ry
YWludFNldCgpOwogICAgIAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CkBAIC00MSwxNSAr
NDQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0
ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWlu
dFZvbGF0aWxpdHkpOwotICAgIAotICAgIHZvaWQgYWRkKAotICAgICAgICBDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwKLSAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVu
Y3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eSk7CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0
cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCk7CiAgICAgCiAgICAgdm9pZCBhZGQoc3RkOjp1
bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7CiAgICAgCkBAIC02MCwyMSArNTcsMTkgQEAg
cHVibGljOgogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBj
b25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAg
Ly8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQg
ZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKLSAgICAgICAgU2xvdFZp
c2l0b3ImLAotICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwog
ICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVu
YW5pZ2Fucy4KICAgICB2b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZh
dGU6Ci0gICAgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgRXhlY3V0
aW9uQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CiAg
ICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3Rv
bmljVGltZSB0aW1lb3V0KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZp
c2l0b3ImKTsKICAgICAKLSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGlt
ZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRW
aXNpdFNvbWV0aGluZyk7CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIEJpdFZlY3RvciYg
dW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcp
OwogICAgIAorICAgIEhlYXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9v
dHM7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IAor
CitNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIHNldCkKKyAgICA6IG1faGVhcChzZXQubV9oZWFwKQorICAgICwgbV9t
YWluVmlzaXRvcihtX2hlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAgICAsIG1fc2V0KHNl
dCkKK3sKKyAgICBtX2hlYXAuZm9yRWFjaFNsb3RWaXNpdG9yKAorICAgICAgICBbJl0gKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBtX3Zpc2l0Q291bnRlcnMuYXBwZW5kKFZp
c2l0Q291bnRlcih2aXNpdG9yKSk7CisgICAgICAgIH0pOworfQorCitNYXJraW5nQ29uc3RyYWlu
dFNvbHZlcjo6fk1hcmtpbmdDb25zdHJhaW50U29sdmVyKCkKK3sKK30KKworYm9vbCBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjo6ZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAoreworICAgIGZvciAo
Y29uc3QgVmlzaXRDb3VudGVyJiB2aXNpdENvdW50ZXIgOiBtX3Zpc2l0Q291bnRlcnMpIHsKKyAg
ICAgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpleGVjdXRlKFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVk
TGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIG1fcGlj
a05leHRJc1N0aWxsQWN0aXZlID0gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9udW1UaHJl
YWRzVGhhdE1heVByb2R1Y2VXb3JrKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dXNlUGFyYWxs
ZWxNYXJraW5nQ29uc3RyYWludFNvbHZlcigpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dH
QygpKQorICAgICAgICAgICAgZGF0YUxvZyhwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0
ID8gIlAiIDogIk4iLCAiPCIpOworICAgICAgICAKKyAgICAgICAgbV9oZWFwLnJ1bkZ1bmN0aW9u
SW5QYXJhbGxlbCgKKyAgICAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcnVu
RXhlY3V0aW9uVGhyZWFkKHZpc2l0b3IsIHByZWZlcmVuY2UsIHBpY2tOZXh0KTsgfSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2co
Ij4iKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcnVuRXhlY3V0aW9uVGhyZWFkKG1fbWFpblZpc2l0
b3IsIHByZWZlcmVuY2UsIHBpY2tOZXh0KTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9w
aWNrTmV4dElzU3RpbGxBY3RpdmUpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX251bVRocmVhZHNU
aGF0TWF5UHJvZHVjZVdvcmspOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9S
dW4gOiBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsKQorICAgICAgICBtX3NldC5tX3NldFtpbmRleFRv
UnVuXS0+ZmluaXNoUGFyYWxsZWxXb3JrKG1fbWFpblZpc2l0b3IpOworICAgIG1fZGlkRXhlY3V0
ZUluUGFyYWxsZWwuY2xlYXIoKTsKKyAgICAKKyAgICBpZiAoIW1fdG9FeGVjdXRlU2VxdWVudGlh
bGx5LmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX3Rv
RXhlY3V0ZVNlcXVlbnRpYWxseSkKKyAgICAgICAgICAgIGV4ZWN1dGUoKm1fc2V0Lm1fc2V0W2lu
ZGV4VG9SdW5dKTsKKyAgICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuY2xlYXIoKTsKKyAg
ICB9CisgICAgICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5p
c0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQu
Yml0Q291bnQoKSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRyYWluKEJp
dFZlY3RvciYgdW5leGVjdXRlZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSB1bmV4ZWN1dGVkLmJlZ2lu
KCk7CisgICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVkLmVuZCgpOworICAgIGlmIChpdGVyID09IGVu
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcGlja05leHQgPSBzY29wZWRMYW1iZGE8c3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4oKT4oCisgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiB7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAg
ICAgICB9KTsKKyAgICBleGVjdXRlKE5leHRDb25zdHJhaW50Rmlyc3QsIHBpY2tOZXh0KTsKKyAg
ICB1bmV4ZWN1dGVkLmNsZWFyQWxsKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXI6OmNvbnZlcmdlKGNvbnN0IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBvcmRlcikKK3sK
KyAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmIChvcmRlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgc2l6
ZV90IGluZGV4ID0gMDsKKworICAgIC8vIFdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgY29u
c3RyYWludCBzZXF1ZW50aWFsbHkgaWYgd2UgdGhpbmsgaXQgd2lsbCBxdWlja2x5IGdpdmUgdXMg
YQorICAgIC8vIHJlc3VsdC4gSWYgd2UgcmFuIGl0IGluIHBhcmFsbGVsIHRvIG90aGVyIGNvbnN0
cmFpbnRzLCB0aGVuIHdlIG1pZ2h0IGVuZCB1cCBoYXZpbmcgdG8gd2FpdCBmb3IKKyAgICAvLyB0
aG9zZSBvdGhlciBjb25zdHJhaW50cyB0byBmaW5pc2gsIHdoaWNoIHdvdWxkIGJlIGEgd2FzdGUg
b2YgdGltZSBzaW5jZSBkdXJpbmcgY29udmVyZ2VuY2UgaXQncworICAgIC8vIGVtcGlyaWNhbGx5
IG1vc3Qgb3B0aW1hbCB0byByZXR1cm4gdG8gZHJhaW5pbmcgYXMgc29vbiBhcyBhIGNvbnN0cmFp
bnQgZ2VuZXJhdGVzIHdvcmsuIE1vc3QKKyAgICAvLyBjb25zdHJhaW50cyBkb24ndCBnZW5lcmF0
ZSBhbnkgd29yayBtb3N0IG9mIHRoZSB0aW1lLCBhbmQgd2hlbiB0aGV5IGRvIGdlbmVyYXRlIHdv
cmssIHRoZXkgdGVuZAorICAgIC8vIHRvIGdlbmVyYXRlIGVub3VnaCBvZiBpdCB0byBmZWVkIGEg
ZGVjZW50IGRyYWluaW5nIGN5Y2xlLiBUaGVyZWZvcmUsIHBhdXNlIHRpbWVzIGFyZSBsb3dlc3Qg
aWYKKyAgICAvLyB3ZSBnZXQgdGhlIGhlY2sgb3V0IG9mIGhlcmUgYXMgc29vbiBhcyBhIGNvbnN0
cmFpbnQgZ2VuZXJhdGVzIHdvcmsuIEkgdGhpbmsgdGhhdCBwYXJ0IG9mIHdoYXQKKyAgICAvLyBt
YWtlcyB0aGlzIG9wdGltYWwgaXMgdGhhdCB3ZSBhbHNvIG5ldmVyIGFib3J0IHJ1bm5pbmcgYSBj
b25zdHJhaW50IGVhcmx5LCBzbyB3aGVuIHdlIGRvIHJ1bgorICAgIC8vIG9uZSwgaXQgaGFzIGFu
IG9wcG9ydHVuaXR5IHRvIGdlbmVyYXRlIGFzIG11Y2ggd29yayBhcyBpdCBwb3NzaWJseSBjYW4u
CisgICAgaWYgKG9yZGVyW2luZGV4XS0+cXVpY2tXb3JrRXN0aW1hdGUobV9tYWluVmlzaXRvcikp
IHsKKyAgICAgICAgZXhlY3V0ZSgqb3JkZXJbaW5kZXgrK10pOworICAgICAgICAKKyAgICAgICAg
aWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkKKyAgICAgICAgICAgICYmIChvcmRl
ci5pc0VtcHR5KCkgfHwgZGlkVmlzaXRTb21ldGhpbmcoKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGF1dG8gcGlja05leHQgPSBzY29wZWRMYW1iZGE8c3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4oKT4oCisgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiB7CisgICAgICAgICAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
aW5kZXggPj0gb3JkZXIuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJh
aW50ID0gKm9yZGVyW2luZGV4KytdOworICAgICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuaW5k
ZXgoKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgZXhlY3V0ZShQYXJhbGxlbFdvcmtGaXJzdCwg
cGlja05leHQpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRlKE1h
cmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50KQoreworICAgIGlmIChtX2V4ZWN1dGVkLmdldChj
b25zdHJhaW50LmluZGV4KCkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY29uc3RyYWlu
dC5wcmVwYXJlVG9FeGVjdXRlKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9tYWluVmlzaXRvcik7Cisg
ICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRl
KG1fbWFpblZpc2l0b3IpOworICAgIGRpZEV4ZWN1dGUocGFyYWxsZWxpc20sIGNvbnN0cmFpbnQu
aW5kZXgoKSk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlv
blRocmVhZChTbG90VmlzaXRvciYgdmlzaXRvciwgU2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJl
bmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit7
CisgICAgZm9yICg7OykgeworICAgICAgICBib29sIGRvUGFyYWxsZWxXb3JrTW9kZTsKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXhUb1J1bjsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgYXV0byB0cnlQYXJhbGxlbFdvcmsgPSBb
Jl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFy
YWxsZWwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9IG1f
dG9FeGVjdXRlSW5QYXJhbGxlbC5maXJzdCgpOworICAgICAgICAgICAgICAgICAgICBkb1BhcmFs
bGVsV29ya01vZGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGF1dG8gdHJ5TmV4dENvbnN0cmFpbnQgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9waWNrTmV4dElzU3RpbGxBY3RpdmUpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiBwaWNrUmVzdWx0ID0gcGlja05leHQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghcGlja1Jlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
cGlja05leHRJc1N0aWxsQWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9leGVjdXRlZC5nZXQo
KnBpY2tSZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFsqcGlja1Jlc3Vs
dF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RyYWludC5jb25jdXJyZW5jeSgp
ID09IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmFwcGVuZCgqcGlja1Jlc3VsdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RyYWludC5wYXJhbGxl
bGlzbSgpID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrKys7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gKnBpY2tSZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0cmFpbnQucHJlcGFyZVRvRXhlY3V0ZShsb2NrZXIsIHZpc2l0b3IpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0cnlQYXJhbGxlbFdvcmsoKSB8fCB0cnlOZXh0Q29uc3RyYWludCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRyeU5leHRDb25zdHJhaW50KCkgfHwgdHJ5UGFyYWxsZWxXb3JrKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGhhdmUg
bm90aGluZyBsZWZ0IHRvIHJ1bi4gVGhlIG9ubHkgd2F5IGZvciB1cyB0byBoYXZlIG1vcmUgd29y
ayBpcworICAgICAgICAgICAgICAgIC8vIGlmIHNvbWVvbmUgaXMgcnVubmluZyBhIGNvbnN0cmFp
bnQgdGhhdCBtYXkgcHJvZHVjZSBwYXJhbGxlbCB3b3JrLgorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmICghbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IEFueSB3YWl0aW5nIGNvdWxkIGJlIHJlcGxhY2VkIHdpdGgganVzdCBydW5uaW5n
IHRoZSBTbG90VmlzaXRvci4KKyAgICAgICAgICAgICAgICAvLyBJIHdvbmRlciBpZiB0aGF0IHdv
dWxkIGJlIHByb2ZpdGFibGUuCisgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChtX2xv
Y2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlNlcXVlbnRpYWw7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBNYXJraW5n
Q29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3NldC5tX3NldFtpbmRleFRvUnVuXTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUpCisgICAgICAg
ICAgICBjb25zdHJhaW50LmRvUGFyYWxsZWxXb3JrKHZpc2l0b3IpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZSh2aXNpdG9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkgeworICAgICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0
ZUluUGFyYWxsZWxTZXQuZ2V0KGluZGV4VG9SdW4pKSB7CisgICAgICAgICAgICAgICAgICAgIG1f
ZGlkRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFs
bGVsLnRha2VGaXJzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAodW5zaWduZWQgdmFs
dWUpIHsgcmV0dXJuIHZhbHVlID09IGluZGV4VG9SdW47IH0pOworICAgICAgICAgICAgICAgICAg
ICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuY2xlYXIoaW5kZXhUb1J1bik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3Ry
YWludC5wYXJhbGxlbGlzbSgpID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpCisg
ICAgICAgICAgICAgICAgICAgIG1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yay0tOworICAg
ICAgICAgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAg
IGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1
bik7CisgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5k
ZXhUb1J1bik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZGlkRXhlY3V0
ZShDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20sIHVuc2lnbmVkIGluZGV4KQorewor
ICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAgICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3Ry
YWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWwuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChp
bmRleCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCisjaW5jbHVkZSA8d3Rm
L0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExh
bWJkYS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEhlYXA7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKK2NsYXNzIE1hcmtpbmdDb25zdHJh
aW50U2V0OworCitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1h
cmtpbmdDb25zdHJhaW50U2V0Jik7CisgICAgfk1hcmtpbmdDb25zdHJhaW50U29sdmVyKCk7Cisg
ICAgCisgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZygpIGNvbnN0OworICAgIAorICAgIGVudW0g
U2NoZWR1bGVyUHJlZmVyZW5jZSB7CisgICAgICAgIFBhcmFsbGVsV29ya0ZpcnN0LAorICAgICAg
ICBOZXh0Q29uc3RyYWludEZpcnN0CisgICAgfTsKKworICAgIHZvaWQgZXhlY3V0ZShTY2hlZHVs
ZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlj
a05leHQpOworICAgIAorICAgIHZvaWQgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKTsKKyAg
ICAKKyAgICB2b2lkIGNvbnZlcmdlKGNvbnN0IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBv
cmRlcik7CisgICAgCisgICAgdm9pZCBleGVjdXRlKE1hcmtpbmdDb25zdHJhaW50Jik7CisgICAg
Citwcml2YXRlOgorICAgIHZvaWQgcnVuRXhlY3V0aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiwgU2No
ZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+
IHBpY2tOZXh0KTsKKyAgICAKKyAgICB2b2lkIGRpZEV4ZWN1dGUoQ29uc3RyYWludFBhcmFsbGVs
aXNtLCB1bnNpZ25lZCBpbmRleCk7CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgU2xvdFZpc2l0
b3ImIG1fbWFpblZpc2l0b3I7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQmIG1fc2V0OworICAg
IEJpdFZlY3RvciBtX2V4ZWN1dGVkOworICAgIERlcXVlPHVuc2lnbmVkLCAzMj4gbV90b0V4ZWN1
dGVJblBhcmFsbGVsOworICAgIEJpdFZlY3RvciBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQ7Cisg
ICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV9kaWRFeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBWZWN0
b3I8dW5zaWduZWQsIDMyPiBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseTsKKyAgICBMb2NrIG1fbG9j
azsKKyAgICBDb25kaXRpb24gbV9jb25kaXRpb247CisgICAgdW5zaWduZWQgbV9udW1UaHJlYWRz
VGhhdE1heVByb2R1Y2VXb3JrIHsgMCB9OworICAgIGJvb2wgbV9waWNrTmV4dElzU3RpbGxBY3Rp
dmUgeyB0cnVlIH07CisgICAgVmVjdG9yPFZpc2l0Q291bnRlciwgMTY+IG1fdmlzaXRDb3VudGVy
czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9PcGFxdWVSb290U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBPcGFxdWVSb290U2V0IHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVSb290U2V0KTsKLXB1YmxpYzoKLSAgICBPcGFx
dWVSb290U2V0KCkKLSAgICAgICAgOiBtX2xhc3RRdWVyaWVkUm9vdChudWxscHRyKQotICAgICAg
ICAsIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgY29udGFpbnModm9pZCogcm9vdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChyb290
ICE9IG1fbGFzdFF1ZXJpZWRSb290KSB7Ci0gICAgICAgICAgICBtX2xhc3RRdWVyaWVkUm9vdCA9
IHJvb3Q7Ci0gICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gbV9yb290cy5j
b250YWlucyhyb290KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9jb250YWluc0xhc3RR
dWVyaWVkUm9vdDsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fcm9vdHMuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXIo
KQotICAgIHsKLSAgICAgICAgbV9yb290cy5jbGVhcigpOwotICAgICAgICBtX2xhc3RRdWVyaWVk
Um9vdCA9IG51bGxwdHI7Ci0gICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBib29sIGFkZCh2b2lkKiByb290KQotICAgIHsKLSAgICAgICAgaWYg
KHJvb3QgPT0gbV9sYXN0UXVlcmllZFJvb3QpCi0gICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1
ZXJpZWRSb290ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuYWRkKHJvb3QpLmlzTmV3
RW50cnk7Ci0gICAgfQotCi0gICAgaW50IHNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fcm9vdHMuc2l6ZSgpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9p
dGVyYXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290cy5iZWdp
bigpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuZW5kKCk7Ci0gICAgfQotCi0KLXBy
aXZhdGU6Ci0gICAgSGFzaFNldDx2b2lkKj4gbV9yb290czsKLSAgICBtdXRhYmxlIHZvaWQqIG1f
bGFzdFF1ZXJpZWRSb290OwotICAgIG11dGFibGUgYm9vbCBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRS
b290OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5lclR5cGUsIHR5cGVuYW1lIFVud3Jh
cEZ1bmM+CitjbGFzcyBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIgOiBwdWJsaWMgU2hhcmVkVGFzazxJ
bm5lclR5cGUoKT4geworcHVibGljOgorICAgIFBhcmFsbGVsU291cmNlQWRhcHRlcihSZWZQdHI8
U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG91dGVyU291cmNlLCBjb25zdCBVbndyYXBGdW5jJiB1
bndyYXBGdW5jKQorICAgICAgICA6IG1fb3V0ZXJTb3VyY2Uob3V0ZXJTb3VyY2UpCisgICAgICAg
ICwgbV91bndyYXBGdW5jKHVud3JhcEZ1bmMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBJbm5l
clR5cGUgcnVuKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKG1faW5uZXJTb3VyY2Up
IHsKKyAgICAgICAgICAgICAgICBpZiAoSW5uZXJUeXBlIHJlc3VsdCA9IG1faW5uZXJTb3VyY2Ut
PnJ1bigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgIG1faW5uZXJTb3VyY2UgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBtX2lubmVyU291cmNlID0gbV91bndyYXBGdW5jKG1fb3V0ZXJTb3VyY2Ut
PnJ1bigpKTsKKyAgICAgICAgfSB3aGlsZSAobV9pbm5lclNvdXJjZSk7CisgICAgICAgIHJldHVy
biBJbm5lclR5cGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8
T3V0ZXJUeXBlKCk+PiBtX291dGVyU291cmNlOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPElubmVy
VHlwZSgpPj4gbV9pbm5lclNvdXJjZTsKKyAgICBVbndyYXBGdW5jIG1fdW53cmFwRnVuYzsKKyAg
ICBMb2NrIG1fbG9jazsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5h
bWUgSW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorUmVmPFBhcmFsbGVsU291cmNlQWRh
cHRlcjxPdXRlclR5cGUsIElubmVyVHlwZSwgVW53cmFwRnVuYz4+IGNyZWF0ZVBhcmFsbGVsU291
cmNlQWRhcHRlcihSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG91dGVyU291cmNlLCBj
b25zdCBVbndyYXBGdW5jJiB1bndyYXBGdW5jKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFBhcmFsbGVsU291cmNlQWRhcHRlcjxPdXRlclR5cGUsIElubmVyVHlwZSwgVW53cmFwRnVuYz4o
b3V0ZXJTb3VyY2UsIHVud3JhcEZ1bmMpKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVNYXJr
aW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxp
dHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSkKKyAgICA6IE1hcmtpbmdDb25z
dHJhaW50KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0
eSwgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbCkKKyAgICAs
IG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVNYXJraW5nQ29uc3RyYWludCgpCit7Cit9CisK
K0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUlt
cGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRv
cik7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Np
bXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGFsbG93cyBmb3IgYW4gaW5mb3JtYWwgd2F5IHRv
IGRlZmluZSBjb25zdHJhaW50cy4gSnVzdCBwYXNzIGEgbGFtYmRhIHRvIHRoZSBjb25zdHJ1Y3Rv
ci4gVGhlIG9ubHkKKy8vIGRvd25zaWRlIGlzIHRoYXQgdGhpcyBtYWtlcyBpdCBoYXJkIGZvciBj
b25zdHJhaW50cyB0byBiZSBzdGF0ZWZ1bCwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciB0aGVtIHRv
IGJlCisvLyBwYXJhbGxlbC4gSW4gdGhvc2UgY2FzZXMsIGl0J3MgZWFzaWVyIHRvIGp1c3Qgc3Vi
Y2xhc3MgTWFya2luZ0NvbnN0cmFpbnQuCitjbGFzcyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCA6
IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYp
PiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25j
dXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCk7CisgICAgCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgCitwcml2
YXRlOgorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYp
IG92ZXJyaWRlOworCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0
ZUZ1bmN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTgsOSArOTgsNyBAQCBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIAogdm9pZCBTbG90
VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIHsKLSAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9u
U2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4K
LSAgICBlbHNlCisgICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlv
blNjb3BlOjpFZGVuKQogICAgICAgICByZXNldCgpOwogCiAgICAgaWYgKEhlYXBQcm9maWxlciog
aGVhcFByb2ZpbGVyID0gdm0oKS5oZWFwUHJvZmlsZXIoKSkKQEAgLTExMSw3ICsxMDksNiBAQCB2
b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpy
ZXNldCgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAg
ICBtX2J5dGVzVmlzaXRlZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBT
bmFwc2hvdEJ1aWxkZXIgPSBudWxscHRyOwpAQCAtMjc3LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5l
clR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNr
KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFy
a2VkKGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNv
bnRhaW5lci5ub3RlTWFya2VkKCk7CkBAIC0zNDYsNyArMzQzLDcgQEAgcHJpdmF0ZToKIAogQUxX
QVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCog
Y2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOwor
ICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENl
bGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAgLTQzNSw3ICs0
MzIsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKIAogdm9pZCBT
bG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZChjb25zdCBBYnN0cmFjdExvY2tlciYp
CiB7Ci0gICAgbV9tdXRhdG9ySXNTdG9wcGVkID0gKG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsK
KyAgICBtX211dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nh
bk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRh
dGVNdXRhdG9ySXNTdG9wcGVkKCkKQEAgLTQ1Miw3ICs0NDksNyBAQCBib29sIFNsb3RWaXNpdG9y
OjpoYXNBY2tub3dsZWRnZWRUaGF0VGhlCiAKIGJvb2wgU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0
b3BwZWRJc1VwVG9EYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVk
ID09IChtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1f
Y2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7CisgICAgcmV0dXJuIG1fbXV0YXRvcklzU3Rv
cHBlZCA9PSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBl
ZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRh
dG9yKCkKQEAgLTQ5MCw4ICs0ODcsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
ZHJhaW4oTW9uCiAgICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9u
YXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KLSAgICAKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7
CiB9CiAKIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6
ZV90IGJ5dGVzUmVxdWVzdGVkKQpAQCAtNTUwLDcgKzU0NSw2IEBAIHNpemVfdCBTbG90VmlzaXRv
cjo6cGVyZm9ybUluY3JlbWVudE9mRHIKICAgICB9CiAKICAgICBkb25hdGVBbGwoKTsKLSAgICBt
ZXJnZUlmTmVjZXNzYXJ5KCk7CiAKICAgICByZXR1cm4gYnl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01
NjEsMTcgKzU1NSwxNiBAQCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkK
ICAgICByZXR1cm4gZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RW
aXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wg
U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlcikKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9udW1i
ZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xs
ZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRh
dG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFj
dGl2ZVBhcmFsbGVsTWFya2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBi
b29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICBy
ZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAg
cmV0dXJuICFpc0VtcHR5KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKQEAgLTU4MywxMiArNTc2LDE0IEBAIE5FVkVSX0lOTElO
RSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxz
ZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAg
ICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVk
RHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02Mjks
MjggKzYyNCw1MSBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAK
ICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAg
fTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53
YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAg
ICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAg
ICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRv
bmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAg
ICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1
cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtl
cnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFi
b251c1Rhc2sgJiYgaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFj
aygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0
ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVD
ZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2Jh
bFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFs
bGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxs
ZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQp
OworICAgICAgICBpZiAoYm9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigq
dGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3Vs
ZCBzdGlsbCBiZSBydW5uaW5nLCBhbmQgbWF5IHJ1biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNs
ZWFyIHRoZSB0YXNrCisgICAgICAgICAgICAvLyBvdXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29w
aW5nIGFyb3VuZCB0cnlpbmcgdG8gcnVuIHRoZSB0YXNrLgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsK
KyAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9PSBib251c1Rh
c2spCisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxs
cHRyOworICAgICAgICAgICAgICAgIGJvbnVzVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
RW1wdHkoKSk7CisgICAgICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgaXNBY3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAgLTY3MCwxNSArNjg4LDE5
IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICBpZiAoT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxCiAgICAgICAgIHx8IChtX2hlYXAubV93b3Js
ZFN0YXRlLmxvYWQoKSAmIEhlYXA6Om11dGF0b3JXYWl0aW5nQml0KQogICAgICAgICB8fCAhbV9o
ZWFwLmhhc0hlYXBBY2Nlc3MoKQotICAgICAgICB8fCBtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICB8fCBtX2hlYXAud29ybGRJc1N0b3Bw
ZWQoKSkgewogICAgICAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBvdmVyIGRyYWluSW5Q
YXJhbGxlbCgpIHdoZW4gd2UgaGF2ZSBhIGNvbmN1cnJlbnQgbXV0YXRvciBidXQKICAgICAgICAg
Ly8gb3RoZXJ3aXNlIGl0IGlzIG5vdCBwcm9maXRhYmxlLgogICAgICAgICByZXR1cm4gZHJhaW5J
blBhcmFsbGVsKHRpbWVvdXQpOwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVh
cC5tX21hcmtpbmdNdXRleCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9u
YXRlQWxsKGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3YWl0
Rm9yVGVybWluYXRpb24odGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJl
c3VsdCBTbG90VmlzaXRvcjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91
dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7
CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAg
ICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkBAIC03MTEsNjEgKzcz
Myw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFsbChjb25zdCBBYnN0cmEKICAgICBtX2hl
YXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xv
dFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm9vdCkKLXsKLSAgICBpZiAoIXJvb3QpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vycygp
ID09IDEpIHsKLSAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0
LgotICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGgg
dGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgotICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJl
IHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAgbWVyZ2VPcGFx
dWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotfQot
Ci1ib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QK
LXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NF
UlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3Rz
LmNvbnRhaW5zKHJvb3QpOwotfQotCi1UcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFx
dWVSb290VHJpU3RhdGUodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAg
ICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotICAgIAotICAgIGlmIChtX29wYXF1ZVJvb3RzLmNv
bnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgIGlmICht
X2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRydWVU
cmlTdGF0ZTsKLSAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKLX0KLQotdm9pZCBTbG90VmlzaXRv
cjo6bWVyZ2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotCi12b2lkIFNs
b3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKLXsKLSAgICBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1
ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVS
b290cygpOwotfQotICAgIAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAgICBpZiAo
IW1faXNJblBhcmFsbGVsTW9kZSkgewpAQCAtNzg1LDE2ICs3NTIsNiBAQCB2b2lkIFNsb3RWaXNp
dG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uCiAgICAgZHJhaW4odGltZW91dCk7CiB9CiAKLXZv
aWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQotewotICAgIHsKLSAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAg
ICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCi0gICAgICAgICAgICBtX2hlYXAu
bV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgfQotICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIo
KTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1faGVh
cC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhh
cnZlc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIYW5kbGVU
eXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtTdGFj
ay5oIgotI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKICNpbmNsdWRlICJWaXNpdFJhY2VLZXku
aCIKICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KQEAgLTk1LDEwICs5NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkKEpTVmFsdWUpOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
SlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9p
ZCopOworICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgcm9vdCB3YXMgbmV3LgogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFp
bnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKLSAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJv
b3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCopIGNvbnN0OwogCiAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFj
ay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKQEAgLTEyMSw2ICsx
MTksOCBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWwo
TW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAg
U2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpbWUg
dGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJlZERy
YWluUmVzdWx0IHdhaXRGb3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25v
dG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4g
aW5jcmVtZW50IG9mIGRyYWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRlc2Ag
d29ydGggb2YgZGF0YS4gVGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkgd2Fs
ayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRoYW4g
Ynl0ZXMuIEl0IG1heQpAQCAtMTI4LDggKzEyOCw2IEBAIHB1YmxpYzoKICAgICAvLyByYXJlIGNh
c2VzIGhhcHBlbiB0ZW1wb3JhcmlseSBldmVuIGlmIHdlJ3JlIG5vdCByZWFjaGluZyB0ZXJtaW5h
dGlvbikuCiAgICAgc2l6ZV90IHBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKHNpemVfdCBieXRl
cyk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZUlmTmVjZXNzYXJ5KCk7
Ci0KICAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNp
emUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhp
cyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KICAgICB2b2lkIG1h
cmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7CkBAIC0xOTQsMTAgKzE5Miw2IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAg
ICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLQotICAgIHZvaWQgbWVyZ2VPcGFxdWVS
b290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2Vs
bCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOwpAQCAtMjE1LDcgKzIw
OSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwog
ICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAgIE9wYXF1ZVJvb3RTZXQgbV9v
cGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUg
dG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290
cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBtb2RlLgogICAgIAogICAgIHNp
emVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTM2LDYgKzEzNiwyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZh
CiAgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7CiB9CiAKK2lubGluZSBib29sIFNs
b3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIXB0cikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFoZWFwKCktPm1fb3BhcXVlUm9vdHMuYWRkKHB0
cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9v
dCh2b2lkKiBwdHIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFxdWVSb290cy5j
b250YWlucyhwdHIpOworfQorCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewogICAgIGlmIChtX2lzRmlyc3RWaXNpdCkgewpA
QCAtMTU5LDEyICsxNzYsMTIgQEAgaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29u
c3QKIAogaW5saW5lIFZNJiBTbG90VmlzaXRvcjo6dm0oKQogewotICAgIHJldHVybiAqbV9oZWFw
Lm1fdm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogaW5saW5lIGNvbnN0IFZNJiBT
bG90VmlzaXRvcjo6dm0oKSBjb25zdAogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07CisgICAg
cmV0dXJuICptX2hlYXAudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNTQwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJN
YXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgi
CisjaW5jbHVkZSAiUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgiCiAjaW5jbHVkZSAiUHJldmVudENv
bGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCkBAIC04OCw1
ICs4OSw0MiBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvcioo
KT4+IFN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpCit7CisgICAgY2xhc3MgVGFz
ayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDog
bV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgTWFya2Vk
QWxsb2NhdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvcjsKKyAgICAgICAgICAgIGlmIChyZXN1bHQp
CisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3IgPSByZXN1bHQtPm5leHRBbGxvY2F0b3JJblN1
YnNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0b3I7Cisg
ICAgICAgIExvY2sgbV9sb2NrOworICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUYXNrKG1fZmlyc3RBbGxvY2F0b3IpKTsKK30KKworUmVmUHRyPFNoYXJlZFRhc2s8TWFya2Vk
QmxvY2s6OkhhbmRsZSooKT4+IFN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tT
b3VyY2UoKQoreworICAgIHJldHVybiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8TWFya2Vk
QWxsb2NhdG9yKiwgTWFya2VkQmxvY2s6OkhhbmRsZSo+KAorICAgICAgICBwYXJhbGxlbEFsbG9j
YXRvclNvdXJjZSgpLAorICAgICAgICBbXSAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIC0+
IFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiB7CisgICAgICAgICAg
ICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHJldHVybiBhbGxvY2F0b3ItPnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOwor
ICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjksMTcgKzY5LDI0
IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFj
aEFsbG9jYXRvcihjb25zdCBGdW5jJik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFy
a2VkQWxsb2NhdG9yKigpPj4gcGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UoKTsKKyAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZEJsb2NrKGNvbnN0
IEZ1bmMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9y
RWFjaE5vdEVtcHR5TWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAgIAorICAgIEpTX0VYUE9S
VF9QUklWQVRFIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJh
bGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKTsKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExhcmdlQWxsb2NhdGlvbihjb25zdCBGdW5jJik7
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJr
ZWRDZWxsKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRD
ZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODQsNiArODQsNTMgQEAgdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGwoY29uc3QgRgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorUmVmUHRyPFNoYXJlZFRh
c2s8dm9pZChTbG90VmlzaXRvciYpPj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJh
bGxlbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVk
VGFzazx2b2lkKFNsb3RWaXNpdG9yJik+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2soU3Vi
c3BhY2UmIHN1YnNwYWNlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgICAgICAgICAgOiBtX3N1YnNw
YWNlKHN1YnNwYWNlKQorICAgICAgICAgICAgLCBtX2Jsb2NrU291cmNlKHN1YnNwYWNlLnBhcmFs
bGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpKQorICAgICAgICAgICAgLCBtX2Z1bmMoZnVu
YykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHJ1bihTbG90
VmlzaXRvciYgdmlzaXRvcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUg
KE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1bigpKSB7Cisg
ICAgICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0
aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuYyh2aXNpdG9yLCBjZWxs
LCBraW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbmVlZFRvVmlzaXRMYXJnZUFs
bG9jYXRpb25zKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
bV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9zdWJzcGFjZS5mb3JFYWNoTGFyZ2VBbGxvY2F0aW9u
KAorICAgICAgICAgICAgICAgIFsmXSAoTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uLT5pc01hcmtlZCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGFsbG9jYXRpb24tPmNlbGwoKSwgbV9zdWJz
cGFjZS5tX2F0dHJpYnV0ZXMuY2VsbEtpbmQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN1YnNwYWNlJiBtX3N1YnNwYWNl
OworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gbV9i
bG9ja1NvdXJjZTsKKyAgICAgICAgRnVuYyBtX2Z1bmM7CisgICAgICAgIExvY2sgbV9sb2NrOwor
ICAgICAgICBib29sIG1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zIHsgdHJ1ZSB9OworICAg
IH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzLCBmdW5jKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTGl2ZUNl
bGwoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBmb3JFYWNoTWFya2VkQmxvY2soCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdENvdW50ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmlzaXRDb3VudGVy
IHsKK3B1YmxpYzoKKyAgICBWaXNpdENvdW50ZXIoKSB7IH0KKyAgICAKKyAgICBWaXNpdENvdW50
ZXIoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDogbV92aXNpdG9yKCZ2aXNpdG9yKQor
ICAgICAgICAsIG1faW5pdGlhbFZpc2l0Q291bnQodmlzaXRvci52aXNpdENvdW50KCkpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBTbG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJu
ICptX3Zpc2l0b3I7IH0KKyAgICAKKyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV92aXNpdG9yLT52aXNpdENvdW50KCkgLSBtX2luaXRpYWxWaXNp
dENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRv
ciB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9WaXNpdGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgotI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIFZpc2l0aW5nVGltZW91dCB7Ci1wdWJsaWM6Ci0gICAgVmlzaXRp
bmdUaW1lb3V0KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZpc2l0aW5nVGltZW91dChTbG90
VmlzaXRvciYgdmlzaXRvciwgYm9vbCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0
aW1lb3V0KQotICAgICAgICA6IG1fZGlkVmlzaXRTb21ldGhpbmcoZGlkVmlzaXRTb21ldGhpbmcp
Ci0gICAgICAgICwgbV92aXNpdENvdW50QmVmb3JlKHZpc2l0b3IudmlzaXRDb3VudCgpKQotICAg
ICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90
IHZpc2l0Q291bnQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gdmlzaXRvci52aXNpdENvdW50KCkgLSBtX3Zpc2l0Q291bnRCZWZvcmU7Ci0gICAgfQot
Ci0gICAgYm9vbCBkaWRWaXNpdFNvbWV0aGluZyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5nIHx8IHZpc2l0Q291bnQo
dmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dChTbG90VmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGlu
Zyh2aXNpdG9yKSAmJiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAgIAotcHJpdmF0
ZToKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OwotICAgIHNpemVfdCBt
X3Zpc2l0Q291bnRCZWZvcmUgeyAwIH07Ci0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAg
dm9pZCBXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsK
LSAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZENvbmN1cnJlbnRseShtYXJraW5nVmVyc2lv
biwganNWYWx1ZS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWQobWFy
a2luZ1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAogICAgICAgICBpZiAoIXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4o
anNWYWx1ZSkpLCB3ZWFrSW1wbC0+Y29udGV4dCgpLCB2aXNpdG9yKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzU0
LDYgKzM1NCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZUFzeW5jSXRlcmF0aW9uID0gZmEKICAg
ICBcCiAgICAgdih1bnNpZ25lZCwgbWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNl
LCAxMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9mR0NNYXJr
ZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoOCksIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoYm9vbCwgdXNlUGFyYWxsZWxNYXJraW5nQ29uc3RyYWludFNvbHZlciwgdHJ1ZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgb3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkLCAx
MDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgbWluSGVhcFV0aWxpemF0aW9u
LCAwLjgsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBtaW5NYXJrZWRCbG9ja1V0
aWxpemF0aW9uLCAwLjksIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoKQog
ICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVybiAoIW1f
Z2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fZ2xvYmFsT2JqZWN0
LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVP
YmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQcm90b3R5cGVPYmpl
Y3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkKG1f
Z2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9y
ZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmpl
Y3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0dXJuIEhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAgICByZXR1cm4gSGVhcDo6aXNN
YXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsK
ICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGRvZXMgc29tZSBjaGFuZ2VzIHRvIG1ha2Ug
aXQgZWFzaWVyIHRvIGRvIHBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZzoKKyAgICAgICAgCisg
ICAgICAgIC0gSSBmaW5hbGx5IHJlbW92ZWQgZGVwZW5kZW5jeVdpdGguIFRoaXMgd2FzIGEgc2ls
bHkgY29uc3RydWN0IHdob3NlIG9ubHkgcHVycG9zZSBpcyB0byBjb25mdXNlCisgICAgICAgICAg
cGVvcGxlIGFib3V0IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIGRlcGVuZGVuY3kgY2hhaW4uIEkg
dG9vayB0aGF0IGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdyZWFseQorICAgICAgICAgIHNpbXBsaWZ5
IHRoZSBHQydzIHVzZSBvZiBkZXBlbmRlbmN5IGNoYWluaW5nLgorICAgICAgICAKKyAgICAgICAg
LSBBZGRlZCBtb3JlIGxvZ2ljIHRvIERlcXVlPD4sIHNpbmNlIEkgdXNlIGl0IGZvciBwYXJ0IG9m
IHRoZSBsb2FkIGJhbGFuY2VyLgorICAgICAgICAKKyAgICAgICAgLSBNYWRlIGl0IHBvc3NpYmxl
IHRvIHByb2ZpbGUgbG9jayBjb250ZW50aW9uLiBTZWUKKyAgICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMjUwI2MwIGZvciBzb21lIHByZWxpbWluYXJ5
IG1lYXN1cmVtZW50cy4KKyAgICAgICAgCisgICAgICAgIC0gSW50cm9kdWNlZCBob2xkTG9ja0lm
LCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBlcmZvcm0gcHJlZGljYXRlZCBsb2NrIGFjcXVpc2l0
aW9uLiBXZSB1c2UgdGhhdAorICAgICAgICAgIHRvIHBpY2sgYSBsb2NrIGluIFdlYkNvcmUuCisK
KyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYv
QXRvbWljcy5oOgorICAgICAgICAoV1RGOjpkZXBlbmRlbmN5KToKKyAgICAgICAgKFdURjo6RGVw
ZW5kZW5jeVdpdGg6OkRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGVw
ZW5kZW5jeVdpdGgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAg
ICAgKFdURjo6Qml0VmVjdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHA6
IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0
ckhhc2hTZXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6fkNvbmN1cnJl
bnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmRlbGV0
ZU9sZFRhYmxlcyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcik6
CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKToKKyAgICAg
ICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3cpOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkpOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50
UHRySGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6
OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZCk6Cisg
ICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjptYXhMb2FkIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6Omhhc2gpOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50UHRySGFzaFNldDo6Y2FzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNo
U2V0Ojpjb250YWluc0ltcGwgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFz
aFNldDo6YWRkSW1wbCk6CisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIChXVEY6Omlu
bGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5oOgor
ICAgICAgICAqIHd0Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OmxvY2tTbG93
KToKKyAgICAgICAgKiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChXVEY6OmhvbGRMb2NrSWYpOgor
ICAgICAgICAqIHd0Zi9TY29wZWRMYW1iZGEuaDoKKyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5o
OgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUpOgorICAgICAgICAo
V1RGOjpTaGFyZWRUYXNrPFJlc3VsdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TdGFj
a1Nob3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6U3RhY2tTaG90KToKKyAg
ICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpTdGFja1No
b3Q6OmFycmF5IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpzaXplIGNvbnN0KToK
KyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAg
KFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tT
aG90OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I+IGNv
bnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpkZWxldGVkVmFsdWVBcnJheSk6CisgICAg
ICAgIChXVEY6OlN0YWNrU2hvdEhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RI
YXNoOjplcXVhbCk6CisgICAgICAgICogd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6U3RhY2tTaG90UHJvZmlsZXIpOgorICAg
ICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cHJvZmlsZSk6CisgICAgICAgIChXVEY6OlN0
YWNrU2hvdFByb2ZpbGVyOjpydW4pOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VX
b3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9z
dE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2luIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxs
b2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
RjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi87IH07CiAJCTBGMzBC
QTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAv
KiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKKwkJMEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8q
IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0
aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi87IH07
CiAJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3NDFGMjNENDlBMDAyOUQ5
MUQgLyogR2lnYWNhZ2UuY3BwICovOyB9OwogCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZENkMgLyog
TG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFt
LmNwcCAqLzsgfTsKQEAgLTE4Myw2ICsxODQsOCBAQAogCQkwRjMwQkE4RDFFNzg3MDhFMDAyQ0E4
NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TG9nZ2luZ0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMEJBOEUx
RTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzBCQThGMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3Vy
cmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJFQjRBIC8qIExvY2tB
bGdvcml0aG1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG1JbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQwMDNDRkVGMiAv
KiBTdHJpbmdWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFu
ZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNiw2ICsyMjksOCBAQAogCQkwRjlEMzM1QzE2
NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJl
YW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRTdHJlYW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDQxRkQxQzM3QjAwNzlDNUIyIC8qIFN0
YWNrU2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1Nob3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDUxRkQxQzM3QjAwNzlDNUIyIC8q
IFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTE4
MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEw
MDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAv
KiBTeXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3Rl
bVRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MCw2ICsyNTUsNyBA
QAogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRjRCNEM0MUU4ODkzOUMwMERCQkU4NiAvKiBMaXZlbmVzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlzb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQkNCRkExRkQzN0UwRjAwNzJBQUYwIC8q
IFN0YW1wZWRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YW1wZWRM
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkYxOURBMUJCMzM0RUIwMDg4
NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBvb2wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8q
IGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CkBAIC03OTQsNiArODAwLDggQEAKIAkJCQkwRjhGMkI5MDE3MkUw
MEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3MDE1MUE4
MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVBQjFGNENENjFFMDA5QTJC
QkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUz
MjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBGMzBDQjU5MUZDREYxMzMw
MDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJCTBGREI2OThEMUI3QzY0
M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEyNjFFQjRFMDY4MDA0Mjk1
N0QgLyogQ1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5NTdEIC8qIENQ
VVRpbWUuaCAqLywKQEAgLTEwMDUsMTAgKzEwMTMsMTMgQEAKIAkJCQlBOEE0NzMwRDE1MUE4MjVC
MDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0MTIzRkYg
LyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNGRiAvKiBT
dGFja0JvdW5kcy5oICovLAorCQkJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1No
b3QuaCAqLywKKwkJCQkwRjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmls
ZXIuaCAqLywKIAkJCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAg
Ki8sCiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAqLywKIAkJ
CQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8sCiAJCQkJRUY3
RDZDRDU5RDg2NDJBOEEwREE4NkFEIC8qIFN0YWNrVHJhY2UuaCAqLywKKwkJCQkwRkZCQ0JGQTFG
RDM3RTBGMDA3MkFBRjAgLyogU3RhbXBlZExvY2suaCAqLywKIAkJCQlBOEE0NzMxMTE1MUE4MjVC
MDA0MTIzRkYgLyogU3RkTGliRXh0cmFzLmggKi8sCiAJCQkJQzRGOEE5MzYxOUM2NUVCNDAwQjJC
MTVEIC8qIFN0b3B3YXRjaC5oICovLAogCQkJCTFBNkJCNzY4MTYyRjMwMDUwMEREMTZEQiAvKiBT
dHJlYW1CdWZmZXIuaCAqLywKQEAgLTE0MjYsNiArMTQzNyw3IEBACiAJCQkJMEY4MjRBNjgxQjc0
NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1
MkIxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFGMTc1MkMxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnREZWNvZGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25jdXJyZW50
UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyRDFGM0Q0ODYwMDBDNzQ5
NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzNjIx
NjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0F0b21pY3MuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQXRvbWljcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsMTEgKzM0NiwxNiBAQCBBTFdBWVNfSU5MSU5FIERlcGVu
ZGVuY3kgbnVsbERlcGVuZGVuY3koCiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUqID0g
bnVsbHB0cj4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5
IGRlcGVuZGVuY3koVCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVp
bnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICB1bmlvbiB7
CisgICAgICAgIHVpbnQzMl90IGNvcHk7CisgICAgICAgIFQgdmFsdWU7CisgICAgfSB1OworICAg
IHUuY29weSA9IDA7CisgICAgdS52YWx1ZSA9IHZhbHVlOwogI2lmIENQVShBUk02NCkKICAgICAv
LyBDcmVhdGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNzZW1ibHksIHdo
b3NlIGNvbXB1dGF0aW9uCiAgICAgLy8gaXNuJ3QgdmlzaWJsZSB0byB0aGUgb3B0aW1pemVyLiBU
aGlzIHplcm8gaXMgdGhlbiB1c2FibGUgYXMgYW4gb2Zmc2V0IGluCkBAIC0zNjMsODAgKzM2OCwy
MCBAQCBBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhCiAgICAgLy8gb3Ig
YW4gYWNxdWlyZSBsb2FkLgogICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3
W2luXSIKICAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6
IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgOiBbaW5dICJyIih1LmNvcHkpKTsKICNlbGlmIENQ
VShBUk0pCiAgICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5dIgogICAgICAg
ICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29w
eSkpOworICAgICAgICA6IFtpbl0gInIiKHUuY29weSkpOwogI2Vsc2UKICAgICAvLyBObyBkZXBl
bmRlbmN5IGlzIG5lZWRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCiAgICAgbG9hZExvYWRGZW5j
ZSgpOwogICAgIGRlcGVuZGVuY3kgPSAwOwotICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKKyAgICBV
TlVTRURfUEFSQU0odS5jb3B5KTsKICNlbmRpZgogICAgIHJldHVybiBkZXBlbmRlbmN5OwogfQog
Ci0vLyBGSVhNRTogVGhpcyBjb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIGRl
cGVuZGVuY3koKSBvdmVybG9hZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjk0MDUKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzaXplb2YoVCkgPT0gND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5jeTsK
LSAgICB1aW50MzJfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSk7Ci0jaWYg
Q1BVKEFSTTY0KQotICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIK
LSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0g
InIiKGNvcHkpKTsKLSNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwg
JVtpbl0sICVbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0g
ICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2Vsc2UKLSAgICBsb2FkTG9hZEZlbmNlKCk7Ci0g
ICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOwotI2VuZGlmCi0gICAg
cmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19J
TkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRlcGVu
ZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUqID0g
bnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdpdGggewotcHVibGlj
OgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5KG51bGxEZXBlbmRl
bmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRGVwZW5k
ZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKLSAgICAgICAg
OiBkZXBlbmRlbmN5KGRlcGVuZGVuY3kpCi0gICAgICAgICwgdmFsdWUodmFsdWUpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7Ci0gICAgVCB2YWx1ZTsKLX07
Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIERlcGVuZGVuY3lXaXRoPFQ+IGRl
cGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsKLX0KLQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUKiBjb25zdW1lKFQqIHBvaW50ZXIsIERlcGVuZGVu
Y3kgZGVwZW5kZW5jeSkKIHsKQEAgLTQ2OSwxMCArNDE0LDggQEAgQUxXQVlTX0lOTElORSBUJiBl
bnN1cmVQb2ludGVyKEF0b21pYzxUKgogCiB1c2luZyBXVEY6OkF0b21pYzsKIHVzaW5nIFdURjo6
RGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7CiB1c2luZyBXVEY6OmNvbnN1
bWU7CiB1c2luZyBXVEY6OmRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRoOwog
dXNpbmcgV1RGOjplbnN1cmVQb2ludGVyOwogdXNpbmcgV1RGOjpudWxsRGVwZW5kZW5jeTsKIApJ
bmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0Jp
dFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDEzIEBAIHB1YmxpYzogCiAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICBpdGVyYXRvciBv
cGVyYXRvcisrKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0ID0g
KnRoaXM7CisgICAgICAgICAgICArKygqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisKICAgICAgICAgYm9vbCBpc0F0RW5kKCkgY29uc3QKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPj0gbV9iaXRWZWN0b3ItPnNpemUoKTsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsNyBAQCBzZXQoV1RGX0hF
QURFUlMKICAgICBDbG9ja1R5cGUuaAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmgKICAgICBDb21w
aWxlci5oCisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQuaAogICAgIENvbmRpdGlvbi5oCiAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXIuaAogICAgIENyb3NzVGhyZWFkVGFzay5oCkBAIC0xMzIsOCArMTMz
LDExIEBAIHNldChXVEZfSEVBREVSUwogICAgIFNlZ21lbnRlZFZlY3Rvci5oCiAgICAgU21hbGxQ
dHJTZXQuaAogICAgIFN0YWNrQm91bmRzLmgKKyAgICBTdGFja1Nob3QuaAorICAgIFN0YWNrU2hv
dFByb2ZpbGVyLmgKICAgICBTdGFja1N0YXRzLmgKICAgICBTdGFja1RyYWNlLmgKKyAgICBTdGFt
cGVkTG9jay5oCiAgICAgU3RkTGliRXh0cmFzLmgKICAgICBTdG9wd2F0Y2guaAogICAgIFN0cmlu
Z0V4dHJhcy5oCkBAIC0yMTgsNiArMjIyLDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgQ1BVVGlt
ZS5jcHAKICAgICBDbG9ja1R5cGUuY3BwCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuY3BwCisgICAg
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCiAgICAg
Q3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAKICAgICBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51
bWJlci5jcHAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25j
dXJyZW50UHRySGFzaFNldC5oIgorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK0NvbmN1cnJlbnRQdHJIYXNoU2V0OjpDb25jdXJyZW50UHRySGFzaFNldCgp
Cit7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCitDb25jdXJyZW50UHRySGFzaFNldDo6fkNvbmN1
cnJlbnRQdHJIYXNoU2V0KCkKK3sKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6ZGVs
ZXRlT2xkVGFibGVzKCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4gY2FzZS4gSXQgZG9lcyBu
b3QgbWFrZSBpdCBPSyBmb3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFkZCgpLiBCdXQgaXQgbWln
aHQgcHJldmVudAorICAgIC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2UgZGlkIG1ha2UgdGhhdCBt
aXN0YWtlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsgCisgICAgCisgICAg
bV9hbGxUYWJsZXMucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVf
cHRyPFRhYmxlPiYgdGFibGUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHRhYmxlLmdl
dCgpICE9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ29u
Y3VycmVudFB0ckhhc2hTZXQ6OmNsZWFyKCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4gY2Fz
ZS4gSXQgZG9lcyBub3QgbWFrZSBpdCBPSyBmb3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFkZCgp
LiBCdXQgaXQgbWlnaHQgcHJldmVudAorICAgIC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2UgZGlk
IG1ha2UgdGhhdCBtaXN0YWtlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsg
CisgICAgCisgICAgbV9hbGxUYWJsZXMuY2xlYXIoKTsKKyAgICBpbml0aWFsaXplKCk7Cit9CisK
K3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmluaXRpYWxpemUoKQoreworICAgIGNvbnN0ZXhw
ciB1bnNpZ25lZCBpbml0aWFsU2l6ZSA9IDMyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4g
dGFibGUgPSBUYWJsZTo6Y3JlYXRlKGluaXRpYWxTaXplKTsKKyAgICBtX3RhYmxlLnN0b3JlUmVs
YXhlZCh0YWJsZS5nZXQoKSk7CisgICAgbV9hbGxUYWJsZXMuYXBwZW5kKFdURk1vdmUodGFibGUp
KTsKK30KKworYm9vbCBDb25jdXJyZW50UHRySGFzaFNldDo6YWRkU2xvdyhUYWJsZSogdGFibGUs
IHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4LCB2b2lk
KiBwdHIpCit7CisgICAgaWYgKHRhYmxlLT5sb2FkLmV4Y2hhbmdlQWRkKDEpID49IHRhYmxlLT5t
YXhMb2FkKCkpCisgICAgICAgIHJldHVybiByZXNpemVBbmRBZGQocHRyKTsKKyAgICAKKyAgICBm
b3IgKDs7KSB7CisgICAgICAgIHZvaWQqIG9sZEVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5j
b21wYXJlRXhjaGFuZ2VTdHJvbmcobnVsbHB0ciwgcHRyKTsKKyAgICAgICAgaWYgKCFvbGRFbnRy
eSkgeworICAgICAgICAgICAgaWYgKG1fdGFibGUubG9hZCgpICE9IHRhYmxlKSB7CisgICAgICAg
ICAgICAgICAgLy8gV2UgYWRkZWQgYW4gZW50cnkgdG8gYW4gb2xkIHRhYmxlISBXZSBuZWVkIHRv
IHJlZXhlY3V0ZSB0aGUgYWRkIG9uIHRoZSBuZXcgdGFibGUuCisgICAgICAgICAgICAgICAgcmV0
dXJuIGFkZChwdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG9sZEVudHJ5ID09IHB0cikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgIH0KK30KKwordm9pZCBDb25j
dXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkoKQoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxh
eGVkKCk7CisgICAgaWYgKHRhYmxlLT5sb2FkLmxvYWRSZWxheGVkKCkgPCB0YWJsZS0+bWF4TG9h
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBu
ZXdUYWJsZSA9IFRhYmxlOjpjcmVhdGUodGFibGUtPnNpemUgKiAyKTsKKyAgICB1bnNpZ25lZCBt
YXNrID0gbmV3VGFibGUtPm1hc2s7CisgICAgdW5zaWduZWQgbG9hZCA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLT5zaXplOyArK2kpIHsKKyAgICAgICAgdm9pZCogcHRy
ID0gdGFibGUtPmFycmF5W2ldLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlmICghcHRyKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4
ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4
OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBBdG9taWM8dm9pZCo+JiBlbnRyeVJl
ZiA9IG5ld1RhYmxlLT5hcnJheVtpbmRleF07CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IGVu
dHJ5UmVmLmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAg
ICAgICAgICAgZW50cnlSZWYuc3RvcmVSZWxheGVkKHB0cik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeSAhPSBw
dHIpOworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgbG9hZCsrOworICAgIH0KKyAgICAKKyAgICBuZXdUYWJsZS0+bG9hZC5zdG9y
ZVJlbGF4ZWQobG9hZCk7CisgICAgCisgICAgbV90YWJsZS5zdG9yZShuZXdUYWJsZS5nZXQoKSk7
CisgICAgbV9hbGxUYWJsZXMuYXBwZW5kKFdURk1vdmUobmV3VGFibGUpKTsKK30KKworYm9vbCBD
b25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKHZvaWQqIHB0cikKK3sKKyAgICByZXNp
emVJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBhZGQocHRyKTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gQ29uY3VycmVudFB0ckhhc2hTZXQ6OlRh
YmxlOjpjcmVhdGUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29uY3Vy
cmVudFB0ckhhc2hTZXQ6OlRhYmxlPiByZXN1bHQobmV3IChmYXN0TWFsbG9jKE9CSkVDVF9PRkZT
RVRPRihUYWJsZSwgYXJyYXkpICsgc2l6ZW9mKEF0b21pYzx2b2lkKj4pICogc2l6ZSkpIFRhYmxl
KCkpOworICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAgcmVzdWx0LT5tYXNrID0gc2l6ZSAt
IDE7CisgICAgcmVzdWx0LT5sb2FkLnN0b3JlUmVsYXhlZCgwKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICByZXN1bHQtPmFycmF5W2ldLnN0b3JlUmVs
YXhlZChudWxscHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwpJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgYSBj
b25jdXJyZW50IGhhc2gtYmFzZWQgc2V0IGZvciBwb2ludGVycy4gSXQncyBvcHRpbWl6ZWQgZm9y
OgorLy8KKy8vIC0gSGlnaCByYXRlIG9mIGNvbnRhaW5zKCkgY2FsbHMuCisvLyAtIEhpZ2ggcmF0
ZSBvZiBhZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyBuZXcuIGFkZCgpIGNhbGxz
IHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIChub3AgYWRkcykKKy8vICAgZG9uJ3QgbXV0YXRlIHRo
ZSB0YWJsZSBhdCBhbGwuCisvLyAtIE5vdCB0b28gbWFueSB0aHJlYWRzLiBJIGRvdWJ0IHRoaXMg
c2NhbGVzIGJleW9uZCB+NC4gVGhvdWdoLCBpdCBtYXkgYWN0dWFsbHkgc2NhbGUgYmV0dGVyIHRo
YW4gdGhhdAorLy8gICBpZiB0aGUgcmF0ZSBvZiBub3AgYWRkcyBpcyBhYnN1cmRseSBoaWdoLgor
Ly8KKy8vIElmIHdlIHdhbnRlZCB0aGlzIHRvIHNjYWxlIGJldHRlciwgdGhlIG1haW4gY2hhbmdl
IHdlJ2QgaGF2ZSB0byBtYWtlIGlzIGhvdyB0aGlzIHRhYmxlIGRldGVybWluZXMgd2hlbgorLy8g
dG8gcmVzaXplLiBSaWdodCBub3cgaXQncyBhIHNoYXJlZCBjb3VudGVyLiBXZSBsb2NrO3hhZGQg
dGhpcyBjb3VudGVyLiBPbmUgZWFzeSB3YXkgdG8gbWFrZSB0aGF0CisvLyBzY2FsYWJsZSBpcyB0
byByZXF1aXJlIGVhY2ggdGhyZWFkIHRoYXQgd29ya3Mgd2l0aCB0aGUgQ29uY3VycmVudFB0ckhh
c2hTZXQgdG8gcmVnaXN0ZXIgaXRzZWxmIGZpcnN0LgorLy8gVGhlbiBlYWNoIHRocmVhZCB3b3Vs
ZCBoYXZlIHNvbWUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSBjb3VudGVyLiBXZSBjb3VsZCBp
bnN0aXR1dGUgdGhlIHBvbGljeSB0aGF0CisvLyBlYWNoIHRocmVhZCBzaW1wbHkgaW5jcmVtZW50
cyBpdHMgb3duIGxvYWQgY291bnRlciwgaW4gaXRzIG93biBkYXRhIHN0cnVjdHVyZS4gVGhlbiwg
aWYgYW55IHNlYXJjaCB0bworLy8gcmVzb2x2ZSBhIGNvbGxpc2lvbiBkb2VzIG1vcmUgdGhhbiBO
IGl0ZXJhdGlvbnMsIHdlIGNhbiBjb21wdXRlIGEgY29tYmluZWQgbG9hZCBieSBzdW1taW5nIHRo
ZSBsb2FkCisvLyBjb3VudGVycyBvZiBhbGwgb2YgdGhlIHRocmVhZCBkYXRhIHN0cnVjdHVyZXMu
CisvLworLy8gQ29uY3VycmVudFB0ckhhc2hTZXQncyBtYWluIHVzZXIsIHRoZSBHQywgc2VlcyBh
IDk4JSBub3AgYWRkIHJhdGUgaW4gU3BlZWRvbWV0ZXIuIFRoYXQncyB3aHkgdGhpcworLy8gZm9j
dXNlcyBzbyBtdWNoIG9uIGNhc2VzIHdoZXJlIHRoZSB0YWJsZSBkb2VzIG5vdCBjaGFuZ2UuCitj
bGFzcyBDb25jdXJyZW50UHRySGFzaFNldCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29u
Y3VycmVudFB0ckhhc2hTZXQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJs
aWM6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIENvbmN1cnJlbnRQdHJIYXNoU2V0KCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIH5Db25jdXJyZW50UHRySGFzaFNldCgpOworICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBjb250YWlucyhUIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbnRhaW5zSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBhZGQoVCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZGRJbXBsKGNhc3QodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90
IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUubG9hZFJlbGF4ZWQo
KS0+bG9hZC5sb2FkUmVsYXhlZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBPbmx5IGNhbGwgd2hl
biB5b3Uga25vdyB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQoKS4gVGhpcyBmcmVl
cyB1cCBtZW1vcnkgd2l0aG91dCBjaGFuZ2luZworICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUg
dGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlT2xkVGFibGVzKCk7Cisg
ICAgCisgICAgLy8gT25seSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQg
Y2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJlZXMgdXAgYWxsIG1lbW9yeSBleGNlcHQgZm9yCisgICAg
Ly8gdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGhhc2h0YWJsZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjbGVhcigpOworICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVGFibGUgeworICAg
ICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIAorICAgICAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBjcmVhdGUodW5zaWduZWQgc2l6ZSk7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCBtYXhMb2FkKCkgY29uc3QgeyByZXR1cm4gc2l6ZSAvIDI7
IH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHNpemU7IC8vIFRoaXMgaXMgaW1tdXRhYmxl
LgorICAgICAgICB1bnNpZ25lZCBtYXNrOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4KKyAgICAgICAg
QXRvbWljPHVuc2lnbmVkPiBsb2FkOworICAgICAgICBBdG9taWM8dm9pZCo+IGFycmF5WzFdOwor
ICAgIH07CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2godm9pZCogcHRyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKHB0cik7CisgICAgfQorICAgIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgdm9pZCogY2FzdChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoVCkgPD0gc2l6ZW9mKHZvaWQqKSwgInR5cGUgdG9vIGJpZyIpOworICAgICAgICB1bmlvbiB7
CisgICAgICAgICAgICB2b2lkKiBwdHI7CisgICAgICAgICAgICBUIHZhbHVlOworICAgICAgICB9
IHU7CisgICAgICAgIHUucHRyID0gbnVsbHB0cjsKKyAgICAgICAgdS52YWx1ZSA9IHZhbHVlOwor
ICAgICAgICByZXR1cm4gdS5wdHI7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnNJbXBs
KHZvaWQqIHB0cikgY29uc3QKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUu
bG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAg
ICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAg
ICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaWYgKGVudHJ5ID09IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIGEgbmV3IGVudHJ5IHdhcyBhZGRlZC4KKyAgICBib29sIGFk
ZEltcGwodm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5s
b2FkUmVsYXhlZCgpOworICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUtPm1hc2s7CisgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAg
IHZvaWQqIGVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhlZCgpOworICAgICAg
ICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkU2xvdyh0YWJsZSwg
bWFzaywgc3RhcnRJbmRleCwgaW5kZXgsIHB0cik7CisgICAgICAgICAgICBpZiAoZW50cnkgPT0g
cHRyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGluZGV4ID0g
KGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0g
c3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgYWRkU2xvdyhUYWJsZSogdGFibGUsIHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIHN0
YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4LCB2b2lkKiBwdHIpOworCisgICAgdm9pZCByZXNpemVJ
Zk5lY2Vzc2FyeSgpOworICAgIGJvb2wgcmVzaXplQW5kQWRkKHZvaWQqIHB0cik7CisgICAgCisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4sIDQ+IG1fYWxsVGFibGVzOworICAgIEF0
b21pYzxUYWJsZSo+IG1fdGFibGU7IC8vIFRoaXMgaXMgbmV2ZXIgbnVsbC4KKyAgICBMb2NrIG1f
bG9jazsgLy8gV2UganVzdCB1c2UgdGhpcyB0byBjb250cm9sIHJlc2l6ZSByYWNlcy4KK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OwpJ
bmRleDogU291cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9EZXF1ZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDExIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgYXBwZW5kQW5kQnViYmxlKFUmJiwg
Y29uc3QgRnVuYyYpOwogICAgIAorICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBmaXJzdCBl
bGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVs
bCB2ZXJzaW9uIG9mCisgICAgLy8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMg
ZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRha2VGaXJzdChjb25z
dCBGdW5jJik7CisKICAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgbGFzdCBlbGVtZW50IGZv
ciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9u
IG9mCiAgICAgLy8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KQEAgLTU3MSw2ICs1NzYsMjUgQEAgaW5saW5lIHZv
aWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFQg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlRmlyc3QoY29uc3QgRnVuYyYgZnVuYykKK3sK
KyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgdW5zaWduZWQgc2l6ZSA9IHRoaXMtPnNpemUo
KTsKKyAgICB3aGlsZSAoY291bnQgPCBzaXplKSB7CisgICAgICAgIFQgY2FuZGlkYXRlID0gdGFr
ZUZpcnN0KCk7CisgICAgICAgIGlmIChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIHdo
aWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAgIHByZXBlbmQodGFrZUxhc3QoKSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAgICB9CisgICAgICAgIGNvdW50Kys7Cisg
ICAgICAgIGFwcGVuZChXVEZNb3ZlKGNhbmRpZGF0ZSkpOworICAgIH0KKyAgICByZXR1cm4gVCgp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgogaW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0
YWtlTGFzdChjb25zdCBGdW5jJiBmdW5jKQogewogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9GYXN0TWFsbG9jLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0Zh
c3RNYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw3IEBAIHVzaW5nIFdURjo6
ZmFzdEFsaWduZWRGcmVlOwogI2RlZmluZSBXVEZfUFJJVkFURV9JTkxJTkUgaW5saW5lCiAjZW5k
aWYKIAotI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBcCi1wdWJsaWM6IFwKKyNkZWZp
bmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfSU1QTCBcCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3
KHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3
W10oc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IFwKICAgICBcCkBAIC0yNjMsNyArMjYy
LDE1IEBAIHB1YmxpYzogXAogICAgICAgICBBU1NFUlQobG9jYXRpb24pOyBcCiAgICAgICAgIHJl
dHVybiBsb2NhdGlvbjsgXAogICAgIH0gXAorCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEIFwKK3B1YmxpYzogXAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogcHJp
dmF0ZTogXAogdHlwZWRlZiBpbnQgX190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRo
aXNNYWNybwogCisjZGVmaW5lIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRCBcCisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURURfSU1QTCBcCit0eXBlZGVmIGludCBfX3RoaXNJc0hlcmVU
b0ZvcmNlQVNlbWljb2xvbkFmdGVyVGhpc01hY3JvCisKICNlbmRpZiAvKiBXVEZfRmFzdE1hbGxv
Y19oICovCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9Mb2NrLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYv
TG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNywxNiBAQAogI2luY2x1ZGUgIkxv
Y2suaCIKIAogI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oPgorI2luY2x1ZGUg
PHd0Zi9TdGFja1Nob3RQcm9maWxlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAorc3RhdGljIGNv
bnN0ZXhwciBib29sIHByb2ZpbGVMb2NrQ29udGVudGlvbiA9IGZhbHNlOworCiB2b2lkIExvY2tC
YXNlOjpsb2NrU2xvdygpCiB7CisgICAgaWYgKHByb2ZpbGVMb2NrQ29udGVudGlvbikKKyAgICAg
ICAgU1RBQ0tfU0hPVF9QUk9GSUxFKDQsIDIsIDUpOwogICAgIERlZmF1bHRMb2NrQWxnb3JpdGht
Ojpsb2NrU2xvdyhtX2J5dGUpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3Jp
dGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDcgKzM1LDE1IEBAIG5hbWVzcGFjZSBXVEYgewogLy8gZmllbGQuIFRoZSBs
aW1pdCBvZiBvbmUgbG9jayBpcyBkdWUgdG8gdGhlIHVzZSBvZiB0aGUgZmllbGQncyBhZGRyZXNz
IGFzIGEga2V5IHRvIGZpbmQgdGhlIGxvY2sncwogLy8gcXVldWUuCiAKLXRlbXBsYXRlPHR5cGVu
YW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4K
K3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgorc3RydWN0IEVtcHR5TG9ja0hvb2tzIHsKKyAg
ICBzdGF0aWMgTG9ja1R5cGUgbG9ja0hvb2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVl
OyB9CisgICAgc3RhdGljIExvY2tUeXBlIHVubG9ja0hvb2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlOyB9CisgICAgc3RhdGljIExvY2tUeXBlIHBhcmtIb29rKExvY2tUeXBlIHZhbHVl
KSB7IHJldHVybiB2YWx1ZTsgfQorICAgIHN0YXRpYyBMb2NrVHlwZSBoYW5kb2ZmSG9vayhMb2Nr
VHlwZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIExv
Y2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdCwgdHlwZW5h
bWUgSG9va3MgPSBFbXB0eUxvY2tIb29rczxMb2NrVHlwZT4+CiBjbGFzcyBMb2NrQWxnb3JpdGht
IHsKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgc3RhdGljIGNv
bnN0IExvY2tUeXBlIG1hc2sgPSBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQ7CkBAIC00Myw3ICs1
MSw3IEBAIGNsYXNzIExvY2tBbGdvcml0aG0gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGxv
Y2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCiAgICAgewotICAgICAg
ICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSk7CisgICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoMCwgSG9va3M6OmxvY2tIb29rKGlzSGVsZEJpdCksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVp
cmUpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdChBdG9taWM8TG9ja1R5
cGU+JiBsb2NrKQpAQCAtNTMsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlICYgaXNIZWxkQml0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgdmFsdWUgfD0gaXNIZWxkQml0OworICAgICAgICAgICAgICAgIHZhbHVl
ID0gSG9va3M6OmxvY2tIb29rKHZhbHVlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsK
QEAgLTY3LDE3ICs3NiwxNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgdHJ5TG9jayhBdG9t
aWM8TG9ja1R5cGU+JiBsb2NrKQogICAgIHsKICAgICAgICAgZm9yICg7OykgewotICAgICAgICAg
ICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQp
CisgICAgICAgICAgICBMb2NrVHlwZSBjdXJyZW50VmFsdWUgPSBsb2NrLmxvYWQoc3RkOjptZW1v
cnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICYgaXNIZWxk
Qml0KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChsb2Nr
LmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8
IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCisgICAgICAgICAgICBpZiAo
bG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRWYWx1ZSwgSG9va3M6OmxvY2tIb29rKGN1
cnJlbnRWYWx1ZSB8IGlzSGVsZEJpdCksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgc3RhdGlj
IGJvb2wgdW5sb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAs
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJl
RXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgSG9va3M6OnVubG9ja0hvb2soMCksIHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGVhc2UpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCB1bmxvY2tGYXN0
KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCkBAIC04Nyw2ICs5Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBpZiAoKHZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgdmFsdWUgJj0gfmlzSGVsZEJp
dDsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IEhvb2tzOjp1bmxvY2tIb29rKHZhbHVlKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdv
cml0aG1JbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRo
bUlubGluZXMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29y
aXRobUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJp
dCwgTG9ja1R5cGUgaGFzUGFya2VkQml0Pgotdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBp
c0hlbGRCaXQsIGhhc1BhcmtlZEJpdD46OmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2sp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlw
ZSBoYXNQYXJrZWRCaXQsIHR5cGVuYW1lIEhvb2tzPgordm9pZCBMb2NrQWxnb3JpdGhtPExvY2tU
eXBlLCBpc0hlbGRCaXQsIGhhc1BhcmtlZEJpdCwgSG9va3M+Ojpsb2NrU2xvdyhBdG9taWM8TG9j
a1R5cGU+JiBsb2NrKQogewogICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBi
ZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOwpAQCAtNDQsMTUgKzQ0LDE1IEBAIHZvaWQg
TG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKICAgICB1bnNpZ25lZCBzcGluQ291
bnQgPSAwOwogICAgIAogICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0
ZVZhbHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IGxv
Y2subG9hZCgpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJh
cmdlIGluLgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQotICAg
ICAgICAgICAgJiYgbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1
cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQorICAgICAgICBpZiAoIShjdXJyZW50VmFsdWUg
JiBpc0hlbGRCaXQpCisgICAgICAgICAgICAmJiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3Vy
cmVudFZhbHVlLCBIb29rczo6bG9ja0hvb2soY3VycmVudFZhbHVlIHwgaXNIZWxkQml0KSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm9ib2R5IHBhcmtl
ZCBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBh
cm91bmQuCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpICYm
IHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAgICBpZiAoIShjdXJyZW50VmFsdWUgJiBo
YXNQYXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgewogICAgICAgICAgICAgc3Bp
bkNvdW50Kys7CiAgICAgICAgICAgICBUaHJlYWQ6OnlpZWxkKCk7CiAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTYwLDEzICs2MCwxOSBAQCB2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlz
SGVsZEJpdCwgCiAKICAgICAgICAgLy8gTmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRp
bmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5k
CiAgICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBh
dCBzZXR0aW5nIGl0LgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2Vk
Qml0KQotICAgICAgICAgICAgJiYgIWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0
ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAoIShjdXJyZW50VmFsdWUgJiBoYXNQYXJrZWRCaXQpKSB7Cisg
ICAgICAgICAgICBMb2NrVHlwZSBuZXdWYWx1ZSA9IEhvb2tzOjpwYXJrSG9vayhjdXJyZW50VmFs
dWUgfCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAgaWYgKCFsb2NrLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoY3VycmVudFZhbHVlLCBuZXdWYWx1ZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBuZXdWYWx1ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudFZhbHVlICYgaXNIZWxkQml0KTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudFZhbHVlICYgaGFzUGFya2VkQml0KTsKIAogICAg
ICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0byBiZSBpc0hlbGR8aGFzUGFya2VkLiBT
byBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2FuIHBhcmsuCiAgICAgICAgIFBhcmtpbmdM
b3Q6OlBhcmtSZXN1bHQgcGFya1Jlc3VsdCA9Ci0gICAgICAgICAgICBQYXJraW5nTG90Ojpjb21w
YXJlQW5kUGFyaygmbG9jaywgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCB8IGhhc1Bhcmtl
ZEJpdCk7CisgICAgICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbG9jaywgY3Vy
cmVudFZhbHVlKTsKICAgICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5wYXJrZWQpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1bHQudG9rZW4pKSB7CiAg
ICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRvZmY6CkBAIC04Nyw4ICs5Myw4IEBAIHZvaWQgTG9j
a0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJp
dD4KLXZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCBoYXNQYXJrZWRCaXQ+
Ojp1bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNzKQor
dGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUg
aGFzUGFya2VkQml0LCB0eXBlbmFtZSBIb29rcz4KK3ZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlw
ZSwgaXNIZWxkQml0LCBoYXNQYXJrZWRCaXQsIEhvb2tzPjo6dW5sb2NrU2xvdyhBdG9taWM8TG9j
a1R5cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVzcykKIHsKICAgICAvLyBXZSBjb3VsZCBnZXQg
aGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWlsZWQgc3B1cmlvdXNseSwg
b3IgYmVjYXVzZSB0aGVyZSBpcwogICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBh
IENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNv
dWxkCkBAIC0xMDAsNyArMTA2LDcgQEAgdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hl
bGRCaXQsIAogICAgICAgICAgICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRC
aXQgfCBoYXNQYXJrZWRCaXQpKTsKICAgICAgICAgCiAgICAgICAgIGlmICgob2xkQnl0ZVZhbHVl
ICYgbWFzaykgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhj
aGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgb2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpCisgICAg
ICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgSG9va3M6
OnVubG9ja0hvb2sob2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xMjAsMTIgKzEy
NiwyMSBAQCB2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgCiAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZhaXIg
fHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9u
J3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRoZSB0aHJl
YWQgdGhhdCB3YXMKICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGluZy4KKyAgICAgICAgICAg
ICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
TG9ja1R5cGUmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
b2NrVHlwZSBuZXdWYWx1ZSA9IEhvb2tzOjpoYW5kb2ZmSG9vayh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09IHZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBuZXdWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gRGlyZWN0SGFuZG9mZjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKICAgICAgICAgICAgICAgICAgICAg
WyZdIChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgJj0gfm1hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEhvb2tzOjp1
bmxvY2tIb29rKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5
SGF2ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IGhh
c1BhcmtlZEJpdDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDog
U291cmNlL1dURi93dGYvTG9ja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9j
a2VyLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgTG9ja2VyX2gKIAog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02NCw2ICs2
NSw3IEBAIHB1YmxpYzoKIAogICAgIH5Mb2NrZXIoKQogICAgIHsKKyAgICAgICAgY29tcGlsZXJG
ZW5jZSgpOwogICAgICAgICBpZiAobV9sb2NrYWJsZSkKICAgICAgICAgICAgIG1fbG9ja2FibGUt
PnVubG9jaygpOwogICAgIH0KQEAgLTEwOCw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgaWYgKG1fbG9ja2FibGUpCiAgICAgICAgICAgICBtX2xvY2thYmxlLT5sb2NrKCk7Cisg
ICAgICAgIGNvbXBpbGVyRmVuY2UoKTsKICAgICB9CiAgICAgCiAgICAgVCogbV9sb2NrYWJsZTsK
QEAgLTEyMiw2ICsxMjUsMTIgQEAgTG9ja2VyPExvY2tUeXBlPiBob2xkTG9jayhMb2NrVHlwZSYg
bG9jawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK0xvY2tlcjxMb2NrVHlwZT4g
aG9sZExvY2tJZihMb2NrVHlwZSYgbG9jaywgYm9vbCBwcmVkaWNhdGUpCit7CisgICAgcmV0dXJu
IExvY2tlcjxMb2NrVHlwZT4ocHJlZGljYXRlID8gJmxvY2sgOiBudWxscHRyKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2NrZXI8TG9ja1R5cGU+IHRyeUhvbGRMb2NrKExv
Y2tUeXBlJiBsb2NrKQogewogICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+Ojp0cnlMb2NrKGxv
Y2spOwpAQCAtMTM0LDUgKzE0Myw2IEBAIHVzaW5nIFdURjo6TG9ja2VyOwogdXNpbmcgV1RGOjpO
b0xvY2tpbmdOZWNlc3NhcnlUYWc7CiB1c2luZyBXVEY6Ok5vTG9ja2luZ05lY2Vzc2FyeTsKIHVz
aW5nIFdURjo6aG9sZExvY2s7Cit1c2luZyBXVEY6OmhvbGRMb2NrSWY7CiAKICNlbmRpZgpJbmRl
eDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3Rm
L1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDEzIEBAIHByaXZh
dGU6CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFscmVhZHkgcmVmZXIgdG8gYSBmdW5jdG9y
IGJ5IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBsaWZldGltZSBpcwogLy8gZ29vZC4gVGhp
cyBqdXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhhdCBwb2ludHMgdG8geW91ciBmdW5jdG9y
LgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGFsd2F5cyB3cm9uZzoKKy8vCisvLyBhdXRvIHJl
ZiA9IHNjb3BlZExhbWJkYVJlZihbLi4uXSAoLi4uKSB7Li4ufSk7CisvLworLy8gQmVjYXVzZSB0
aGUgc2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIgdG8gdGhlIGxhbWJkYSBieSByZWZlcmVuY2Us
IGFuZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVyIHRoZQorLy8gc2VtaWNvbG9uLiBVc2Ugc2Nv
cGVkTGFtYmRhKCkgaW4gdGhhdCBjYXNlLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBl
LCB0eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVkTGFtYmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5cGUs
IEZ1bmN0b3I+IHNjb3BlZExhbWJkYVJlZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewpJbmRl
eDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvU2hh
cmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RG
IHsKIC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBp
ZiB5b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNo
YXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5
cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFy
ZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewordGVtcGxhdGU8dHlwZW5h
bWUgUGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNo
YXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRU
eXBlcy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3Vs
dFR5cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRh
c2soKSB7IH0KIApJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dU
Ri93dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3Mg
U3RhY2tTaG90IHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3QoKSB7IH0KKyAgICAKKyAgICBBTFdB
WVNfSU5MSU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkK
KyAgICB7CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgICBtX2FycmF5ID0gc3RkOjpt
YWtlX3VuaXF1ZTx2b2lkKltdPihzaXplKTsKKyAgICAgICAgICAgIGludCBpbnRTaXplID0gc2l6
ZTsKKyAgICAgICAgICAgIFdURkdldEJhY2t0cmFjZShtX2FycmF5LmdldCgpLCAmaW50U2l6ZSk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGludFNpemUp
IDw9IHNpemUpOworICAgICAgICAgICAgbV9zaXplID0gaW50U2l6ZTsKKyAgICAgICAgICAgIGlm
ICghbV9zaXplKQorICAgICAgICAgICAgICAgIG1fYXJyYXkgPSBudWxscHRyOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCisgICAgICAgIDogbV9hcnJheShkZWxldGVkVmFsdWVBcnJheSgpKQorICAgICAgICAsIG1f
c2l6ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90JiBvcGVyYXRvcj0oY29u
c3QgU3RhY2tTaG90JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lk
KltdPiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4ob3RoZXIubV9zaXplKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IG90aGVyLm1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAg
IG5ld0FycmF5W2ldID0gb3RoZXIubV9hcnJheVtpXTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIu
bV9zaXplOworICAgICAgICBtX2FycmF5ID0gV1RGTW92ZShuZXdBcnJheSk7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90KGNvbnN0IFN0YWNrU2hvdCYg
b3RoZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2
b2lkKiogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LmdldCgpOyB9CisgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2FycmF5OyB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV9zaXplICE9IG90aGVyLm1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3NpemU7IGktLTspIHsKKyAgICAgICAg
ICAgIGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1fYXJyYXlbaV0pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSBtX3NpemU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gbV9zaXplOyBpLS07KQorICAgICAgICAgICAgcmVzdWx0IF49IFB0ckhhc2g8dm9pZCo+Ojpo
YXNoKG1fYXJyYXlbaV0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gIW1fc2l6ZSAmJiBtX2FycmF5LmdldCgpID09IGRlbGV0ZWRWYWx1ZUFy
cmF5KCk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgU3BlY3RydW08PiBoYXBweS4KKyAgICBi
b29sIG9wZXJhdG9yPihjb25zdCBTdGFja1Nob3QmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCoqIGRlbGV0ZWRWYWx1ZUFycmF5KCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0K
KyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbV9hcnJheTsKKyAgICBzaXplX3Qg
bV9zaXplIHsgMCB9OworfTsKKworc3RydWN0IFN0YWNrU2hvdEhhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYgc2hvdCkgeyByZXR1cm4gc2hvdC5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdGFja1Nob3QmIGEsIGNvbnN0IFN0YWNr
U2hvdCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0
YWNrU2hvdD4geworICAgIHR5cGVkZWYgU3RhY2tTaG90SGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U3RhY2tTaG90PiB7IH07
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQ
cm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RhdGFM
b2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5o
PgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+
CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0
YWNrU2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3RQcm9maWxlcih1bnNpZ25l
ZCBudW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCwgdW5zaWduZWQgc3RhY2tzVG9SZXBv
cnQpCisgICAgICAgIDogbV9udW1GcmFtZXMobnVtRnJhbWVzKQorICAgICAgICAsIG1fZnJhbWVz
VG9Ta2lwKGZyYW1lc1RvU2tpcCkKKyAgICAgICAgLCBtX3N0YWNrc1RvUmVwb3J0KHN0YWNrc1Rv
UmVwb3J0KQorICAgIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIlN0YWNrU2hvdFByb2ZpbGVy
IiwgW3RoaXNdICgpIHsgcnVuKCk7IH0pOworICAgIH0KKworICAgIC8vIE5FVkVSX0lOTElORSBz
byB0aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0YWJsZS4KKyAgICBORVZFUl9JTkxJTkUgdm9p
ZCBwcm9maWxlKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgbV9wcm9maWxlLmFkZChTdGFja1Nob3QobV9udW1GcmFtZXMgKyBtX2ZyYW1l
c1RvU2tpcCkpOworICAgICAgICBtX3RvdGFsQ291bnQrKzsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICBzbGVlcCgxX3MpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICAgICAgYXV0byBsaXN0ID0gbV9wcm9maWxlLmJ1aWxkTGlzdCgp
OworICAgICAgICAgICAgZGF0YUxvZygiXG5Ib3R0ZXN0IHN0YWNrcyBpbiAiLCBnZXRDdXJyZW50
UHJvY2Vzc0lEKCksICI6XG4iKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNp
emUoKSwgY291bnQgPSAwOyBpLS0gJiYgY291bnQgPCBtX3N0YWNrc1RvUmVwb3J0OyBjb3VudCsr
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBsaXN0W2ldOworICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlxuVG9wICMiLCBjb3VudCArIDEsICIgc3RhY2s6ICIsIGVudHJ5LmNvdW50
ICogMTAwIC8gbV90b3RhbENvdW50LCAiJVxuIik7CisgICAgICAgICAgICAgICAgU3RhY2tUcmFj
ZSB0cmFjZShlbnRyeS5rZXkuYXJyYXkoKSArIG1fZnJhbWVzVG9Ta2lwLCBlbnRyeS5rZXkuc2l6
ZSgpIC0gbV9mcmFtZXNUb1NraXApOworICAgICAgICAgICAgICAgIGRhdGFMb2codHJhY2UpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBXb3JkTG9jayBtX2xvY2s7CisgICAgU3BlY3RydW08U3RhY2tTaG90LCBk
b3VibGU+IG1fcHJvZmlsZTsKKyAgICBkb3VibGUgbV90b3RhbENvdW50IHsgMCB9OworICAgIHVu
c2lnbmVkIG1fbnVtRnJhbWVzOworICAgIHVuc2lnbmVkIG1fZnJhbWVzVG9Ta2lwOworICAgIHVu
c2lnbmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9OworCisjZGVmaW5lIFNUQUNLX1NIT1RfUFJPRklM
RShudW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tzVG9SZXBvcnQpIGRvIHsgXAorICAgIHN0
YXRpYyBTdGFja1Nob3RQcm9maWxlciogc3RhY2tTaG90UHJvZmlsZXI7IFwKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJvZmlsZXJPbmNlRmxhZzsgXAorICAgIHN0ZDo6Y2Fs
bF9vbmNlKHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWcsIFtdIHsgc3RhY2tTaG90UHJvZmlsZXIg
PSBuZXcgU3RhY2tTaG90UHJvZmlsZXIobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1Rv
UmVwb3J0KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQcm9maWxlci0+cHJvZmlsZSgpOyBcCit9IHdo
aWxlIChmYWxzZSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1N0YW1wZWRMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhbXBlZExvY2su
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFtcGVkTG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0
aG0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNp
b24gb2YgYSBTdGFtcGVkTG9jaywgd2hpY2ggdXNlcyBqdXN0IGFuIGV4Y2x1c2l2ZSBsb2NrIGFz
IGEgZmFsbGJhY2suIFRoaXMKKy8vIG1ha2VzIHRoZSBsb2NrIHZlcnkgY29tcGFjdC4KKworLy8g
RklYTUU6IEl0J3MgY3VycmVudGx5IG5lY2Vzc2FyeSBmb3IgY2FsbGVycyBvZiBsb2NrKCkvdW5s
b2NrKCkgdG8gI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oPi4KKy8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMjIKKworY2xhc3MgU3RhbXBl
ZExvY2sgeworICAgIHR5cGVkZWYgdWludHB0cl90IExvY2tUeXBlOworICAgIAorICAgIHN0YXRp
YyBjb25zdGV4cHIgTG9ja1R5cGUgaXNIZWxkQml0ID0gMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IExvY2tUeXBlIGhhc1BhcmtlZEJpdCA9IDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlw
ZSBtYXNrID0gMSAmIDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBzaGlmdCA9IDI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBzdGFtcFVuaXQgPSA0OworICAgIAorICAg
IHN0cnVjdCBMb2NrSG9va3MgeworICAgICAgICBzdGF0aWMgTG9ja1R5cGUgbG9ja0hvb2soTG9j
a1R5cGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIHN0YW1w
VW5pdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIExvY2tUeXBlIHVubG9j
a0hvb2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgICAgIHN0YXRpYyBM
b2NrVHlwZSBwYXJrSG9vayhMb2NrVHlwZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICAg
ICAgc3RhdGljIExvY2tUeXBlIGhhbmRvZmZIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2
YWx1ZTsgfQorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBMb2NrQWxnb3JpdGhtPExvY2tUeXBl
LCBpc0hlbGRCaXQsIGhhc1BhcmtlZEJpdCwgTG9ja0hvb2tzPiBFeGNsdXNpdmVBbGdvcml0aG07
CisgICAgCitwdWJsaWM6CisgICAgU3RhbXBlZExvY2soKQorICAgIHsKKyAgICAgICAgbV93b3Jk
LnN0b3JlUmVsYXhlZCgwKTsKKyAgICB9CisgICAgCisgICAgflN0YW1wZWRMb2NrKCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5TG9jaygpCisgICAgeworICAgICAgICByZXR1cm4g
RXhjbHVzaXZlQWxnb3JpdGhtOjp0cnlMb2NrKG1fd29yZCk7CisgICAgfQorCisgICAgdm9pZCBs
b2NrKCkKKyAgICB7CisgICAgICAgIEV4Y2x1c2l2ZUFsZ29yaXRobTo6bG9jayhtX3dvcmQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBFeGNsdXNpdmVB
bGdvcml0aG06OnVubG9jayhtX3dvcmQpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGUgb25seSB0
aGluZyB5b3UncmUgYWxsb3dlZCB0byBpbmZlciBmcm9tIHRoaXMgdmFsdWUgaXMgdGhhdCBpZiBp
dCdzIHplcm8sIHRoZW4geW91IGRpZG4ndCBnZXQKKyAgICAvLyBhIHJlYWwgc3RhbXAuCisgICAg
dHlwZWRlZiBMb2NrVHlwZSBTdGFtcDsKKyAgICAKKyAgICBTdGFtcCB0cnlPcHRpbWlzdGljUmVh
ZCgpCisgICAgeworICAgICAgICBMb2NrVHlwZSBjdXJyZW50VmFsdWUgPSBtX3dvcmQubG9hZCgp
OworICAgICAgICBpZiAoY3VycmVudFZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBnZXRTdGFtcChjdXJyZW50VmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICBib29sIHZhbGlkYXRlKFN0YW1wIHN0YW1wKQorICAgIHsKKyAgICAgICAgV1RGOjps
b2FkTG9hZEZlbmNlKCk7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IG1fd29yZC5s
b2FkUmVsYXhlZCgpOworICAgICAgICByZXR1cm4gZ2V0U3RhbXAoY3VycmVudFZhbHVlKSA9PSBz
dGFtcDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBhdXRv
IGRvT3B0aW1pemVkUmVhZChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgU3RhbXAg
c3RhbXAgPSB0cnlPcHRpbWlzdGljUmVhZCgpOworICAgICAgICBpZiAoc3RhbXApIHsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuYygpOworICAgICAgICAgICAgaWYgKHZhbGlkYXRlKHN0
YW1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAg
IGxvY2soKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jKCk7CisgICAgICAgIHVubG9jaygp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvLyBVc2UgdGhpcyB0
byBjcmVhdGUgYSByZWFkIHRyYW5zYWN0aW9uIHVzaW5nIGRlcGVuZGVuY3kgY2hhaW5zIG9ubHku
CisgICAgU3RhbXAgdHJ5T3B0aW1pc3RpY0ZlbmNlbGVzc1JlYWQoKQorICAgIHsKKyAgICAgICAg
TG9ja1R5cGUgY3VycmVudFZhbHVlID0gbV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlm
IChjdXJyZW50VmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIGdldFN0YW1wKGN1cnJlbnRWYWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
ZmVuY2VsZXNzVmFsaWRhdGUoU3RhbXAgc3RhbXAsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKKyAg
ICB7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IGNvbnN1bWUodGhpcywgZGVwZW5k
ZW5jeSktPm1fd29yZC5sb2FkUmVsYXhlZCgpOworICAgICAgICByZXR1cm4gZ2V0U3RhbXAoY3Vy
cmVudFZhbHVlKSA9PSBzdGFtcDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIExvY2tUeXBl
IGdldFN0YW1wKExvY2tUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh2YWx1ZSAm
IH5tYXNrKSB8IDE7CisgICAgfQorICAgIAorICAgIEF0b21pYzxMb2NrVHlwZT4gbV93b3JkOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RhbXBlZExvY2s7CisKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNo
b3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlz
IGNoYW5nZSBpcyBiZXN0IHRlc3RlZCB1c2luZyBET00tR0MtaW50ZW5zaXZlCisgICAgICAgIGJl
bmNobWFya3MgbGlrZSBTcGVlZG9tZXRlciBhbmQgRHJvbWFlby4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgcGFyYWxsZWxpemVzIHRoZSBET00ncyBvdXRwdXQgY29uc3RyYWludCwgYW5kIG1ha2Vz
IHNvbWUgc21hbGwgY2hhbmdlcyB0byBtYWtlIHRoaXMgbW9yZQorICAgICAgICBzY2FsYWJsZS4K
KworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1Rp
bWVvdXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01HQ091
dHB1dENvbnN0cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpET01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29y
a0ltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmV2ZW50VGFyZ2V0RGF0
YUNvbmN1cnJlbnRseSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVFdmVudFRhcmdl
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEpOgor
CiAyMDE3LTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0
byByZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVT
Y3JpcHRMb2FkZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAogYmlu
ZGluZ3MvanMvQ2FsbFRyYWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmluZGlu
Z3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBlcldv
cmxkLmNwcAogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3By
YWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaD4KKwpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNp
dGluZ1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlz
dGVudCkKQEAgLTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9WaXNpdGluZ1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzUxLDYgKzM1MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5n
dGhQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY4NzE2NkUxQzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAwNDQz
QzNGIC8qIEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAvKiBJ
bnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFEQkEw
MDQ0M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0M0Mz
RiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFBMEYx
RkQxQzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIy
IC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5MDBB
M0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGlj
c0xheWVyVXBkYXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjYyNTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1MkQx
OERFMUIxNTAwQTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1
IC8qIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5n
VHJlZVN0aWNreU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNTQ0Niw2ICs1NDQ3LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNG
IC8qIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpTRE9NUXVh
ZEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1
YWRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1NzE1NURB
ODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyog
RE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERPTUdDT3V0cHV0Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25zdHJhaW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEwMDk3NUZE
RCAvKiBDU1NQcm9wZXJ0aWVzLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpzb247IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBH
cmFwaGljc0xheWVyVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5ODAsNiArMjI5ODMsOCBAQAogCQkJCTk1
MjA3NjAyMUYyNjc1RjkwMDdEMkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJCQkwRjYw
RjMyOTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURG
QkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2NjMwMDc5
QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBFMUZEMUM2
NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUxNkFEMjFG
MzUyNTIwMDAzNEI2QkYgLyogRE9NUHJvbWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQz
MTM0RDAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQz
MTIxRTAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5oICovLApAQCAtMjc1NDcsNiArMjc1NTIs
NyBAQAogCQkJCTUxOEY1MDA0MTk0Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0b24uaCBp
biBIZWFkZXJzICovLAogCQkJCUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNH
ZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIy
IC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQTdDMUYx
ODgzMjJGQzAwQzk1NEI1IC8qIEpTR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NDgyQjc1MjExOThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01H
Q091dHB1dENvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50Lmgi
CisKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgorI2lu
Y2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TdWJzcGFj
ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01H
Q091dHB1dENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKKyAg
ICA6IE1hcmtpbmdDb25zdHJhaW50KCJEb21vIiwgIkRPTSBPdXRwdXQiLCBDb25zdHJhaW50Vm9s
YXRpbGl0eTo6U2VsZG9tR3JleWVkLCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQs
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpCisgICAgLCBtX3ZtKHZtKQorICAgICwg
bV9jbGllbnREYXRhKGNsaWVudERhdGEpCisgICAgLCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKHZt
LmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSkKK3sKK30KKworRE9NR0NPdXRwdXRDb25z
dHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdHJhaW50KCkKK3sKK30KKworQ29uc3RyYWludFBhcmFs
bGVsaXNtIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKQor
eworICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CisgICAgCisgICAgaWYgKGhlYXAubXV0YXRv
ckV4ZWN1dGlvblZlcnNpb24oKSA9PSBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKQorICAgICAgICBy
ZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworICAgIAorICAgIG1fbGFz
dEV4ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlQobV90YXNrcy5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50RGF0
YS5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAorICAgICAgICBbJl0gKFN1YnNwYWNlJiBz
dWJzcGFjZSkgeworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAg
ICAgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAg
ICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29u
c3RyYWludHMoY2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX3Rhc2tzLmFwcGVuZChzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFy
YWxsZWwoZnVuYykpOworICAgICAgICB9KTsKKyAgICAKKyAgICByZXR1cm4gQ29uc3RyYWludFBh
cmFsbGVsaXNtOjpQYXJhbGxlbDsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3Ry
YWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZv
ciAoYXV0byYgdGFzayA6IG1fdGFza3MpCisgICAgICAgIHRhc2stPnJ1bih2aXNpdG9yKTsKK30K
KyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3Jr
SW1wbChTbG90VmlzaXRvciYpCit7CisgICAgbV90YXNrcy5jbGVhcigpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+
CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNWTUNsaWVudERhdGE7CisKK2NsYXNzIERP
TUdDT3V0cHV0Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25zdHJhaW50IHsKK3B1
YmxpYzoKKyAgICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTVk1DbGllbnREYXRh
Jik7CisgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOworICAgIAorcHJvdGVjdGVkOgorICAg
IEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3Im
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9y
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKEpTQzo6U2xvdFZp
c2l0b3ImKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworICAgIEpT
Vk1DbGllbnREYXRhJiBtX2NsaWVudERhdGE7CisgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9u
VmVyc2lvbjsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
Pj4+IG1fdGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xp
ZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxMiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAorI2luY2x1ZGUg
IkRPTUdDT3V0cHV0Q29uc3RyYWludC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgPGhlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRl
IDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5o
PgotI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPGhl
YXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMu
aD4KLSNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1l
L1ZNLmg+CkBAIC03NCw0MyArNzIsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFs
V29ybGQoVk0qCiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVu
dERhdGEoKnZtKTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxl
dGVzIHRoaXMgcG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRw
dXQgQ29uc3RyYWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25W
ZXJzaW9uID0gdm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlv
blZlcnNpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24o
KTsKLQotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNvdW50IGhl
cmUgb3Vyc2VsdmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKLSAgICAgICAg
ICAgIC8vIG9wYXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0aW9uIHll
dC4gVGhlIHdheSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAgICAgIC8vIGNvbnN0cmFp
bnQgc29sdmVyIGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCi0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVl
Um9vdHMoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnRE
YXRhLT5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAgICAgICAgICAgIFsmXSAo
U3Vic3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVh
Y2hNYXJrZWRDZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVh
cENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlND
ZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoY2VsbCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bVJldmlzaXRlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzbG90VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkg
LSBudW1PcGFxdWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRW
b2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJh
aW50KFdURk1vdmUoY29uc3RyYWludCkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJh
aW50KHN0ZDo6bWFrZV91bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnRE
YXRhKSk7CiAgICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFw
cGVyV29ybGQ6OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9s
bGVyID0gYWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIu
aCIKICNpbmNsdWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRh
dGlvblNjb3BlLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NlZFRy
ZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMu
aCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIsNyArMjE2Mywx
NCBAQCBFdmVudFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAKIEV2ZW50VGFy
Z2V0RGF0YSogTm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCkKIHsKLSAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CisgICAgLy8gTm90
IGhvbGRpbmcgdGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBlZCBhY2NlbGVyYXRlcyBw
YXJhbGxlbCBjb25zdHJhaW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8gY2FsbHMgdGhpcyBmdW5j
dGlvbiBmcm9tIG1hbnkgdGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nIGNhbiBo
YXBwZW4gd2l0aCB0aGUgd29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0b3BwZWQsIGJ1dCBpZiB3
ZSBkbyBpdCB3aXRoIGEgcnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5IG1peGluZyBj
b25zdHJhaW50CisgICAgLy8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJlZm9yZSwgdGhl
IG1vc3QgbGlrZWx5IHRpbWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBsb2NrIGlzIHdoZW4gdGhl
CisgICAgLy8gd29ybGQgaXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2Nr
IHdoZW4gdGhlIHdvcmxkIGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdvcmxkCisgICAg
Ly8gbWVhbnMgdGhhdCB3ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFyZ2V0IGRhdGEg
bWFwLgorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrSWYoc19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2bSAmJiB2bS0+aGVhcC53
b3JsZElzUnVubmluZygpKTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRhKCkgPyBldmVu
dFRhcmdldERhdGFNYXAoKS5nZXQodGhpcykgOiBudWxscHRyOwogfQogCkBAIC0yMTcxLDYgKzIx
NzksOSBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAgICAgaWYg
KGhhc0V2ZW50VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1h
cCgpLmdldCh0aGlzKTsKIAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CisKICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAg
c2V0SGFzRXZlbnRUYXJnZXREYXRhKHRydWUpOwogICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRh
TWFwKCkuYWRkKHRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJnZXREYXRhPigpKS5pdGVy
YXRvci0+dmFsdWU7CkBAIC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6
OmVuc3VyZUV2ZW50VGFyZ2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQog
eworICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2ZW50VGFyZ2V0RGF0YU1h
cCgpLnJlbW92ZSh0aGlzKTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3Vs
ZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzOiBBZGQgc3BsYXktbGF0
ZW5jeSB0ZXN0LCBzaW5jZSB0aGlzIGNoYW5nZSBuZWVkZWQgdG8gYmUgY2FyZWZ1bGx5IHZhbGlk
YXRlZCB3aXRoIHRoYXQgYmVuY2htYXJrLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29u
Y3VycmVudFB0ckhhc2hTZXQuY3BwOiBBZGRlZC4gVGhpcyBoYXMgdW5pdCB0ZXN0cyBvZiB0aGUg
bmV3IGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmUuIFRoZSB0ZXN0cyBmb2N1cyBvbiBjb3JyZWN0
bmVzcyB1bmRlciBzZXJpYWwgZXhlY3V0aW9uLCB3aGljaCBhcHBlYXJzIHRvIGJlIGVub3VnaCBm
b3Igbm93IChpdCdzIHNvIGVhc3kgdG8gY2F0Y2ggYSBjb25jdXJyZW5jeSBidWcgYnkganVzdCBy
dW5uaW5nIHRoZSBHQykuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0x
Mi0wMSAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gQWRkIFNhbXBsZU1hcC5jcHAgQVBJIHRlc3RzIHRvIENNYWtlCkluZGV4OiBUb29scy9T
Y3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1
bi1qc2MtYmVuY2htYXJrcwkocmV2aXNpb24gMjI1NDAzKQorKysgVG9vbHMvU2NyaXB0cy9ydW4t
anNjLWJlbmNobWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgTE9OR1NQSURF
Ul9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhfUEFUSCA9IFBFUkZPUk1BTkNFVEVT
VFNfUEFUSCArICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2OC12NiIKIFRBSUxCRU5DSF9QQVRI
ID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5jaDkwMDAiCiBNSUNST0JFTkNITUFS
S1NfUEFUSCA9IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3RzIiArICJtaWNyb2JlbmNobWFya3Mi
Ci1PQ1RBTkVfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIg
KyAid3JhcHBlcnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19Q
QVRIICsgIk9jdGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEggPSBPUEVOU09VUkNFX09DVEFORV9Q
QVRIICsgIndyYXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsg
IkpTQmVuY2giCiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNw
ZWVkIiArICJ0ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNf
UEFUSCArICJTaXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04NDEsNiArODQyLDIwIEBAIGNsYXNz
IFNpbmdsZUZpbGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKICAgZW5kCiBlbmQKIAorIyBCZW5j
aG1hcmsgdGhhdCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0IGJlIGxvYWRlZCBp
biBpdHMgb3duIGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1bigpKSwgYnV0IHJl
dHVybnMgaXRzIHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitjbGFzcyBTaW5nbGVGaWxlQ3VzdG9t
VGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5jaFBhdGgKKyAgCisg
IGRlZiBpbml0aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVuY2hQYXRoID0gYmVuY2hQYXRoCisg
IGVuZAorICAKKyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJr
CisgIGVuZAorZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUg
ZGF0YSBmaWxlcyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZvbGxvd2VkCiAjIGJ5
IGEgY29tbWFuZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNsYXNzIE11bHRpRmlsZVRpbWVkQmVu
Y2htYXJrUGFyYW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1pdEJlbmNoUnVuQ29k
ZUZpbGUobmFtZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIg
ICAgaWYgKF9fYmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0pIHByaW50KFwiI3tuYW1lfTogI3tw
bGFuLnZtfTogI3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hlcl9pbmRleCAtICN7d2Fy
bXVwfSkgKyBcIjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1bnMpKTsiKQogICAg
ICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0
ZGVycixmaWxlLCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29tbWFuZC5qc30iKQorICAgICAgZWxz
aWYgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9f
YmVuY2hlcl93aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHZh
ciBfX2JlbmNoZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsiKQorICAgICAgICAkcmVydW4udGlt
ZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBydW4oX19iZW5jaGVy
X3doYXQsIF9fYmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAgIH0KKyAgICAgICAgZG91YmxlUHV0
cygkc3RkZXJyLGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVzdWx0LnZhbHVlID09IG51bGwpIikK
KyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICAgIHRocm93IG5ldyBFcnJvcihc
Ik51bGwgcmVzdWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBy
ZXR1cm4gX19iZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRl
cnIsZmlsZSwifSIpCisgICAgICAgICR3YXJtdXAudGltZXMgeworICAgICAgICAgIGRvdWJsZVB1
dHMoJHN0ZGVycixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmlu
c3BlY3R9KSIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5s
ZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KKyAgICAgICAgJGlubmVyLnRp
bWVzIHsKKyAgICAgICAgICB8IGlubmVySW5kZXggfAorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0
ZGVycixmaWxlLCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259
OiAje2lubmVySW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVu
Y2hQYXRoLmluc3BlY3R9KSk7IikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
Z2MoKTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQogICAgICAg
ZWxzZQogICAgICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmls
ZVRpbWVkQmVuY2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlv
biBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKQEAgLTE1OTQsNiArMTYyOCwxOSBA
QCBjbGFzcyBPY3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQKIAorY2xhc3MgQ3VzdG9tVGltZWRC
ZW5jaG1hcmsKKyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0aWFsaXplKG5hbWUs
IGZ1bGxQYXRoKQorICAgIEBuYW1lID0gbmFtZQorICAgIEBmdWxsUGF0aCA9IGZ1bGxQYXRoCisg
IGVuZAorICAKKyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisgICAgZW1pdEJlbmNoUnVuQ29kZShm
dWxsbmFtZSwgcGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycy5u
ZXcoZW5zdXJlRmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0iLCBAZnVsbFBhdGgpKSkKKyAgZW5k
CitlbmQKKwogY2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGluY2x1ZGUgQmVuY2htYXJrCiAgIApA
QCAtMzAxMCw2ICszMDU3LDcgQEAgYmVnaW4KICAgICB8IGFyZ3MgfAogICAgIE9DVEFORS5hZGQg
T2N0YW5lQmVuY2htYXJrLm5ldygqYXJncykKICAgfQorICBPQ1RBTkUuYWRkIEN1c3RvbVRpbWVk
QmVuY2htYXJrLm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVOU09VUkNFX09DVEFORV9QQVRIICsg
InNwbGF5LmpzIikudG9fcykKIAogICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0ZS5uZXcoIktyYWtl
biIsIDphcml0aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0YXIiLCAiYXVkaW8tYmVhdC1kZXRl
Y3Rpb24iLCAiYXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgc2V0KFRlc3RXVEZf
U09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5j
cHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25z
LmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFz
aFNldC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNw
cAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRoLmNwcApJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0
Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVz
Q29jb2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2Eu
bW0gKi87IH07CiAJCTBGMkMyMEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3MURDRDU0NDgw
MDU0MkQ5RSAvKiBUaW1lLmNwcCAqLzsgfTsKKwkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8q
IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAgKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZp
ZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVh
dGVKYXZhU2NyaXB0Lm1tICovOyB9OwogCQkwRjRGRkE5RTFFRDNBQTg1MDBGNzExMUYgLyogU25h
cHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFS
ZW5kZXJJbkNvbnRleHQubW0gKi87IH07CiAJCTBGNTY1MUY3MUZDRTREREMwMDMxMEZCQyAvKiBO
b0hpc3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTY1MUY2MUZDRTREREIwMDMxMEZCQyAvKiBOb0hpc3Rv
cnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5tbSAqLzsgfTsKQEAgLTEwNzIsNiArMTA3Myw3IEBACiAJ
CTBGMTM5RTc1MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2Ev
V2Vha09iakNQdHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVB
RjZDNEQwMDdBQjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRo
Tm9XZWJQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcx
RENENTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVC
MUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dl
YlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJl
bmRlckluQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjRGRkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1l
d29yazsgbmFtZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0y
NTkzLDYgKzI1OTUsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNT
dHJpbmcuY3BwICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRl
ci5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1l
dGljT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENv
bmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIg
LyogQ29uZGl0aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jv
c3NUaHJlYWRUYXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0
cmluZy5jcHAgKi8sCkBAIC0zMTc5LDYgKzMxODIsNyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMw
MEZFQkNGMyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUZF
MUQwQTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdE
NTRGMzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25h
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0
aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAv
KiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K25hbWVzcGFjZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlz
IHRoaW5nIHdoYXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJh
Y3RlcnMuCisvLyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6Cisv
LworLy8gK3ggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBh
bmQgYXNzZXJ0cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQg
YW5kIGFzc2VydHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRz
IHRoYXQgJ3gnIGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5v
dCBpbiB0aGUgc2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBD
b25jdXJyZW50UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0g
Y29tbWFuZHM7IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAg
ICAgIHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90
Pihjb21tYW5kWzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZFswXSkgeworICAgICAgICBj
YXNlICcrJzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5hZGQocHRyKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uo
c2V0LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc9JzoKKyAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29u
dGFpbnMocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1Qo
V1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAgICBkb1Rlc3QoIiIpOworfQor
CitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudCkKK3sKKyAgICBk
b1Rlc3QoIit4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBB
ZGRPbmVFbGVtZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4
IXgheCF4IXg9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFk
ZE9uZUVsZW1lbnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgh
eCF4PXgteS0wIXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgiKTsKK30KKworVEVTVChX
VEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzKQoreworICAgIGRvVGVz
dCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtq
K2srbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wr
WitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1z
PWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9
Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRy
SGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIrMSsy
KzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraytsK3or
eCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytW
K0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9
aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1L
PUw9Wj1YPUM9Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8h
cCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFT
IUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIh
dCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFV
IUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkh
MCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFX
IUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQh
NSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2
IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4h
TSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFr
IWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVoh
WCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFk
IWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUch
SCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFp
IW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAh
QSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFl
IXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQh
WSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4
ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0h
USFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNIik7Cit9
CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c0FuZFF1
ZXJ5U29tZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYr
Nys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03
PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4t
bS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6
K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0Mr
VitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1n
PWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9
Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNl
dCwgQWRkU29tZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRUaGVSZXN0QW5kUXVlcnlTb21l
QmVmb3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSsw
K3ErdytlK3IrdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITgh
OSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3
ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUh
NiE3ITghOSEwIXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02
PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWIt
bi1tLVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTSts
K3oreCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1gr
QytWK0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1m
PWc9aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9
Sj1LPUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328274</attachid>
            <date>2017-12-02 18:35:37 -0800</date>
            <delta_ts>2017-12-02 19:31:01 -0800</delta_ts>
            <desc>an even better attempt</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>305801</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIFRoaXMgbG9va3MgbGlrZSBhIDElIFNwZWVkb21ldGVy
CisgICAgICAgIHNwZWVkLXVwLgorICAgICAgICAKKyAgICAgICAgVGhlIGNvbnN0cmFpbnQgc29s
dmVyIHN1cHBvcnRzIHJ1bm5pbmcgY29uc3RyYWludHMgaW4gcGFyYWxsZWwgaW4gdHdvIGRpZmZl
cmVudCB3YXlzOgorICAgICAgICAKKyAgICAgICAgLSBSdW4gbXVsdGlwbGUgY29uc3RyYWludHMg
aW4gcGFyYWxsZWwgdG8gZWFjaCBvdGhlci4gVGhpcyBvbmx5IHdvcmtzIGZvciBjb25zdHJhaW50
cyB0aGF0IGNhbgorICAgICAgICAgIHRvbGVyYXRlIG90aGVyIGNvbnN0cmFpbnRzIHJ1bm5pbmcg
Y29uY3VycmVudGx5IHRvIHRoZW0gKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PQorICAgICAg
ICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCkuIFRoaXMgaXMgdGhlIG1vc3Qg
YmFzaWMga2luZCBvZiBwYXJhbGxlbGlzbSB0aGF0IHRoZQorICAgICAgICAgIGNvbnN0cmFpbnQg
c29sdmVyIHN1cHBvcnRzLiBBbGwgY29uc3RyYWludHMgZXhjZXB0IHRoZSBKU0MgU1BJIGNvbnN0
cmFpbnRzIGFyZSBjb25jdXJyZW50LiBXZQorICAgICAgICAgIGNvdWxkIHByb2JhYmx5IG1ha2Ug
dGhlbSBjb25jdXJyZW50LCBidXQgSSdtIHBsYXlpbmcgaXQgc2FmZSBmb3Igbm93LgorICAgICAg
ICAKKyAgICAgICAgLSBBIGNvbnN0cmFpbnQgY2FuIGNyZWF0ZSBwYXJhbGxlbCB3b3JrIGZvciBp
dHNlbGYsIHdoaWNoIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGludGVybGVhdmUKKyAgICAg
ICAgICB3aXRoIG90aGVyIHN0dWZmLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9ydCB0aGF0IGl0IGhh
cyBwYXJhbGxlbCB3b3JrIGJ5IHJldHVybmluZworICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlvbi4gVGhlbiB0aGUg
c29sdmVyIHdpbGwgYWxsb3cgdGhhdAorICAgICAgICAgIGNvbnN0cmFpbnQncyBkb1BhcmFsbGVs
V29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJrZXIgdGhyZWFkcyBh
cyBhcmUgYXZhaWxhYmxlLAorICAgICAgICAgIGZvciBhcyBsb25nIGFzIHRoYXQgZnVuY3Rpb24g
d2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9zc2libGUgdG8gaGF2
ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBhcmFsbGVsIHdvcmsu
CisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVtZW50ZWQgaW4gdGVy
bXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1cm5zIG91dCB0byBi
ZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAgICAgICAKKyAgICAg
ICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEgU2xvdFZpc2l0b3Iu
IFJ1bm5pbmcgb24gdGhlIG1hcmtlciB0aHJlYWRzIG1lYW5zIGhhdmluZworICAgICAgICAgIGFj
Y2VzcyB0byB0aG9zZSB0aHJlYWRzJyBTbG90VmlzaXRvcnMuIEFsc28sIGl0IG1lYW5zIGxlc3Mg
bG9hZCBiYWxhbmNpbmcuIFRoZSBzb2x2ZXIgd2lsbAorICAgICAgICAgIGNyZWF0ZSB3b3JrIG9u
IGVhY2ggbWFya2luZyB0aHJlYWQncyBTbG90VmlzaXRvci4gV2hlbiB0aGUgc29sdmVyIGlzIGRv
bmUgInN0ZWFsaW5nIiBhIG1hcmtlcgorICAgICAgICAgIHRocmVhZCwgdGhhdCB0aHJlYWQgd2ls
bCBoYXZlIHdvcmsgaXQgY2FuIHN0YXJ0IGRvaW5nIGltbWVkaWF0ZWx5LiBCZWZvcmUgdGhpcyBj
aGFuZ2UsIHdlIGhhZCB0bworICAgICAgICAgIGNvbnRyaWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkg
dGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9iYWwgd29ya2xpc3Qgc28gdGhhdCBpdCBj
b3VsZCBiZQorICAgICAgICAgIGRpc3RyaWJ1dGVkIHRvIHRoZSBtYXJrZXIgdGhyZWFkcyBieSBs
b2FkIGJhbGFuY2luZy4gVGhpcyBjaGFuZ2UgcHJvYmFibHkgaGVscHMgdG8gYXZvaWQgdGhhdAor
ICAgICAgICAgIGxvYWQgYmFsYW5jaW5nIHN0ZXAuCisgICAgICAgIAorICAgICAgICBBIGxvdCBv
ZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcgaXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEg
c3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcworICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0
IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFibGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0
cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQg
Y29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2VkIGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRo
aXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVs
IGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxsb2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMu
CisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJhbGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBv
dXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAg
ICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5l
eHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4uIGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20g
dGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9uZQorICAgICAgICB3aGVuIGl0IHJldHVybnMg
YSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3
YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAgICBkb25lIGlzIGluZGljYXRlZCBieSBudWxs
KS4KKyAgICAgICAgCisgICAgICAgIERldGFpbGVkIGFuYWx5c2lzIG9mIHRoZSBwZXJmb3JtYW5j
ZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBpbmRpY2F0ZSBhIGRlZmluaXRlIDElIFNwZWVkb21l
dGVyCisgICAgICAgIHByb2dyZXNzaW9uIGFuZCBubyBjaGFuZ2Ugb24gSmV0U3RyZWFtLiBJIGhh
dmUgZG9uZSB0aGUgU3BlZWRvbWV0ZXIgY29tcGFyaXNvbiBtYW55IHRpbWVzIG5vdyBhbmQKKyAg
ICAgICAgdGhlIHByb2dyZXNzaW9uIGlzIG5vdyBlYXNpbHkgcmVwcm9kdWNpYmxlIG9uIG15IG1h
Y2hpbmUuIEl0IHN0YXJ0ZWQgaW5pdGlhbGx5IGFzIGFuIHVucmVsaWFibGUKKyAgICAgICAgfjAu
NSUgc3BlZWQtdXAgb24gU3BlZWRvbWV0ZXIgYW5kIGEgcmVsaWFibGUgfjAuNSUgcmVncmVzc2lv
biBvbiBKZXRTdHJlYW0uIEFmdGVyIGZpeGluZyBsb3RzIG9mCisgICAgICAgIGJ1Z3MgaW4gdGhl
IGxvYWQgYmFsYW5jZXIgYW5kIHNvbWUgcmVhbGx5IGZ1bm55IHBhdGhvbG9naWVzLCB0aGUgSmV0
U3RyZWFtIHNjb3JlIGJlY2FtZSBuZXV0cmFsCisgICAgICAgIGFuZCB0aGUgU3BlZWRvbWV0ZXIg
c2NvcmUgZ290IGV2ZW4gYmV0dGVyLiAoV2VpcmRlc3QgcGF0aG9sb2d5IHRoYXQgSSBmaXhlZDog
aWYgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBzY2FuIGNvbnN0cmFpbnQgaXMgcnVuIGJ5IHNv
bWUgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIGFuZCB0aGUgbXV0YXRvciBoYXMgdGhl
IGNvbm4gW3NvCisgICAgICAgIHRoZSBtYWluIHRocmVhZCdzIHRvcCBmcmFtZXMgYXJlIHRoZSBH
QyBpdHNlbGZdIHRoZW4gd2Ugd2lsbCBzY2FuIHRoZSBtYWluIHRocmVhZCB0d2ljZSAtIG9uY2UK
KyAgICAgICAgdXNpbmcgQ3VycmVudFRocmVhZFN0YXRlIFt3aGljaCBjYXJlZnVsbHkgYXZvaWRz
IHNjYW5uaW5nIHRoZSBHQydzIHN0YWNrIGZyYW1lc10gYW5kIG9uY2UgYXMgaWYgaXQKKyAgICAg
ICAgd2FzIGEgcmFuZG9tIG5hdGl2ZSB0aHJlYWQgW3doaWNoIHdpbGwgc2NhbiB0aGUgR0MncyBm
cmFtZXNdOyB0aGUgbGF0dGVyIHNjYW4gd291bGQgcGljayB1cAorICAgICAgICBvYmplY3RzIHRo
YXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGhhZCBjb25zaWRlcmVkIGJ1dCByZWplY3RlZCwgd2hp
Y2ggd291bGQgc29tZXRpbWVzIGxlYWQgdG8KKyAgICAgICAgcnVuYXdheSBHQ3MuIEkgZml4ZWQg
dGhpcyBieSB0ZWFjaGluZyB0aGUgY29uc2VydmF0aXZlIHNjYW4gbm90IHRvIHNjYW4gdGhlIHRo
cmVhZCBydW5uaW5nIEdDCisgICAgICAgIHVzaW5nIHRoZSByYW5kb20gbmF0aXZlIHRocmVhZCBz
Y2FubmluZyBhbGdvcml0aG0uKQorCisgICAgICAgICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQp
OgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVl
VG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3Qu
Y3BwOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlKToKKyAgICAgICAgKiBoZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkZpeHBvaW50UGhhc2UpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
cmVzdW1lVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9y
RWFjaFNsb3RWaXNpdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d29ybGRJc1J1bm5pbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpydW5GdW5jdGlvbkluUGFyYWxsZWwpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6d29ybGRJc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxs
b2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkKToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oOgorICAgICAgICAoSlNDOjps
b2NrRHVyaW5nTWFya2luZyk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJj
ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFwL01h
cmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFyayk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAg
ICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2
ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNCZWdp
bik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpuZXdBY3RpdmVXZWFrU2V0c0VuZCk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1
aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtF
c3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwp
OgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnQ6Omxhc3RFeGVjdXRlUGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6cGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OkV4ZWN1dGlvbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkVmlzaXRT
b21ldGhpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6c2hvdWxkVGltZU91dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkcmFp
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpkaWRFeGVjdXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUpOiBEZWxldGVkLgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
Lmg6CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVy
Z2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9u
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1
dGUpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDogQWRkZWQuCisg
ICAgICAgICogaGVhcC9PcGFxdWVSb290U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9Q
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBhcmFsbGVsU291
cmNlQWRhcHRlcjo6UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50
OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdD
b25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpT
aW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9E
YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZy
b21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBhcmFsbGVsUGFz
c2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZUlmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVl
Um9vdHNJZlByb2ZpdGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VPcGFxdWVSb290cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9T
dWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNv
dXJjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxv
Y2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1
YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL1Zpc2l0Q291bnRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpW
aXNpdENvdW50ZXI6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAqIGhlYXAvVmlzaXRpbmdU
aW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9XZWFrQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKToKKwogMjAxNy0xMS0zMCAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBV
c2UgSlNGaXhlZEFycmF5IGZvciBvcF9uZXdfYXJyYXlfYnVmZmVyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMCwxMyArNTAwLDE2IEBAIGhlYXAv
SklUU3R1YlJvdXRpbmVTZXQuY3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCitoZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCiBoZWFwL01hcmtl
ZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAoraGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0yOTEsNiArMjkwLDcgQEAKIAkJ
MEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8q
IEFpck9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNDBFNEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzM0MUM0
NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBOTFDNDk3Rjc0MDBBNTc3RkEg
LyogQWlyT3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDE1NDVC
MUZEMjBCMjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDE1NDVBMUZEMjBCMUYwMDFCNThG
NiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAx
MzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTMxMiw2ICszMTIsOSBAQAogCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyog
U3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYy
MDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07CisJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAq
LzsgfTsKKwkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhD
NzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEQ4Qzc4MUZDQTNDRkEw
MDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlv
dXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi87IH07
CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTQsNiArMzU3LDcgQEAKIAkJMEY2
Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8q
IEFycmF5UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
OyB9OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IH07CisJCTBGNjQ1MzE4MUZEMjQ2QTcwMDI0
MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NDUzMTUxRkQyNDZBMDAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi87IH07CiAJCTBGNjRCMjcyMUE3ODRCQUYwMDZF
NEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY0QjI3
QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIg
LyogQWlyQXJnSW5saW5lcy5oICovOyB9OwpAQCAtNDQ2LDYgKzQ1MCw4IEBACiAJCTBGOUQzNjk1
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBE
RkdDbGVhblVwUGhhc2UuaCAqLzsgfTsKIAkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovOyB9OwogCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuaCAqLzsgfTsKKwkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAq
LzsgfTsKKwkJMEY5REFBMEExRkQxQzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFB
MDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovOyB9OwogCQkw
RjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyB9
OwogCQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgfTsKIAkJMEY5RkM4QzUx
NEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0OTks
NyArMTUwNSw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1NEQ1
MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVCRjcz
OCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5NzAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21O
YW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFFMDhG
MURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlu
a0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclBy
b3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xOTgxLDcgKzE5ODYsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIw
MEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUx
NzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxh
bklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5l
cy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjM0LDYgKzIyMzgsNyBAQAogCQkwRjNCRDFC
NjFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZH
SW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzFGMTgx
Qjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgcGF0aCA9
IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBw
YXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDE1NDVBMUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludENvbmN1cnJlbmN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
bHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI3MCw2ICsyMjc1LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAv
KiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJT
YW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5E
dW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5NzMwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzczMUZD
N0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1
NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRE
NzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDEsNiArMjM1MCw4IEBACiAJCTBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJyYXlNb2RlLmNw
cDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0Fy
cmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY0NTMxNTFGRDI0NkEw
MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlTd2l0Y2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRj
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwMyw2ICsyNTE0
LDkgQEAKIAkJMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQuaDsg
cGF0aCA9IGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5jcHA7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBGMUMzRTJD
NzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgcGF0
aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURB
QTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
cmFsbGVsU291cmNlQWRhcHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlF
MzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00MjY3LDcgKzQyODEsNiBAQAogCQlBREQwOUFGMzFGNjI0ODJF
MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAv
KiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5MzFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NDFFMDhGMUM5MDA1
OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmg7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk1MUUw
OEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0
b3IuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MTcsNiArNTUzMCw4IEBACiAJCQkJMEZEQ0UxMjgx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEy
RUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYy
MTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNDE1NDVB
MUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLywKKwkJCQkwRjRE
OEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJ
MEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJ
CQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2
RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjExLDE3ICs1NjI2LDIz
IEBACiAJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
Ki8sCiAJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcCAqLywKIAkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnRTZXQuaCAqLywKKwkJCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwICovLAorCQkJCTBGOURBQTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJr
U3RhY2suaCAqLywKKwkJCQkwRjY0NTMxNjFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAvKiBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3
QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJG
RCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oICovLAorCQkJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLywKIAkJCQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyog
UHJldmVudENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIw
OCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8q
IFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4
MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYw
MDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMy
QiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTU2NDMsNyArNTY2NCw3IEBACiAJCQkJ
MEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxv
b21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRp
b25hbEZpbmFsaXplci5oICovLAotCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNp
dGluZ1RpbWVvdXQuaCAqLywKKwkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgw
MDAsNiArODAyMSw3IEBACiAJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNp
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUNGOTg5MUU5RUQ2NTIwMEMxODY5MiAvKiBBaXJT
dGFja0FsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDE1NDVCMUZEMjBC
MjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MjAwLDYgKzgyMjIsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcw
MDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEz
QkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIz
RUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJy
aWVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q2FsbERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODI5Myw2ICs4MzE2LDcgQEAKIAkJCQlBNzdB
NDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY0NTMxODFGRDI0
NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg3NjgsNiArODc5Miw3IEBACiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8q
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtODkxNiw2ICs4OTQxLDcgQEAKIAkJCQlBNzQ4MkU5MzEx
NkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQz
MkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVD
NjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4
NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVy
cyAqLywKQEAgLTkwMzUsOSArOTA2MSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZG
IC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNB
M0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVS
b290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyog
T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0Myw2ICs5MjY5LDcgQEAK
IAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEExRkQxQzNE
MzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjgzLDcgKzkzMTAsNiBAQAogCQkJCTBGNkM3MzUxMUFD
OUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGlt
ZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYw
IC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyog
Vk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Miw3ICs5NzIsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRX
ZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQg
PSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAg
IGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNo
b3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGlj
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAogCiBib29sIENvZGVCbG9jazo6c2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewotICAg
IGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTExMzks
MTAgKzExMzksMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwog
I2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRp
b24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4g
JiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJh
bnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwpAQCAt
MTI0NiwxNCArMTI0NiwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5j
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8
Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGFs
bEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29t
bW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVS
ZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChk
ZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewogICAgICAgICAg
ICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3Bs
YW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93biBy
aWdodFRvUnVuLgotICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcGVk
IGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJlYWQo
Jm1fZGF0YSk7CiAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxlZCkg
ewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAu
d29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3Rv
cHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBs
YW5zLmFwcGVuZChtX3BsYW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFwLndv
cmxkSXNTdG9wcGVkKCkpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3BsYW5Db21waWxlZC5u
b3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAo
c2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgu
bV92bS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwogICAgIAogICAgIGlmIChzdGF0ZS5hbGxvY2F0
aW9uRmFpbGVkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDEyICs2NiwxMiBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+Ci1pbmxpbmUgdm9pZCBDb25zZXJ2YXRp
dmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIodm9pZCogcCwgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKK2lubGlu
ZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgbWFy
a0hvb2subWFyayhwKTsKIAogICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2ludGVyc0Zvck1h
cmtpbmcoCi0gICAgICAgIG1faGVhcCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwgcCwKKyAgICAg
ICAgbV9oZWFwLCBtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBmaWx0ZXIs
IHAsCiAgICAgICAgIFsmXSAodm9pZCogcCkgewogICAgICAgICAgICAgaWYgKG1fc2l6ZSA9PSBt
X2NhcGFjaXR5KQogICAgICAgICAgICAgICAgIGdyb3coKTsKQEAgLTk1LDggKzk1LDkgQEAgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogCiAgICAgVGlueUJsb29tRmls
dGVyIGZpbHRlciA9IG1faGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigpOyAvLyBN
YWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8gc2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3Qg
YWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxsb2NhdGVkLgogICAgIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uID0gbV9oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKTsKKyAg
ICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBtX2hlYXAub2JqZWN0U3BhY2Uo
KS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICBmb3IgKGNoYXIqKiBpdCA9IHN0YXRpY19j
YXN0PGNoYXIqKj4oYmVnaW4pOyBpdCAhPSBzdGF0aWNfY2FzdDxjaGFyKio+KGVuZCk7ICsraXQp
Ci0gICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwg
bWFya0hvb2spOworICAgICAgICBnZW5lcmljQWRkUG9pbnRlcigqaXQsIG1hcmtpbmdWZXJzaW9u
LCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGZpbHRlciwgbWFya0hvb2spOwogfQogCiBjbGFzcyBE
dW1teU1hcmtIb29rIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+Ci0gICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgSGVhcFZlcnNpb24s
IFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKKyAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVy
KHZvaWQqLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29rJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXJrSG9vaz4KICAgICB2b2lkIGdlbmVyaWNBZGRTcGFuKHZvaWQqLCB2b2lk
KiBlbmQsIE1hcmtIb29rJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
dHJhaW50Q29uY3VycmVuY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3Ry
YWludENvbmN1cnJlbmN5IDogdWludDhfdCB7CisgICAgU2VxdWVudGlhbCwKKyAgICBDb25jdXJy
ZW50Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitp
bmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWlu
dENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQoreworICAgIHN3aXRjaCAoY29uY3VycmVuY3kpIHsK
KyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsOgorICAgICAg
ICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlND
OjpDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQ6CisgICAgICAgIG91dC5wcmludCgi
Q29uY3VycmVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxs
ZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7CisgICAg
U2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAgICBz
d2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDoK
KyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVu
dGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSwxMiArMjA5LDExIEBAIGlubGluZSBjb25zdCBUIEdDU2VnbWVudGVkQXJyYXk8VD46OnJlbW8K
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogaW5saW5lIGJvb2wgR0NTZWdtZW50ZWRBcnJheTxUPjo6
aXNFbXB0eSgpCiB7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIGJlIHNhZmUgdG8gY2FsbCBjb25j
dXJyZW50bHkuIEl0J3MgaW1wb3J0YW50IHRvIHByZXNlcnZlIHRoYXQgY2FwYWJpbGl0eS4KICAg
ICBpZiAobV90b3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9zZWdtZW50cy5o
ZWFkKCktPm5leHQoKSkgewotICAgICAgICBBU1NFUlQobV9zZWdtZW50cy5oZWFkKCktPm5leHQo
KS0+bV90b3AgPT0gc19zZWdtZW50Q2FwYWNpdHkpOworICAgIGlmIChtX3NlZ21lbnRzLmhlYWQo
KS0+bmV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTWFjaGlu
ZVN0YWNrTWFya2VyLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIK
ICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkU3Bh
Y2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKQEAgLTY2LDYg
KzY3LDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtl
ZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgi
CiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjgxLDcgKzI4Myw3IEBAIEhlYXA6OkhlYXAoVk0qIHZt
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFr
ZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0
YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJr
U3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3Ry
YWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwg
bV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0
aGlzKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFr
ZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjpt
YWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTU5NCw3ICs1OTYsNyBAQCB2b2lk
IEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDCiAgICAgICAgIGZ1bmMoY29kZUJs
b2NrKTsKIH0KIAotdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQordm9p
ZCBIZWFwOjphc3NlcnRNYXJrU3RhY2tzRW1wdHkoKQogewogICAgIGJvb2wgb2sgPSB0cnVlOwog
ICAgIApAQCAtNjA4LDEyICs2MTAsMjEgQEAgdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3Rh
Y2tzRW1wdHkoKQogICAgICAgICBvayA9IGZhbHNlOwogICAgIH0KICAgICAKKyAgICBmb3JFYWNo
U2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBWaXNpdG9yICIsIFJhd1Bv
aW50ZXIoJnZpc2l0b3IpLCAiIGlzIG5vdCBlbXB0eSFcbiIpOworICAgICAgICAgICAgb2sgPSBm
YWxzZTsKKyAgICAgICAgfSk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQob2spOwogfQogCiB2
b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewot
ICAgIG1fbWFjaGluZVRocmVhZHMtPmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9q
aXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MsIG1fY3VycmVudFRocmVhZFN0YXRlKTsKKyAg
ICBtX21hY2hpbmVUaHJlYWRzLT5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0
U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzLCBtX2N1cnJlbnRUaHJlYWRTdGF0ZSwgbV9jdXJy
ZW50VGhyZWFkKTsKIH0KIAogdm9pZCBIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0
aXZlUm9vdHMmIHJvb3RzKQpAQCAtNzMwLDcgKzc0MSw3IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2lu
ZygpCiAgICAgICAgICAgICB2aXNpdG9yLnJlc2V0KCk7CiAgICAgICAgIH0pOwogCi0gICAgYXNz
ZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CisgICAgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7
CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKQEAgLTkxMSw3ICs5MjIsNyBA
QCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVy
c0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8v
IER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0
IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxs
IG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmplY3Qu
IElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBh
ZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0
LDE1ICs5MzUsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQog
ICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAg
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMg
b3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBp
c01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2Ug
ZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1h
cmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nh
bm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21p
Y0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUg
b2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAgICAg
ICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRo
aXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtlZENv
bmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAgICAg
ICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAgIC8v
IGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAgICAg
ICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlm
ZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBi
bGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sg
Y29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShD
ZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk1OSw3IEBAIHZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8v
IEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0
ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3Mg
T0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ug
d2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0x
MDkxLDYgKzExMDIsNyBAQCBhdXRvIEhlYXA6OnJ1bkN1cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciBj
CiB7CiAgICAgY2hlY2tDb25uKGNvbm4pOwogICAgIG1fY3VycmVudFRocmVhZFN0YXRlID0gY3Vy
cmVudFRocmVhZFN0YXRlOworICAgIG1fY3VycmVudFRocmVhZCA9ICZXVEY6OlRocmVhZDo6Y3Vy
cmVudCgpOwogICAgIAogICAgIGlmIChjb25uID09IEdDQ29uZHVjdG9yOjpNdXRhdG9yKQogICAg
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0oKSk7CkBAIC0xMjgzLDEzICsxMjk1LDExIEBAIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICB9CiAgICAgICAgIAog
ICAgIGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgbV9v
cGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAgICAgCiAgICAgICAgIG1fc2NoZWR1
bGVyLT5kaWRSZWFjaFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgYXNzZXJ0
U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0
b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRv
ciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3It
Pm1lcmdlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgCisgICAgICAgIGFzc2VydE1hcmtTdGFja3NF
bXB0eSgpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRvckRp
ZFJ1biBpbnRvIGFjY291bnQgd2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxpa2Vs
eSwKICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIHJvb3QgY29uc3RyYWludHMg
YWdhaW4gdW5sZXNzIHRoZSBtdXRhdG9yIGRpZCBydW4uIEF0IGEKQEAgLTEyOTcsMTcgKzEzMDcs
MTQgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAv
LyBlc3RpbWF0ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjgyOAogICAgICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZCB0aW1lb3V0LiBUaGlzIG9u
bHkgY29tZXMKLSAgICAgICAgLy8gaW50byBwbGF5IGlmIHdlJ3JlIGV4ZWN1dGluZyBjb25zdHJh
aW50cyBmb3IgdGhlIGZpcnN0IHRpbWUuIEJ1dCB0aGF0IHdpbGwgbWF0dGVyCi0gICAgICAgIC8v
IHdoZW4gd2UgaGF2ZSBkZWVwIHN0YWNrcyBvciBhIGxvdCBvZiBET00gc3R1ZmYuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzEKLSAgICAg
ICAgICAgIAogICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAg
ICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCku
Ci0gICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+
ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKKyAgICAgICAgYm9vbCBjb252ZXJnZWQgPSBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252
ZXJnZW5jZShzbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlIHNs
b3RWaXNpdG9yLmlzRW1wdHkoKSBjaGVjayBpcyBtb3N0IGxpa2VseSBub3QgbmVlZGVkLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzEwCiAg
ICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgIGFzc2VydE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzMjQsNiAr
MTMzMSwxNSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAg
ICAgIAogICAgIG1fc2NoZWR1bGVyLT5zeW5jaHJvbm91c0RyYWluaW5nRGlkU3RhbGwoKTsKIAor
ICAgIC8vIFRoaXMgaXMga2luZGEgdHJpY2t5LiBUaGUgdGVybWluYXRpb24gY2hlY2sgbG9va3Mg
YXQ6CisgICAgLy8KKyAgICAvLyAtIFdoZXRoZXIgdGhlIG1hcmtpbmcgdGhyZWFkcyBhcmUgYWN0
aXZlLiBJZiB0aGV5IGFyZSBub3QsIHRoaXMgbWVhbnMgdGhhdCB0aGUgbWFya2luZyB0aHJlYWRz
JworICAgIC8vICAgU2xvdFZpc2l0b3JzIGFyZSBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IGNvbGxlY3RvcidzIHNsb3QgdmlzaXRvciBpcyBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IHNoYXJlZCBtYXJrIHN0YWNrcyBhcmUgZW1wdHkuCisgICAgLy8KKyAgICAvLyBUaGlzIGRvZXNu
J3QgaGF2ZSB0byBjaGVjayB0aGUgbXV0YXRvciBTbG90VmlzaXRvciBiZWNhdXNlIHRoYXQgb25l
IGJlY29tZXMgZW1wdHkgYWZ0ZXIgZXZlcnkgR0MKKyAgICAvLyB3b3JrIGluY3JlbWVudCwgc28g
aXQgbXVzdCBiZSBlbXB0eSBub3cuCiAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWlu
YXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxvb3Bpbmcg
dG8gdGhlIHRvcCBpZiBydW5GaXhwb2ludFBoYXNlKCkuCiAgICAgICAgIApAQCAtMTQ4OSw2ICsx
NTA1LDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogICAgIGlm
IChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhjb25uLCAiOiBHb2luZyB0byBwaGFzZTogIiwgbV9u
ZXh0UGhhc2UsICIgKGZyb20gIiwgbV9jdXJyZW50UGhhc2UsICIpXG4iKTsKICAgICAKKyAgICBt
X3BoYXNlVmVyc2lvbisrOworICAgIAogICAgIGJvb2wgc3VzcGVuZGVkQmVmb3JlID0gd29ybGRT
aG91bGRCZVN1c3BlbmRlZChtX2N1cnJlbnRQaGFzZSk7CiAgICAgYm9vbCBzdXNwZW5kZWRBZnRl
ciA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQobV9uZXh0UGhhc2UpOwogICAgIApAQCAtMTUyNiw3
ICsxNTQ0LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogCiB2
b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgY29ubikKIHsKLSAgICBpZiAo
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmIChtX3dv
cmxkSXNTdG9wcGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiB3b3JsZCBhbHJlYWR5IHN0
b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0xNTM3LDcgKzE1NTUsNyBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25k
dWN0b3IgCiAgICAgbV9tdXRhdG9yRGlkUnVuID0gZmFsc2U7CiAKICAgICBzdXNwZW5kQ29tcGls
ZXJUaHJlYWRzKCk7Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCA9IHRydWU7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IHRydWU7CiAKICAgICBmb3JFYWNoU2xv
dFZpc2l0b3IoCiAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CkBAIC0x
NTc0LDExICsxNTkyLDExIEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OnJlc3VtZVRoZVBlcmlw
aGUKICAgICAKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAwOwogICAgIAotICAgIGlmICghbV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmICghbV93b3Js
ZElzU3RvcHBlZCkgewogICAgICAgICBkYXRhTG9nKCJGYXRhbDogY29sbGVjdG9yIGRvZXMgbm90
IGJlbGlldmUgdGhhdCB0aGUgd29ybGQgaXMgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IGZhbHNl
OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZDogd2Ug
d2FudCB0byBncmFiIHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQogICAgIC8v
IGJlY29tZSBhdmFpbGFibGUuIFdlIGJhc2ljYWxseSB3YW50IGEgbG9ja0FueSgpIG1ldGhvZCB0
aGF0IHdpbGwgbG9jayB3aGF0ZXZlciBsb2NrIGlzIGF2YWlsYWJsZQpAQCAtMjU3OCw3ICsyNTk2
LDExIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDAp
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKKyAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNl
VGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAg
ICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAt
MjU4NywxMiArMjYwOSwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
ICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNpb247CiAgICAgICAgIH0sCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsyNjM3
LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAg
ICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
ICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjYy
MSw3ICsyNjQ1LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwpA
QCAtMjY0MSwyMSArMjY2NSwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIg
Um91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVjdFNw
YWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwK
LSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
ICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xv
dFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjg4LDcgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAgICAg
ICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJl
bmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2ODQsNyArMjcwOCw3IEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAogICAgICAg
ICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdzIGJs
YWNrLgpAQCAtMjY5NSwyMyArMjcxOSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXll
ZCk7CiAgICAgCi0gICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCi0gICAgICAgICJNcm1zIiwgIk11
dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKLSAgICAgICAgICAgIC8vIEluZGlj
YXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKLSAgICAgICAgICAg
IHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3Rh
Y2stPnNpemUoKTsKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXpl
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiKCIsIHNpemUsICIpIik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOwotICAgICAgICAgICAgbV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHNs
b3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewotICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludD4oKnRoaXMpKTsKIH0KIAogdm9pZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQpCkBAIC0yNzk0LDE2
ICsyODAyLDYgQEAgdm9pZCBIZWFwOjphbGxvd0NvbGxlY3Rpb24oKQogICAgIG1fY29sbGVjdENv
bnRpbnVvdXNseUxvY2sudW5sb2NrKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgZnVu
YygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0
b3IpOwotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TXV0YXRv
clNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5j
ZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCArMjg0NSwyNCBAQCB2b2lkIEhlYXA6OnJlbW92ZUhlYXBG
aW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJlbW92ZUZp
cnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBIZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgbV9ib251c1Zpc2l0b3JUYXNrID0g
dGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwor
dm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiB0YXNrKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxSZWZDb3VudCA9IHRhc2st
PnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5y
dW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVs
bHB0cik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011
dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2stPnJlZkNvdW50KCkgPiBpbml0aWFsUmVmQ291bnQp
CisgICAgICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KG1fbWFya2luZ011
dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi
V2Vha0hhbmRsZU93bmVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgog
I2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNzMsNiArNzQsNyBA
QCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFj
aGluZVRocmVhZHM7CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKK2NsYXNzIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogY2xhc3MgTWFya2VkQXJndW1l
bnRCdWZmZXI7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKQEAgLTExNCw3ICsxMTYsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9
IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRp
YyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAg
c3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xNTQsNyArMTU1LDggQEAg
cHVibGljOgogICAgIE11dGF0b3JTdGF0ZSBtdXRhdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X211dGF0b3JTdGF0ZTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBjb2xs
ZWN0aW9uU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3Rpb25TY29wZTsgfQogICAgIGJv
b2wgaGFzSGVhcEFjY2VzcygpIGNvbnN0OwotICAgIGJvb2wgY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNTdG9wcGVkKCkgY29u
c3Q7CisgICAgYm9vbCB3b3JsZElzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuICF3b3JsZElzU3Rv
cHBlZCgpOyB9CiAKICAgICAvLyBXZSdyZSBhbHdheXMgYnVzeSBvbiB0aGUgY29sbGVjdGlvbiB0
aHJlYWRzLiBPbiB0aGUgbWFpbiB0aHJlYWQsIHRoaXMgcmV0dXJucyB0cnVlIGlmIHdlJ3JlCiAg
ICAgLy8gaGVscGluZyBoZWFwLgpAQCAtMzQ5LDYgKzM1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFsbG93Q29sbGVjdGlvbigpOwogICAgIAogICAgIHVpbnQ2NF90IG11dGF0b3JFeGVjdXRpb25W
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbjsgfQorICAg
IHVpbnQ2NF90IHBoYXNlVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2VWZXJzaW9uOyB9
CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTM1OCw2ICszNjEs
MTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNv
bnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQgcmVtb3ZlSGVhcEZpbmFsaXpl
ckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOworICAgIAorICAgIHZvaWQg
cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4p
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBydW5GdW5jdGlv
bkluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHJ1blRhc2tJblBh
cmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPihmdW5jKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRp
bmdTY29wZTsKQEAgLTM3Myw2ICszODcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBI
ZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9j
azsKQEAgLTUyNSw4ICs1NDAsMTAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB2b2lkIGFzc2VydFNoYXJl
ZE1hcmtTdGFja3NFbXB0eSgpOworICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAK
KyAgICB2b2lkIHNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4pOworICAgIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAg
Y29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5
Y2xlOwpAQCAtNTc5LDkgKzU5Niw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFNsb3RWaXNpdG9y
Kj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9yczsKICAgICBMb2NrIG1fcGFyYWxsZWxT
bG90VmlzaXRvckxvY2s7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJik7Ci0KICAgICBIYW5kbGVTZXQgbV9o
YW5kbGVTZXQ7CiAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUJsb2NrU2V0PiBtX2NvZGVCbG9ja3M7CkBAIC02MzMsOCArNjQ3LDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAg
fTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CiAKLSAg
ICBMb2NrIG1fb3BhcXVlUm9vdHNNdXRleDsKLSAgICBIYXNoU2V0PGNvbnN0IHZvaWQqPiBtX29w
YXF1ZVJvb3RzOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdHM7CiAKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCkBAIC02
NDIsNiArNjU1LDcgQEAgcHJpdmF0ZToKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25h
bEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKIAogICAgIFBhcmFs
bGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+IG1fYm9udXNWaXNpdG9yVGFzazsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2NhdGVkIHsgMCB9OwpAQCAt
NjU3LDcgKzY3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5lZWRG
aW5hbGl6ZUJpdCA9IDF1IDw8IDR1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9y
V2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMg
YXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3Rh
dGU7Ci0gICAgYm9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fd29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIE1vbm90
b25pY1RpbWUgbV9iZWZvcmVHQzsKICAgICBNb25vdG9uaWNUaW1lIG1fYWZ0ZXJHQzsKICAgICBN
b25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CkBAIC02NzIsNiArNjg2LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fdGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JE
aWRSdW4geyB0cnVlIH07CiAgICAgdWludDY0X3QgbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbiB7
IDAgfTsKKyAgICB1aW50NjRfdCBtX3BoYXNlVmVyc2lvbiB7IDAgfTsKICAgICBCb3g8TG9jaz4g
bV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fdGhy
ZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3YWl0IG9uIHRoaXMuIEl0IHdv
dWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJl
YWQ7CkBAIC02OTMsNiArNzA4LDcgQEAgcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9iYXJyaWVy
c0V4ZWN1dGVkIHsgMCB9OwogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50
VGhyZWFkU3RhdGUgeyBudWxscHRyIH07CisgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVh
ZCB7IG51bGxwdHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2lu
dGVyLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDMwICs2Mywy
MCBAQCBpbmxpbmUgYm9vbCBIZWFwOjpoYXNIZWFwQWNjZXNzKCkgY29uc3QKICAgICByZXR1cm4g
bV93b3JsZFN0YXRlLmxvYWQoKSAmIGhhc0FjY2Vzc0JpdDsKIH0KIAotaW5saW5lIGJvb2wgSGVh
cDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdAoraW5saW5l
IGJvb2wgSGVhcDo6d29ybGRJc1N0b3BwZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOworICAgIHJldHVybiBtX3dvcmxkSXNT
dG9wcGVkOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gaW5zdGFuY2UgbWV0aG9k
LCBzbyB0aGF0IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJzaW9uKCkgcXVpY2tseS4KKy8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5ODgKIEFMV0FZU19JTkxJ
TkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFTU0VS
VChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwt
PmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRp
b24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJs
b2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgpLT5o
ZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdDZWxs
KQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2Vs
bCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBj
ZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBibG9j
ayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29uY3Vy
cmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1Zl
cnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCktPmhl
YXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlTX0lO
TElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkBAIC05NSw3ICs4NSw3IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2UKICAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRp
b24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLnRlc3RBbmRTZXRN
YXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwot
ICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeSA9IGJsb2NrLmFib3V0VG9NYXJrKG1hcmtpbmdWZXJz
aW9uKTsKKyAgICBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSA9IGJsb2NrLmFib3V0VG9NYXJr
KG1hcmtpbmdWZXJzaW9uKTsKICAgICByZXR1cm4gYmxvY2sudGVzdEFuZFNldE1hcmtlZChjZWxs
LCBkZXBlbmRlbmN5KTsKIH0KIApAQCAtMTc5LDE5ICsxNjksMTkgQEAgaW5saW5lIHZvaWQgSGVh
cDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPAogCiBpbmxpbmUgdm9pZCBIZWFwOjppbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0K
IAogaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNT
RVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBl
ZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OmRlY3Jl
bWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2Rl
ZmVycmFsRGVwdGgtLTsKICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9kaWREZWZlckdDV29yaykp
IHsKQEAgLTI2OSw0ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5
KCkKICAgICAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgordm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykK
K3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2sp
OworICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIGZ1bmMoKm1fbXV0YXRv
clNsb3RWaXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNs
b3RWaXNpdG9ycykKKyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1
aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBT
bmFwc2hvdEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNyBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3QoCiB2b2lk
IEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQogewogICAgIEFT
U0VSVChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOwotICAgIEFT
U0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6
OmlzTWFya2VkKGNlbGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGluZ05vZGVGb3JDZWxsKGNlbGwp
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
VXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGls
LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBV
dGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAgcHVibGljOgogICAgIC8vIGJl
Zm9yZSBsaXZlbmVzcyBkYXRhIGlzIGNsZWFyZWQgdG8gYmUgYWNjdXJhdGUuCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KICAgICBzdGF0aWMgdm9pZCBmaW5kR0NPYmplY3RQb2ludGVyc0Zv
ck1hcmtpbmcoCi0gICAgICAgIEhlYXAmIGhlYXAsIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
LCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCB2b2lkKiBwYXNzZWRQb2ludGVyLAotICAgICAgICBj
b25zdCBGdW5jJiBmdW5jKQorICAgICAgICBIZWFwJiBoZWFwLCBIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0
ZXIgZmlsdGVyLAorICAgICAgICB2b2lkKiBwYXNzZWRQb2ludGVyLCBjb25zdCBGdW5jJiBmdW5j
KQogICAgIHsKICAgICAgICAgY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JiBzZXQgPSBoZWFw
Lm9iamVjdFNwYWNlKCkuYmxvY2tzKCkuc2V0KCk7CiAgICAgICAgIApAQCAtODgsNyArODgsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgJiYgc2V0LmNvbnRhaW5zKHByZXZpb3VzQ2FuZGlk
YXRlKQogICAgICAgICAgICAgICAgICYmIHByZXZpb3VzQ2FuZGlkYXRlLT5oYW5kbGUoKS5jZWxs
S2luZCgpID09IEhlYXBDZWxsOjpBdXhpbGlhcnkpIHsKICAgICAgICAgICAgICAgICBwcmV2aW91
c1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocHJldmlvdXNDYW5kaWRhdGUtPmhhbmRsZSgp
LmNlbGxBbGlnbihwcmV2aW91c1BvaW50ZXIpKTsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlv
dXNDYW5kaWRhdGUtPmhhbmRsZSgpLmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIGlzTWFya2lu
ZywgcHJldmlvdXNQb2ludGVyKSkKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNDYW5kaWRh
dGUtPmhhbmRsZSgpLmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbiwgaXNNYXJraW5nLCBwcmV2aW91c1BvaW50ZXIpKQogICAgICAgICAgICAgICAgICAgICBm
dW5jKHByZXZpb3VzUG9pbnRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwMiw3
ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAg
ICBhdXRvIHRyeVBvaW50ZXIgPSBbJl0gKHZvaWQqIHBvaW50ZXIpIHsKLSAgICAgICAgICAgIGlm
IChjYW5kaWRhdGUtPmhhbmRsZSgpLmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIGlzTWFya2lu
ZywgcG9pbnRlcikpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5oYW5kbGUoKS5pc0xpdmVD
ZWxsKG1hcmtpbmdWZXJzaW9uLCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGlzTWFya2luZywgcG9p
bnRlcikpCiAgICAgICAgICAgICAgICAgZnVuYyhwb2ludGVyKTsKICAgICAgICAgfTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc05ld2x5QWxsb2NhdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc05ld2x5QWxsb2NhdGVkOyB9
CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzTWFya2VkKEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQotICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFy
a2VkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVh
cFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3lGZW5jZSkgeyByZXR1cm4g
aXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lv
biwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7
IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxvY2F0ZWQoKTsgfQogICAgIAogICAgIGJv
b2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZENlbGw7IH0KQEAgLTEx
MCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRl
cyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgIAotICAg
IERlcGVuZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24pIHsgcmV0dXJuIG51bGxEZXBlbmRl
bmN5KCk7IH0KKyAgICBEZXBlbmRlbmN5RmVuY2UgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24pIHsg
cmV0dXJuIERlcGVuZGVuY3lGZW5jZSgpOyB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBib29s
IHRlc3RBbmRTZXRNYXJrZWQoKQogICAgIHsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIG1faXNNYXJrZWQuY29tcGFy
ZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKICAgICB9Ci0gICAgQUxXQVlTX0lOTElORSBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcENlbGwqLCBEZXBlbmRlbmN5KSB7IHJldHVybiB0ZXN0
QW5kU2V0TWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdGVzdEFuZFNldE1hcmtl
ZChIZWFwQ2VsbCosIERlcGVuZGVuY3lGZW5jZSkgeyByZXR1cm4gdGVzdEFuZFNldE1hcmtlZCgp
OyB9CiAgICAgdm9pZCBjbGVhck1hcmtlZCgpIHsgbV9pc01hcmtlZC5zdG9yZShmYWxzZSk7IH0K
ICAgICAKICAgICB2b2lkIG5vdGVNYXJrZWQoKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9ja0R1cmluZ01hcmtpbmcuaAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9ja0R1cmluZ01hcmtpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMywxNCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIFVzZSB0aGlzIGxvY2sgc2Nv
cGUgbGlrZSBzbzoKIC8vIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcoaGVhcCwgbG9j
ayk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLUxvY2tlcjxMb2NrVHlwZT4gbG9ja0R1
cmluZ01hcmtpbmcoSGVhcCYgaGVhcCwgTG9ja1R5cGUmIHBhc3NlZExvY2spCithdXRvIGxvY2tE
dXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNzZWRMb2NrKQogewotICAgIExv
Y2tUeXBlKiBsb2NrOwotICAgIGlmIChoZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpKQotICAg
ICAgICBsb2NrID0gJnBhc3NlZExvY2s7Ci0gICAgZWxzZQotICAgICAgICBsb2NrID0gbnVsbHB0
cjsKLSAgICByZXR1cm4gTG9ja2VyPExvY2tUeXBlPihsb2NrKTsKKyAgICByZXR1cm4gaG9sZExv
Y2tJZihwYXNzZWRMb2NrLCBoZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNSw3ICsxMzUsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRT
CiAgICAgKnNpemUgKz0gc3RhY2suc2Vjb25kOwogfQogCi1ib29sIE1hY2hpbmVUaHJlYWRzOjp0
cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgdm9p
ZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKK2Jvb2wgTWFjaGluZVRo
cmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplLCBUaHJlYWQm
IGN1cnJlbnRUaHJlYWRGb3JHQykKIHsKICAgICAvLyBQcmV2ZW50IHR3byBWTXMgZnJvbSBzdXNw
ZW5kaW5nIGVhY2ggb3RoZXIncyB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUsCiAgICAgLy8gd2hp
Y2ggY2FuIGNhdXNlIGRlYWRsb2NrOiA8cmRhcjovL3Byb2JsZW0vMjAzMDA4NDI+LgpAQCAtMTQ1
LDEzICsxNDUsMTQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkUwog
ICAgICpzaXplID0gMDsKIAogICAgIFRocmVhZCYgY3VycmVudFRocmVhZCA9IFRocmVhZDo6Y3Vy
cmVudCgpOwotICAgIGNvbnN0IGF1dG8mIHRocmVhZHMgPSBtX3RocmVhZEdyb3VwLT50aHJlYWRz
KGxvY2tlcik7CisgICAgY29uc3QgTGlzdEhhc2hTZXQ8UmVmPFRocmVhZD4+JiB0aHJlYWRzID0g
bV90aHJlYWRHcm91cC0+dGhyZWFkcyhsb2NrZXIpOwogICAgIEJpdFZlY3RvciBpc1N1c3BlbmRl
ZCh0aHJlYWRzLnNpemUoKSk7CiAKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsK
LSAgICAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiB0aHJlYWRzKSB7Ci0gICAgICAgICAgICBpZiAo
dGhyZWFkLmdldCgpICE9IGN1cnJlbnRUaHJlYWQpIHsKKyAgICAgICAgZm9yIChjb25zdCBSZWY8
VGhyZWFkPiYgdGhyZWFkIDogdGhyZWFkcykgeworICAgICAgICAgICAgaWYgKHRocmVhZC5nZXQo
KSAhPSBjdXJyZW50VGhyZWFkCisgICAgICAgICAgICAgICAgJiYgdGhyZWFkLmdldCgpICE9IGN1
cnJlbnRUaHJlYWRGb3JHQykgewogICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFk
LT5zdXNwZW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgICAg
ICAgICAgaXNTdXNwZW5kZWQuc2V0KGluZGV4KTsKQEAgLTE5OSw3ICsyMDAsNyBAQCBzdGF0aWMg
dm9pZCBncm93QnVmZmVyKHNpemVfdCBzaXplLCB2b2lkCiAgICAgKmJ1ZmZlciA9IGZhc3RNYWxs
b2MoKmNhcGFjaXR5KTsKIH0KIAotdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyQ29uc2VydmF0
aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91
dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MsIEN1cnJl
bnRUaHJlYWRTdGF0ZSogY3VycmVudFRocmVhZFN0YXRlKQordm9pZCBNYWNoaW5lVGhyZWFkczo6
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJv
b3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNv
ZGVCbG9ja3MsIEN1cnJlbnRUaHJlYWRTdGF0ZSogY3VycmVudFRocmVhZFN0YXRlLCBUaHJlYWQq
IGN1cnJlbnRUaHJlYWQpCiB7CiAgICAgaWYgKGN1cnJlbnRUaHJlYWRTdGF0ZSkKICAgICAgICAg
Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoY29uc2VydmF0aXZlUm9vdHMsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2NrcywgKmN1cnJlbnRUaHJlYWRTdGF0ZSk7CkBAIC0yMDgsNyArMjA5LDcgQEAg
dm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyQ29uc2VydmF0aXZlUgogICAgIHNpemVfdCBjYXBh
Y2l0eSA9IDA7CiAgICAgdm9pZCogYnVmZmVyID0gbnVsbHB0cjsKICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fdGhyZWFkR3JvdXAtPmdldExvY2soKSk7Ci0gICAgd2hpbGUgKCF0cnlDb3B5
T3RoZXJUaHJlYWRTdGFja3MobG9ja2VyLCBidWZmZXIsIGNhcGFjaXR5LCAmc2l6ZSkpCisgICAg
d2hpbGUgKCF0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MobG9ja2VyLCBidWZmZXIsIGNhcGFjaXR5
LCAmc2l6ZSwgKmN1cnJlbnRUaHJlYWQpKQogICAgICAgICBncm93QnVmZmVyKHNpemUsICZidWZm
ZXIsICZjYXBhY2l0eSk7CiAKICAgICBpZiAoIWJ1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiBwdWJs
aWM6CiAgICAgTWFjaGluZVRocmVhZHMoKTsKIAotICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1Nl
dCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSopOworICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYs
IEN1cnJlbnRUaHJlYWRTdGF0ZSosIFRocmVhZCopOwogCiAgICAgLy8gT25seSBuZWVkcyB0byBi
ZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNhbiB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11bHRp
cGxlIHRocmVhZHMuCiAgICAgdm9pZCBhZGRDdXJyZW50VGhyZWFkKCkgeyBtX3RocmVhZEdyb3Vw
LT5hZGRDdXJyZW50VGhyZWFkKCk7IH0KQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJv
dXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmLCBDdXJyZW50VGhyZWFkU3RhdGUmKTsKIAogICAgIHZv
aWQgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2soVGhyZWFkJiwgdm9pZCosIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90Kik7Ci0gICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKKyAgICBib29s
IHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCosIFRocmVhZCYpOwogCiAgICAgc3RkOjpzaGFyZWRfcHRy
PFRocmVhZEdyb3VwPiBtX3RocmVhZEdyb3VwOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQorICAgIDogTWFya2lu
Z0NvbnN0cmFpbnQoIk1zbSIsICJNYXJrIFN0YWNrIE1lcmdpbmciLCBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlFeGVjdXRpb24pCisgICAgLCBtX2hlYXAoaGVhcCkKK3sKK30KKworTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6On5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpCit7
Cit9CisKK2RvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCkgKyBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Cit9CisKK3ZvaWQgTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgLy8gTG9nZ2luZyB0aGUg
d29yayBoZXJlIGVuc3VyZXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBp
dCBkb2Vzbid0IG5lZWQgdG8gcHJvZHVjZQorICAgIC8vIGFueW1vcmUgd29yay4KKyAgICBzaXpl
X3Qgc2l6ZSA9IG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1faGVhcC5tX3Jh
Y2VNYXJrU3RhY2stPnNpemUoKTsKKyAgICB2aXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXplKTsK
KyAgICAKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIHNp
emUsICIpIik7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9oZWFw
Lm1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2so
KSk7CisgICAgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0
b3JNYXJrU3RhY2soKSk7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVu
dGlhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCA6IHB1YmxpYyBN
YXJraW5nQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQoSGVhcCYpOworICAgIH5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpOworICAgIAorICAg
IGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIAor
cHJvdGVjdGVkOgorICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIG92ZXJyaWRlOwor
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIG92ZXJy
aWRlOworICAgIAorcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDQsNiArNDQ0LDMz
IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQoKQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxl
KigpPj4gTWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKQorewor
ICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigp
PiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
KQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcnVuKCkgb3ZlcnJp
ZGUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICAgICAgbV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZp
bmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9j
YXRvci5tX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9ibG9ja3NbbV9pbmRleCsrXTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1f
YWxsb2NhdG9yOworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKKyAgICAgICAgTG9jayBt
X2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMp
KTsKK30KKwogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBtX2NlbGxTaXplLCAi
LyIsIG1fYXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMDMsNiAr
MTA0LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKKyAgICBS
ZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0
eUJsb2NrU291cmNlKCk7CisgICAgCiAgICAgdm9pZCBhZGRCbG9jayhNYXJrZWRCbG9jazo6SGFu
ZGxlKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5o
IgogI2luY2x1ZGUgIlN3ZWVwaW5nU2NvcGUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG1JbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0yMDAsNyArMjAxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAo
Y29uc3QgRnJlZQogdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKQogewogICAgIEFTU0VSVCh2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCku
aXNNYXJraW5nKCkpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIAogICAgIGlmICghYXJlTWFya3NTdGFsZSht
YXJraW5nVmVyc2lvbikpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMywxNSArMjI0LDE5IEBAIHZv
aWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAgICAgICAgIGRhdGFM
b2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcgdGhpbmdzLlxuIik7CiAgICAgICAgIEhlYXBW
ZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHNwYWNlKCktPm5ld2x5QWxsb2NhdGVkVmVy
c2lvbigpOwogICAgICAgICBpZiAoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPT0g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7Ci0gICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGVu
dHMgb2YgbWFya2VkIGludG8gbmV3bHlBbGxvY2F0ZWQuIElmIHdlIGdldCB0aGUgZnVsbCBzZXQg
b2YgYml0cwotICAgICAgICAgICAgLy8gdGhlbiBpbnZhbGlkYXRlIG5ld2x5QWxsb2NhdGVkIGFu
ZCBzZXQgYWxsb2NhdGVkLgotICAgICAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5t
ZXJnZUFuZENsZWFyKG1fbWFya3MpOworICAgICAgICAgICAgLy8gV2hlbiBkbyB3ZSBnZXQgaGVy
ZT8gVGhlIGJsb2NrIGNvdWxkIG5vdCBoYXZlIGJlZW4gZmlsbGVkIHVwLiBUaGUgbmV3bHlBbGxv
Y2F0ZWQgYml0cyB3b3VsZAorICAgICAgICAgICAgLy8gaGF2ZSBoYWQgdG8gYmUgY3JlYXRlZCBz
aW5jZSB0aGUgZW5kIG9mIHRoZSBsYXN0IGNvbGxlY3Rpb24uIFRoZSBvbmx5IHRoaW5ncyB0aGF0
IGNyZWF0ZQorICAgICAgICAgICAgLy8gdGhlbSBhcmUgYWJvdXRUb01hcmtTbG93LCBsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSwgYW5kIHN0b3BBbGxvY2F0aW5nLiBJZiBpdCBoYWQgYmVlbgorICAgICAg
ICAgICAgLy8gYWJvdXRUb01hcmtTbG93LCB0aGVuIHdlIHNob3VsZG4ndCBiZSBoZXJlIHNpbmNl
IHRoZSBtYXJrcyB3b3VsZG4ndCBiZSBzdGFsZSBhbnltb3JlLiBJdAorICAgICAgICAgICAgLy8g
Y2Fubm90IGJlIGxhc3RDaGFuY2VUb0ZpbmFsaXplLiBTbyBpdCBtdXN0IGJlIHN0b3BBbGxvY2F0
aW5nLiBUaGF0IG1lYW5zIHRoYXQgd2UganVzdAorICAgICAgICAgICAgLy8gY29tcHV0ZWQgdGhl
IG5ld2x5QWxsb2NhdGVkIGJpdHMganVzdCBiZWZvcmUgdGhlIHN0YXJ0IG9mIGFuIGluY3JlbWVu
dC4gV2hlbiB3ZSBhcmUgaW4gdGhhdAorICAgICAgICAgICAgLy8gbW9kZSwgaXQgc2VlbXMgYXMg
aWYgbmV3bHlBbGxvY2F0ZWQgc2hvdWxkIHN1YnN1bWUgbWFya3MuCisgICAgICAgICAgICBBU1NF
UlQoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zdWJzdW1lcyhtX21hcmtzKSk7CisgICAgICAg
ICAgICBtX21hcmtzLmNsZWFyQWxsKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiBuZXdseUFsbG9jYXRlZCB3aXRoIG1hcmtlZC4gSWYg
d2UgZ2V0IHRoZSBmdWxsIHNldCBvZgotICAgICAgICAgICAgLy8gYml0cyB0aGVuIGludmFsaWRh
dGUgbmV3bHlBbGxvY2F0ZWQgYW5kIHNldCBhbGxvY2F0ZWQuCiAgICAgICAgICAgICBoYW5kbGUo
KS5tX25ld2x5QWxsb2NhdGVkLnNldEFuZENsZWFyKG1fbWFya3MpOworICAgICAgICAgICAgaGFu
ZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBuZXdseUFsbG9jYXRlZFZlcnNpb247CiAg
ICAgICAgIH0KLSAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBuZXds
eUFsbG9jYXRlZFZlcnNpb247CiAgICAgfQogICAgIGNsZWFySGFzQW55TWFya2VkKCk7CiAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTM2NiwxNiArMzcxLDYgQEAgdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpkaWRSZW1vdmVGcm9tQQogICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsK
IH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoY29uc3QgSGVhcENlbGwqIGNl
bGwpCi17Ci0gICAgcmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFj
ZSgpLT5pc01hcmtpbmcoKSwgY2VsbCk7Ci19Ci0KLWJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6
aXNMaXZlQ2VsbChjb25zdCB2b2lkKiBwKQotewotICAgIHJldHVybiBpc0xpdmVDZWxsKHNwYWNl
KCktPm1hcmtpbmdWZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2luZygpLCBwKTsKLX0KLQogI2lm
ICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgTWFya2VkQmxvY2s6OmFzc2VydFZhbGlkQ2VsbChWTSYg
dm0sIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvU3RhbXBlZExvY2suaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTYx
LDggKzE2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAg
ICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlKEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwq
KTsKLSAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKKyAgICAgICAgYm9vbCBpc0xpdmUo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7CisgICAgICAgIGlubGluZSBi
b29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5l
d2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKIAogICAg
ICAgICBib29sIGlzTGl2ZShjb25zdCBIZWFwQ2VsbCopOwogICAgICAgICBib29sIGlzTGl2ZUNl
bGwoY29uc3Qgdm9pZCopOwpAQCAtMjU4LDkgKzI1OSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFya2VkQ29uY3VycmVudGx5
KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBpc01h
cmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7Ci0gICAgYm9vbCB0ZXN0QW5kU2V0TWFya2Vk
KGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKKyAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQq
LCBEZXBlbmRlbmN5RmVuY2UpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lk
KiwgRGVwZW5kZW5jeUZlbmNlKTsKICAgICAgICAgCiAgICAgYm9vbCBpc0F0b20oY29uc3Qgdm9p
ZCopOwogICAgIHZvaWQgY2xlYXJNYXJrZWQoY29uc3Qgdm9pZCopOwpAQCAtMjgwLDkgKzI4MCw4
IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYXJlTWFya3NTdGFsZSgp
OwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7Ci0g
ICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAKLSAgICBEZXBlbmRlbmN5IGFib3V0VG9NYXJr
KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKKyAgICBEZXBlbmRlbmN5RmVuY2UgYWJvdXRU
b01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKICNpZiBBU1NFUlRf
RElTQUJMRUQKICAgICB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUoKSB7IH0KQEAgLTMxNCwxMSAr
MzEzLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RlTWFya2VkU2xvdygpOwogICAgIAogICAg
IGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKTsKKyAgICBpbmxpbmUgYm9vbCBtYXJrc0NvbnZleUxpdmVuZXNzRHVy
aW5nTWFya2luZyhIZWFwVmVyc2lvbiBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbik7CiAgICAgICAgIAogICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1f
bWFya3M7CiAKICAgICBib29sIG1fbmVlZHNEZXN0cnVjdGlvbjsKLSAgICBMb2NrIG1fbG9jazsK
KyAgICBTdGFtcGVkTG9jayBtX2xvY2s7CiAgICAgCiAgICAgLy8gVGhlIGFjdHVhbCBtYXJrIGNv
dW50IGNhbiBiZSBjb21wdXRlZCBieSBkb2luZzogbV9iaWFzZWRNYXJrQ291bnQgLSBtX21hcmtD
b3VudEJpYXMuIE5vdGUKICAgICAvLyB0aGF0IHRoaXMgY291bnQgaXMgcmFjeS4gSXQgd2lsbCBh
Y2N1cmF0ZWx5IGRldGVjdCB3aGV0aGVyIG9yIG5vdCBleGFjdGx5IHplcm8gdGhpbmdzIHdlcmUK
QEAgLTQ5OCwxOCArNDk4LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0
YWxlKEgKICAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0K
IAotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFy
a3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQoraW5saW5l
IERlcGVuZGVuY3lGZW5jZSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24pCiB7CiAgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNp
b247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNp
b24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCi1pbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9j
azo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9
IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9u
KTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIERlcGVuZGVuY3lG
ZW5jZSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNz
ZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMjQgKzUxOCwxOSBAQCBpbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01h
cmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKIHsKLSAgICBy
ZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikgPyBmYWxzZSA6IGlzTWFya2VkUmF3
KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHko
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCi17Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1Zl
cnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCks
IHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihw
KSwgRGVwZW5kZW5jeUZlbmNlKHZlcnNpb24pKTsKIH0KIAotaW5saW5lIGJvb2wgTWFya2VkQmxv
Y2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKK2lubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5RmVu
Y2UgZGVwZW5kZW5jeSkKIHsKICAgICBhc3NlcnRNYXJrc05vdFN0YWxlKCk7CiAgICAgcmV0dXJu
IG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOwogfQogCi1pbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5
IGRlcGVuZGVuY3kpCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlZChj
b25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsKICAgICBhc3NlcnRN
YXJrc05vdFN0YWxlKCk7CiAgICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RBbmRTZXQo
YXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
U3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29y
aXRobUlubGluZXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY3LDYgKzY4LDExIEBAIGlu
bGluZSBNYXJrZWRTcGFjZSogTWFya2VkQmxvY2s6OkhhbmRsZToKIAogaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKQogeworICAgIHJldHVybiBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFy
a2luZyhtX21hcmtpbmdWZXJzaW9uLCBtYXJraW5nVmVyc2lvbik7Cit9CisKK2lubGluZSBib29s
IE1hcmtlZEJsb2NrOjptYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lv
biBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKK3sKICAgICAv
LyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlc2UgaXMgdHJ1ZToKICAgICAvLyAtIFdl
IGp1c3QgY3JlYXRlZCB0aGUgYmxvY2sgYW5kIHNvIHRoZSBiaXRzIGFyZSBjbGVhciBhbHJlYWR5
LgogICAgIC8vIC0gVGhpcyBibG9jayBoYXMgb2JqZWN0cyBtYXJrZWQgZHVyaW5nIHRoZSBsYXN0
IEdDLCBhbmQgc28gaXRzIHZlcnNpb24gd2FzIHVwLXRvLWRhdGUganVzdApAQCAtODIsMzkgKzg4
LDExMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6bWFya3NDb252ZXlMaXZlCiAgICAgQVNT
RVJUKHNwYWNlKCktPmlzTWFya2luZygpKTsKICAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2Nv
cGUoKSAhPSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gbV9tYXJraW5nVmVyc2lvbiA9PSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb24KLSAg
ICAgICAgfHwgTWFya2VkU3BhY2U6Om5leHRWZXJzaW9uKG1fbWFya2luZ1ZlcnNpb24pID09IG1h
cmtpbmdWZXJzaW9uOworICAgIHJldHVybiBteU1hcmtpbmdWZXJzaW9uID09IE1hcmtlZFNwYWNl
OjpudWxsVmVyc2lvbgorICAgICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJr
aW5nVmVyc2lvbikgPT0gbWFya2luZ1ZlcnNpb247CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgYm9vbCBpc01h
cmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Okhh
bmRsZTo6aXNMaXZlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXds
eUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCogY2VsbCkK
IHsKLSAgICBBU1NFUlQoIWlzRnJlZUxpc3RlZCgpKTsKLSAgICAKLSAgICBpZiAoVU5MSUtFTFko
aGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkpIHsKLSAgICAgICAgaWYgKGlzTmV3bHlBbGxvY2F0ZWQo
Y2VsbCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCiAgICAgaWYgKGFs
bG9jYXRvcigpLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSB0aGlzLT5ibG9j
aygpOworICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIGJl
Y2F1c2UgbWFya3MgbWlnaHQgYmUgc3RhbGUuIEluIHRoYXQgY2FzZSwgbmV3bHkKKyAgICAvLyBh
bGxvY2F0ZWQgd2lsbCBub3QgeWV0IGJlIHZhbGlkLiBDb25zaWRlciB0aGlzIGludGVybGVhdmlu
Zy4KKyAgICAvLyAKKyAgICAvLyBPbmUgdGhyZWFkIGlzIGRvaW5nIHRoaXM6CisgICAgLy8KKyAg
ICAvLyAxKSBJc0xpdmVDaGVja3NOZXdseUFsbG9jYXRlZDogV2UgY2hlY2sgaWYgbmV3bHkgYWxs
b2NhdGVkIGlzIHZhbGlkLiBJZiBpdCBpcyB2YWxpZCwgYW5kIHRoZSBiaXQgaXMKKyAgICAvLyAg
ICBzZXQsIHdlIHJldHVybiB0cnVlLiBMZXQncyBhc3N1bWUgdGhhdCB0aGlzIGV4ZWN1dGVzIGF0
b21pY2FsbHkuIEl0IGRvZXNuJ3QgaGF2ZSB0byBpbiBnZW5lcmFsLAorICAgIC8vICAgIGJ1dCB3
ZSBjYW4gYXNzdW1lIHRoYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHNlZWluZyB0aGlzIGJ1Zy4KKyAg
ICAvLworICAgIC8vIDIpIElzTGl2ZUNoZWNrc01hcmtzOiBIYXZpbmcgZmFpbGVkIHRoYXQsIHdl
IGNoZWNrIHRoZSBtYXJrIGJpdHMuIFRoaXMgc3RlcCBpbXBsaWVzIHRoZSByZXN0IG9mCisgICAg
Ly8gICAgdGhpcyBmdW5jdGlvbi4gSXQgaGFwcGVucyB1bmRlciBhIGxvY2sgc28gaXQncyBhdG9t
aWMuCisgICAgLy8KKyAgICAvLyBBbm90aGVyIHRocmVhZCBpcyBkb2luZzoKKyAgICAvLworICAg
IC8vIDEpIEFib3V0VG9NYXJrU2xvdzogVGhpcyBpcyB0aGUgZW50aXJlIGFib3V0VG9NYXJrU2xv
dyBmdW5jdGlvbiwgYW5kIGxldCdzIHNheSBpdCdzIGF0b21pYy4gSXQKKyAgICAvLyAgICBzb3J0
YSBpcyBzaW5jZSBpdCBob2xkcyBhIGxvY2ssIGJ1dCB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgbWFr
ZSBpdCBhdG9taWMgd2l0aCByZXNwZWN0IHRvCisgICAgLy8gICAgSXNMaXZlQ2hlY2tzTmV3bHlB
bGxvY2F0ZWQsIHNpbmNlIHRoYXQgZG9lcyBub3QgaG9sZCBhIGxvY2sgaW4gb3VyIHNjZW5hcmlv
LgorICAgIC8vCisgICAgLy8gVGhlIGhhcm1mdWwgaW50ZXJsZWF2aW5nIGhhcHBlbnMgaWYgd2Ug
c3RhcnQgb3V0IHdpdGggYSBibG9jayB0aGF0IGhhcyBzdGFsZSBtYXJrIGJpdHMgdGhhdAorICAg
IC8vIG5vbmV0aGVsZXNzIGNvbnZleSBsaXZlbmVzcyBkdXJpbmcgbWFya2luZyAodGhlIG9mZi1i
eS1vbmUgdmVyc2lvbiB0cmljaykuIFRoZSBpbnRlcmxlYXZpbmcgaXMKKyAgICAvLyBqdXN0Ogor
ICAgIC8vCisgICAgLy8gSXNMaXZlQ2hlY2tzTmV3bHlBbGxvY2F0ZWQgQWJvdXRUb01hcmtTbG93
IElzTGl2ZUNoZWNrc01hcmtzCisgICAgLy8KKyAgICAvLyBXZSBzdGFydGVkIHdpdGggdmFsaWQg
bWFya3MgYnV0IGludmFsaWQgbmV3bHkgYWxsb2NhdGVkLiBTbywgdGhlIGZpcnN0IHBhcnQgZG9l
c24ndCB0aGluayB0aGF0CisgICAgLy8gYW55dGhpbmcgaXMgbGl2ZSwgYnV0IGR1dGlmdWxseSBk
cm9wcyBkb3duIHRvIHRoZSBtYXJrcyBzdGVwLiBCdXQgaW4gdGhlIG1lYW50aW1lLCB3ZSBjbGVh
ciB0aGUKKyAgICAvLyBtYXJrIGJpdHMgYW5kIHRyYW5zZmVyIHRoZWlyIGNvbnRlbnRzIGludG8g
bmV3bHlBbGxvY2F0ZWQuIFNvIElzTGl2ZUNoZWNrc01hcmtzIGFsc28gc2VlcyBub3RoaW5nCisg
ICAgLy8gbGl2ZS4gT29vcHMhCisgICAgLy8KKyAgICAvLyBGb3J0dW5hdGVseSwgc2luY2UgdGhp
cyBpcyBqdXN0IGEgcmVhZCBjcml0aWNhbCBzZWN0aW9uLCB3ZSBjYW4gdXNlIGEgU3RhbXBlZExv
Y2suCisKKyAgICBhdXRvIGZlbmNlbGVzc0lzTGl2ZUltcGwgPSBbJl0gKERlcGVuZGVuY3lGZW5j
ZSYgZGVwZW5kZW5jeSwgU3RhbXBlZExvY2s6OlN0YW1wKSAtPiBib29sIHsKKyAgICAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogdGhpc0hhbmRsZSA9IGRlcGVuZGVuY3kuY29uc3VtZSh0aGlzKTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVCghdGhpc0hhbmRsZS0+aXNGcmVlTGlzdGVkKCkpOwog
ICAgIAotICAgIGlmIChibG9jay5hcmVNYXJrc1N0YWxlKCkpIHsKLSAgICAgICAgaWYgKCFpc01h
cmtpbmcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghYmxvY2subWFy
a3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pKQorICAgICAgICBI
ZWFwVmVyc2lvbiBteU5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHRoaXNIYW5kbGUtPm1fbmV3bHlB
bGxvY2F0ZWRWZXJzaW9uOworICAgICAgICBpZiAobXlOZXdseUFsbG9jYXRlZFZlcnNpb24gPT0g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRoaXNI
YW5kbGUtPmlzTmV3bHlBbGxvY2F0ZWQoY2VsbCk7CisgICAgICAgICAgICBkZXBlbmRlbmN5ID0g
RGVwZW5kZW5jeUZlbmNlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSB0aGlzSGFuZGxl
LT5ibG9jaygpOworICAgICAgICAKKyAgICAgICAgSGVhcFZlcnNpb24gbXlNYXJraW5nVmVyc2lv
biA9IGJsb2NrLm1fbWFya2luZ1ZlcnNpb247CisgICAgICAgIGlmIChteU1hcmtpbmdWZXJzaW9u
ICE9IG1hcmtpbmdWZXJzaW9uCisgICAgICAgICAgICAmJiAoIWlzTWFya2luZyB8fCAhYmxvY2su
bWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobXlNYXJraW5nVmVyc2lvbiwgbWFya2lu
Z1ZlcnNpb24pKSkgeworICAgICAgICAgICAgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3lGZW5jZSht
eU1hcmtpbmdWZXJzaW9uKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgcmVzdWx0ID0gYmxvY2subV9tYXJrcy5nZXQo
YmxvY2suYXRvbU51bWJlcihjZWxsKSk7CisgICAgICAgIGRlcGVuZGVuY3kgPSBEZXBlbmRlbmN5
RmVuY2UocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIAorICAg
IGF1dG8gaXNMaXZlSW1wbCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgQVNTRVJUKCFpc0Zy
ZWVMaXN0ZWQoKSk7CisgICAgCisgICAgICAgIEhlYXBWZXJzaW9uIG15TmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uID0gbV9uZXdseUFsbG9jYXRlZFZlcnNpb247CisgICAgICAgIGlmIChteU5ld2x5QWxs
b2NhdGVkVmVyc2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pCisgICAgICAgICAgICByZXR1
cm4gaXNOZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAKKyAgICAgICAgTWFya2VkQmxvY2smIGJs
b2NrID0gdGhpcy0+YmxvY2soKTsKKyAgICAKKyAgICAgICAgaWYgKGJsb2NrLmFyZU1hcmtzU3Rh
bGUobWFya2luZ1ZlcnNpb24pKSB7CisgICAgICAgICAgICBpZiAoIWlzTWFya2luZykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWJsb2NrLm1hcmtzQ29u
dmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIHJldHVybiBibG9jay5tX21hcmtzLmdl
dChibG9jay5hdG9tTnVtYmVyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLm1fbWFya3Mu
Z2V0KGJsb2NrLmF0b21OdW1iZXIoY2VsbCkpOworICAgIH07CisgICAgCisgICAgaWYgKCFpc01h
cmtpbmcpCisgICAgICAgIHJldHVybiBpc0xpdmVJbXBsKCk7CisgICAgCisgICAgcmV0dXJuIG1f
YmxvY2stPm1fbG9jay5kb09wdGltaXplZEZlbmNlbGVzc1JlYWQoZmVuY2VsZXNzSXNMaXZlSW1w
bCwgaXNMaXZlSW1wbCk7CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omlz
TGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25z
dCB2b2lkKiBwKQoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJz
aW9uLCBib29sIGlzTWFya2luZywgY29uc3Qgdm9pZCogcCkKIHsKICAgICBpZiAoIW1fYmxvY2st
PmlzQXRvbShwKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc0xpdmUobWFy
a2luZ1ZlcnNpb24sIGlzTWFya2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgSGVhcENlbGwqPihwKSk7
CisgICAgcmV0dXJuIGlzTGl2ZShtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBpc01hcmtpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEhlYXBDZWxsKj4ocCkpOworfQorCitpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoY29uc3QgSGVhcENlbGwqIGNlbGwp
Cit7CisgICAgcmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFjZSgp
LT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKSwgc3BhY2UoKS0+aXNNYXJraW5nKCksIGNlbGwpOwor
fQorCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmVDZWxsKGNvbnN0IHZv
aWQqIHApCit7CisgICAgcmV0dXJuIGlzTGl2ZUNlbGwoc3BhY2UoKS0+bWFya2luZ1ZlcnNpb24o
KSwgc3BhY2UoKS0+bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2luZygp
LCBwKTsKIH0KIAogLy8gVGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdHJ1ZSBmb3Igc3BlY2lhbGl6
YXRpb24gdG8ga2ljayBpbjoKQEAgLTM4Niw2ICs0NjUsMTUgQEAgaW5saW5lIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6Ok1hcmtzTW9kZSBNYQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CiBpbmxp
bmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjdXJy
ZW50bHkgZWZmaWNpZW50IHRvIHVzZSBpbiB0aGUgY29uc3RyYWludCBzb2x2ZXIgYmVjYXVzZSBp
c0xpdmUoKSBncmFicyBhCisgICAgLy8gbG9jayB0byBwcm90ZWN0IGl0c2VsZiBmcm9tIGNvbmN1
cnJlbnQgY2FsbHMgdG8gYWJvdXRUb01hcmtTbG93KCkuIEJ1dCB3ZSBjb3VsZCBnZXQgYXJvdW5k
IHRoaXMgYnkKKyAgICAvLyBoYXZpbmcgdGhpcyBmdW5jdGlvbiBncmFiIHRoZSBsb2NrIGJlZm9y
ZSBhbmQgYWZ0ZXIgdGhlIGl0ZXJhdGlvbiwgYW5kIGNoZWNrIGlmIHRoZSBtYXJraW5nIHZlcnNp
b24KKyAgICAvLyBjaGFuZ2VkLiBJZiBpdCBkaWQsIGp1c3QgcnVuIGFnYWluLiBJbnNpZGUgdGhl
IGxvb3AsIHdlIG9ubHkgbmVlZCB0byBlbnN1cmUgdGhhdCBpZiBhIHJhY2Ugd2VyZSB0bworICAg
IC8vIGhhcHBlbiwgd2Ugd2lsbCBqdXN0IG92ZXJsb29rIG9iamVjdHMuIEkgdGhpbmsgdGhhdCBi
ZWNhdXNlIG9mIGhvdyBhYm91dFRvTWFya1Nsb3coKSBkb2VzIHRoaW5ncywKKyAgICAvLyBhIHJh
Y2Ugb3VnaHQgdG8gbWVhbiB0aGF0IGl0IGp1c3QgcmV0dXJucyBmYWxzZSB3aGVuIGl0IHNob3Vs
ZCBoYXZlIHJldHVybmVkIHRydWUgLSBidXQgdGhpcyBpcworICAgIC8vIHNvbWV0aGluZyB0aGF0
IHdvdWxkIGhhdmUgdG8gYmUgdmVyaWZpZWQgY2FyZWZ1bGx5LgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTUKKyAgICAKICAgICBIZWFwQ2VsbDo6
S2luZCBraW5kID0gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwogICAgIGZvciAoc2l6ZV90IGkgPSBm
aXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAgICAg
ICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJm1fYmxv
Y2stPmF0b21zKClbaV0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNyArNDIxLDcgQEAgdm9p
ZCBNYXJrZWRTcGFjZTo6ZW5kTWFya2luZygpCiAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZXNl
dEFsbG9jYXRlZCgpOwogICAgICAgICAgICAgfSk7CiAgICAgfQotICAgICAgICAKKyAgICAKICAg
ICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IG5leHRWZXJzaW9uKG1fbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xhcmdlQWxsb2NhdGlvbnNP
ZmZzZXRGb3JUaGlzQ29sbGVjdGlvbjsgaSA8IG1fbGFyZ2VBbGxvY2F0aW9ucy5zaXplKCk7ICsr
aSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY1LDYgKzE2NSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gV2hlbiB0
aGlzIGlzIHRydWUgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQgYnV0IHRoZSBtYXJrIGJp
dHMgaGF2ZW4ndCBjb252ZXJnZWQgeWV0LgogICAgIGJvb2wgaXNNYXJraW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc01hcmtpbmc7IH0KICAgICAKKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0Jl
Z2luKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCog
YWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9Cisg
ICAgV2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0dXJuIG1fbmV3QWN0aXZl
V2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzRW5kKCkg
eyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQorICAgIAogICAgIHZvaWQgZHVt
cEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgc3RkOjphcnJheTxzaXplX3QsIG51bVNpemVDbGFzc2VzPiBzX3Np
emVDbGFzc0ZvclNpemVTdGVwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywzMCArMjcsMTggQEAKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lk
KFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwK
LSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQotICAgIDogbV9hYmJyZXZpYXRl
ZE5hbWUoYWJicmV2aWF0ZWROYW1lKQotICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAg
LCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3Zv
bGF0aWxpdHkodm9sYXRpbGl0eSkKLXsKLX0KK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24s
Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorTWFya2luZ0Nv
bnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25j
dXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQog
ICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1lKFdU
Rk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5j
dGlvbikpCi0gICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dv
cmtFc3RpbWF0ZUZ1bmN0aW9uKSkKICAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorICAg
ICwgbV9jb25jdXJyZW5jeShjb25jdXJyZW5jeSkKKyAgICAsIG1fcGFyYWxsZWxpc20ocGFyYWxs
ZWxpc20pCiB7CiB9CiAKQEAgLTYzLDE0ICs1MSw3NCBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlz
bSBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSByZXN1bHQgPSBleGVjdXRlSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENv
dW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJvc2UgJiYgdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVk
TmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVj
dXRlKSIpOworICAgIGlmIChyZXN1bHQgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bCkgeworICAgICAgICAvLyBJdCdzIGlsbGVnYWwgdG8gcHJvZHVjZSBwYXJhbGxlbCB3b3JrIGlm
IHlvdSBoYXZlbid0IGFkdmVydGlzZWQgaXQgdXBmcm9udCBiZWNhdXNlIHRoZSBzb2x2ZXIKKyAg
ICAgICAgLy8gaGFzIG9wdGltaXphdGlvbnMgZm9yIGNvbnN0cmFpbnRzIHRoYXQgcHJvbWlzZSB0
byBuZXZlciBwcm9kdWNlIHBhcmFsbGVsIHdvcmsuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
cGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tX
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUg
TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3Ip
OworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coYWJicmV2
aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRv
ciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZp
c2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5n
VGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlz
aXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAgIFZpc2l0Q291bnRl
ciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Ry
YWludFNvbHZpbmdMb2NrZXIsIHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNp
dENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIGlmICh2ZXJib3NlICYmIHZpc2l0Q291bnRlci52
aXNpdENvdW50KCkpCisgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2
aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gcHJlcGFyZVRvRXhlY3V0
ZSkiKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9y
KTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgaWYgKHZlcmJvc2UgJiYg
dmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlh
dGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBk
b1BhcmFsbGVsV29yaykiKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxs
ZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENv
dW50ZXIodmlzaXRvcik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAg
ICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYg
KHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygi
KCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291
bnQoKSwgIiBpbiBmaW5pc2hQYXJhbGxlbFdvcmspIik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZp
c2l0b3ImKQoreworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0lt
cGwoU2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNp
dG9yJikKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNv
bnN0cmFpbnRDb25jdXJyZW5jeS5oIgorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5o
IgogI2luY2x1ZGUgIkNvbnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdU
aW1lb3V0LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00NCwxNyArNDQsMTEgQEAgY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENT
dHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25j
dXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsK
ICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6
OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAg
ICAgCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAg
CkBAIC02NSwzMiArNTksMzkgQEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKLSAgICB2b2lk
IGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZShTbG90Vmlz
aXRvciYpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICBkb3VibGUgd29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKICAgICAKLSAgICBkb3VibGUgcXVpY2tX
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBpZiAoIW1f
cXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOwotICAgIH0KLSAg
ICAKLSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNp
dG9yKTsKLSAgICB9CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICB2
b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxl
bFdvcmsoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisgICAgQ29uc3Ry
YWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9jb25jdXJyZW5j
eTsgfQorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyYWxsZWxpc207IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFj
dExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdmly
dHVhbCB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNl
dCBtX2luZGV4LgogICAgIAogICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OwogICAg
IENTdHJpbmcgbV9hYmJyZXZpYXRlZE5hbWU7CiAgICAgQ1N0cmluZyBtX25hbWU7Ci0gICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0aW1lb3V0
KT4gbV9leGVjdXRlRnVuY3Rpb247Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3Im
KT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IG1fdm9sYXRpbGl0eTsKKyAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgbV9jb25jdXJyZW5jeTsK
KyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9wYXJhbGxlbGlzbTsKICAgICBzaXplX3QgbV9s
YXN0VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2MCArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29u
c3RyYWludFNldC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50U29sdmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OkV4ZWN1dGlvbkNvbnRleHQgewotcHVibGljOgotICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUg
dGltZW91dCkKLSAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICwgbV92aXNpdG9yKHZpc2l0
b3IpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2RpZFZpc2l0U29tZXRoaW5nOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFz
RWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlm
IGl0IHRpbWVzIG91dC4KLSAgICBib29sIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKLSAg
ICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgewotICAgICAgICAg
ICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsK
LSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVk
LmdldChpbmRleCk7IH0KLQotICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCi0gICAgewot
ICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0
U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7Ci0g
ICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Ci0g
ICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsK
LSAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcg
eyBmYWxzZSB9OwotfTsKLQotTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50
U2V0KCkKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldChIZWFwJiBo
ZWFwKQorICAgIDogbV9oZWFwKGhlYXApCiB7CiB9CiAKQEAgLTEwNywxOCArNjUsOSBAQCB2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAx
OwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGls
aXR5KQotewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZN
b3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2
b2xhdGlsaXR5KSk7Ci19Ci0KLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKLSAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24s
Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQog
ewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFi
YnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwg
V1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFk
ZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJl
dmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5
LCBjb25jdXJyZW5jeSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBA
IC0xMzEsOSArODAsOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgbV9z
ZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJn
ZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVD
b252ZXJnZW5jZUltcGwodmlzaXRvciwgdGltZW91dCk7CisgICAgYm9vbCByZXN1bHQgPSBleGVj
dXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQog
ICAgICAgICBkYXRhTG9nKCIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0OCwyNyArOTcs
MjcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRo
aXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRoaXMp
OwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlvbiA9IG1faXRlcmF0aW9uKys7CiAgICAgCiAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9u
LCAiOiIpOwogCi0gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdlIGhh
dmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhlbgotICAgIC8vIHdl
IHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJh
aW4obV91bmV4ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBhbnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQn
cyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25zdHJhaW50cyBvdGhlcgotICAgIC8vIHRoYW4g
cm9vdHMuCi0gICAgaWYgKGl0ZXJhdGlvbiA9PSAxKQorICAgIGlmIChpdGVyYXRpb24gPT0gMSkg
eworICAgICAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWlu
aW5nLCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzCisgICAgICAg
IC8vIG90aGVyIHRoYW4gcm9vdHMuCisgICAgICAgIHNvbHZlci5kcmFpbihtX3VuZXhlY3V0ZWRS
b290cyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCi0gICAgaWYgKCFleGVj
dXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQorICAgIGlmIChpdGVy
YXRpb24gPT0gMikgeworICAgICAgICBzb2x2ZXIuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3Ro
cyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0
byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRo
YXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxk
IEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8g
Z28gdG90YWxseQpAQCAtMjE1LDMzICsxNjQsMTYgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUNvbnZlcgogICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGIt
PnZvbGF0aWxpdHkoKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3Ry
YWludCogY29uc3RyYWludCA6IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0
cmFpbnQtPmluZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5k
aWRFeGVjdXRlKGkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNv
bnRleHQuZXhlY3V0ZShpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29u
dmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFw
cGVuIGFueXRpbWUKLSAgICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTog
TWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8g
Tm90IGNsZWFyIGlmIHRoYXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2
ZW4gYmV0dGVyIGlzIHRoaXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHks
IGtlZXAgcnVubmluZy4KLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVh
c3QgTiB0aGluZ3MsIHJldHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
ODMyCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHNvbHZlci5jb252ZXJnZShtX29y
ZGVyZWQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIFJldHVybiB0cnVlIGlmIHdl
J3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlmIHdlIGRpZCBub3QgdmlzaXQgYW55dGhpbmcu
CisgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAogdm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBjb25zdHJh
aW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICBjb25zdHJh
aW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAg
ICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDkgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOworY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CisKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0
IHsKIHB1YmxpYzoKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIE1hcmtpbmdDb25z
dHJhaW50U2V0KEhlYXAmKTsKICAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKICAgICAKICAg
ICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwpAQCAtNDEsMTUgKzQ0LDkgQEAgcHVibGljOgogICAg
IHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0
cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAK
LSAgICB2b2lkIGFkZCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCi0gICAgICAg
IENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90Vmlz
aXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAor
ICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNv
bmN1cnJlbnQpOwogICAgIAogICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29u
c3RyYWludD4pOwogICAgIApAQCAtNjAsMjEgKzU3LDE5IEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUg
b2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3Un
dmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RWaXNpdG9yJiwKLSAgICAgICAgTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBTaW1wbHkg
cnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAgICAgdm9pZCBl
eGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgotICAgIGNsYXNzIEV4ZWN1
dGlvbkNvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgZnJp
ZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogICAgIAotICAgIGJvb2wgZXhlY3V0
ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7Cisg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAg
Ym9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVj
dXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAg
IGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3Rv
ciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAKKyAgICBIZWFwJiBt
X2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOwogICAgIEJpdFZlY3RvciBt
X3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2lu
Z0NvbnN0cmFpbnQ+PiBtX3NldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCisKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyAKKworTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQp
CisgICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKKyAgICAsIG1fbWFpblZpc2l0b3IobV9oZWFwLmNv
bGxlY3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX3NldChzZXQpCit7CisgICAgbV9oZWFwLmZv
ckVhY2hTbG90VmlzaXRvcigKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgewor
ICAgICAgICAgICAgbV92aXNpdENvdW50ZXJzLmFwcGVuZChWaXNpdENvdW50ZXIodmlzaXRvcikp
OworICAgICAgICB9KTsKK30KKworTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6On5NYXJraW5nQ29u
c3RyYWludFNvbHZlcigpCit7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRp
ZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IFZpc2l0Q291bnRlciYg
dmlzaXRDb3VudGVyIDogbV92aXNpdENvdW50ZXJzKSB7CisgICAgICAgIGlmICh2aXNpdENvdW50
ZXIudmlzaXRDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShT
Y2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3sKKyAgICBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSA9
IHRydWU7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29y
ayk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnVzZVBhcmFsbGVsTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRh
dGFMb2cocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCA/ICJQIiA6ICJOIiwgIjwiKTsK
KyAgICAgICAgCisgICAgICAgIG1faGVhcC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAg
ICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJ1bkV4ZWN1dGlvblRocmVhZCh2aXNp
dG9yLCBwcmVmZXJlbmNlLCBwaWNrTmV4dCk7IH0pOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCI+Iik7CisgICAgfSBlbHNlCisg
ICAgICAgIHJ1bkV4ZWN1dGlvblRocmVhZChtX21haW5WaXNpdG9yLCBwcmVmZXJlbmNlLCBwaWNr
TmV4dCk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGlja05leHRJc1N0aWxsQWN0aXZl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrKTsK
KyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV9kaWRFeGVjdXRlSW5Q
YXJhbGxlbCkKKyAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0tPmZpbmlzaFBhcmFsbGVs
V29yayhtX21haW5WaXNpdG9yKTsKKyAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsLmNsZWFyKCk7
CisgICAgCisgICAgaWYgKCFtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkp
CisgICAgICAgICAgICBleGVjdXRlKCptX3NldC5tX3NldFtpbmRleFRvUnVuXSk7CisgICAgICAg
IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmNsZWFyKCk7CisgICAgfQorICAgICAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQp
Cit7CisgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgIGF1dG8gZW5kID0g
dW5leGVjdXRlZC5lbmQoKTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVybjsK
KyAgICBhdXRvIHBpY2tOZXh0ID0gc2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
KCk+KAorICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsKKyAgICAgICAgfSk7CisgICAgZXhlY3V0
ZShOZXh0Q29uc3RyYWludEZpcnN0LCBwaWNrTmV4dCk7CisgICAgdW5leGVjdXRlZC5jbGVhckFs
bCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpjb252ZXJnZShjb25zdCBW
ZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpCit7CisgICAgaWYgKGRpZFZpc2l0U29t
ZXRoaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAob3JkZXIuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIHNpemVfdCBpbmRleCA9IDA7CisKKyAg
ICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbnN0cmFpbnQgc2VxdWVudGlhbGx5
IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVpY2tseSBnaXZlIHVzIGEKKyAgICAvLyByZXN1bHQuIElm
IHdlIHJhbiBpdCBpbiBwYXJhbGxlbCB0byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3ZSBtaWdo
dCBlbmQgdXAgaGF2aW5nIHRvIHdhaXQgZm9yCisgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3RyYWlu
dHMgdG8gZmluaXNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVyaW5n
IGNvbnZlcmdlbmNlIGl0J3MKKyAgICAvLyBlbXBpcmljYWxseSBtb3N0IG9wdGltYWwgdG8gcmV0
dXJuIHRvIGRyYWluaW5nIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBN
b3N0CisgICAgLy8gY29uc3RyYWludHMgZG9uJ3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9zdCBvZiB0
aGUgdGltZSwgYW5kIHdoZW4gdGhleSBkbyBnZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQKKyAgICAv
LyB0byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmluZyBjeWNs
ZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisgICAgLy8gd2UgZ2V0IHRo
ZSBoZWNrIG91dCBvZiBoZXJlIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3Jr
LiBJIHRoaW5rIHRoYXQgcGFydCBvZiB3aGF0CisgICAgLy8gbWFrZXMgdGhpcyBvcHRpbWFsIGlz
IHRoYXQgd2UgYWxzbyBuZXZlciBhYm9ydCBydW5uaW5nIGEgY29uc3RyYWludCBlYXJseSwgc28g
d2hlbiB3ZSBkbyBydW4KKyAgICAvLyBvbmUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byBnZW5l
cmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2libHkgY2FuLgorICAgIGlmIChvcmRlcltpbmRl
eF0tPnF1aWNrV29ya0VzdGltYXRlKG1fbWFpblZpc2l0b3IpKSB7CisgICAgICAgIGV4ZWN1dGUo
Km9yZGVyW2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFy
YWxsZWwuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAob3JkZXIuaXNFbXB0eSgpIHx8IGRpZFZp
c2l0U29tZXRoaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBh
dXRvIHBpY2tOZXh0ID0gc2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+KAor
ICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAg
aWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4ID49IG9yZGVyLnNpemUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgCisg
ICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICpvcmRlcltpbmRleCsr
XTsKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50LmluZGV4KCk7CisgICAgICAgIH0pOwor
ICAgIAorICAgIGV4ZWN1dGUoUGFyYWxsZWxXb3JrRmlyc3QsIHBpY2tOZXh0KTsKK30KKwordm9p
ZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYgY29u
c3RyYWludCkKK3sKKyAgICBpZiAobV9leGVjdXRlZC5nZXQoY29uc3RyYWludC5pbmRleCgpKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNvbnN0cmFpbnQucHJlcGFyZVRvRXhlY3V0ZShO
b0xvY2tpbmdOZWNlc3NhcnksIG1fbWFpblZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZShtX21haW5WaXNpdG9yKTsKKyAg
ICBkaWRFeGVjdXRlKHBhcmFsbGVsaXNtLCBjb25zdHJhaW50LmluZGV4KCkpOworfQorCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIGZvciAoOzspIHsKKyAg
ICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgIHVuc2lnbmVkIGluZGV4VG9S
dW47CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwu
Zmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHRyeU5leHRD
b25zdHJhaW50ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
cGlja05leHRJc1N0aWxsQWN0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcGlja1Jl
c3VsdCA9IHBpY2tOZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBpY2tSZXN1
bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KCpwaWNrUmVzdWx0KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQm
IGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbKnBpY2tSZXN1bHRdOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PSBDb25zdHJhaW50Q29uY3Vy
cmVuY3k6OlNlcXVlbnRpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhl
Y3V0ZVNlcXVlbnRpYWxseS5hcHBlbmQoKnBpY2tSZXN1bHQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVt
VGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yaysrOworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhUb1J1biA9ICpwaWNrUmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxl
bFdvcmtNb2RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50LnBy
ZXBhcmVUb0V4ZWN1dGUobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHJlZmVyZW5jZSA9PSBQYXJh
bGxlbFdvcmtGaXJzdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyYWxsZWxXb3Jr
KCkgfHwgdHJ5TmV4dENvbnN0cmFpbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlO
ZXh0Q29uc3RyYWludCgpIHx8IHRyeVBhcmFsbGVsV29yaygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIG5vdGhpbmcgbGVmdCB0byBydW4u
IFRoZSBvbmx5IHdheSBmb3IgdXMgdG8gaGF2ZSBtb3JlIHdvcmsgaXMKKyAgICAgICAgICAgICAg
ICAvLyBpZiBzb21lb25lIGlzIHJ1bm5pbmcgYSBjb25zdHJhaW50IHRoYXQgbWF5IHByb2R1Y2Ug
cGFyYWxsZWwgd29yay4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIW1f
bnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBbnkgd2FpdGlu
ZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1c3QgcnVubmluZyB0aGUgU2xvdFZpc2l0b3IuCisg
ICAgICAgICAgICAgICAgLy8gSSB3b25kZXIgaWYgdGhhdCB3b3VsZCBiZSBwcm9maXRhYmxlLgor
ICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFp
bnQgPSAqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl07CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKQorICAgICAgICAgICAgY29uc3RyYWludC5kb1Bh
cmFsbGVsV29yayh2aXNpdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyYWxsZWxp
c20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01v
ZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmdldChp
bmRleFRvUnVuKSkgeworICAgICAgICAgICAgICAgICAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVs
LmFwcGVuZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC50YWtlRmlyc3QoCisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9
PSBpbmRleFRvUnVuOyB9KTsKKyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFs
bGVsU2V0LmNsZWFyKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxpc20oKSA9
PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAgICBt
X251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmstLTsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1
dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxpc20gPT0g
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAgICAgICAgICAgICBt
X3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAg
ICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1dGUoQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBtX2V4ZWN1dGVkLnNldChp
bmRleCk7CisgICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwpIHsKKyAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleCk7Cisg
ICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXgpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlZpc2l0Q291bnRlci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKKworY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdD
b25zdHJhaW50U29sdmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1
YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYp
OworICAgIH5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpOworICAgIAorICAgIGJvb2wgZGlkVmlz
aXRTb21ldGhpbmcoKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2Ug
eworICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJz
dAorICAgIH07CisKKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVk
TGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICAKKyAgICB2
b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCk7CisgICAgCisgICAgdm9pZCBjb252ZXJn
ZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpOworICAgIAorICAgIHZv
aWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lk
IHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNj
b3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgCisg
ICAgdm9pZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgp
OworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOwor
ICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKKyAgICBCaXRWZWN0b3IgbV9leGVjdXRl
ZDsKKyAgICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBC
aXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwg
MzI+IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV90
b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1f
Y29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yayB7
IDAgfTsKKyAgICBib29sIG1fcGlja05leHRJc1N0aWxsQWN0aXZlIHsgdHJ1ZSB9OworICAgIFZl
Y3RvcjxWaXNpdENvdW50ZXIsIDE2PiBtX3Zpc2l0Q291bnRlcnM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RT
ZXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3Bh
cXVlUm9vdFNldC5oCShub25leGlzdGVudCkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotY2xhc3MgT3BhcXVlUm9vdFNldCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoT3BhcXVlUm9vdFNldCk7Ci1wdWJsaWM6Ci0gICAgT3BhcXVlUm9vdFNldCgpCi0gICAgICAg
IDogbV9sYXN0UXVlcmllZFJvb3QobnVsbHB0cikKLSAgICAgICAgLCBtX2NvbnRhaW5zTGFzdFF1
ZXJpZWRSb290KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRhaW5zKHZvaWQq
IHJvb3QpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAocm9vdCAhPSBtX2xhc3RRdWVyaWVkUm9v
dCkgewotICAgICAgICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSByb290OwotICAgICAgICAgICAg
bV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IG1fcm9vdHMuY29udGFpbnMocm9vdCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3Rz
LmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1f
cm9vdHMuY2xlYXIoKTsKLSAgICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSBudWxscHRyOwotICAg
ICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9v
bCBhZGQodm9pZCogcm9vdCkKLSAgICB7Ci0gICAgICAgIGlmIChyb290ID09IG1fbGFzdFF1ZXJp
ZWRSb290KQotICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IHRydWU7Ci0g
ICAgICAgIHJldHVybiBtX3Jvb3RzLmFkZChyb290KS5pc05ld0VudHJ5OwotICAgIH0KLQotICAg
IGludCBzaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLnNpemUoKTsK
LSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBI
YXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3Jvb3RzLmVuZCgpOwotICAgIH0KLQotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8
dm9pZCo+IG1fcm9vdHM7Ci0gICAgbXV0YWJsZSB2b2lkKiBtX2xhc3RRdWVyaWVkUm9vdDsKLSAg
ICBtdXRhYmxlIGJvb2wgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3Vy
Y2VBZGFwdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJl
ZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlw
ZSwgdHlwZW5hbWUgSW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorY2xhc3MgUGFyYWxs
ZWxTb3VyY2VBZGFwdGVyIDogcHVibGljIFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+IHsKK3B1Ymxp
YzoKKyAgICBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBl
KCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53cmFwRnVuYykKKyAgICAgICAg
OiBtX291dGVyU291cmNlKG91dGVyU291cmNlKQorICAgICAgICAsIG1fdW53cmFwRnVuYyh1bndy
YXBGdW5jKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5uZXJUeXBlIHJ1bigpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIGlmIChtX2lubmVyU291cmNlKSB7CisgICAgICAgICAgICAgICAg
aWYgKElubmVyVHlwZSByZXN1bHQgPSBtX2lubmVyU291cmNlLT5ydW4oKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBtX2lubmVyU291cmNlID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbm5l
clNvdXJjZSA9IG1fdW53cmFwRnVuYyhtX291dGVyU291cmNlLT5ydW4oKSk7CisgICAgICAgIH0g
d2hpbGUgKG1faW5uZXJTb3VyY2UpOworICAgICAgICByZXR1cm4gSW5uZXJUeXBlKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gbV9vdXRl
clNvdXJjZTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxJbm5lclR5cGUoKT4+IG1faW5uZXJTb3Vy
Y2U7CisgICAgVW53cmFwRnVuYyBtX3Vud3JhcEZ1bmM7CisgICAgTG9jayBtX2xvY2s7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5h
bWUgVW53cmFwRnVuYz4KK1JlZjxQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBlLCBJbm5l
clR5cGUsIFVud3JhcEZ1bmM+PiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNo
YXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53
cmFwRnVuYykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXJhbGxlbFNvdXJjZUFkYXB0
ZXI8T3V0ZXJUeXBlLCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+KG91dGVyU291cmNlLCB1bndyYXBG
dW5jKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5n
IG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlv
biwKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3Vy
cmVuY3kgY29uY3VycmVuY3kpCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJl
dmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBDb25z
dHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihX
VEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCit7Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKQoreworfQorCitDb25zdHJhaW50UGFyYWxsZWxp
c20gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIHJldHVybiBDb25z
dHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3Ry
YWludC5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhpcyBhbGxvd3MgZm9yIGFuIGluZm9ybWFsIHdheSB0byBkZWZpbmUgY29uc3RyYWludHMu
IEp1c3QgcGFzcyBhIGxhbWJkYSB0byB0aGUgY29uc3RydWN0b3IuIFRoZSBvbmx5CisvLyBkb3du
c2lkZSBpcyB0aGF0IHRoaXMgbWFrZXMgaXQgaGFyZCBmb3IgY29uc3RyYWludHMgdG8gYmUgc3Rh
dGVmdWwsIHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBiZQorLy8gcGFyYWxsZWwuIElu
IHRob3NlIGNhc2VzLCBpdCdzIGVhc2llciB0byBqdXN0IHN1YmNsYXNzIE1hcmtpbmdDb25zdHJh
aW50LgorY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0
cmFpbnQgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50
Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5T
aW1wbGVNYXJraW5nQ29uc3RyYWludCgpOworICAgIAorcHJpdmF0ZToKKyAgICBDb25zdHJhaW50
UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDkgKzk4LDcgQEAgU2xv
dFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFy
a2luZygpCiB7Ci0gICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlv
blNjb3BlOjpGdWxsKQotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1w
dHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cuCi0gICAgZWxzZQorICAgIGlmICho
ZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbikKICAgICAg
ICAgcmVzZXQoKTsKIAogICAgIGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IHZtKCku
aGVhcFByb2ZpbGVyKCkpCkBAIC0xMTEsNyArMTA5LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlk
U3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogewotICAgIFJFTEVB
U0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAw
OwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyID0gbnVs
bHB0cjsKQEAgLTIyMyw3ICsyMjAsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxP
ckF1eGlsaWFyCiAgICAgfSB9CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlND
ZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCit2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeUZlbmNlIGRlcGVuZGVuY3kpCiB7CiAgICAg
aWYgKFVOTElLRUxZKG1faGVhcFNuYXBzaG90QnVpbGRlcikpCiAgICAgICAgIG1faGVhcFNuYXBz
aG90QnVpbGRlci0+YXBwZW5kRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsKTsKQEAgLTIzMSwxMiAr
MjI4LDEyIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlNDZWxsKiBjZWwKICAgICBh
cHBlbmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kSGlkZGVuU2xvdyhKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5j
eSkKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiBjZWxsLCBEZXBl
bmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsKICAgICBhcHBlbmRIaWRkZW5TbG93SW1wbChjZWxs
LCBkZXBlbmRlbmN5KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRIaWRkZW5TbG93SW1wbChKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKK0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuU2xvd0ltcGwoSlNDZWxs
KiBjZWxsLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsKICAgICBBU1NFUlQoIW1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKTsKIApAQCAtMjUxLDcgKzI0OCw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGFpbmVyVHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0
TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0Nl
bGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29u
dGFpbmVyLCBKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3lGZW5jZSBkZXBlbmRlbmN5KQogewogICAg
IGlmIChjb250YWluZXIudGVzdEFuZFNldE1hcmtlZChjZWxsLCBkZXBlbmRlbmN5KSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjc3LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRv
TWFya1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUm
IGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAg
ICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFy
a2VkKCk7CkBAIC0zNDYsNyArMzQzLDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50
Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAgLTQzNSw3ICs0MzIsNyBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6dXBk
YXRlTXV0YXRvcklzU3RvcHBlZChjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0gICAgbV9tdXRh
dG9ySXNTdG9wcGVkID0gKG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICBtX211dGF0b3JJ
c1N0b3BwZWQgPSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3Rv
cHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKCkKQEAgLTQ1Miw3ICs0NDksNyBAQCBib29sIFNsb3RWaXNpdG9yOjpoYXNBY2tub3dsZWRn
ZWRUaGF0VGhlCiAKIGJvb2wgU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAuY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JT
dG9wcGVkTXV0YXRvcik7CisgICAgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFw
LndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4
ICs0ODcsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAg
ICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxl
bCgpOwogICAgIH0KLSAgICAKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBT
bG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVz
dGVkKQpAQCAtNTUwLDcgKzU0NSw2IEBAIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3Jl
bWVudE9mRHIKICAgICB9CiAKICAgICBkb25hdGVBbGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5
KCk7CiAKICAgICByZXR1cm4gYnl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1NSwxNiBA
QCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlk
UmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFj
aFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRp
ZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBy
ZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFs
bGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFy
a2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9y
OjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5t
X3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5
KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCk7CiB9CiAKQEAgLTU4MywxMiArNTc2LDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6
U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBi
b251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZl
KQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
LS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMr
KzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1h
c3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYyNCw1MSBAQCBO
RVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAg
ICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5t
X2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3Bh
cmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFw
Lm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAm
JiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rh
c2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZd
IChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwog
ICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAo
Ym9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGlsbCBiZSBydW5u
aW5nLCBhbmQgbWF5IHJ1biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRoZSB0YXNrCisg
ICAgICAgICAgICAvLyBvdXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFyb3VuZCB0cnlp
bmcgdG8gcnVuIHRoZSB0YXNrLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisgICAgICAgICAg
ICAgICAgICAgIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgIGJvbnVzVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFy
a2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHkoKSk7CisgICAg
ICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaXNB
Y3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAgLTY3MCwxNSArNjg4LDE5IEBAIFNsb3RWaXNpdG9y
OjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZH
Q01hcmtlcnMoKSA9PSAxCiAgICAgICAgIHx8IChtX2hlYXAubV93b3JsZFN0YXRlLmxvYWQoKSAm
IEhlYXA6Om11dGF0b3JXYWl0aW5nQml0KQogICAgICAgICB8fCAhbV9oZWFwLmhhc0hlYXBBY2Nl
c3MoKQotICAgICAgICB8fCBtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQoKSkgeworICAgICAgICB8fCBtX2hlYXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAg
ICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBvdmVyIGRyYWluSW5QYXJhbGxlbCgpIHdoZW4g
d2UgaGF2ZSBhIGNvbmN1cnJlbnQgbXV0YXRvciBidXQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0
IGlzIG5vdCBwcm9maXRhYmxlLgogICAgICAgICByZXR1cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVv
dXQpOwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRl
eCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9uYXRlQWxsKGhvbGRMb2Nr
KG1faGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3YWl0Rm9yVGVybWluYXRpb24o
dGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRv
cjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgZm9yICg7Oykg
ewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkBAIC03MTEsNjEgKzczMyw2IEBAIHZvaWQgU2xv
dFZpc2l0b3I6OmRvbmF0ZUFsbChjb25zdCBBYnN0cmEKICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZE9w
YXF1ZVJvb3Qodm9pZCogcm9vdCkKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKLSAgICAg
ICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX2hl
YXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUg
ZXZlcnkgb25jZSBpbgotICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2Fs
IHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0
YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotfQotCi1ib29sIFNsb3RWaXNp
dG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJv
b3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoIW1faXNJblBhcmFs
bGVsTW9kZSk7Ci0gICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3Qp
OwotfQotCi1UcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUo
dm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBGYWxz
ZVRyaVN0YXRlOwotICAgIAotICAgIGlmIChtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQot
ICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgIGlmIChtX2hlYXAubV9vcGFxdWVS
b290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vz
c2FyeSgpCi17Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJn
ZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVz
aG9sZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotICAg
IAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAgICBpZiAoIW1faXNJblBhcmFsbGVs
TW9kZSkgewpAQCAtNzg1LDE2ICs3NTIsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmRE
cmFpbihNb25vdG9uCiAgICAgZHJhaW4odGltZW91dCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6
Om1lcmdlT3BhcXVlUm9vdHMoKQotewotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgICAgIGZvciAoYXV0byog
cm9vdCA6IG1fb3BhcXVlUm9vdHMpCi0gICAgICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5h
ZGQocm9vdCk7Ci0gICAgfQotICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLX0KLQogdm9pZCBT
bG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVz
dGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1
ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUg
Ik9wYXF1ZVJvb3RTZXQuaCIKICNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3
dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk1
LDEwICs5NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
VmFsdWUpOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOworICAgIGJvb2wg
YWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3
LgogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZv
aWQqKSBjb25zdDsKLSAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lk
KikgY29uc3Q7CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogCiAg
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYg
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKQEAgLTEyMSw2ICsxMTksOCBAQCBwdWJsaWM6
CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0
aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1
bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRG
b3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRy
YWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4g
VGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3Mg
dGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpA
QCAtMTI4LDggKzEyOCw2IEBAIHB1YmxpYzoKICAgICAvLyByYXJlIGNhc2VzIGhhcHBlbiB0ZW1w
b3JhcmlseSBldmVuIGlmIHdlJ3JlIG5vdCByZWFjaGluZyB0ZXJtaW5hdGlvbikuCiAgICAgc2l6
ZV90IHBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKHNpemVfdCBieXRlcyk7CiAgICAgCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZUlmTmVjZXNzYXJ5KCk7Ci0KICAgICAvLyBUaGlz
IGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUg
a2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFj
ZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KICAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29u
c3Qgdm9pZCogYmFzZSk7CkBAIC0xNzgsMTIgKzE3NiwxMiBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkoSGVhcENlbGwqKTsKIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYXBwZW5kU2xvdyhKU0NlbGwqLCBEZXBlbmRlbmN5KTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiwgRGVwZW5kZW5jeSk7
Ci0gICAgdm9pZCBhcHBlbmRIaWRkZW5TbG93SW1wbChKU0NlbGwqLCBEZXBlbmRlbmN5KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiwgRGVwZW5kZW5jeUZl
bmNlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZEhpZGRlblNsb3coSlNDZWxs
KiwgRGVwZW5kZW5jeUZlbmNlKTsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblNsb3dJbXBsKEpTQ2Vs
bCosIERlcGVuZGVuY3lGZW5jZSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFp
bmVyVHlwZT4KLSAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5l
clR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5KTsKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVu
ZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5RmVuY2UpOwog
ICAgIAogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CiAgICAgCkBAIC0xOTQs
MTAgKzE5Miw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNl
bGwoSGVhcENlbGwqKTsKICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLQotICAg
IHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9pZCB2aXNpdENo
aWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxl
bCgpOwpAQCAtMjE1LDcgKzIwOSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSBt
X2NvbGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAg
IE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVj
dHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIGJvb2wgbV9p
Z25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBt
b2RlLgogICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsOSArNDUsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFVuCiAgICAgaWYgKCFjZWxsKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OworICAgIERlcGVuZGVuY3lGZW5jZSBkZXBlbmRlbmN5
OwogICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKSkgewotICAgICAg
ICBkZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKTsKICAgICAgICAgaWYgKExJS0VMWShjZWxs
LT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkgewogICAgICAgICAgICAgaWYgKExJS0VM
WSghbV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC04
NCw5ICs4Myw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKICAg
ICBpZiAoIWNlbGwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3k7CisgICAgRGVwZW5kZW5jeUZlbmNlIGRlcGVuZGVuY3k7CiAgICAgaWYgKFVOTElLRUxZ
KGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpKSB7Ci0gICAgICAgIGRlcGVuZGVuY3kgPSBudWxs
RGVwZW5kZW5jeSgpOwogICAgICAgICBpZiAoTElLRUxZKGNlbGwtPmxhcmdlQWxsb2NhdGlvbigp
LmlzTWFya2VkKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7CkBAIC0xMzYs
NiArMTM0LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZp
c2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQocHRyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJldHVybiB0
cnVlOworfQorCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZv
aWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRh
aW5zKHB0cik7Cit9CisKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKG1faXNGaXJzdFZpc2l0KSB7CkBAIC0x
NTksMTIgKzE3NCwxMiBAQCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAog
CiBpbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92
bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RW
aXNpdG9yOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1
cm4gKm1faGVhcC52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtl
ZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNp
bmNsdWRlICJQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVj
dGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKQEAgLTg4LDUgKzg5
LDQyIEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4g
U3Vic3BhY2U6OnBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDog
cHVibGljIFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgcHVibGljOgorICAg
ICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2Fs
bG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBNYXJrZWRBbGxv
Y2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRvckluU3Vic3Bh
Y2UoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICAg
ICAgTG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRh
c2sobV9maXJzdEFsbG9jYXRvcikpOworfQorCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9j
azo6SGFuZGxlKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJj
ZSgpCit7CisgICAgcmV0dXJuIGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxv
Y2F0b3IqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4oCisgICAgICAgIHBhcmFsbGVsQWxsb2NhdG9y
U291cmNlKCksCisgICAgICAgIFtdIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVm
UHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAgICAgICAgIGlm
ICghYWxsb2NhdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRvci0+cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAg
ICAgIH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNyArNjksMjQgQEAg
cHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQWxs
b2NhdG9yKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRB
bGxvY2F0b3IqKCk+PiBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpOworICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVu
YyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNo
Tm90RW1wdHlNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAgICAgCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVs
Tm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmMmKTsKICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENl
bGwoY29uc3QgRnVuYyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJ
blBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAg
ICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw2ICs4NCw1MyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChj
b25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhTdWJzcGFj
ZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgICAgICA6IG1fc3Vic3BhY2Uo
c3Vic3BhY2UpCisgICAgICAgICAgICAsIG1fYmxvY2tTb3VyY2Uoc3Vic3BhY2UucGFyYWxsZWxO
b3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCkpCisgICAgICAgICAgICAsIG1fZnVuYyhmdW5jKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcnVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKKyAgICAg
ICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25T
dGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGNlbGwsIGtp
bmQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICAgICAgICAgIGlmICghbV9uZWVkVG9WaXNpdExhcmdlQWxsb2Nh
dGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBtX25l
ZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX3N1YnNwYWNlLmZvckVhY2hMYXJnZUFsbG9jYXRpb24oCisg
ICAgICAgICAgICAgICAgWyZdIChMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb24tPmlzTWFya2VkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgYWxsb2NhdGlvbi0+Y2VsbCgpLCBtX3N1YnNwYWNl
Lm1fYXR0cmlidXRlcy5jZWxsS2luZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vic3BhY2UmIG1fc3Vic3BhY2U7Cisg
ICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBtX2Jsb2Nr
U291cmNlOworICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAg
ICAgIGJvb2wgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgeyB0cnVlIH07CisgICAgfTsK
KyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMsIGZ1bmMpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvckVhY2hNYXJrZWRCbG9jaygKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgewor
cHVibGljOgorICAgIFZpc2l0Q291bnRlcigpIHsgfQorICAgIAorICAgIFZpc2l0Q291bnRlcihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCisgICAg
ICAgICwgbV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1f
dmlzaXRvcjsgfQorICAgIAorICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3Zpc2l0b3ItPnZpc2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291
bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsg
bnVsbHB0ciB9OworICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zp
c2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgi
Ci0jaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoKLSAgICBWaXNpdGluZ1Rp
bWVvdXQoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCi0gICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKLSAg
ICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCi0gICAgICAg
ICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3Qgdmlz
aXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKLSAgICB9Ci0KLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNp
dG9yKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZp
c2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgot
ICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6ZV90IG1fdmlz
aXRDb3VudEJlZm9yZSB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtCbG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lk
IFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAg
ICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1hcmtpbmdWZXJzaW9uLCBq
c1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5n
VmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgCiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1Zh
bHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zODIsNyArMzgyLDcgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNp
dAogICAgIHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAgICAgbGFz
dE9mZnNldCA9IHN0cnVjdHVyZS0+bGFzdE9mZnNldCgpOwogICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOwotICAgIERlcGVuZGVuY3kgaW5k
ZXhpbmdUeXBlRGVwZW5kZW5jeSA9IGRlcGVuZGVuY3koaW5kZXhpbmdUeXBlKTsKKyAgICBEZXBl
bmRlbmN5RmVuY2UgaW5kZXhpbmdUeXBlRGVwZW5kZW5jeShpbmRleGluZ1R5cGUpOwogICAgIExv
Y2tlcjxKU0NlbGw+IGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwogICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKSB7CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKQEAg
LTM5NiwxMyArMzk2LDEzIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlz
aXQKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgYnV0dGVyZmx5ID0g
Y29uc3VtZSh0aGlzLCBpbmRleGluZ1R5cGVEZXBlbmRlbmN5KS0+YnV0dGVyZmx5KCk7Ci0gICAg
RGVwZW5kZW5jeSBidXR0ZXJmbHlEZXBlbmRlbmN5ID0gZGVwZW5kZW5jeShidXR0ZXJmbHkpOwor
ICAgIGJ1dHRlcmZseSA9IGluZGV4aW5nVHlwZURlcGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+YnV0
dGVyZmx5KCk7CisgICAgRGVwZW5kZW5jeUZlbmNlIGJ1dHRlcmZseURlcGVuZGVuY3koYnV0dGVy
Zmx5KTsKICAgICBpZiAoIWJ1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAg
ICBpZiAoY29uc3VtZSh0aGlzLCBidXR0ZXJmbHlEZXBlbmRlbmN5KS0+c3RydWN0dXJlSUQoKSAh
PSBzdHJ1Y3R1cmVJRCkKKyAgICBpZiAoYnV0dGVyZmx5RGVwZW5kZW5jeS5jb25zdW1lKHRoaXMp
LT5zdHJ1Y3R1cmVJRCgpICE9IHN0cnVjdHVyZUlEKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAoY29uc3VtZShzdHJ1Y3R1cmUsIGJ1dHRlcmZseURlcGVuZGVuY3kpLT5sYXN0T2Zm
c2V0KCkgIT0gbGFzdE9mZnNldCkKKyAgICBpZiAoYnV0dGVyZmx5RGVwZW5kZW5jeS5jb25zdW1l
KHN0cnVjdHVyZSktPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0
aWVzKHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLCBsYXN0T2Zmc2V0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzU0LDYgKzM1NCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZUFzeW5jSXRlcmF0aW9uID0g
ZmEKICAgICBcCiAgICAgdih1bnNpZ25lZCwgbWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmVi
YWxhbmNlLCAxMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9m
R0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoOCksIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoYm9vbCwgdXNlUGFyYWxsZWxNYXJraW5nQ29uc3RyYWludFNvbHZlciwgdHJ1ZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgb3BhcXVlUm9vdE1lcmdlVGhyZXNo
b2xkLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgbWluSGVhcFV0aWxp
emF0aW9uLCAwLjgsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBtaW5NYXJrZWRC
bG9ja1V0aWxpemF0aW9uLCAwLjksIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5n
R0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVy
biAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fZ2xvYmFs
T2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90
b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFy
a2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8
ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0
dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAgICByZXR1cm4gSGVh
cDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0
aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE3LTEy
LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3Ry
YWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGRvZXMgc29tZSBjaGFuZ2VzIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIGRvIHBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZzoKKyAgICAg
ICAgCisgICAgICAgIC0gSSBmaW5hbGx5IHJlbW92ZWQgZGVwZW5kZW5jeVdpdGguIFRoaXMgd2Fz
IGEgc2lsbHkgY29uc3RydWN0IHdob3NlIG9ubHkgcHVycG9zZSBpcyB0byBjb25mdXNlCisgICAg
ICAgICAgcGVvcGxlIGFib3V0IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIGRlcGVuZGVuY3kgY2hh
aW4uIEkgdG9vayB0aGF0IGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdyZWFseQorICAgICAgICAgIHNp
bXBsaWZ5IHRoZSBHQydzIHVzZSBvZiBkZXBlbmRlbmN5IGNoYWluaW5nLgorICAgICAgICAKKyAg
ICAgICAgLSBBZGRlZCBtb3JlIGxvZ2ljIHRvIERlcXVlPD4sIHNpbmNlIEkgdXNlIGl0IGZvciBw
YXJ0IG9mIHRoZSBsb2FkIGJhbGFuY2VyLgorICAgICAgICAKKyAgICAgICAgLSBNYWRlIGl0IHBv
c3NpYmxlIHRvIHByb2ZpbGUgbG9jayBjb250ZW50aW9uLiBTZWUKKyAgICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMjUwI2MwIGZvciBzb21lIHByZWxp
bWluYXJ5IG1lYXN1cmVtZW50cy4KKyAgICAgICAgCisgICAgICAgIC0gSW50cm9kdWNlZCBob2xk
TG9ja0lmLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBlcmZvcm0gcHJlZGljYXRlZCBsb2NrIGFj
cXVpc2l0aW9uLiBXZSB1c2UgdGhhdAorICAgICAgICAgIHRvIHBpY2sgYSBsb2NrIGluIFdlYkNv
cmUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpkZXBlbmRlbmN5KToKKyAgICAgICAgKFdU
Rjo6RGVwZW5kZW5jeVdpdGg6OkRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6ZGVwZW5kZW5jeVdpdGgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
ICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRySGFzaFNl
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3Vy
cmVudFB0ckhhc2hTZXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6fkNv
bmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6
OmRlbGV0ZU9sZFRhYmxlcyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpj
bGVhcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3cpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9Db25j
dXJyZW50UHRySGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhh
c2hTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFk
ZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpzaXplIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjptYXhMb2FkIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6Omhhc2gpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50UHRySGFzaFNldDo6Y2FzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQ
dHJIYXNoU2V0Ojpjb250YWluc0ltcGwgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
UHRySGFzaFNldDo6YWRkSW1wbCk6CisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIChX
VEY6OmlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxv
Yy5oOgorICAgICAgICAqIHd0Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6Omxv
Y2tTbG93KToKKyAgICAgICAgKiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChXVEY6OmhvbGRMb2Nr
SWYpOgorICAgICAgICAqIHd0Zi9TY29wZWRMYW1iZGEuaDoKKyAgICAgICAgKiB3dGYvU2hhcmVk
VGFzay5oOgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUpOgorICAg
ICAgICAoV1RGOjpTaGFyZWRUYXNrPFJlc3VsdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0
Zi9TdGFja1Nob3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6U3RhY2tTaG90
KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpT
dGFja1Nob3Q6OmFycmF5IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6
U3RhY2tTaG90OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojppc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0
b3I+IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpkZWxldGVkVmFsdWVBcnJheSk6
CisgICAgICAgIChXVEY6OlN0YWNrU2hvdEhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpTdGFj
a1Nob3RIYXNoOjplcXVhbCk6CisgICAgICAgICogd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6U3RhY2tTaG90UHJvZmlsZXIp
OgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cHJvZmlsZSk6CisgICAgICAgIChX
VEY6OlN0YWNrU2hvdFByb2ZpbGVyOjpydW4pOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBm
b3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2luIFBC
WEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJp
bmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi87IH07CiAJ
CTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJD
QTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKKwkJMEYzMENCNUExRkNERjEzNDAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJy
ZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBB
dXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAg
Ki87IH07CiAJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3NDFGMjNENDlB
MDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovOyB9OwogCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZE
NkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50
U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4Myw2ICsxODQsOCBAQAogCQkwRjMwQkE4RDFFNzg3MDhF
MDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
MEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzBCQThGMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyog
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJFQjRBIC8q
IExvY2tBbGdvcml0aG1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG1Jbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQwMDND
RkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBX
ZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNiw2ICsyMjksOCBAQAogCQkwRjlE
MzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcgLyogUHJp
bnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRTdHJlYW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDQxRkQxQzM3QjAwNzlDNUIy
IC8qIFN0YWNrU2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1No
b3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDUxRkQxQzM3QjAwNzlD
NUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgx
MEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNo
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdF
Mzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN5c3RlbVRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MCw2ICsy
NTUsNyBAQAogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRjRCNEM0MUU4ODkzOUMwMERCQkU4NiAvKiBMaXZlbmVzcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBh
cmlzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlz
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQkNCRkExRkQzN0UwRjAwNzJB
QUYwIC8qIFN0YW1wZWRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
YW1wZWRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkYxOURBMUJCMzM0
RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVy
UG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBv
b2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZG
MEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC03OTQsNiArODAwLDggQEAKIAkJCQkwRjhGMkI5
MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3
MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVBQjFGNENENjFF
MDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1ODFGQ0RGMTMz
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBGMzBDQjU5MUZD
REYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJCTBGREI2OThE
MUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEyNjFFQjRFMDY4
MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5NTdE
IC8qIENQVVRpbWUuaCAqLywKQEAgLTEwMDUsMTAgKzEwMTMsMTMgQEAKIAkJCQlBOEE0NzMwRDE1
MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0
MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdGFja0JvdW5kcy5oICovLAorCQkJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBT
dGFja1Nob3QuaCAqLywKKwkJCQkwRjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90
UHJvZmlsZXIuaCAqLywKIAkJCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0
cy5jcHAgKi8sCiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAq
LywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8sCiAJ
CQkJRUY3RDZDRDU5RDg2NDJBOEEwREE4NkFEIC8qIFN0YWNrVHJhY2UuaCAqLywKKwkJCQkwRkZC
Q0JGQTFGRDM3RTBGMDA3MkFBRjAgLyogU3RhbXBlZExvY2suaCAqLywKIAkJCQlBOEE0NzMxMTE1
MUE4MjVCMDA0MTIzRkYgLyogU3RkTGliRXh0cmFzLmggKi8sCiAJCQkJQzRGOEE5MzYxOUM2NUVC
NDAwQjJCMTVEIC8qIFN0b3B3YXRjaC5oICovLAogCQkJCTFBNkJCNzY4MTYyRjMwMDUwMEREMTZE
QiAvKiBTdHJlYW1CdWZmZXIuaCAqLywKQEAgLTE0MjYsNiArMTQzNyw3IEBACiAJCQkJMEY4MjRB
NjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFGMTc1MkIxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRDb2RlcnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGMTc1MkMxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnREZWNvZGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyRDFGM0Q0ODYw
MDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
RDMzNjIxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQXRv
bWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksMTEzICszMzksMTE3IEBAIGlubGluZSB2b2lk
IGNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCkgeyAKIAogI2VuZGlmCiAKLXR5cGVkZWYgdW5zaWdu
ZWQgRGVwZW5kZW5jeTsKK3R5cGVkZWYgdW5zaWduZWQgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZTsK
IAotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5KCkKK2lubGluZSBJbnRl
cm5hbERlcGVuZGVuY3lUeXBlIHByZXBhcmVPcGFxdWVEZXBlbmRlbmN5SW1wbCgpCiB7CiAgICAg
cmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHMsIHR5cGVuYW1lIFQ+CitpbmxpbmUgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBwcmVwYXJlT3Bh
cXVlRGVwZW5kZW5jeUltcGwoQXJndW1lbnRzLi4uIGFyZ3VtZW50cywgVCB2YWx1ZSkKIHsKLSAg
ICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgLy8gQ3JlYXRlIGEgbWFnaWNh
bCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgot
ICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4g
dXNhYmxlIGFzIGFuIG9mZnNldCBpbgotICAgIC8vIGZ1cnRoZXIgYWRkcmVzcyBjb21wdXRhdGlv
bnM6IGFkZGluZyB6ZXJvIGRvZXMgbm90aGluZywgYnV0IHRoZSBjb21waWxlcgotICAgIC8vIGRv
ZXNuJ3Qga25vdyBpdC4gSXQncyBtYWdpY2FsIGJlY2F1c2UgaXQgY3JlYXRlcyBhbiBhZGRyZXNz
IGRlcGVuZGVuY3kKLSAgICAvLyBmcm9tIHRoZSBsb2FkIG9mIGBsb2NhdGlvbmAgdG8gdGhlIHVz
ZXMgb2YgdGhlIGRlcGVuZGVuY3ksIHdoaWNoIHRyaWdnZXJzCi0gICAgLy8gdGhlIEFSTSBJU0En
cyBhZGRyZXNzIGRlcGVuZGVuY3kgcnVsZSwgYS5rLmEuIHRoZSBteXRoaWNhbCBDKysgY29uc3Vt
ZQotICAgIC8vIG9yZGVyaW5nLiBUaGlzIGZvcmNlcyB3ZWFrIG1lbW9yeSBvcmRlciBDUFVzIHRv
IG9ic2VydmUgYGxvY2F0aW9uYCBhbmQKLSAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIg
c3RvcmUgb3JkZXIgd2l0aG91dCB0aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgotICAgIC8vIG9y
IGFuIGFjcXVpcmUgbG9hZC4KLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAl
d1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAg
OiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5k
ZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRl
bmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgLy8gTm8gZGVwZW5k
ZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgotICAgIGxvYWRMb2FkRmVuY2Uo
KTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gZGVwZW5kZW5jeTsKKyAgICB1bmlvbiB7CisgICAgICAgIEludGVybmFsRGVw
ZW5kZW5jeVR5cGUgY29weTsKKyAgICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5
ID0gMDsKKyAgICB1LnZhbHVlID0gdmFsdWU7CisgICAgcmV0dXJuIHByZXBhcmVPcGFxdWVEZXBl
bmRlbmN5SW1wbChhcmd1bWVudHMuLi4pICsgdS5jb3B5OwogfQogCi0vLyBGSVhNRTogVGhpcyBj
b2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIGRlcGVuZGVuY3koKSBvdmVybG9h
ZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDUKLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0g
ND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50MzJfdCBjb3B5
ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSk7CitjbGFzcyBPcGFxdWVEZXBlbmRlbmN5
IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgT3Bh
cXVlRGVwZW5kZW5jeShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1fdmFsdWUo
cHJlcGFyZU9wYXF1ZURlcGVuZGVuY3lJbXBsKGFyZ3VtZW50cy4uLikpCisgICAgeworICAgICAg
ICBVTlVTRURfUEFSQU0obV92YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBJbnRl
cm5hbERlcGVuZGVuY3lUeXBlIG1fdmFsdWU7Cit9OworCisvLyBPbiBUU08gYXJjaGl0ZWN0dXJl
cywgY29uc3RydWN0aW5nIHRoaXMgaXMgYSBsb2FkLWxvYWQgZmVuY2UgYW5kIGNvbnN1bWluZyBp
dCBpcyBhbiBpZGVudGl0eS4gVGhlCisvLyBsb2FkLWxvYWQgZmVuY2UgaXMgdXN1YWxseSBqdXN0
IGEgY29tcGlsZXIgZmVuY2UuIE9uIEFSTSwgdGhpcyBlbmFibGVzIHlvdSB0byB0aHJlYWQgYW4g
aW52aXNpYmxlCisvLyBkZXBlbmRlbmN5IGZyb20gb25lIHNldCBvZiB2YWx1ZXMgdG8gc29tZSBw
b2ludGVyIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBwb2ludGVyJ3MgdmFsdWUuCitjbGFzcyBEZXBl
bmRlbmN5RmVuY2UgeworcHVibGljOgorICAgIERlcGVuZGVuY3lGZW5jZSgpCisgICAgICAgIDog
bV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIGV4cGxpY2l0IERlcGVuZGVuY3lGZW5jZShBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBpbnB1dCA9IHBy
ZXBhcmVPcGFxdWVEZXBlbmRlbmN5SW1wbChhcmd1bWVudHMuLi4pOworICAgICAgICBJbnRlcm5h
bERlcGVuZGVuY3lUeXBlIG91dHB1dDsKICNpZiBDUFUoQVJNNjQpCi0gICAgYXNtKCJlb3IgJXdb
ZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIi
KGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICAvLyBDcmVh
dGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNzZW1ibHksIHdob3NlIGNv
bXB1dGF0aW9uCisgICAgICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhp
cyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgorICAgICAgICAvLyBmdXJ0aGVy
IGFkZHJlc3MgY29tcHV0YXRpb25zOiBhZGRpbmcgemVybyBkb2VzIG5vdGhpbmcsIGJ1dCB0aGUg
Y29tcGlsZXIKKyAgICAgICAgLy8gZG9lc24ndCBrbm93IGl0LiBJdCdzIG1hZ2ljYWwgYmVjYXVz
ZSBpdCBjcmVhdGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeQorICAgICAgICAvLyBmcm9tIHRoZSBs
b2FkIG9mIGBsb2NhdGlvbmAgdG8gdGhlIHVzZXMgb2YgdGhlIGRlcGVuZGVuY3ksIHdoaWNoIHRy
aWdnZXJzCisgICAgICAgIC8vIHRoZSBBUk0gSVNBJ3MgYWRkcmVzcyBkZXBlbmRlbmN5IHJ1bGUs
IGEuay5hLiB0aGUgbXl0aGljYWwgQysrIGNvbnN1bWUKKyAgICAgICAgLy8gb3JkZXJpbmcuIFRo
aXMgZm9yY2VzIHdlYWsgbWVtb3J5IG9yZGVyIENQVXMgdG8gb2JzZXJ2ZSBgbG9jYXRpb25gIGFu
ZAorICAgICAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIgc3RvcmUgb3JkZXIgd2l0aG91
dCB0aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgorICAgICAgICAvLyBvciBhbiBhY3F1aXJlIGxv
YWQuCisgICAgICAgIGFzbSgiZW9yICV3W291dF0sICV3W2luXSwgJXdbaW5dIgorICAgICAgICAg
ICAgOiBbb3V0XSAiPXIiKG91dHB1dCkKKyAgICAgICAgICAgIDogW2luXSAiciIoaW5wdXQpKTsK
ICNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5d
IgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2lu
XSAiciIoY29weSkpOworICAgICAgICBhc20oImVvciAlW291dF0sICVbaW5dLCAlW2luXSIKKyAg
ICAgICAgICAgIDogW291dF0gIj1yIihvdXRwdXQpCisgICAgICAgICAgICA6IFtpbl0gInIiKGlu
cHV0KSk7CiAjZWxzZQotICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsK
LSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVl
ZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgbG9hZExvYWRGZW5jZSgpOworICAg
ICAgICBvdXRwdXQgPSAwOworICAgICAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwogI2VuZGlmCi0g
ICAgcmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRl
cGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUq
ID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdpdGggewotcHVi
bGljOgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5KG51bGxEZXBl
bmRlbmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQorICAgICAgICBtX3ZhbHVlID0gb3V0cHV0Owor
ICAgIH0KKyAgICAKKyAgICBEZXBlbmRlbmN5RmVuY2UoY29uc3QgRGVwZW5kZW5jeUZlbmNlJiBv
dGhlcikKKyAgICAgICAgOiBtX3ZhbHVlKG90aGVyLm1fdmFsdWUpCiAgICAgewogICAgIH0KICAg
ICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZh
bHVlKQotICAgICAgICA6IGRlcGVuZGVuY3koZGVwZW5kZW5jeSkKLSAgICAgICAgLCB2YWx1ZSh2
YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSBUKiBjb25zdW1lKFQq
IHBvaW50ZXIpCiAgICAgeworI2lmIENQVShBUk02NCkgfHwgQ1BVKEFSTSkKKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPihwb2ludGVyKSArIG1fdmFs
dWUpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1fdmFsdWUpOworICAgICAgICByZXR1
cm4gcG9pbnRlcjsKKyNlbmRpZgogICAgIH0KICAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3k7Ci0gICAgVCB2YWx1ZTsKK3ByaXZhdGU6CisgICAgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBt
X3ZhbHVlOwogfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRUeXBlLCB0eXBlbmFtZSBWYWx1
ZVR5cGU+CitzdHJ1Y3QgSW5wdXRBbmRWYWx1ZSB7CisgICAgSW5wdXRBbmRWYWx1ZSgpIHsgfQog
ICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBl
bmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAg
IHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19CisgICAgSW5w
dXRBbmRWYWx1ZShJbnB1dFR5cGUgaW5wdXQsIFZhbHVlVHlwZSB2YWx1ZSkKKyAgICAgICAgOiBp
bnB1dChpbnB1dCkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIElucHV0VHlwZSBpbnB1dDsKKyAgICBWYWx1ZVR5cGUgdmFsdWU7Cit9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KQordGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5
cGU+CitJbnB1dEFuZFZhbHVlPElucHV0VHlwZSwgVmFsdWVUeXBlPiBpbnB1dEFuZFZhbHVlKElu
cHV0VHlwZSBpbnB1dCwgVmFsdWVUeXBlIHZhbHVlKQogewotI2lmIENQVShBUk02NCkgfHwgQ1BV
KEFSTSkKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBv
aW50ZXIpICsgZGVwZW5kZW5jeSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXBlbmRlbmN5
KTsKLSAgICByZXR1cm4gcG9pbnRlcjsKLSNlbmRpZgorICAgIHJldHVybiBJbnB1dEFuZFZhbHVl
PElucHV0VHlwZSwgVmFsdWVUeXBlPihpbnB1dCwgdmFsdWUpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBGdW5jPgpAQCAtNDY4LDEyICs0NzIsMTAgQEAgQUxXQVlTX0lOTElO
RSBUJiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKgogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5n
IFdURjo6QXRvbWljOwotdXNpbmcgV1RGOjpEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpEZXBlbmRl
bmN5V2l0aDsKLXVzaW5nIFdURjo6Y29uc3VtZTsKLXVzaW5nIFdURjo6ZGVwZW5kZW5jeTsKLXVz
aW5nIFdURjo6ZGVwZW5kZW5jeVdpdGg7Cit1c2luZyBXVEY6Ok9wYXF1ZURlcGVuZGVuY3k7Cit1
c2luZyBXVEY6OkRlcGVuZGVuY3lGZW5jZTsKK3VzaW5nIFdURjo6SW5wdXRBbmRWYWx1ZTsKK3Vz
aW5nIFdURjo6aW5wdXRBbmRWYWx1ZTsKIHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsKLXVzaW5n
IFdURjo6bnVsbERlcGVuZGVuY3k7CiAKICNlbmRpZiAvLyBBdG9taWNzX2gKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZl
Y3Rvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhp
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOworICAg
ICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDEzICs0MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXRtYXBTaXplOwog
ICAgIH0KIAotICAgIGJvb2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5
KCkpIGNvbnN0OworICAgIGJvb2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeUZlbmNlID0gRGVwZW5k
ZW5jeUZlbmNlKCkpIGNvbnN0OwogICAgIHZvaWQgc2V0KHNpemVfdCk7CiAgICAgdm9pZCBzZXQo
c2l6ZV90LCBib29sKTsKICAgICBib29sIHRlc3RBbmRTZXQoc2l6ZV90KTsKICAgICBib29sIHRl
c3RBbmRDbGVhcihzaXplX3QpOwotICAgIGJvb2wgY29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90
LCBEZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKSk7Ci0gICAgYm9vbCBjb25jdXJyZW50VGVz
dEFuZENsZWFyKHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5KCkpOworICAgIGJv
b2wgY29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90LCBEZXBlbmRlbmN5RmVuY2UgPSBEZXBlbmRl
bmN5RmVuY2UoKSk7CisgICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZENsZWFyKHNpemVfdCwgRGVw
ZW5kZW5jeUZlbmNlID0gRGVwZW5kZW5jeUZlbmNlKCkpOwogICAgIHNpemVfdCBuZXh0UG9zc2li
bHlVbnNldChzaXplX3QpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lk
IGNsZWFyQWxsKCk7CkBAIC0xMzYsOSArMTM2LDkgQEAgaW5saW5lIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OkJpdAogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5h
bWUgV29yZFR5cGU+Ci1pbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpn
ZXQoc2l6ZV90IG4sIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkgY29uc3QKK2lubGluZSBib29sIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmdldChzaXplX3QgbiwgRGVwZW5kZW5jeUZlbmNl
IGRlcGVuZGVuY3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplICsg
ZGVwZW5kZW5jeV0gJiAob25lIDw8IChuICUgd29yZFNpemUpKSk7CisgICAgcmV0dXJuICEhKGRl
cGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+Yml0c1tuIC8gd29yZFNpemVdICYgKG9uZSA8PCAobiAl
IHdvcmRTaXplKSkpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUg
V29yZFR5cGU+CkBAIC0xNzcsMTEgKzE3NywxMSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFw
U2l6ZSwgV29yZFR5cGU+CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFt
ZSBXb3JkVHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5
cGU+Ojpjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KQorQUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1
cnJlbnRUZXN0QW5kU2V0KHNpemVfdCBuLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsK
ICAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwogICAgIHNpemVfdCBp
bmRleCA9IG4gLyB3b3JkU2l6ZTsKLSAgICBXb3JkVHlwZSogZGF0YSA9IGJpdHMuZGF0YSgpICsg
aW5kZXggKyBkZXBlbmRlbmN5OworICAgIFdvcmRUeXBlKiBkYXRhID0gZGVwZW5kZW5jeS5jb25z
dW1lKGJpdHMuZGF0YSgpKSArIGluZGV4OwogICAgIHJldHVybiAhYml0d2lzZV9jYXN0PEF0b21p
YzxXb3JkVHlwZT4qPihkYXRhKS0+dHJhbnNhY3Rpb25SZWxheGVkKAogICAgICAgICBbJl0gKFdv
cmRUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBpZiAodmFsdWUgJiBtYXNrKQpA
QCAtMTkzLDExICsxOTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXpl
LCBXbwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3Vy
cmVudFRlc3RBbmRDbGVhcihzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQorQUxXQVlT
X0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1cnJlbnRUZXN0
QW5kQ2xlYXIoc2l6ZV90IG4sIERlcGVuZGVuY3lGZW5jZSBkZXBlbmRlbmN5KQogewogICAgIFdv
cmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7CiAgICAgc2l6ZV90IGluZGV4ID0g
biAvIHdvcmRTaXplOwotICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5kYXRhKCkgKyBpbmRleCAr
IGRlcGVuZGVuY3k7CisgICAgV29yZFR5cGUqIGRhdGEgPSBkZXBlbmRlbmN5LmNvbnN1bWUoYml0
cy5kYXRhKCkpICsgaW5kZXg7CiAgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRU
eXBlPio+KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCiAgICAgICAgIFsmXSAoV29yZFR5cGUm
IHZhbHVlKSAtPiBib29sIHsKICAgICAgICAgICAgIGlmICghKHZhbHVlICYgbWFzaykpCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDcgQEAgc2V0KFdURl9I
RUFERVJTCiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29t
cGlsZXIuaAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKICAgICBDb25kaXRpb24uaAogICAg
IENyb3NzVGhyZWFkQ29waWVyLmgKICAgICBDcm9zc1RocmVhZFRhc2suaApAQCAtMTMyLDggKzEz
MywxMSBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxs
UHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCisgICAgU3RhY2tTaG90LmgKKyAgICBTdGFja1No
b3RQcm9maWxlci5oCiAgICAgU3RhY2tTdGF0cy5oCiAgICAgU3RhY2tUcmFjZS5oCisgICAgU3Rh
bXBlZExvY2suaAogICAgIFN0ZExpYkV4dHJhcy5oCiAgICAgU3RvcHdhdGNoLmgKICAgICBTdHJp
bmdFeHRyYXMuaApAQCAtMjE4LDYgKzIyMiw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIENQVVRp
bWUuY3BwCiAgICAgQ2xvY2tUeXBlLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAorICAg
IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAg
IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29u
Y3VycmVudFB0ckhhc2hTZXQuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCitDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQo
KQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25j
dXJyZW50UHRySGFzaFNldCgpCit7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRl
bGV0ZU9sZFRhYmxlcygpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMg
bm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1p
Z2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQg
bWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAg
IG1fYWxsVGFibGVzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVl
X3B0cjxUYWJsZT4mIHRhYmxlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS5n
ZXQoKSAhPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIH0pOworfQorCit2b2lkIENv
bmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcigpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNh
c2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQo
KS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRp
ZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
IAorICAgIAorICAgIG1fYWxsVGFibGVzLmNsZWFyKCk7CisgICAgaW5pdGlhbGl6ZSgpOworfQor
Cit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKCkKK3sKKyAgICBjb25zdGV4
cHIgdW5zaWduZWQgaW5pdGlhbFNpemUgPSAzMjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+
IHRhYmxlID0gVGFibGU6OmNyZWF0ZShpbml0aWFsU2l6ZSk7CisgICAgbV90YWJsZS5zdG9yZVJl
bGF4ZWQodGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKHRhYmxl
KSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3coVGFibGUqIHRhYmxl
LCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9p
ZCogcHRyKQoreworICAgIGlmICh0YWJsZS0+bG9hZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJsZS0+
bWF4TG9hZCgpKQorICAgICAgICByZXR1cm4gcmVzaXplQW5kQWRkKHB0cik7CisgICAgCisgICAg
Zm9yICg7OykgeworICAgICAgICB2b2lkKiBvbGRFbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0u
Y29tcGFyZUV4Y2hhbmdlU3Ryb25nKG51bGxwdHIsIHB0cik7CisgICAgICAgIGlmICghb2xkRW50
cnkpIHsKKyAgICAgICAgICAgIGlmIChtX3RhYmxlLmxvYWQoKSAhPSB0YWJsZSkgeworICAgICAg
ICAgICAgICAgIC8vIFdlIGFkZGVkIGFuIGVudHJ5IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVlZCB0
byByZWV4ZWN1dGUgdGhlIGFkZCBvbiB0aGUgbmV3IHRhYmxlLgorICAgICAgICAgICAgICAgIHJl
dHVybiBhZGQocHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChvbGRFbnRyeSA9PSBwdHIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
Y3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVs
YXhlZCgpOworICAgIGlmICh0YWJsZS0+bG9hZC5sb2FkUmVsYXhlZCgpIDwgdGFibGUtPm1heExv
YWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4g
bmV3VGFibGUgPSBUYWJsZTo6Y3JlYXRlKHRhYmxlLT5zaXplICogMik7CisgICAgdW5zaWduZWQg
bWFzayA9IG5ld1RhYmxlLT5tYXNrOworICAgIHVuc2lnbmVkIGxvYWQgPSAwOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgKytpKSB7CisgICAgICAgIHZvaWQqIHB0
ciA9IHRhYmxlLT5hcnJheVtpXS5sb2FkUmVsYXhlZCgpOworICAgICAgICBpZiAoIXB0cikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRl
eCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRl
eDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgQXRvbWljPHZvaWQqPiYgZW50cnlS
ZWYgPSBuZXdUYWJsZS0+YXJyYXlbaW5kZXhdOworICAgICAgICAgICAgdm9pZCogZW50cnkgPSBl
bnRyeVJlZi5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAg
ICAgICAgICAgIGVudHJ5UmVmLnN0b3JlUmVsYXhlZChwdHIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkgIT0g
cHRyKTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGxvYWQrKzsKKyAgICB9CisgICAgCisgICAgbmV3VGFibGUtPmxvYWQuc3Rv
cmVSZWxheGVkKGxvYWQpOworICAgIAorICAgIG1fdGFibGUuc3RvcmUobmV3VGFibGUuZ2V0KCkp
OworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKG5ld1RhYmxlKSk7Cit9CisKK2Jvb2wg
Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAgcmVz
aXplSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpU
YWJsZTo6Y3JlYXRlKHVuc2lnbmVkIHNpemUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbmN1
cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gcmVzdWx0KG5ldyAoZmFzdE1hbGxvYyhPQkpFQ1RfT0ZG
U0VUT0YoVGFibGUsIGFycmF5KSArIHNpemVvZihBdG9taWM8dm9pZCo+KSAqIHNpemUpKSBUYWJs
ZSgpKTsKKyAgICByZXN1bHQtPnNpemUgPSBzaXplOworICAgIHJlc3VsdC0+bWFzayA9IHNpemUg
LSAxOworICAgIHJlc3VsdC0+bG9hZC5zdG9yZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9yZVJl
bGF4ZWQobnVsbHB0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEg
Y29uY3VycmVudCBoYXNoLWJhc2VkIHNldCBmb3IgcG9pbnRlcnMuIEl0J3Mgb3B0aW1pemVkIGZv
cjoKKy8vCisvLyAtIEhpZ2ggcmF0ZSBvZiBjb250YWlucygpIGNhbGxzLgorLy8gLSBIaWdoIHJh
dGUgb2YgYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgbmV3LiBhZGQoKSBjYWxs
cyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyAobm9wIGFkZHMpCisvLyAgIGRvbid0IG11dGF0ZSB0
aGUgdGFibGUgYXQgYWxsLgorLy8gLSBOb3QgdG9vIG1hbnkgdGhyZWFkcy4gSSBkb3VidCB0aGlz
IHNjYWxlcyBiZXlvbmQgfjQuIFRob3VnaCwgaXQgbWF5IGFjdHVhbGx5IHNjYWxlIGJldHRlciB0
aGFuIHRoYXQKKy8vICAgaWYgdGhlIHJhdGUgb2Ygbm9wIGFkZHMgaXMgYWJzdXJkbHkgaGlnaC4K
Ky8vCisvLyBJZiB3ZSB3YW50ZWQgdGhpcyB0byBzY2FsZSBiZXR0ZXIsIHRoZSBtYWluIGNoYW5n
ZSB3ZSdkIGhhdmUgdG8gbWFrZSBpcyBob3cgdGhpcyB0YWJsZSBkZXRlcm1pbmVzIHdoZW4KKy8v
IHRvIHJlc2l6ZS4gUmlnaHQgbm93IGl0J3MgYSBzaGFyZWQgY291bnRlci4gV2UgbG9jazt4YWRk
IHRoaXMgY291bnRlci4gT25lIGVhc3kgd2F5IHRvIG1ha2UgdGhhdAorLy8gc2NhbGFibGUgaXMg
dG8gcmVxdWlyZSBlYWNoIHRocmVhZCB0aGF0IHdvcmtzIHdpdGggdGhlIENvbmN1cnJlbnRQdHJI
YXNoU2V0IHRvIHJlZ2lzdGVyIGl0c2VsZiBmaXJzdC4KKy8vIFRoZW4gZWFjaCB0aHJlYWQgd291
bGQgaGF2ZSBzb21lIGRhdGEgc3RydWN0dXJlIHRoYXQgaGFzIGEgY291bnRlci4gV2UgY291bGQg
aW5zdGl0dXRlIHRoZSBwb2xpY3kgdGhhdAorLy8gZWFjaCB0aHJlYWQgc2ltcGx5IGluY3JlbWVu
dHMgaXRzIG93biBsb2FkIGNvdW50ZXIsIGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmUuIFRoZW4s
IGlmIGFueSBzZWFyY2ggdG8KKy8vIHJlc29sdmUgYSBjb2xsaXNpb24gZG9lcyBtb3JlIHRoYW4g
TiBpdGVyYXRpb25zLCB3ZSBjYW4gY29tcHV0ZSBhIGNvbWJpbmVkIGxvYWQgYnkgc3VtbWluZyB0
aGUgbG9hZAorLy8gY291bnRlcnMgb2YgYWxsIG9mIHRoZSB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVz
LgorLy8KKy8vIENvbmN1cnJlbnRQdHJIYXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNlZXMg
YSA5OCUgbm9wIGFkZCByYXRlIGluIFNwZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIGZv
Y3VzZXMgc28gbXVjaCBvbiBjYXNlcyB3aGVyZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdlLgor
Y2xhc3MgQ29uY3VycmVudFB0ckhhc2hTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENv
bmN1cnJlbnRQdHJIYXNoU2V0KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVi
bGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBDb25jdXJyZW50UHRySGFzaFNldCgpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB+Q29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb250YWluc0ltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRkSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHNpemVf
dCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxlLmxvYWRSZWxheGVk
KCktPmxvYWQubG9hZFJlbGF4ZWQoKTsKKyAgICB9CisgICAgCisgICAgLy8gT25seSBjYWxsIHdo
ZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJl
ZXMgdXAgbWVtb3J5IHdpdGhvdXQgY2hhbmdpbmcKKyAgICAvLyB0aGUgY29udGVudHMgb2YgdGhl
IHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygpOwor
ICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFk
IGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZyZWVzIHVwIGFsbCBtZW1vcnkgZXhjZXB0IGZvcgorICAg
IC8vIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBoYXNodGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgY2xlYXIoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RydWN0IFRhYmxlIHsKKyAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgbWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLyAy
OyB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0YWJs
ZS4KKyAgICAgICAgdW5zaWduZWQgbWFzazsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAg
IEF0b21pYzx1bnNpZ25lZD4gbG9hZDsKKyAgICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsxXTsK
KyAgICB9OworICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0cikKKyAgICB7
CisgICAgICAgIHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChwdHIpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHZvaWQqIGNhc3QoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFQpIDw9IHNpemVvZih2b2lkKiksICJ0eXBlIHRvbyBiaWciKTsKKyAgICAgICAgdW5pb24g
eworICAgICAgICAgICAgdm9pZCogcHRyOworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAg
fSB1OworICAgICAgICB1LnB0ciA9IG51bGxwdHI7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHUucHRyOworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zSW1w
bCh2b2lkKiBwdHIpIGNvbnN0CisgICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxl
LmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAg
ICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAg
ICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAg
ICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQuCisgICAgYm9vbCBh
ZGRJbXBsKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUu
bG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAg
ICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAg
ICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3codGFibGUs
IG1hc2ssIHN0YXJ0SW5kZXgsIGluZGV4LCBwdHIpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09
IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbmRleCA9
IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9
IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKTsKKworICAgIHZvaWQgcmVzaXpl
SWZOZWNlc3NhcnkoKTsKKyAgICBib29sIHJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpOworICAgIAor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+LCA0PiBtX2FsbFRhYmxlczsKKyAgICBB
dG9taWM8VGFibGUqPiBtX3RhYmxlOyAvLyBUaGlzIGlzIG5ldmVyIG51bGwuCisgICAgTG9jayBt
X2xvY2s7IC8vIFdlIGp1c3QgdXNlIHRoaXMgdG8gY29udHJvbCByZXNpemUgcmFjZXMuCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYs
IGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3Qg
ZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51
bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5z
IGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3QoY29u
c3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBm
b3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lv
biBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGluZSB2
b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBU
IERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXpl
KCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRh
a2VGaXJzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICB3
aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOwor
ICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6
dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9G
YXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsNyBAQCB1c2luZyBXVEY6
OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5FIGlubGluZQogI2Vu
ZGlmCiAKLSNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAotcHVibGljOiBcCisjZGVm
aW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogICAgIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIHZvaWQqIG9wZXJhdG9yIG5l
d1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgXApAQCAtMjYzLDcgKzI2
MiwxNSBAQCBwdWJsaWM6IFwKICAgICAgICAgQVNTRVJUKGxvY2F0aW9uKTsgXAogICAgICAgICBy
ZXR1cm4gbG9jYXRpb247IFwKICAgICB9IFwKKworI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRCBcCitwdWJsaWM6IFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKIHBy
aXZhdGU6IFwKIHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJU
aGlzTWFjcm8KIAorI2RlZmluZSBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQgXAorICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAordHlwZWRlZiBpbnQgX190aGlzSXNIZXJl
VG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybworCiAjZW5kaWYgLyogV1RGX0Zhc3RNYWxs
b2NfaCAqLwpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3Rm
L0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTYgQEAKICNpbmNsdWRlICJM
b2NrLmgiCiAKICNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaD4KKyNpbmNsdWRl
IDx3dGYvU3RhY2tTaG90UHJvZmlsZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK3N0YXRpYyBj
b25zdGV4cHIgYm9vbCBwcm9maWxlTG9ja0NvbnRlbnRpb24gPSBmYWxzZTsKKwogdm9pZCBMb2Nr
QmFzZTo6bG9ja1Nsb3coKQogeworICAgIGlmIChwcm9maWxlTG9ja0NvbnRlbnRpb24pCisgICAg
ICAgIFNUQUNLX1NIT1RfUFJPRklMRSg0LCAyLCA1KTsKICAgICBEZWZhdWx0TG9ja0FsZ29yaXRo
bTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvTG9ja0FsZ29y
aXRobS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIGZpZWxkLiBUaGUg
bGltaXQgb2Ygb25lIGxvY2sgaXMgZHVlIHRvIHRoZSB1c2Ugb2YgdGhlIGZpZWxkJ3MgYWRkcmVz
cyBhcyBhIGtleSB0byBmaW5kIHRoZSBsb2NrJ3MKIC8vIHF1ZXVlLgogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQ+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK3N0cnVjdCBFbXB0eUxvY2tIb29rcyB7Cisg
ICAgc3RhdGljIExvY2tUeXBlIGxvY2tIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1
ZTsgfQorICAgIHN0YXRpYyBMb2NrVHlwZSB1bmxvY2tIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZTsgfQorICAgIHN0YXRpYyBMb2NrVHlwZSBwYXJrSG9vayhMb2NrVHlwZSB2YWx1
ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICBzdGF0aWMgTG9ja1R5cGUgaGFuZG9mZkhvb2soTG9j
a1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBM
b2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQsIHR5cGVu
YW1lIEhvb2tzID0gRW1wdHlMb2NrSG9va3M8TG9ja1R5cGU+PgogY2xhc3MgTG9ja0FsZ29yaXRo
bSB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIHN0YXRpYyBj
b25zdCBMb2NrVHlwZSBtYXNrID0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0OwpAQCAtNDMsNyAr
NTEsNyBAQCBjbGFzcyBMb2NrQWxnb3JpdGhtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBs
b2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVt
b3J5X29yZGVyX2FjcXVpcmUpOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKDAsIEhvb2tzOjpsb2NrSG9vayhpc0hlbGRCaXQpLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1
aXJlKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3QoQXRvbWljPExvY2tU
eXBlPiYgbG9jaykKQEAgLTUzLDYgKzYxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSAmIGlzSGVsZEJpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgIHZhbHVlIHw9IGlzSGVsZEJpdDsKKyAgICAgICAgICAgICAgICB2YWx1
ZSA9IEhvb2tzOjpsb2NrSG9vayh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7
CkBAIC02NywxNyArNzYsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRyeUxvY2soQXRv
bWljPExvY2tUeXBlPiYgbG9jaykKICAgICB7CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAg
ICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0
KQorICAgICAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmIGlzSGVs
ZEJpdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobG9j
ay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUg
fCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQorICAgICAgICAgICAgaWYg
KGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50VmFsdWUsIEhvb2tzOjpsb2NrSG9vayhj
dXJyZW50VmFsdWUgfCBpc0hlbGRCaXQpLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRp
YyBib29sIHVubG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRvbWljPExvY2tUeXBlPiYgbG9jaykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAw
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFy
ZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIEhvb2tzOjp1bmxvY2tIb29rKDApLCBzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxlYXNlKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFz
dChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQpAQCAtODcsNiArOTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIG1hc2spICE9IGlzSGVsZEJpdCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIHZhbHVlICY9IH5pc0hlbGRC
aXQ7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBIb29rczo6dW5sb2NrSG9vayh2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxn
b3JpdGhtSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0
aG1JbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdv
cml0aG1JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrQWxn
b3JpdGhtLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmtpbmdMb3QuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CkBAIC0zNSw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJr
ZWRCaXQ+Ci12b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgaGFzUGFya2Vk
Qml0Pjo6bG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaykKK3RlbXBsYXRlPHR5cGVuYW1l
IExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdCwgdHlw
ZW5hbWUgSG9va3M+Cit2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgaGFz
UGFya2VkQml0LCBIb29rcz46OmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCiB7CiAg
ICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24g
cGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3Bp
bkxpbWl0ID0gNDA7CkBAIC00NCwxNSArNDUsMTcgQEAgdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tU
eXBlLCBpc0hlbGRCaXQsIAogICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CiAgICAgCiAgICAg
Zm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQo
KTsKKyAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gbG9jay5sb2FkKCk7CiAgICAgICAg
IAogICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCi0gICAgICAgIGlm
ICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAmJiBsb2NrLmNv
bXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlz
SGVsZEJpdCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1
ZSAmIGlzSGVsZEJpdCkpIHsKKyAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoY3VycmVudFZhbHVlLCBIb29rczo6bG9ja0hvb2soY3VycmVudFZhbHVlIHwgaXNIZWxkQml0
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZl
bid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KLSAgICAg
ICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwg
c3BpbkxpbWl0KSB7CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJpdCkg
JiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CiAgICAgICAgICAgICBzcGluQ291bnQrKzsKICAg
ICAgICAgICAgIFRocmVhZDo6eWllbGQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjAs
MTMgKzYzLDI1IEBAIHZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKIAog
ICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgcGFya2Vk
IGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKICAgICAgICAgLy8g
aWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRpbmcgaXQu
Ci0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCi0gICAgICAg
ICAgICAmJiAhbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJl
bnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJpdCkpIHsKKyAgICAgICAgICAgIExv
Y2tUeXBlIG5ld1ZhbHVlID0gSG9va3M6OnBhcmtIb29rKGN1cnJlbnRWYWx1ZSB8IGhhc1Bhcmtl
ZEJpdCk7CisgICAgICAgICAgICBpZiAoIWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50
VmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGN1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoIShjdXJyZW50VmFsdWUgJiBpc0hlbGRCaXQpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJM
b2NrIG5vdCBoZWxkIVxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJp
dCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkxvY2sgbm90IHBhcmtlZCFcbiIpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogCiAgICAgICAg
IC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxv
bmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KICAgICAgICAgUGFya2luZ0xvdDo6
UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVB
bmRQYXJrKCZsb2NrLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0
KTsKKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZsb2NrLCBjdXJyZW50
VmFsdWUpOwogICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtlZCkgewogICAgICAgICAg
ICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUb2tlbj4ocGFya1Jlc3VsdC50b2tlbikpIHsKICAgICAg
ICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKQEAgLTg3LDggKzEwMiw4IEBAIHZvaWQgTG9ja0Fs
Z29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4K
LXZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCBoYXNQYXJrZWRCaXQ+Ojp1
bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNzKQordGVt
cGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUgaGFz
UGFya2VkQml0LCB0eXBlbmFtZSBIb29rcz4KK3ZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwg
aXNIZWxkQml0LCBoYXNQYXJrZWRCaXQsIEhvb2tzPjo6dW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5
cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVzcykKIHsKICAgICAvLyBXZSBjb3VsZCBnZXQgaGVy
ZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWlsZWQgc3B1cmlvdXNseSwgb3Ig
YmVjYXVzZSB0aGVyZSBpcwogICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENB
UyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxk
CkBAIC0xMDAsNyArMTE1LDcgQEAgdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRC
aXQsIAogICAgICAgICAgICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQg
fCBoYXNQYXJrZWRCaXQpKTsKICAgICAgICAgCiAgICAgICAgIGlmICgob2xkQnl0ZVZhbHVlICYg
bWFzaykgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFu
Z2VXZWFrKG9sZEJ5dGVWYWx1ZSwgb2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpCisgICAgICAg
ICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgSG9va3M6OnVu
bG9ja0hvb2sob2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xMjAsMTIgKzEzNSwy
MSBAQCB2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgCiAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZhaXIgfHwg
cmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
dW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRoZSB0aHJlYWQg
dGhhdCB3YXMKICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGluZy4KKyAgICAgICAgICAgICAg
ICAgICAgbG9jay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoTG9j
a1R5cGUmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2Nr
VHlwZSBuZXdWYWx1ZSA9IEhvb2tzOjpoYW5kb2ZmSG9vayh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09IHZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBuZXdWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRGlyZWN0SGFuZG9mZjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKICAgICAgICAgICAgICAgICAgICAgWyZd
IChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgJj0gfm1hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEhvb2tzOjp1bmxv
Y2tIb29rKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2
ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IGhhc1Bh
cmtlZEJpdDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291
cmNlL1dURi93dGYvTG9ja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja2Vy
LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgTG9ja2VyX2gKIAogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02NCw2ICs2NSw3
IEBAIHB1YmxpYzoKIAogICAgIH5Mb2NrZXIoKQogICAgIHsKKyAgICAgICAgY29tcGlsZXJGZW5j
ZSgpOwogICAgICAgICBpZiAobV9sb2NrYWJsZSkKICAgICAgICAgICAgIG1fbG9ja2FibGUtPnVu
bG9jaygpOwogICAgIH0KQEAgLTEwOCw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgaWYgKG1fbG9ja2FibGUpCiAgICAgICAgICAgICBtX2xvY2thYmxlLT5sb2NrKCk7CisgICAg
ICAgIGNvbXBpbGVyRmVuY2UoKTsKICAgICB9CiAgICAgCiAgICAgVCogbV9sb2NrYWJsZTsKQEAg
LTEyMiw2ICsxMjUsMTIgQEAgTG9ja2VyPExvY2tUeXBlPiBob2xkTG9jayhMb2NrVHlwZSYgbG9j
awogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK0xvY2tlcjxMb2NrVHlwZT4gaG9s
ZExvY2tJZihMb2NrVHlwZSYgbG9jaywgYm9vbCBwcmVkaWNhdGUpCit7CisgICAgcmV0dXJuIExv
Y2tlcjxMb2NrVHlwZT4ocHJlZGljYXRlID8gJmxvY2sgOiBudWxscHRyKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2NrZXI8TG9ja1R5cGU+IHRyeUhvbGRMb2NrKExvY2tU
eXBlJiBsb2NrKQogewogICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+Ojp0cnlMb2NrKGxvY2sp
OwpAQCAtMTM0LDUgKzE0Myw2IEBAIHVzaW5nIFdURjo6TG9ja2VyOwogdXNpbmcgV1RGOjpOb0xv
Y2tpbmdOZWNlc3NhcnlUYWc7CiB1c2luZyBXVEY6Ok5vTG9ja2luZ05lY2Vzc2FyeTsKIHVzaW5n
IFdURjo6aG9sZExvY2s7Cit1c2luZyBXVEY6OmhvbGRMb2NrSWY7CiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL1Nj
b3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDEzIEBAIHByaXZhdGU6
CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFscmVhZHkgcmVmZXIgdG8gYSBmdW5jdG9yIGJ5
IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBsaWZldGltZSBpcwogLy8gZ29vZC4gVGhpcyBq
dXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhhdCBwb2ludHMgdG8geW91ciBmdW5jdG9yLgor
Ly8KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGFsd2F5cyB3cm9uZzoKKy8vCisvLyBhdXRvIHJlZiA9
IHNjb3BlZExhbWJkYVJlZihbLi4uXSAoLi4uKSB7Li4ufSk7CisvLworLy8gQmVjYXVzZSB0aGUg
c2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIgdG8gdGhlIGxhbWJkYSBieSByZWZlcmVuY2UsIGFu
ZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVyIHRoZQorLy8gc2VtaWNvbG9uLiBVc2Ugc2NvcGVk
TGFtYmRhKCkgaW4gdGhhdCBjYXNlLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0
eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVkTGFtYmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1
bmN0b3I+IHNjb3BlZExhbWJkYVJlZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewpJbmRleDog
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvU2hhcmVk
VGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsK
IC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5
b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJl
ZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUg
KEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRU
YXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUg
UGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJl
ZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5
cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2so
KSB7IH0KIApJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3Rh
Y2tTaG90IHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3QoKSB7IH0KKyAgICAKKyAgICBBTFdBWVNf
SU5MSU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICB7CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgICBtX2FycmF5ID0gc3RkOjptYWtl
X3VuaXF1ZTx2b2lkKltdPihzaXplKTsKKyAgICAgICAgICAgIGludCBpbnRTaXplID0gc2l6ZTsK
KyAgICAgICAgICAgIFdURkdldEJhY2t0cmFjZShtX2FycmF5LmdldCgpLCAmaW50U2l6ZSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGludFNpemUpIDw9
IHNpemUpOworICAgICAgICAgICAgbV9zaXplID0gaW50U2l6ZTsKKyAgICAgICAgICAgIGlmICgh
bV9zaXplKQorICAgICAgICAgICAgICAgIG1fYXJyYXkgPSBudWxscHRyOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIFN0YWNrU2hvdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9hcnJheShkZWxldGVkVmFsdWVBcnJheSgpKQorICAgICAgICAsIG1fc2l6
ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90JiBvcGVyYXRvcj0oY29uc3Qg
U3RhY2tTaG90JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lkKltd
PiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4ob3RoZXIubV9zaXplKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG90aGVyLm1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIG5l
d0FycmF5W2ldID0gb3RoZXIubV9hcnJheVtpXTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIubV9z
aXplOworICAgICAgICBtX2FycmF5ID0gV1RGTW92ZShuZXdBcnJheSk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90KGNvbnN0IFN0YWNrU2hvdCYgb3Ro
ZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2b2lk
KiogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LmdldCgpOyB9CisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2FycmF5OyB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV9zaXplICE9IG90aGVyLm1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3NpemU7IGktLTspIHsKKyAgICAgICAgICAg
IGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1fYXJyYXlbaV0pCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBtX3NpemU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0g
bV9zaXplOyBpLS07KQorICAgICAgICAgICAgcmVzdWx0IF49IFB0ckhhc2g8dm9pZCo+OjpoYXNo
KG1fYXJyYXlbaV0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fc2l6ZSAmJiBtX2FycmF5LmdldCgpID09IGRlbGV0ZWRWYWx1ZUFycmF5
KCk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgU3BlY3RydW08PiBoYXBweS4KKyAgICBib29s
IG9wZXJhdG9yPihjb25zdCBTdGFja1Nob3QmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCoqIGRlbGV0ZWRWYWx1ZUFycmF5KCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KKyAg
ICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbV9hcnJheTsKKyAgICBzaXplX3QgbV9z
aXplIHsgMCB9OworfTsKKworc3RydWN0IFN0YWNrU2hvdEhhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYgc2hvdCkgeyByZXR1cm4gc2hvdC5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdGFja1Nob3QmIGEsIGNvbnN0IFN0YWNrU2hv
dCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0YWNr
U2hvdD4geworICAgIHR5cGVkZWYgU3RhY2tTaG90SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U3RhY2tTaG90PiB7IH07CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9m
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgor
I2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+Cisj
aW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNr
U2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3RQcm9maWxlcih1bnNpZ25lZCBu
dW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCwgdW5zaWduZWQgc3RhY2tzVG9SZXBvcnQp
CisgICAgICAgIDogbV9udW1GcmFtZXMobnVtRnJhbWVzKQorICAgICAgICAsIG1fZnJhbWVzVG9T
a2lwKGZyYW1lc1RvU2tpcCkKKyAgICAgICAgLCBtX3N0YWNrc1RvUmVwb3J0KHN0YWNrc1RvUmVw
b3J0KQorICAgIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIlN0YWNrU2hvdFByb2ZpbGVyIiwg
W3RoaXNdICgpIHsgcnVuKCk7IH0pOworICAgIH0KKworICAgIC8vIE5FVkVSX0lOTElORSBzbyB0
aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0YWJsZS4KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBw
cm9maWxlKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAgICAgbV9wcm9maWxlLmFkZChTdGFja1Nob3QobV9udW1GcmFtZXMgKyBtX2ZyYW1lc1Rv
U2tpcCkpOworICAgICAgICBtX3RvdGFsQ291bnQrKzsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICBzbGVlcCgxX3MpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICAgICAgYXV0byBsaXN0ID0gbV9wcm9maWxlLmJ1aWxkTGlzdCgpOwor
ICAgICAgICAgICAgZGF0YUxvZygiXG5Ib3R0ZXN0IHN0YWNrcyBpbiAiLCBnZXRDdXJyZW50UHJv
Y2Vzc0lEKCksICI6XG4iKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUo
KSwgY291bnQgPSAwOyBpLS0gJiYgY291bnQgPCBtX3N0YWNrc1RvUmVwb3J0OyBjb3VudCsrKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBsaXN0W2ldOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIlxuVG9wICMiLCBjb3VudCArIDEsICIgc3RhY2s6ICIsIGVudHJ5LmNvdW50ICog
MTAwIC8gbV90b3RhbENvdW50LCAiJVxuIik7CisgICAgICAgICAgICAgICAgU3RhY2tUcmFjZSB0
cmFjZShlbnRyeS5rZXkuYXJyYXkoKSArIG1fZnJhbWVzVG9Ta2lwLCBlbnRyeS5rZXkuc2l6ZSgp
IC0gbV9mcmFtZXNUb1NraXApOworICAgICAgICAgICAgICAgIGRhdGFMb2codHJhY2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBXb3JkTG9jayBtX2xvY2s7CisgICAgU3BlY3RydW08U3RhY2tTaG90LCBkb3Vi
bGU+IG1fcHJvZmlsZTsKKyAgICBkb3VibGUgbV90b3RhbENvdW50IHsgMCB9OworICAgIHVuc2ln
bmVkIG1fbnVtRnJhbWVzOworICAgIHVuc2lnbmVkIG1fZnJhbWVzVG9Ta2lwOworICAgIHVuc2ln
bmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9OworCisjZGVmaW5lIFNUQUNLX1NIT1RfUFJPRklMRShu
dW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tzVG9SZXBvcnQpIGRvIHsgXAorICAgIHN0YXRp
YyBTdGFja1Nob3RQcm9maWxlciogc3RhY2tTaG90UHJvZmlsZXI7IFwKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJvZmlsZXJPbmNlRmxhZzsgXAorICAgIHN0ZDo6Y2FsbF9v
bmNlKHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWcsIFtdIHsgc3RhY2tTaG90UHJvZmlsZXIgPSBu
ZXcgU3RhY2tTaG90UHJvZmlsZXIobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVw
b3J0KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQcm9maWxlci0+cHJvZmlsZSgpOyBcCit9IHdoaWxl
IChmYWxzZSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0
YW1wZWRMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhbXBlZExvY2suaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFtcGVkTG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24g
b2YgYSBTdGFtcGVkTG9jaywgd2hpY2ggdXNlcyBqdXN0IGFuIGV4Y2x1c2l2ZSBsb2NrIGFzIGEg
ZmFsbGJhY2suIFRoaXMKKy8vIG1ha2VzIHRoZSBsb2NrIHZlcnkgY29tcGFjdC4KKworLy8gRklY
TUU6IEl0J3MgY3VycmVudGx5IG5lY2Vzc2FyeSBmb3IgY2FsbGVycyBvZiBsb2NrKCkvdW5sb2Nr
KCkgdG8gI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oPi4KKy8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMjIKKworY2xhc3MgU3RhbXBlZExv
Y2sgeworICAgIHR5cGVkZWYgdWludHB0cl90IExvY2tUeXBlOworICAgIAorICAgIHN0YXRpYyBj
b25zdGV4cHIgTG9ja1R5cGUgaXNIZWxkQml0ID0gMTsKKyAgICBzdGF0aWMgY29uc3RleHByIExv
Y2tUeXBlIGhhc1BhcmtlZEJpdCA9IDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBt
YXNrID0gMSAmIDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBzaGlmdCA9IDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBzdGFtcFVuaXQgPSA0OworICAgIAorICAgIHN0
cnVjdCBMb2NrSG9va3MgeworICAgICAgICBzdGF0aWMgTG9ja1R5cGUgbG9ja0hvb2soTG9ja1R5
cGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIHN0YW1wVW5p
dDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIExvY2tUeXBlIHVubG9ja0hv
b2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgICAgIHN0YXRpYyBMb2Nr
VHlwZSBwYXJrSG9vayhMb2NrVHlwZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICAgICAg
c3RhdGljIExvY2tUeXBlIGhhbmRvZmZIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1
ZTsgfQorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBp
c0hlbGRCaXQsIGhhc1BhcmtlZEJpdCwgTG9ja0hvb2tzPiBFeGNsdXNpdmVBbGdvcml0aG07Cisg
ICAgCitwdWJsaWM6CisgICAgU3RhbXBlZExvY2soKQorICAgIHsKKyAgICAgICAgbV93b3JkLnN0
b3JlUmVsYXhlZCgwKTsKKyAgICB9CisgICAgCisgICAgflN0YW1wZWRMb2NrKCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgdHJ5TG9jaygpCisgICAgeworICAgICAgICByZXR1cm4gRXhj
bHVzaXZlQWxnb3JpdGhtOjp0cnlMb2NrKG1fd29yZCk7CisgICAgfQorCisgICAgdm9pZCBsb2Nr
KCkKKyAgICB7CisgICAgICAgIEV4Y2x1c2l2ZUFsZ29yaXRobTo6bG9jayhtX3dvcmQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBFeGNsdXNpdmVBbGdv
cml0aG06OnVubG9jayhtX3dvcmQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGVsZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gRXhjbHVzaXZlQWxnb3JpdGhtOjppc0xvY2tlZCht
X3dvcmQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0hlbGQoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIG9ubHkgdGhp
bmcgeW91J3JlIGFsbG93ZWQgdG8gaW5mZXIgZnJvbSB0aGlzIHZhbHVlIGlzIHRoYXQgaWYgaXQn
cyB6ZXJvLCB0aGVuIHlvdSBkaWRuJ3QgZ2V0CisgICAgLy8gYSByZWFsIHN0YW1wLgorICAgIGNs
YXNzIFN0YW1wIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdGFtcCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gb3Ro
ZXIubV92YWx1ZTsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RhbXAmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7IH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFN0YW1wZWRMb2NrOworICAgICAgICAK
KyAgICAgICAgTG9ja1R5cGUgbV92YWx1ZSB7IDAgfTsKKyAgICB9OworICAgIAorICAgIFN0YW1w
IHRyeU9wdGltaXN0aWNSZWFkKCkKKyAgICB7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1
ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiBpc0hlbGRCaXQp
CisgICAgICAgICAgICByZXR1cm4gU3RhbXAoKTsKKyAgICAgICAgcmV0dXJuIGdldFN0YW1wKGN1
cnJlbnRWYWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgdmFsaWRhdGUoU3RhbXAgc3RhbXAp
CisgICAgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgTG9ja1R5cGUg
Y3VycmVudFZhbHVlID0gbV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHJldHVybiBnZXRT
dGFtcChjdXJyZW50VmFsdWUpID09IHN0YW1wOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIGF1dG8gZG9PcHRpbWl6ZWRSZWFkKGNvbnN0IEZ1bmMmIGZ1bmMp
CisgICAgeworICAgICAgICBTdGFtcCBzdGFtcCA9IHRyeU9wdGltaXN0aWNSZWFkKCk7CisgICAg
ICAgIGlmIChzdGFtcCkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jKCk7CisgICAg
ICAgICAgICBpZiAodmFsaWRhdGUoc3RhbXApKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICAgICAgbG9jaygpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGZ1
bmMoKTsKKyAgICAgICAgdW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIC8vIFVzZSB0aGlzIHRvIGNyZWF0ZSBhIHJlYWQgdHJhbnNhY3Rpb24gdXNpbmcg
ZGVwZW5kZW5jeSBjaGFpbnMgb25seS4KKyAgICBJbnB1dEFuZFZhbHVlPExvY2tUeXBlLCBTdGFt
cD4gdHJ5T3B0aW1pc3RpY0ZlbmNlbGVzc1JlYWQoKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUg
Y3VycmVudFZhbHVlID0gbV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlmIChjdXJyZW50
VmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICByZXR1cm4gaW5wdXRBbmRWYWx1ZShjdXJy
ZW50VmFsdWUsIFN0YW1wKCkpOworICAgICAgICByZXR1cm4gaW5wdXRBbmRWYWx1ZShjdXJyZW50
VmFsdWUsIGdldFN0YW1wKGN1cnJlbnRWYWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIGZl
bmNlbGVzc1ZhbGlkYXRlKFN0YW1wIHN0YW1wLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkK
KyAgICB7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IGRlcGVuZGVuY3kuY29uc3Vt
ZSh0aGlzKS0+bV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHJldHVybiBnZXRTdGFtcChj
dXJyZW50VmFsdWUpID09IHN0YW1wOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcHRpbWlzdGljRnVuYywgdHlwZW5hbWUgRnVuYz4KKyAgICBhdXRvIGRvT3B0aW1pemVkRmVu
Y2VsZXNzUmVhZChjb25zdCBPcHRpbWlzdGljRnVuYyYgb3B0aW1pc3RpY0Z1bmMsIGNvbnN0IEZ1
bmMmIGZ1bmMpCisgICAgeworICAgICAgICBhdXRvIHN0YW1wID0gdHJ5T3B0aW1pc3RpY0ZlbmNl
bGVzc1JlYWQoKTsKKyAgICAgICAgaWYgKHN0YW1wLnZhbHVlKSB7CisgICAgICAgICAgICBEZXBl
bmRlbmN5RmVuY2UgZGVwZW5kZW5jeShzdGFtcC5pbnB1dCk7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IG9wdGltaXN0aWNGdW5jKGRlcGVuZGVuY3ksIHN0YW1wLnZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChmZW5jZWxlc3NWYWxpZGF0ZShzdGFtcC52YWx1ZSwgZGVwZW5kZW5jeSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBsb2NrKCk7Cisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuYygpOworICAgICAgICB1bmxvY2soKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFN0YW1wIGdldFN0YW1w
KExvY2tUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgU3RhbXAgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9ICh2YWx1ZSAmIH5tYXNrKSB8IDE7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIEF0b21pYzxMb2NrVHlwZT4gbV93b3JkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RhbXBlZExvY2s7CisKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBw
YXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlzIGNoYW5nZSBp
cyBiZXN0IHRlc3RlZCB1c2luZyBET00tR0MtaW50ZW5zaXZlCisgICAgICAgIGJlbmNobWFya3Mg
bGlrZSBTcGVlZG9tZXRlciBhbmQgRHJvbWFlby4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGFy
YWxsZWxpemVzIHRoZSBET00ncyBvdXRwdXQgY29uc3RyYWludCwgYW5kIG1ha2VzIHNvbWUgc21h
bGwgY2hhbmdlcyB0byBtYWtlIHRoaXMgbW9yZQorICAgICAgICBzY2FsYWJsZS4KKworICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRk
ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRD
b25zdHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0
cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091
dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgorICAgICAgICAqIGRvbS9O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJl
bnRseSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVFdmVudFRhcmdldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEpOgorCiAyMDE3LTEy
LTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50
ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0
IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRMb2Fk
ZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAogYmluZGluZ3MvanMv
Q2FsbFRyYWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmluZGluZ3MvanMvRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAog
YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdtYSBvbmNl
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KKwpJ
bmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVv
dXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFw
L1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAg
LTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WaXNp
dGluZ1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUx
LDYgKzM1MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzE2NkUx
Qzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAwNDQzQzNGIC8qIElu
dGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRlcnNlY3Rp
b25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFEQkEwMDQ0M0MzRiAv
KiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFBMEYxRkQxQzY2QTAw
NzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIyIC8qIERPTUdD
T3V0cHV0Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5MDBBM0Y0QzAgLyog
R3JhcGhpY3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBk
YXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQjYyNTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1MkQxOERFMUIxNTAw
QTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9s
bGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNr
eU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNTQ0Niw2ICs1NDQ3LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpTRE9NUXVhZEN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWRDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1NzE1NURBODFFMDBGQURE
NEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9NR0NPdXRw
dXRDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERP
TUdDT3V0cHV0Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEwMDk3NUZERCAvKiBDU1NQ
cm9wZXJ0aWVzLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpzb247IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xh
eWVyVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFw
aGljc0xheWVyVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0
RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI5ODAsNiArMjI5ODMsOCBAQAogCQkJCTk1MjA3NjAyMUYy
Njc1RjkwMDdEMkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJCQkwRjYwRjMyOTFERkJC
MTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQx
NkQ2QyAvKiBDb21tb25WTS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2NjMwMDc5QzVCMiAvKiBE
T01HQ091dHB1dENvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVC
MiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUxNkFEMjFGMzUyNTIwMDAz
NEI2QkYgLyogRE9NUHJvbWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0RDAwMEQ4
MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIxRTAwMEQ4
MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5oICovLApAQCAtMjc1NDcsNiArMjc1NTIsNyBAQAogCQkJ
CTUxOEY1MDA0MTk0Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0b24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdD
T3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQTdDMUYxODgzMjJGQzAw
Qzk1NEI1IC8qIEpTR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgyQjc1MjEx
OThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENv
bnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisKKyNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5o
PgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPGhl
YXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENv
bnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKKyAgICA6IE1hcmtp
bmdDb25zdHJhaW50KCJEb21vIiwgIkRPTSBPdXRwdXQiLCBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
U2VsZG9tR3JleWVkLCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpCisgICAgLCBtX3ZtKHZtKQorICAgICwgbV9jbGllbnRE
YXRhKGNsaWVudERhdGEpCisgICAgLCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKHZtLmhlYXAubXV0
YXRvckV4ZWN1dGlvblZlcnNpb24oKSkKK3sKK30KKworRE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+
RE9NR0NPdXRwdXRDb25zdHJhaW50KCkKK3sKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIERP
TUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIEhl
YXAmIGhlYXAgPSBtX3ZtLmhlYXA7CisgICAgCisgICAgaWYgKGhlYXAubXV0YXRvckV4ZWN1dGlv
blZlcnNpb24oKSA9PSBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKQorICAgICAgICByZXR1cm4gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworICAgIAorICAgIG1fbGFzdEV4ZWN1dGlv
blZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlQobV90YXNrcy5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50RGF0YS5mb3JFYWNo
T3V0cHV0Q29uc3RyYWludFNwYWNlKAorICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkg
eworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFw
Q2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgSlNDZWxs
KiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgICAg
IGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
Y2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX3Rhc2tzLmFwcGVuZChzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoZnVu
YykpOworICAgICAgICB9KTsKKyAgICAKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpQYXJhbGxlbDsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZG9Q
YXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoYXV0byYg
dGFzayA6IG1fdGFza3MpCisgICAgICAgIHRhc2stPnJ1bih2aXNpdG9yKTsKK30KKyAgICAgICAg
Cit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90
VmlzaXRvciYpCit7CisgICAgbV90YXNrcy5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CisjaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSlNWTUNsaWVudERhdGE7CisKK2NsYXNzIERPTUdDT3V0cHV0
Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAg
ICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTVk1DbGllbnREYXRhJik7CisgICAg
fkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTQzo6Q29u
c3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworICAgIEpTVk1DbGllbnRE
YXRhJiBtX2NsaWVudERhdGE7CisgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsK
KyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4+IG1fdGFz
a3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAorI2luY2x1ZGUgIkRPTUdDT3V0
cHV0Q29uc3RyYWludC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhl
YXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxoZWFwL0hl
YXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgotI2luY2x1
ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2Vk
QmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNs
dWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CkBA
IC03NCw0MyArNzIsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQoVk0q
CiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEoKnZt
KTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRoaXMg
cG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1h
cmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29uc3Ry
YWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9uID0g
dm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7Ci0gICAgICAg
ICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0
RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKLQotICAg
ICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNvdW50IGhlcmUgb3Vyc2Vs
dmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKLSAgICAgICAgICAgIC8vIG9w
YXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0aW9uIHlldC4gVGhlIHdh
eSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAgICAgIC8vIGNvbnN0cmFpbnQgc29sdmVy
IGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCi0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9vdHMoKTsK
LQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAgICAgICAgICAg
IHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnREYXRhLT5mb3JF
YWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAgICAgICAgICAgIFsmXSAoU3Vic3BhY2Um
IHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRD
ZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVhcENlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxs
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2Vs
bCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVJldmlzaXRl
ZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90
VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNs
b3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBudW1PcGFx
dWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdURk1v
dmUoY29uc3RyYWludCkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6
bWFrZV91bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7CiAg
ICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6
OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRv
cHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNs
dWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rv
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNs
dWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIsNyArMjE2MywxNCBAQCBFdmVu
dFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAKIEV2ZW50VGFyZ2V0RGF0YSog
Tm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCkKIHsKLSAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CisgICAgLy8gTm90IGhvbGRpbmcg
dGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBlZCBhY2NlbGVyYXRlcyBwYXJhbGxlbCBj
b25zdHJhaW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8gY2FsbHMgdGhpcyBmdW5jdGlvbiBmcm9t
IG1hbnkgdGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nIGNhbiBoYXBwZW4gd2l0
aCB0aGUgd29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0b3BwZWQsIGJ1dCBpZiB3ZSBkbyBpdCB3
aXRoIGEgcnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5IG1peGluZyBjb25zdHJhaW50
CisgICAgLy8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJlZm9yZSwgdGhlIG1vc3QgbGlr
ZWx5IHRpbWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBsb2NrIGlzIHdoZW4gdGhlCisgICAgLy8g
d29ybGQgaXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHdoZW4gdGhl
IHdvcmxkIGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdvcmxkCisgICAgLy8gbWVhbnMg
dGhhdCB3ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFyZ2V0IGRhdGEgbWFwLgorICAg
IEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrSWYoc19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2bSAmJiB2bS0+aGVhcC53b3JsZElzUnVu
bmluZygpKTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRhKCkgPyBldmVudFRhcmdldERh
dGFNYXAoKS5nZXQodGhpcykgOiBudWxscHRyOwogfQogCkBAIC0yMTcxLDYgKzIxNzksOSBAQCBF
dmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAgICAgaWYgKGhhc0V2ZW50
VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmdldCh0
aGlzKTsKIAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CisKICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAgc2V0SGFzRXZl
bnRUYXJnZXREYXRhKHRydWUpOwogICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFwKCkuYWRk
KHRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJnZXREYXRhPigpKS5pdGVyYXRvci0+dmFs
dWU7CkBAIC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2
ZW50VGFyZ2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogeworICAgIEpT
Qzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwg
dm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhz
X2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2ZW50VGFyZ2V0RGF0YU1hcCgpLnJlbW92
ZSh0aGlzKTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJh
bGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICAqIFNjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzOiBBZGQgc3BsYXktbGF0ZW5jeSB0ZXN0
LCBzaW5jZSB0aGlzIGNoYW5nZSBuZWVkZWQgdG8gYmUgY2FyZWZ1bGx5IHZhbGlkYXRlZCB3aXRo
IHRoYXQgYmVuY2htYXJrLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0
ckhhc2hTZXQuY3BwOiBBZGRlZC4gVGhpcyBoYXMgdW5pdCB0ZXN0cyBvZiB0aGUgbmV3IGNvbmN1
cnJlbnQgZGF0YSBzdHJ1Y3R1cmUuIFRoZSB0ZXN0cyBmb2N1cyBvbiBjb3JyZWN0bmVzcyB1bmRl
ciBzZXJpYWwgZXhlY3V0aW9uLCB3aGljaCBhcHBlYXJzIHRvIGJlIGVub3VnaCBmb3Igbm93IChp
dCdzIHNvIGVhc3kgdG8gY2F0Y2ggYSBjb25jdXJyZW5jeSBidWcgYnkganVzdCBydW5uaW5nIHRo
ZSBHQykuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0xMi0wMSAgQWxp
Y2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRk
IFNhbXBsZU1hcC5jcHAgQVBJIHRlc3RzIHRvIENNYWtlCkluZGV4OiBUb29scy9TY3JpcHRzL3J1
bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVu
Y2htYXJrcwkocmV2aXNpb24gMjI1NDAzKQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNo
bWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgTE9OR1NQSURFUl9QQVRIID0g
UEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAr
ICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2OC12NiIKIFRBSUxCRU5DSF9QQVRIID0gUEVSRk9S
TUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5jaDkwMDAiCiBNSUNST0JFTkNITUFSS1NfUEFUSCA9
IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3RzIiArICJtaWNyb2JlbmNobWFya3MiCi1PQ1RBTkVf
V1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIgKyAid3JhcHBl
cnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9j
dGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEggPSBPUEVOU09VUkNFX09DVEFORV9QQVRIICsgIndy
YXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIkpTQmVuY2gi
CiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ0
ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJT
aXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04NDEsNiArODQyLDIwIEBAIGNsYXNzIFNpbmdsZUZp
bGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKICAgZW5kCiBlbmQKIAorIyBCZW5jaG1hcmsgdGhh
dCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0IGJlIGxvYWRlZCBpbiBpdHMgb3du
IGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1bigpKSwgYnV0IHJldHVybnMgaXRz
IHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitjbGFzcyBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5j
aG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5jaFBhdGgKKyAgCisgIGRlZiBpbml0
aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVuY2hQYXRoID0gYmVuY2hQYXRoCisgIGVuZAorICAK
KyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgIGVuZAor
ZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgZGF0YSBmaWxl
cyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZvbGxvd2VkCiAjIGJ5IGEgY29tbWFu
ZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNsYXNzIE11bHRpRmlsZVRpbWVkQmVuY2htYXJrUGFy
YW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1pdEJlbmNoUnVuQ29kZUZpbGUobmFt
ZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgaWYgKF9f
YmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0pIHByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTog
I3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hlcl9pbmRleCAtICN7d2FybXVwfSkgKyBc
IjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1bnMpKTsiKQogICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxl
LCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29tbWFuZC5qc30iKQorICAgICAgZWxzaWYgYmVuY2hQ
YXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93
aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHZhciBfX2JlbmNo
ZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsiKQorICAgICAgICAkcmVydW4udGltZXMgeworICAg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBydW4oX19iZW5jaGVyX3doYXQsIF9f
YmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAgIH0KKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVzdWx0LnZhbHVlID09IG51bGwpIikKKyAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICAgIHRocm93IG5ldyBFcnJvcihcIk51bGwgcmVz
dWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICByZXR1cm4gX19i
ZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
fSIpCisgICAgICAgICR3YXJtdXAudGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSIp
CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4u
dm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KKyAgICAgICAgJGlubmVyLnRpbWVzIHsKKyAg
ICAgICAgICB8IGlubmVySW5kZXggfAorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxl
LCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiAje2lubmVy
SW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmlu
c3BlY3R9KSk7IikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1
bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQogICAgICAgZWxzZQogICAg
ICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZVRpbWVkQmVu
Y2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNo
ZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKQEAgLTE1OTQsNiArMTYyOCwxOSBAQCBjbGFzcyBP
Y3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQKIAorY2xhc3MgQ3VzdG9tVGltZWRCZW5jaG1hcmsK
KyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0aWFsaXplKG5hbWUsIGZ1bGxQYXRo
KQorICAgIEBuYW1lID0gbmFtZQorICAgIEBmdWxsUGF0aCA9IGZ1bGxQYXRoCisgIGVuZAorICAK
KyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisgICAgZW1pdEJlbmNoUnVuQ29kZShmdWxsbmFtZSwg
cGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycy5uZXcoZW5zdXJl
RmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0iLCBAZnVsbFBhdGgpKSkKKyAgZW5kCitlbmQKKwog
Y2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGluY2x1ZGUgQmVuY2htYXJrCiAgIApAQCAtMzAxMCw2
ICszMDU3LDcgQEAgYmVnaW4KICAgICB8IGFyZ3MgfAogICAgIE9DVEFORS5hZGQgT2N0YW5lQmVu
Y2htYXJrLm5ldygqYXJncykKICAgfQorICBPQ1RBTkUuYWRkIEN1c3RvbVRpbWVkQmVuY2htYXJr
Lm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVOU09VUkNFX09DVEFORV9QQVRIICsgInNwbGF5Lmpz
IikudG9fcykKIAogICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0ZS5uZXcoIktyYWtlbiIsIDphcml0
aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0YXIiLCAiYXVkaW8tYmVhdC1kZXRlY3Rpb24iLCAi
YXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcAorICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRoLmNwcApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0g
Ki87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0Nv
Y29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
MzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07
CiAJCTBGMkMyMEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAv
KiBUaW1lLmNwcCAqLzsgfTsKKwkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0
ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2Ny
aXB0Lm1tICovOyB9OwogCQkwRjRGRkE5RTFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFS
ZW5kZXJJbkNvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNv
bnRleHQubW0gKi87IH07CiAJCTBGNTY1MUY3MUZDRTREREMwMDMxMEZCQyAvKiBOb0hpc3RvcnlJ
dGVtU2Nyb2xsVG9GcmFnbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNTY1MUY2MUZDRTREREIwMDMxMEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Ny
b2xsVG9GcmFnbWVudC5tbSAqLzsgfTsKQEAgLTEwNzIsNiArMTA3Myw3IEBACiAJCTBGMTM5RTc1
MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2EvV2Vha09iakNQ
dHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVBRjZDNEQwMDdB
Qjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9j
ZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcxRENENTQ0ODAw
NTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVCMUZDRTE3OTIw
MDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFs
dWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29u
dGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNuYXBzaG90
VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRG
RkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFt
ZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9J
bWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0yNTkzLDYgKzI1
OTUsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNTdHJpbmcuY3Bw
ICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgKi8s
CiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0
aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQ
dHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0
aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRU
YXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAg
Ki8sCkBAIC0zMTc5LDYgKzMxODIsNyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMwMEZFQkNGMyAv
KiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUZFMUQwQTU5MEMw
MEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4
QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYz
MENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVj
dFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25hbWVzcGFj
ZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlzIHRoaW5nIHdo
YXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisv
LyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6CisvLworLy8gK3gg
ICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBhbmQgYXNzZXJ0
cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgYW5kIGFzc2Vy
dHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRzIHRoYXQgJ3gn
IGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5vdCBpbiB0aGUg
c2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBDb25jdXJyZW50
UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0gY29tbWFuZHM7
IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAgICAgIHZvaWQq
IHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb21tYW5k
WzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZFswXSkgeworICAgICAgICBjYXNlICcrJzoK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5hZGQocHRyKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmFkZChw
dHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMocHRy
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoV1RGX0NvbmN1
cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAgICBkb1Rlc3QoIiIpOworfQorCitURVNUKFdU
Rl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudCkKK3sKKyAgICBkb1Rlc3QoIit4
PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVt
ZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4IXgheCF4IXg9
eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1l
bnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgteS0w
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgiKTsKK30KKworVEVTVChXVEZfQ29uY3Vy
cmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzKQoreworICAgIGRvVGVzdCgiKzErMisz
KzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6K3gr
Yyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitC
K04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9
aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1M
PVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwg
QWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYr
Nys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraytsK3oreCtjK3YrYitu
K20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9
Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16
PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9
Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFm
IWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUgh
SiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFv
IXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEh
UyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFy
IXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkh
VSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5
ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEh
VyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0
ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMh
diFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFO
IU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWoh
ayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFa
IVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMh
ZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFH
IUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUh
aSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQ
IUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXch
ZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFU
IVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNIik7Cit9CisKK1RFU1Qo
V1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c0FuZFF1ZXJ5U29tZUJl
Zm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtx
K3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9
dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1S
LVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2Ir
bittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0x
PTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9
ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1D
PVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkU29t
ZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRUaGVSZXN0QW5kUXVlcnlTb21lQmVmb3JlQWRk
aW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3Ir
dCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFl
IXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEh
dyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9
cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWItbi1tLVEtVy1F
LVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTStsK3oreCtjK3Yr
YituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitN
PTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9
bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1Y
PUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328276</attachid>
            <date>2017-12-02 19:31:01 -0800</date>
            <delta_ts>2017-12-02 20:10:18 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>305801</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIFRoaXMgbG9va3MgbGlrZSBhIDElIFNwZWVkb21ldGVy
CisgICAgICAgIHNwZWVkLXVwLgorICAgICAgICAKKyAgICAgICAgVGhlIGNvbnN0cmFpbnQgc29s
dmVyIHN1cHBvcnRzIHJ1bm5pbmcgY29uc3RyYWludHMgaW4gcGFyYWxsZWwgaW4gdHdvIGRpZmZl
cmVudCB3YXlzOgorICAgICAgICAKKyAgICAgICAgLSBSdW4gbXVsdGlwbGUgY29uc3RyYWludHMg
aW4gcGFyYWxsZWwgdG8gZWFjaCBvdGhlci4gVGhpcyBvbmx5IHdvcmtzIGZvciBjb25zdHJhaW50
cyB0aGF0IGNhbgorICAgICAgICAgIHRvbGVyYXRlIG90aGVyIGNvbnN0cmFpbnRzIHJ1bm5pbmcg
Y29uY3VycmVudGx5IHRvIHRoZW0gKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PQorICAgICAg
ICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCkuIFRoaXMgaXMgdGhlIG1vc3Qg
YmFzaWMga2luZCBvZiBwYXJhbGxlbGlzbSB0aGF0IHRoZQorICAgICAgICAgIGNvbnN0cmFpbnQg
c29sdmVyIHN1cHBvcnRzLiBBbGwgY29uc3RyYWludHMgZXhjZXB0IHRoZSBKU0MgU1BJIGNvbnN0
cmFpbnRzIGFyZSBjb25jdXJyZW50LiBXZQorICAgICAgICAgIGNvdWxkIHByb2JhYmx5IG1ha2Ug
dGhlbSBjb25jdXJyZW50LCBidXQgSSdtIHBsYXlpbmcgaXQgc2FmZSBmb3Igbm93LgorICAgICAg
ICAKKyAgICAgICAgLSBBIGNvbnN0cmFpbnQgY2FuIGNyZWF0ZSBwYXJhbGxlbCB3b3JrIGZvciBp
dHNlbGYsIHdoaWNoIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGludGVybGVhdmUKKyAgICAg
ICAgICB3aXRoIG90aGVyIHN0dWZmLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9ydCB0aGF0IGl0IGhh
cyBwYXJhbGxlbCB3b3JrIGJ5IHJldHVybmluZworICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlvbi4gVGhlbiB0aGUg
c29sdmVyIHdpbGwgYWxsb3cgdGhhdAorICAgICAgICAgIGNvbnN0cmFpbnQncyBkb1BhcmFsbGVs
V29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJrZXIgdGhyZWFkcyBh
cyBhcmUgYXZhaWxhYmxlLAorICAgICAgICAgIGZvciBhcyBsb25nIGFzIHRoYXQgZnVuY3Rpb24g
d2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9zc2libGUgdG8gaGF2
ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBhcmFsbGVsIHdvcmsu
CisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVtZW50ZWQgaW4gdGVy
bXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1cm5zIG91dCB0byBi
ZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAgICAgICAKKyAgICAg
ICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEgU2xvdFZpc2l0b3Iu
IFJ1bm5pbmcgb24gdGhlIG1hcmtlciB0aHJlYWRzIG1lYW5zIGhhdmluZworICAgICAgICAgIGFj
Y2VzcyB0byB0aG9zZSB0aHJlYWRzJyBTbG90VmlzaXRvcnMuIEFsc28sIGl0IG1lYW5zIGxlc3Mg
bG9hZCBiYWxhbmNpbmcuIFRoZSBzb2x2ZXIgd2lsbAorICAgICAgICAgIGNyZWF0ZSB3b3JrIG9u
IGVhY2ggbWFya2luZyB0aHJlYWQncyBTbG90VmlzaXRvci4gV2hlbiB0aGUgc29sdmVyIGlzIGRv
bmUgInN0ZWFsaW5nIiBhIG1hcmtlcgorICAgICAgICAgIHRocmVhZCwgdGhhdCB0aHJlYWQgd2ls
bCBoYXZlIHdvcmsgaXQgY2FuIHN0YXJ0IGRvaW5nIGltbWVkaWF0ZWx5LiBCZWZvcmUgdGhpcyBj
aGFuZ2UsIHdlIGhhZCB0bworICAgICAgICAgIGNvbnRyaWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkg
dGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9iYWwgd29ya2xpc3Qgc28gdGhhdCBpdCBj
b3VsZCBiZQorICAgICAgICAgIGRpc3RyaWJ1dGVkIHRvIHRoZSBtYXJrZXIgdGhyZWFkcyBieSBs
b2FkIGJhbGFuY2luZy4gVGhpcyBjaGFuZ2UgcHJvYmFibHkgaGVscHMgdG8gYXZvaWQgdGhhdAor
ICAgICAgICAgIGxvYWQgYmFsYW5jaW5nIHN0ZXAuCisgICAgICAgIAorICAgICAgICBBIGxvdCBv
ZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcgaXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEg
c3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcworICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0
IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFibGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0
cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQg
Y29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2VkIGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRo
aXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVs
IGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxsb2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMu
CisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJhbGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBv
dXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAg
ICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5l
eHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4uIGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20g
dGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9uZQorICAgICAgICB3aGVuIGl0IHJldHVybnMg
YSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3
YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAgICBkb25lIGlzIGluZGljYXRlZCBieSBudWxs
KS4KKyAgICAgICAgCisgICAgICAgIERldGFpbGVkIGFuYWx5c2lzIG9mIHRoZSBwZXJmb3JtYW5j
ZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBpbmRpY2F0ZSBhIGRlZmluaXRlIDElIFNwZWVkb21l
dGVyCisgICAgICAgIHByb2dyZXNzaW9uIGFuZCBubyBjaGFuZ2Ugb24gSmV0U3RyZWFtLiBJIGhh
dmUgZG9uZSB0aGUgU3BlZWRvbWV0ZXIgY29tcGFyaXNvbiBtYW55IHRpbWVzIG5vdyBhbmQKKyAg
ICAgICAgdGhlIHByb2dyZXNzaW9uIGlzIG5vdyBlYXNpbHkgcmVwcm9kdWNpYmxlIG9uIG15IG1h
Y2hpbmUuIEl0IHN0YXJ0ZWQgaW5pdGlhbGx5IGFzIGFuIHVucmVsaWFibGUKKyAgICAgICAgfjAu
NSUgc3BlZWQtdXAgb24gU3BlZWRvbWV0ZXIgYW5kIGEgcmVsaWFibGUgfjAuNSUgcmVncmVzc2lv
biBvbiBKZXRTdHJlYW0uIEFmdGVyIGZpeGluZyBsb3RzIG9mCisgICAgICAgIGJ1Z3MgaW4gdGhl
IGxvYWQgYmFsYW5jZXIgYW5kIHNvbWUgcmVhbGx5IGZ1bm55IHBhdGhvbG9naWVzLCB0aGUgSmV0
U3RyZWFtIHNjb3JlIGJlY2FtZSBuZXV0cmFsCisgICAgICAgIGFuZCB0aGUgU3BlZWRvbWV0ZXIg
c2NvcmUgZ290IGV2ZW4gYmV0dGVyLiAoV2VpcmRlc3QgcGF0aG9sb2d5IHRoYXQgSSBmaXhlZDog
aWYgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBzY2FuIGNvbnN0cmFpbnQgaXMgcnVuIGJ5IHNv
bWUgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIGFuZCB0aGUgbXV0YXRvciBoYXMgdGhl
IGNvbm4gW3NvCisgICAgICAgIHRoZSBtYWluIHRocmVhZCdzIHRvcCBmcmFtZXMgYXJlIHRoZSBH
QyBpdHNlbGZdIHRoZW4gd2Ugd2lsbCBzY2FuIHRoZSBtYWluIHRocmVhZCB0d2ljZSAtIG9uY2UK
KyAgICAgICAgdXNpbmcgQ3VycmVudFRocmVhZFN0YXRlIFt3aGljaCBjYXJlZnVsbHkgYXZvaWRz
IHNjYW5uaW5nIHRoZSBHQydzIHN0YWNrIGZyYW1lc10gYW5kIG9uY2UgYXMgaWYgaXQKKyAgICAg
ICAgd2FzIGEgcmFuZG9tIG5hdGl2ZSB0aHJlYWQgW3doaWNoIHdpbGwgc2NhbiB0aGUgR0MncyBm
cmFtZXNdOyB0aGUgbGF0dGVyIHNjYW4gd291bGQgcGljayB1cAorICAgICAgICBvYmplY3RzIHRo
YXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGhhZCBjb25zaWRlcmVkIGJ1dCByZWplY3RlZCwgd2hp
Y2ggd291bGQgc29tZXRpbWVzIGxlYWQgdG8KKyAgICAgICAgcnVuYXdheSBHQ3MuIEkgZml4ZWQg
dGhpcyBieSB0ZWFjaGluZyB0aGUgY29uc2VydmF0aXZlIHNjYW4gbm90IHRvIHNjYW4gdGhlIHRo
cmVhZCBydW5uaW5nIEdDCisgICAgICAgIHVzaW5nIHRoZSByYW5kb20gbmF0aXZlIHRocmVhZCBz
Y2FubmluZyBhbGdvcml0aG0uKQorCisgICAgICAgICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQp
OgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVl
VG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3Qu
Y3BwOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlKToKKyAgICAgICAgKiBoZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkZpeHBvaW50UGhhc2UpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
cmVzdW1lVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9y
RWFjaFNsb3RWaXNpdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d29ybGRJc1J1bm5pbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpydW5GdW5jdGlvbkluUGFyYWxsZWwpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6d29ybGRJc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxs
b2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkKToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oOgorICAgICAgICAoSlNDOjps
b2NrRHVyaW5nTWFya2luZyk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJj
ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFwL01h
cmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFyayk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAg
ICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2
ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNCZWdp
bik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpuZXdBY3RpdmVXZWFrU2V0c0VuZCk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1
aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtF
c3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwp
OgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnQ6Omxhc3RFeGVjdXRlUGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6cGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OkV4ZWN1dGlvbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkVmlzaXRT
b21ldGhpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6c2hvdWxkVGltZU91dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkcmFp
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpkaWRFeGVjdXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUpOiBEZWxldGVkLgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
Lmg6CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVy
Z2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9u
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1
dGUpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDogQWRkZWQuCisg
ICAgICAgICogaGVhcC9PcGFxdWVSb290U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9Q
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBhcmFsbGVsU291
cmNlQWRhcHRlcjo6UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50
OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdD
b25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpT
aW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9E
YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZy
b21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBhcmFsbGVsUGFz
c2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZUlmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVl
Um9vdHNJZlByb2ZpdGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VPcGFxdWVSb290cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9T
dWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNv
dXJjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxv
Y2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1
YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL1Zpc2l0Q291bnRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpW
aXNpdENvdW50ZXI6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAqIGhlYXAvVmlzaXRpbmdU
aW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9XZWFrQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKToKKwogMjAxNy0xMS0zMCAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBV
c2UgSlNGaXhlZEFycmF5IGZvciBvcF9uZXdfYXJyYXlfYnVmZmVyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMCwxMyArNTAwLDE2IEBAIGhlYXAv
SklUU3R1YlJvdXRpbmVTZXQuY3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCitoZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCiBoZWFwL01hcmtl
ZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAoraGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0yOTEsNiArMjkwLDcgQEAKIAkJ
MEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8q
IEFpck9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNDBFNEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzM0MUM0
NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBOTFDNDk3Rjc0MDBBNTc3RkEg
LyogQWlyT3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDE1NDVC
MUZEMjBCMjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDE1NDVBMUZEMjBCMUYwMDFCNThG
NiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAx
MzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTMxMiw2ICszMTIsOSBAQAogCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyog
U3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYy
MDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07CisJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAq
LzsgfTsKKwkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhD
NzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEQ4Qzc4MUZDQTNDRkEw
MDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlv
dXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi87IH07
CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTQsNiArMzU3LDcgQEAKIAkJMEY2
Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8q
IEFycmF5UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
OyB9OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IH07CisJCTBGNjQ1MzE4MUZEMjQ2QTcwMDI0
MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NDUzMTUxRkQyNDZBMDAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi87IH07CiAJCTBGNjRCMjcyMUE3ODRCQUYwMDZF
NEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY0QjI3
QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIg
LyogQWlyQXJnSW5saW5lcy5oICovOyB9OwpAQCAtNDQ2LDYgKzQ1MCw4IEBACiAJCTBGOUQzNjk1
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBE
RkdDbGVhblVwUGhhc2UuaCAqLzsgfTsKIAkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovOyB9OwogCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuaCAqLzsgfTsKKwkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAq
LzsgfTsKKwkJMEY5REFBMEExRkQxQzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFB
MDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovOyB9OwogCQkw
RjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyB9
OwogCQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgfTsKIAkJMEY5RkM4QzUx
NEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0OTks
NyArMTUwNSw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1NEQ1
MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVCRjcz
OCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5NzAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21O
YW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFFMDhG
MURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlu
a0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclBy
b3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xOTgxLDcgKzE5ODYsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIw
MEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUx
NzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxh
bklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5l
cy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjM0LDYgKzIyMzgsNyBAQAogCQkwRjNCRDFC
NjFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZH
SW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzFGMTgx
Qjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgcGF0aCA9
IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBw
YXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDE1NDVBMUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludENvbmN1cnJlbmN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
bHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI3MCw2ICsyMjc1LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAv
KiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJT
YW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5E
dW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5NzMwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzczMUZD
N0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1
NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRE
NzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDEsNiArMjM1MCw4IEBACiAJCTBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJyYXlNb2RlLmNw
cDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0Fy
cmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY0NTMxNTFGRDI0NkEw
MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlTd2l0Y2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRj
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwMyw2ICsyNTE0
LDkgQEAKIAkJMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQuaDsg
cGF0aCA9IGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5jcHA7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBGMUMzRTJD
NzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgcGF0
aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURB
QTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
cmFsbGVsU291cmNlQWRhcHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlF
MzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00MjY3LDcgKzQyODEsNiBAQAogCQlBREQwOUFGMzFGNjI0ODJF
MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAv
KiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5MzFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NDFFMDhGMUM5MDA1
OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmg7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk1MUUw
OEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0
b3IuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MTcsNiArNTUzMCw4IEBACiAJCQkJMEZEQ0UxMjgx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEy
RUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYy
MTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNDE1NDVB
MUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLywKKwkJCQkwRjRE
OEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJ
MEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJ
CQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2
RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjExLDE3ICs1NjI2LDIz
IEBACiAJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
Ki8sCiAJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcCAqLywKIAkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnRTZXQuaCAqLywKKwkJCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwICovLAorCQkJCTBGOURBQTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJr
U3RhY2suaCAqLywKKwkJCQkwRjY0NTMxNjFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAvKiBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3
QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJG
RCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oICovLAorCQkJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLywKIAkJCQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyog
UHJldmVudENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIw
OCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8q
IFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4
MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYw
MDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMy
QiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTU2NDMsNyArNTY2NCw3IEBACiAJCQkJ
MEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxv
b21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRp
b25hbEZpbmFsaXplci5oICovLAotCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNp
dGluZ1RpbWVvdXQuaCAqLywKKwkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgw
MDAsNiArODAyMSw3IEBACiAJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNp
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUNGOTg5MUU5RUQ2NTIwMEMxODY5MiAvKiBBaXJT
dGFja0FsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDE1NDVCMUZEMjBC
MjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MjAwLDYgKzgyMjIsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcw
MDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEz
QkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIz
RUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJy
aWVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q2FsbERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODI5Myw2ICs4MzE2LDcgQEAKIAkJCQlBNzdB
NDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY0NTMxODFGRDI0
NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg3NjgsNiArODc5Miw3IEBACiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8q
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtODkxNiw2ICs4OTQxLDcgQEAKIAkJCQlBNzQ4MkU5MzEx
NkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQz
MkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVD
NjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4
NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVy
cyAqLywKQEAgLTkwMzUsOSArOTA2MSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZG
IC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNB
M0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVS
b290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyog
T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0Myw2ICs5MjY5LDcgQEAK
IAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEExRkQxQzNE
MzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjgzLDcgKzkzMTAsNiBAQAogCQkJCTBGNkM3MzUxMUFD
OUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGlt
ZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYw
IC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyog
Vk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Miw3ICs5NzIsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRX
ZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQg
PSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAg
IGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNo
b3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGlj
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAogCiBib29sIENvZGVCbG9jazo6c2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewotICAg
IGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTExMzks
MTAgKzExMzksMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwog
I2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRp
b24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4g
JiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJh
bnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwpAQCAt
MTI0NiwxNCArMTI0NiwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5j
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8
Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGFs
bEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29t
bW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVS
ZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChk
ZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewogICAgICAgICAg
ICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3Bs
YW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93biBy
aWdodFRvUnVuLgotICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcGVk
IGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJlYWQo
Jm1fZGF0YSk7CiAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxlZCkg
ewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAu
d29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3Rv
cHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBs
YW5zLmFwcGVuZChtX3BsYW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFwLndv
cmxkSXNTdG9wcGVkKCkpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3BsYW5Db21waWxlZC5u
b3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAo
c2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgu
bV92bS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwogICAgIAogICAgIGlmIChzdGF0ZS5hbGxvY2F0
aW9uRmFpbGVkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDEyICs2NiwxMiBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+Ci1pbmxpbmUgdm9pZCBDb25zZXJ2YXRp
dmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIodm9pZCogcCwgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKK2lubGlu
ZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgbWFy
a0hvb2subWFyayhwKTsKIAogICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2ludGVyc0Zvck1h
cmtpbmcoCi0gICAgICAgIG1faGVhcCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwgcCwKKyAgICAg
ICAgbV9oZWFwLCBtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBmaWx0ZXIs
IHAsCiAgICAgICAgIFsmXSAodm9pZCogcCkgewogICAgICAgICAgICAgaWYgKG1fc2l6ZSA9PSBt
X2NhcGFjaXR5KQogICAgICAgICAgICAgICAgIGdyb3coKTsKQEAgLTk1LDggKzk1LDkgQEAgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogCiAgICAgVGlueUJsb29tRmls
dGVyIGZpbHRlciA9IG1faGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigpOyAvLyBN
YWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8gc2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3Qg
YWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxsb2NhdGVkLgogICAgIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uID0gbV9oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKTsKKyAg
ICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBtX2hlYXAub2JqZWN0U3BhY2Uo
KS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICBmb3IgKGNoYXIqKiBpdCA9IHN0YXRpY19j
YXN0PGNoYXIqKj4oYmVnaW4pOyBpdCAhPSBzdGF0aWNfY2FzdDxjaGFyKio+KGVuZCk7ICsraXQp
Ci0gICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwg
bWFya0hvb2spOworICAgICAgICBnZW5lcmljQWRkUG9pbnRlcigqaXQsIG1hcmtpbmdWZXJzaW9u
LCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGZpbHRlciwgbWFya0hvb2spOwogfQogCiBjbGFzcyBE
dW1teU1hcmtIb29rIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+Ci0gICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgSGVhcFZlcnNpb24s
IFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKKyAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVy
KHZvaWQqLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29rJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXJrSG9vaz4KICAgICB2b2lkIGdlbmVyaWNBZGRTcGFuKHZvaWQqLCB2b2lk
KiBlbmQsIE1hcmtIb29rJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
dHJhaW50Q29uY3VycmVuY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3Ry
YWludENvbmN1cnJlbmN5IDogdWludDhfdCB7CisgICAgU2VxdWVudGlhbCwKKyAgICBDb25jdXJy
ZW50Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitp
bmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWlu
dENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQoreworICAgIHN3aXRjaCAoY29uY3VycmVuY3kpIHsK
KyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsOgorICAgICAg
ICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlND
OjpDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQ6CisgICAgICAgIG91dC5wcmludCgi
Q29uY3VycmVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxs
ZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7CisgICAg
U2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAgICBz
d2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDoK
KyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVu
dGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSwxMiArMjA5LDExIEBAIGlubGluZSBjb25zdCBUIEdDU2VnbWVudGVkQXJyYXk8VD46OnJlbW8K
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogaW5saW5lIGJvb2wgR0NTZWdtZW50ZWRBcnJheTxUPjo6
aXNFbXB0eSgpCiB7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIGJlIHNhZmUgdG8gY2FsbCBjb25j
dXJyZW50bHkuIEl0J3MgaW1wb3J0YW50IHRvIHByZXNlcnZlIHRoYXQgY2FwYWJpbGl0eS4KICAg
ICBpZiAobV90b3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9zZWdtZW50cy5o
ZWFkKCktPm5leHQoKSkgewotICAgICAgICBBU1NFUlQobV9zZWdtZW50cy5oZWFkKCktPm5leHQo
KS0+bV90b3AgPT0gc19zZWdtZW50Q2FwYWNpdHkpOworICAgIGlmIChtX3NlZ21lbnRzLmhlYWQo
KS0+bmV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTWFjaGlu
ZVN0YWNrTWFya2VyLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIK
ICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkU3Bh
Y2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKQEAgLTY2LDYg
KzY3LDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtl
ZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgi
CiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjgxLDcgKzI4Myw3IEBAIEhlYXA6OkhlYXAoVk0qIHZt
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFr
ZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0
YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJr
U3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3Ry
YWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwg
bV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0
aGlzKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFr
ZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjpt
YWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTU5NCw3ICs1OTYsNyBAQCB2b2lk
IEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDCiAgICAgICAgIGZ1bmMoY29kZUJs
b2NrKTsKIH0KIAotdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQordm9p
ZCBIZWFwOjphc3NlcnRNYXJrU3RhY2tzRW1wdHkoKQogewogICAgIGJvb2wgb2sgPSB0cnVlOwog
ICAgIApAQCAtNjA4LDEyICs2MTAsMjEgQEAgdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3Rh
Y2tzRW1wdHkoKQogICAgICAgICBvayA9IGZhbHNlOwogICAgIH0KICAgICAKKyAgICBmb3JFYWNo
U2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBWaXNpdG9yICIsIFJhd1Bv
aW50ZXIoJnZpc2l0b3IpLCAiIGlzIG5vdCBlbXB0eSFcbiIpOworICAgICAgICAgICAgb2sgPSBm
YWxzZTsKKyAgICAgICAgfSk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQob2spOwogfQogCiB2
b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewot
ICAgIG1fbWFjaGluZVRocmVhZHMtPmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9q
aXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MsIG1fY3VycmVudFRocmVhZFN0YXRlKTsKKyAg
ICBtX21hY2hpbmVUaHJlYWRzLT5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0
U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzLCBtX2N1cnJlbnRUaHJlYWRTdGF0ZSwgbV9jdXJy
ZW50VGhyZWFkKTsKIH0KIAogdm9pZCBIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0
aXZlUm9vdHMmIHJvb3RzKQpAQCAtNzMwLDcgKzc0MSw3IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2lu
ZygpCiAgICAgICAgICAgICB2aXNpdG9yLnJlc2V0KCk7CiAgICAgICAgIH0pOwogCi0gICAgYXNz
ZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CisgICAgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7
CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKQEAgLTkxMSw3ICs5MjIsNyBA
QCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVy
c0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8v
IER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0
IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxs
IG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmplY3Qu
IElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBh
ZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0
LDE1ICs5MzUsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQog
ICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAg
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMg
b3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBp
c01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2Ug
ZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1h
cmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nh
bm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21p
Y0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUg
b2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAgICAg
ICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRo
aXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtlZENv
bmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAgICAg
ICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAgIC8v
IGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAgICAg
ICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlm
ZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBi
bGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sg
Y29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShD
ZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk1OSw3IEBAIHZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8v
IEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0
ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3Mg
T0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ug
d2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0x
MDkxLDYgKzExMDIsNyBAQCBhdXRvIEhlYXA6OnJ1bkN1cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciBj
CiB7CiAgICAgY2hlY2tDb25uKGNvbm4pOwogICAgIG1fY3VycmVudFRocmVhZFN0YXRlID0gY3Vy
cmVudFRocmVhZFN0YXRlOworICAgIG1fY3VycmVudFRocmVhZCA9ICZXVEY6OlRocmVhZDo6Y3Vy
cmVudCgpOwogICAgIAogICAgIGlmIChjb25uID09IEdDQ29uZHVjdG9yOjpNdXRhdG9yKQogICAg
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0oKSk7CkBAIC0xMjgzLDEzICsxMjk1LDExIEBAIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICB9CiAgICAgICAgIAog
ICAgIGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgbV9v
cGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAgICAgCiAgICAgICAgIG1fc2NoZWR1
bGVyLT5kaWRSZWFjaFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgYXNzZXJ0
U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0
b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRv
ciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3It
Pm1lcmdlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgCisgICAgICAgIGFzc2VydE1hcmtTdGFja3NF
bXB0eSgpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRvckRp
ZFJ1biBpbnRvIGFjY291bnQgd2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxpa2Vs
eSwKICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIHJvb3QgY29uc3RyYWludHMg
YWdhaW4gdW5sZXNzIHRoZSBtdXRhdG9yIGRpZCBydW4uIEF0IGEKQEAgLTEyOTcsMTcgKzEzMDcs
MTQgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAv
LyBlc3RpbWF0ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjgyOAogICAgICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZCB0aW1lb3V0LiBUaGlzIG9u
bHkgY29tZXMKLSAgICAgICAgLy8gaW50byBwbGF5IGlmIHdlJ3JlIGV4ZWN1dGluZyBjb25zdHJh
aW50cyBmb3IgdGhlIGZpcnN0IHRpbWUuIEJ1dCB0aGF0IHdpbGwgbWF0dGVyCi0gICAgICAgIC8v
IHdoZW4gd2UgaGF2ZSBkZWVwIHN0YWNrcyBvciBhIGxvdCBvZiBET00gc3R1ZmYuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzEKLSAgICAg
ICAgICAgIAogICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAg
ICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCku
Ci0gICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+
ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKKyAgICAgICAgYm9vbCBjb252ZXJnZWQgPSBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252
ZXJnZW5jZShzbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlIHNs
b3RWaXNpdG9yLmlzRW1wdHkoKSBjaGVjayBpcyBtb3N0IGxpa2VseSBub3QgbmVlZGVkLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzEwCiAg
ICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgIGFzc2VydE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzMjQsNiAr
MTMzMSwxNSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAg
ICAgIAogICAgIG1fc2NoZWR1bGVyLT5zeW5jaHJvbm91c0RyYWluaW5nRGlkU3RhbGwoKTsKIAor
ICAgIC8vIFRoaXMgaXMga2luZGEgdHJpY2t5LiBUaGUgdGVybWluYXRpb24gY2hlY2sgbG9va3Mg
YXQ6CisgICAgLy8KKyAgICAvLyAtIFdoZXRoZXIgdGhlIG1hcmtpbmcgdGhyZWFkcyBhcmUgYWN0
aXZlLiBJZiB0aGV5IGFyZSBub3QsIHRoaXMgbWVhbnMgdGhhdCB0aGUgbWFya2luZyB0aHJlYWRz
JworICAgIC8vICAgU2xvdFZpc2l0b3JzIGFyZSBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IGNvbGxlY3RvcidzIHNsb3QgdmlzaXRvciBpcyBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IHNoYXJlZCBtYXJrIHN0YWNrcyBhcmUgZW1wdHkuCisgICAgLy8KKyAgICAvLyBUaGlzIGRvZXNu
J3QgaGF2ZSB0byBjaGVjayB0aGUgbXV0YXRvciBTbG90VmlzaXRvciBiZWNhdXNlIHRoYXQgb25l
IGJlY29tZXMgZW1wdHkgYWZ0ZXIgZXZlcnkgR0MKKyAgICAvLyB3b3JrIGluY3JlbWVudCwgc28g
aXQgbXVzdCBiZSBlbXB0eSBub3cuCiAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWlu
YXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxvb3Bpbmcg
dG8gdGhlIHRvcCBpZiBydW5GaXhwb2ludFBoYXNlKCkuCiAgICAgICAgIApAQCAtMTQ4OSw2ICsx
NTA1LDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogICAgIGlm
IChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhjb25uLCAiOiBHb2luZyB0byBwaGFzZTogIiwgbV9u
ZXh0UGhhc2UsICIgKGZyb20gIiwgbV9jdXJyZW50UGhhc2UsICIpXG4iKTsKICAgICAKKyAgICBt
X3BoYXNlVmVyc2lvbisrOworICAgIAogICAgIGJvb2wgc3VzcGVuZGVkQmVmb3JlID0gd29ybGRT
aG91bGRCZVN1c3BlbmRlZChtX2N1cnJlbnRQaGFzZSk7CiAgICAgYm9vbCBzdXNwZW5kZWRBZnRl
ciA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQobV9uZXh0UGhhc2UpOwogICAgIApAQCAtMTUyNiw3
ICsxNTQ0LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogCiB2
b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgY29ubikKIHsKLSAgICBpZiAo
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmIChtX3dv
cmxkSXNTdG9wcGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiB3b3JsZCBhbHJlYWR5IHN0
b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0xNTM3LDcgKzE1NTUsNyBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25k
dWN0b3IgCiAgICAgbV9tdXRhdG9yRGlkUnVuID0gZmFsc2U7CiAKICAgICBzdXNwZW5kQ29tcGls
ZXJUaHJlYWRzKCk7Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCA9IHRydWU7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IHRydWU7CiAKICAgICBmb3JFYWNoU2xv
dFZpc2l0b3IoCiAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CkBAIC0x
NTc0LDExICsxNTkyLDExIEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OnJlc3VtZVRoZVBlcmlw
aGUKICAgICAKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAwOwogICAgIAotICAgIGlmICghbV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmICghbV93b3Js
ZElzU3RvcHBlZCkgewogICAgICAgICBkYXRhTG9nKCJGYXRhbDogY29sbGVjdG9yIGRvZXMgbm90
IGJlbGlldmUgdGhhdCB0aGUgd29ybGQgaXMgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IGZhbHNl
OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZDogd2Ug
d2FudCB0byBncmFiIHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQogICAgIC8v
IGJlY29tZSBhdmFpbGFibGUuIFdlIGJhc2ljYWxseSB3YW50IGEgbG9ja0FueSgpIG1ldGhvZCB0
aGF0IHdpbGwgbG9jayB3aGF0ZXZlciBsb2NrIGlzIGF2YWlsYWJsZQpAQCAtMjU3OCw3ICsyNTk2
LDExIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDAp
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKKyAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNl
VGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAg
ICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAt
MjU4NywxMiArMjYwOSwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
ICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNpb247CiAgICAgICAgIH0sCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsyNjM3
LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAg
ICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
ICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjYy
MSw3ICsyNjQ1LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwpA
QCAtMjY0MSwyMSArMjY2NSwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIg
Um91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVjdFNw
YWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwK
LSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
ICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xv
dFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjg4LDcgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAgICAg
ICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJl
bmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2ODQsNyArMjcwOCw3IEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAogICAgICAg
ICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdzIGJs
YWNrLgpAQCAtMjY5NSwyMyArMjcxOSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXll
ZCk7CiAgICAgCi0gICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCi0gICAgICAgICJNcm1zIiwgIk11
dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKLSAgICAgICAgICAgIC8vIEluZGlj
YXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKLSAgICAgICAgICAg
IHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3Rh
Y2stPnNpemUoKTsKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXpl
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiKCIsIHNpemUsICIpIik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOwotICAgICAgICAgICAgbV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHNs
b3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewotICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludD4oKnRoaXMpKTsKIH0KIAogdm9pZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQpCkBAIC0yNzk0LDE2
ICsyODAyLDYgQEAgdm9pZCBIZWFwOjphbGxvd0NvbGxlY3Rpb24oKQogICAgIG1fY29sbGVjdENv
bnRpbnVvdXNseUxvY2sudW5sb2NrKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgZnVu
YygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0
b3IpOwotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TXV0YXRv
clNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5j
ZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCArMjg0NSwyNCBAQCB2b2lkIEhlYXA6OnJlbW92ZUhlYXBG
aW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJlbW92ZUZp
cnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBIZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgbV9ib251c1Zpc2l0b3JUYXNrID0g
dGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwor
dm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiB0YXNrKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxSZWZDb3VudCA9IHRhc2st
PnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5y
dW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVs
bHB0cik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011
dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2stPnJlZkNvdW50KCkgPiBpbml0aWFsUmVmQ291bnQp
CisgICAgICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KG1fbWFya2luZ011
dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi
V2Vha0hhbmRsZU93bmVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgog
I2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNzMsNiArNzQsNyBA
QCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFj
aGluZVRocmVhZHM7CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKK2NsYXNzIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogY2xhc3MgTWFya2VkQXJndW1l
bnRCdWZmZXI7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKQEAgLTExNCw3ICsxMTYsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9
IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRp
YyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAg
c3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xNTQsNyArMTU1LDggQEAg
cHVibGljOgogICAgIE11dGF0b3JTdGF0ZSBtdXRhdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X211dGF0b3JTdGF0ZTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBjb2xs
ZWN0aW9uU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3Rpb25TY29wZTsgfQogICAgIGJv
b2wgaGFzSGVhcEFjY2VzcygpIGNvbnN0OwotICAgIGJvb2wgY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNTdG9wcGVkKCkgY29u
c3Q7CisgICAgYm9vbCB3b3JsZElzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuICF3b3JsZElzU3Rv
cHBlZCgpOyB9CiAKICAgICAvLyBXZSdyZSBhbHdheXMgYnVzeSBvbiB0aGUgY29sbGVjdGlvbiB0
aHJlYWRzLiBPbiB0aGUgbWFpbiB0aHJlYWQsIHRoaXMgcmV0dXJucyB0cnVlIGlmIHdlJ3JlCiAg
ICAgLy8gaGVscGluZyBoZWFwLgpAQCAtMzQ5LDYgKzM1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFsbG93Q29sbGVjdGlvbigpOwogICAgIAogICAgIHVpbnQ2NF90IG11dGF0b3JFeGVjdXRpb25W
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbjsgfQorICAg
IHVpbnQ2NF90IHBoYXNlVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2VWZXJzaW9uOyB9
CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTM1OCw2ICszNjEs
MTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNv
bnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQgcmVtb3ZlSGVhcEZpbmFsaXpl
ckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOworICAgIAorICAgIHZvaWQg
cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4p
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBydW5GdW5jdGlv
bkluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHJ1blRhc2tJblBh
cmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPihmdW5jKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRp
bmdTY29wZTsKQEAgLTM3Myw2ICszODcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBI
ZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9j
azsKQEAgLTUyNSw4ICs1NDAsMTAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB2b2lkIGFzc2VydFNoYXJl
ZE1hcmtTdGFja3NFbXB0eSgpOworICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAK
KyAgICB2b2lkIHNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4pOworICAgIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAg
Y29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5
Y2xlOwpAQCAtNTc5LDkgKzU5Niw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFNsb3RWaXNpdG9y
Kj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9yczsKICAgICBMb2NrIG1fcGFyYWxsZWxT
bG90VmlzaXRvckxvY2s7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJik7Ci0KICAgICBIYW5kbGVTZXQgbV9o
YW5kbGVTZXQ7CiAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUJsb2NrU2V0PiBtX2NvZGVCbG9ja3M7CkBAIC02MzMsOCArNjQ3LDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAg
fTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CiAKLSAg
ICBMb2NrIG1fb3BhcXVlUm9vdHNNdXRleDsKLSAgICBIYXNoU2V0PGNvbnN0IHZvaWQqPiBtX29w
YXF1ZVJvb3RzOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdHM7CiAKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCkBAIC02
NDIsNiArNjU1LDcgQEAgcHJpdmF0ZToKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25h
bEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKIAogICAgIFBhcmFs
bGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+IG1fYm9udXNWaXNpdG9yVGFzazsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2NhdGVkIHsgMCB9OwpAQCAt
NjU3LDcgKzY3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5lZWRG
aW5hbGl6ZUJpdCA9IDF1IDw8IDR1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9y
V2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMg
YXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3Rh
dGU7Ci0gICAgYm9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fd29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIE1vbm90
b25pY1RpbWUgbV9iZWZvcmVHQzsKICAgICBNb25vdG9uaWNUaW1lIG1fYWZ0ZXJHQzsKICAgICBN
b25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CkBAIC02NzIsNiArNjg2LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fdGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JE
aWRSdW4geyB0cnVlIH07CiAgICAgdWludDY0X3QgbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbiB7
IDAgfTsKKyAgICB1aW50NjRfdCBtX3BoYXNlVmVyc2lvbiB7IDAgfTsKICAgICBCb3g8TG9jaz4g
bV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fdGhy
ZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3YWl0IG9uIHRoaXMuIEl0IHdv
dWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJl
YWQ7CkBAIC02OTMsNiArNzA4LDcgQEAgcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9iYXJyaWVy
c0V4ZWN1dGVkIHsgMCB9OwogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50
VGhyZWFkU3RhdGUgeyBudWxscHRyIH07CisgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVh
ZCB7IG51bGxwdHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2lu
dGVyLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDMwICs2Mywy
MCBAQCBpbmxpbmUgYm9vbCBIZWFwOjpoYXNIZWFwQWNjZXNzKCkgY29uc3QKICAgICByZXR1cm4g
bV93b3JsZFN0YXRlLmxvYWQoKSAmIGhhc0FjY2Vzc0JpdDsKIH0KIAotaW5saW5lIGJvb2wgSGVh
cDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdAoraW5saW5l
IGJvb2wgSGVhcDo6d29ybGRJc1N0b3BwZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOworICAgIHJldHVybiBtX3dvcmxkSXNT
dG9wcGVkOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gaW5zdGFuY2UgbWV0aG9k
LCBzbyB0aGF0IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJzaW9uKCkgcXVpY2tseS4KKy8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5ODgKIEFMV0FZU19JTkxJ
TkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFTU0VS
VChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwt
PmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRp
b24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJs
b2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgpLT5o
ZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdDZWxs
KQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2Vs
bCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBj
ZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBibG9j
ayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29uY3Vy
cmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1Zl
cnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCktPmhl
YXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlTX0lO
TElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkBAIC05NSw3ICs4NSw3IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2UKICAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRp
b24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLnRlc3RBbmRTZXRN
YXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwot
ICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeSA9IGJsb2NrLmFib3V0VG9NYXJrKG1hcmtpbmdWZXJz
aW9uKTsKKyAgICBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSA9IGJsb2NrLmFib3V0VG9NYXJr
KG1hcmtpbmdWZXJzaW9uKTsKICAgICByZXR1cm4gYmxvY2sudGVzdEFuZFNldE1hcmtlZChjZWxs
LCBkZXBlbmRlbmN5KTsKIH0KIApAQCAtMTc5LDE5ICsxNjksMTkgQEAgaW5saW5lIHZvaWQgSGVh
cDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPAogCiBpbmxpbmUgdm9pZCBIZWFwOjppbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0K
IAogaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNT
RVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBl
ZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OmRlY3Jl
bWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2Rl
ZmVycmFsRGVwdGgtLTsKICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9kaWREZWZlckdDV29yaykp
IHsKQEAgLTI2OSw0ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5
KCkKICAgICAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgordm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykK
K3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2sp
OworICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIGZ1bmMoKm1fbXV0YXRv
clNsb3RWaXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNs
b3RWaXNpdG9ycykKKyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1
aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBT
bmFwc2hvdEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNyBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3QoCiB2b2lk
IEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQogewogICAgIEFT
U0VSVChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOwotICAgIEFT
U0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6
OmlzTWFya2VkKGNlbGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGluZ05vZGVGb3JDZWxsKGNlbGwp
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
VXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGls
LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBV
dGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAgcHVibGljOgogICAgIC8vIGJl
Zm9yZSBsaXZlbmVzcyBkYXRhIGlzIGNsZWFyZWQgdG8gYmUgYWNjdXJhdGUuCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KICAgICBzdGF0aWMgdm9pZCBmaW5kR0NPYmplY3RQb2ludGVyc0Zv
ck1hcmtpbmcoCi0gICAgICAgIEhlYXAmIGhlYXAsIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
LCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCB2b2lkKiBwYXNzZWRQb2ludGVyLAotICAgICAgICBj
b25zdCBGdW5jJiBmdW5jKQorICAgICAgICBIZWFwJiBoZWFwLCBIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0
ZXIgZmlsdGVyLAorICAgICAgICB2b2lkKiBwYXNzZWRQb2ludGVyLCBjb25zdCBGdW5jJiBmdW5j
KQogICAgIHsKICAgICAgICAgY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JiBzZXQgPSBoZWFw
Lm9iamVjdFNwYWNlKCkuYmxvY2tzKCkuc2V0KCk7CiAgICAgICAgIApAQCAtODgsNyArODgsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgJiYgc2V0LmNvbnRhaW5zKHByZXZpb3VzQ2FuZGlk
YXRlKQogICAgICAgICAgICAgICAgICYmIHByZXZpb3VzQ2FuZGlkYXRlLT5oYW5kbGUoKS5jZWxs
S2luZCgpID09IEhlYXBDZWxsOjpBdXhpbGlhcnkpIHsKICAgICAgICAgICAgICAgICBwcmV2aW91
c1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocHJldmlvdXNDYW5kaWRhdGUtPmhhbmRsZSgp
LmNlbGxBbGlnbihwcmV2aW91c1BvaW50ZXIpKTsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlv
dXNDYW5kaWRhdGUtPmhhbmRsZSgpLmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIGlzTWFya2lu
ZywgcHJldmlvdXNQb2ludGVyKSkKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNDYW5kaWRh
dGUtPmhhbmRsZSgpLmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbiwgaXNNYXJraW5nLCBwcmV2aW91c1BvaW50ZXIpKQogICAgICAgICAgICAgICAgICAgICBm
dW5jKHByZXZpb3VzUG9pbnRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwMiw3
ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAg
ICBhdXRvIHRyeVBvaW50ZXIgPSBbJl0gKHZvaWQqIHBvaW50ZXIpIHsKLSAgICAgICAgICAgIGlm
IChjYW5kaWRhdGUtPmhhbmRsZSgpLmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIGlzTWFya2lu
ZywgcG9pbnRlcikpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5oYW5kbGUoKS5pc0xpdmVD
ZWxsKG1hcmtpbmdWZXJzaW9uLCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGlzTWFya2luZywgcG9p
bnRlcikpCiAgICAgICAgICAgICAgICAgZnVuYyhwb2ludGVyKTsKICAgICAgICAgfTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc05ld2x5QWxsb2NhdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc05ld2x5QWxsb2NhdGVkOyB9
CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzTWFya2VkKEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQotICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFy
a2VkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVh
cFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3lGZW5jZSkgeyByZXR1cm4g
aXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lv
biwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7
IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxvY2F0ZWQoKTsgfQogICAgIAogICAgIGJv
b2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZENlbGw7IH0KQEAgLTEx
MCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRl
cyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgIAotICAg
IERlcGVuZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24pIHsgcmV0dXJuIG51bGxEZXBlbmRl
bmN5KCk7IH0KKyAgICBEZXBlbmRlbmN5RmVuY2UgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24pIHsg
cmV0dXJuIERlcGVuZGVuY3lGZW5jZSgpOyB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBib29s
IHRlc3RBbmRTZXRNYXJrZWQoKQogICAgIHsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIG1faXNNYXJrZWQuY29tcGFy
ZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKICAgICB9Ci0gICAgQUxXQVlTX0lOTElORSBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcENlbGwqLCBEZXBlbmRlbmN5KSB7IHJldHVybiB0ZXN0
QW5kU2V0TWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdGVzdEFuZFNldE1hcmtl
ZChIZWFwQ2VsbCosIERlcGVuZGVuY3lGZW5jZSkgeyByZXR1cm4gdGVzdEFuZFNldE1hcmtlZCgp
OyB9CiAgICAgdm9pZCBjbGVhck1hcmtlZCgpIHsgbV9pc01hcmtlZC5zdG9yZShmYWxzZSk7IH0K
ICAgICAKICAgICB2b2lkIG5vdGVNYXJrZWQoKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9ja0R1cmluZ01hcmtpbmcuaAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9ja0R1cmluZ01hcmtpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMywxNCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIFVzZSB0aGlzIGxvY2sgc2Nv
cGUgbGlrZSBzbzoKIC8vIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcoaGVhcCwgbG9j
ayk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLUxvY2tlcjxMb2NrVHlwZT4gbG9ja0R1
cmluZ01hcmtpbmcoSGVhcCYgaGVhcCwgTG9ja1R5cGUmIHBhc3NlZExvY2spCithdXRvIGxvY2tE
dXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNzZWRMb2NrKQogewotICAgIExv
Y2tUeXBlKiBsb2NrOwotICAgIGlmIChoZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpKQotICAg
ICAgICBsb2NrID0gJnBhc3NlZExvY2s7Ci0gICAgZWxzZQotICAgICAgICBsb2NrID0gbnVsbHB0
cjsKLSAgICByZXR1cm4gTG9ja2VyPExvY2tUeXBlPihsb2NrKTsKKyAgICByZXR1cm4gaG9sZExv
Y2tJZihwYXNzZWRMb2NrLCBoZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNSw3ICsxMzUsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRT
CiAgICAgKnNpemUgKz0gc3RhY2suc2Vjb25kOwogfQogCi1ib29sIE1hY2hpbmVUaHJlYWRzOjp0
cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgdm9p
ZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKK2Jvb2wgTWFjaGluZVRo
cmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplLCBUaHJlYWQm
IGN1cnJlbnRUaHJlYWRGb3JHQykKIHsKICAgICAvLyBQcmV2ZW50IHR3byBWTXMgZnJvbSBzdXNw
ZW5kaW5nIGVhY2ggb3RoZXIncyB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUsCiAgICAgLy8gd2hp
Y2ggY2FuIGNhdXNlIGRlYWRsb2NrOiA8cmRhcjovL3Byb2JsZW0vMjAzMDA4NDI+LgpAQCAtMTQ1
LDEzICsxNDUsMTQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkUwog
ICAgICpzaXplID0gMDsKIAogICAgIFRocmVhZCYgY3VycmVudFRocmVhZCA9IFRocmVhZDo6Y3Vy
cmVudCgpOwotICAgIGNvbnN0IGF1dG8mIHRocmVhZHMgPSBtX3RocmVhZEdyb3VwLT50aHJlYWRz
KGxvY2tlcik7CisgICAgY29uc3QgTGlzdEhhc2hTZXQ8UmVmPFRocmVhZD4+JiB0aHJlYWRzID0g
bV90aHJlYWRHcm91cC0+dGhyZWFkcyhsb2NrZXIpOwogICAgIEJpdFZlY3RvciBpc1N1c3BlbmRl
ZCh0aHJlYWRzLnNpemUoKSk7CiAKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsK
LSAgICAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiB0aHJlYWRzKSB7Ci0gICAgICAgICAgICBpZiAo
dGhyZWFkLmdldCgpICE9IGN1cnJlbnRUaHJlYWQpIHsKKyAgICAgICAgZm9yIChjb25zdCBSZWY8
VGhyZWFkPiYgdGhyZWFkIDogdGhyZWFkcykgeworICAgICAgICAgICAgaWYgKHRocmVhZC5nZXQo
KSAhPSBjdXJyZW50VGhyZWFkCisgICAgICAgICAgICAgICAgJiYgdGhyZWFkLmdldCgpICE9IGN1
cnJlbnRUaHJlYWRGb3JHQykgewogICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFk
LT5zdXNwZW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgICAg
ICAgICAgaXNTdXNwZW5kZWQuc2V0KGluZGV4KTsKQEAgLTE5OSw3ICsyMDAsNyBAQCBzdGF0aWMg
dm9pZCBncm93QnVmZmVyKHNpemVfdCBzaXplLCB2b2lkCiAgICAgKmJ1ZmZlciA9IGZhc3RNYWxs
b2MoKmNhcGFjaXR5KTsKIH0KIAotdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyQ29uc2VydmF0
aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91
dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MsIEN1cnJl
bnRUaHJlYWRTdGF0ZSogY3VycmVudFRocmVhZFN0YXRlKQordm9pZCBNYWNoaW5lVGhyZWFkczo6
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJv
b3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNv
ZGVCbG9ja3MsIEN1cnJlbnRUaHJlYWRTdGF0ZSogY3VycmVudFRocmVhZFN0YXRlLCBUaHJlYWQq
IGN1cnJlbnRUaHJlYWQpCiB7CiAgICAgaWYgKGN1cnJlbnRUaHJlYWRTdGF0ZSkKICAgICAgICAg
Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoY29uc2VydmF0aXZlUm9vdHMsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2NrcywgKmN1cnJlbnRUaHJlYWRTdGF0ZSk7CkBAIC0yMDgsNyArMjA5LDcgQEAg
dm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyQ29uc2VydmF0aXZlUgogICAgIHNpemVfdCBjYXBh
Y2l0eSA9IDA7CiAgICAgdm9pZCogYnVmZmVyID0gbnVsbHB0cjsKICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fdGhyZWFkR3JvdXAtPmdldExvY2soKSk7Ci0gICAgd2hpbGUgKCF0cnlDb3B5
T3RoZXJUaHJlYWRTdGFja3MobG9ja2VyLCBidWZmZXIsIGNhcGFjaXR5LCAmc2l6ZSkpCisgICAg
d2hpbGUgKCF0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MobG9ja2VyLCBidWZmZXIsIGNhcGFjaXR5
LCAmc2l6ZSwgKmN1cnJlbnRUaHJlYWQpKQogICAgICAgICBncm93QnVmZmVyKHNpemUsICZidWZm
ZXIsICZjYXBhY2l0eSk7CiAKICAgICBpZiAoIWJ1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiBwdWJs
aWM6CiAgICAgTWFjaGluZVRocmVhZHMoKTsKIAotICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1Nl
dCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSopOworICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYs
IEN1cnJlbnRUaHJlYWRTdGF0ZSosIFRocmVhZCopOwogCiAgICAgLy8gT25seSBuZWVkcyB0byBi
ZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNhbiB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11bHRp
cGxlIHRocmVhZHMuCiAgICAgdm9pZCBhZGRDdXJyZW50VGhyZWFkKCkgeyBtX3RocmVhZEdyb3Vw
LT5hZGRDdXJyZW50VGhyZWFkKCk7IH0KQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJv
dXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmLCBDdXJyZW50VGhyZWFkU3RhdGUmKTsKIAogICAgIHZv
aWQgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2soVGhyZWFkJiwgdm9pZCosIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90Kik7Ci0gICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKKyAgICBib29s
IHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCosIFRocmVhZCYpOwogCiAgICAgc3RkOjpzaGFyZWRfcHRy
PFRocmVhZEdyb3VwPiBtX3RocmVhZEdyb3VwOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQorICAgIDogTWFya2lu
Z0NvbnN0cmFpbnQoIk1zbSIsICJNYXJrIFN0YWNrIE1lcmdpbmciLCBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlFeGVjdXRpb24pCisgICAgLCBtX2hlYXAoaGVhcCkKK3sKK30KKworTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6On5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpCit7
Cit9CisKK2RvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCkgKyBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Cit9CisKK3ZvaWQgTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgLy8gTG9nZ2luZyB0aGUg
d29yayBoZXJlIGVuc3VyZXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBp
dCBkb2Vzbid0IG5lZWQgdG8gcHJvZHVjZQorICAgIC8vIGFueW1vcmUgd29yay4KKyAgICBzaXpl
X3Qgc2l6ZSA9IG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1faGVhcC5tX3Jh
Y2VNYXJrU3RhY2stPnNpemUoKTsKKyAgICB2aXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXplKTsK
KyAgICAKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIHNp
emUsICIpIik7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9oZWFw
Lm1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2so
KSk7CisgICAgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0
b3JNYXJrU3RhY2soKSk7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVu
dGlhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCA6IHB1YmxpYyBN
YXJraW5nQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQoSGVhcCYpOworICAgIH5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpOworICAgIAorICAg
IGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIAor
cHJvdGVjdGVkOgorICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIG92ZXJyaWRlOwor
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIG92ZXJy
aWRlOworICAgIAorcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDQsNiArNDQ0LDMz
IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQoKQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxl
KigpPj4gTWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKQorewor
ICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigp
PiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
KQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcnVuKCkgb3ZlcnJp
ZGUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICAgICAgbV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZp
bmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9j
YXRvci5tX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9ibG9ja3NbbV9pbmRleCsrXTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1f
YWxsb2NhdG9yOworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKKyAgICAgICAgTG9jayBt
X2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMp
KTsKK30KKwogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBtX2NlbGxTaXplLCAi
LyIsIG1fYXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMDMsNiAr
MTA0LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKKyAgICBS
ZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0
eUJsb2NrU291cmNlKCk7CisgICAgCiAgICAgdm9pZCBhZGRCbG9jayhNYXJrZWRCbG9jazo6SGFu
ZGxlKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5o
IgogI2luY2x1ZGUgIlN3ZWVwaW5nU2NvcGUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG1JbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0yMDAsNyArMjAxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAo
Y29uc3QgRnJlZQogdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKQogewogICAgIEFTU0VSVCh2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCku
aXNNYXJraW5nKCkpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIAogICAgIGlmICghYXJlTWFya3NTdGFsZSht
YXJraW5nVmVyc2lvbikpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMywxNSArMjI0LDE5IEBAIHZv
aWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAgICAgICAgIGRhdGFM
b2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcgdGhpbmdzLlxuIik7CiAgICAgICAgIEhlYXBW
ZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHNwYWNlKCktPm5ld2x5QWxsb2NhdGVkVmVy
c2lvbigpOwogICAgICAgICBpZiAoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPT0g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7Ci0gICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGVu
dHMgb2YgbWFya2VkIGludG8gbmV3bHlBbGxvY2F0ZWQuIElmIHdlIGdldCB0aGUgZnVsbCBzZXQg
b2YgYml0cwotICAgICAgICAgICAgLy8gdGhlbiBpbnZhbGlkYXRlIG5ld2x5QWxsb2NhdGVkIGFu
ZCBzZXQgYWxsb2NhdGVkLgotICAgICAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5t
ZXJnZUFuZENsZWFyKG1fbWFya3MpOworICAgICAgICAgICAgLy8gV2hlbiBkbyB3ZSBnZXQgaGVy
ZT8gVGhlIGJsb2NrIGNvdWxkIG5vdCBoYXZlIGJlZW4gZmlsbGVkIHVwLiBUaGUgbmV3bHlBbGxv
Y2F0ZWQgYml0cyB3b3VsZAorICAgICAgICAgICAgLy8gaGF2ZSBoYWQgdG8gYmUgY3JlYXRlZCBz
aW5jZSB0aGUgZW5kIG9mIHRoZSBsYXN0IGNvbGxlY3Rpb24uIFRoZSBvbmx5IHRoaW5ncyB0aGF0
IGNyZWF0ZQorICAgICAgICAgICAgLy8gdGhlbSBhcmUgYWJvdXRUb01hcmtTbG93LCBsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSwgYW5kIHN0b3BBbGxvY2F0aW5nLiBJZiBpdCBoYWQgYmVlbgorICAgICAg
ICAgICAgLy8gYWJvdXRUb01hcmtTbG93LCB0aGVuIHdlIHNob3VsZG4ndCBiZSBoZXJlIHNpbmNl
IHRoZSBtYXJrcyB3b3VsZG4ndCBiZSBzdGFsZSBhbnltb3JlLiBJdAorICAgICAgICAgICAgLy8g
Y2Fubm90IGJlIGxhc3RDaGFuY2VUb0ZpbmFsaXplLiBTbyBpdCBtdXN0IGJlIHN0b3BBbGxvY2F0
aW5nLiBUaGF0IG1lYW5zIHRoYXQgd2UganVzdAorICAgICAgICAgICAgLy8gY29tcHV0ZWQgdGhl
IG5ld2x5QWxsb2NhdGVkIGJpdHMganVzdCBiZWZvcmUgdGhlIHN0YXJ0IG9mIGFuIGluY3JlbWVu
dC4gV2hlbiB3ZSBhcmUgaW4gdGhhdAorICAgICAgICAgICAgLy8gbW9kZSwgaXQgc2VlbXMgYXMg
aWYgbmV3bHlBbGxvY2F0ZWQgc2hvdWxkIHN1YnN1bWUgbWFya3MuCisgICAgICAgICAgICBBU1NF
UlQoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zdWJzdW1lcyhtX21hcmtzKSk7CisgICAgICAg
ICAgICBtX21hcmtzLmNsZWFyQWxsKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiBuZXdseUFsbG9jYXRlZCB3aXRoIG1hcmtlZC4gSWYg
d2UgZ2V0IHRoZSBmdWxsIHNldCBvZgotICAgICAgICAgICAgLy8gYml0cyB0aGVuIGludmFsaWRh
dGUgbmV3bHlBbGxvY2F0ZWQgYW5kIHNldCBhbGxvY2F0ZWQuCiAgICAgICAgICAgICBoYW5kbGUo
KS5tX25ld2x5QWxsb2NhdGVkLnNldEFuZENsZWFyKG1fbWFya3MpOworICAgICAgICAgICAgaGFu
ZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBuZXdseUFsbG9jYXRlZFZlcnNpb247CiAg
ICAgICAgIH0KLSAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBuZXds
eUFsbG9jYXRlZFZlcnNpb247CiAgICAgfQogICAgIGNsZWFySGFzQW55TWFya2VkKCk7CiAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTM2NiwxNiArMzcxLDYgQEAgdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpkaWRSZW1vdmVGcm9tQQogICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsK
IH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoY29uc3QgSGVhcENlbGwqIGNl
bGwpCi17Ci0gICAgcmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFj
ZSgpLT5pc01hcmtpbmcoKSwgY2VsbCk7Ci19Ci0KLWJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6
aXNMaXZlQ2VsbChjb25zdCB2b2lkKiBwKQotewotICAgIHJldHVybiBpc0xpdmVDZWxsKHNwYWNl
KCktPm1hcmtpbmdWZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2luZygpLCBwKTsKLX0KLQogI2lm
ICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgTWFya2VkQmxvY2s6OmFzc2VydFZhbGlkQ2VsbChWTSYg
dm0sIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvU3RhbXBlZExvY2suaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTYx
LDggKzE2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAg
ICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlKEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwq
KTsKLSAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKKyAgICAgICAgYm9vbCBpc0xpdmUo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7CisgICAgICAgIGlubGluZSBi
b29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5l
d2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKIAogICAg
ICAgICBib29sIGlzTGl2ZShjb25zdCBIZWFwQ2VsbCopOwogICAgICAgICBib29sIGlzTGl2ZUNl
bGwoY29uc3Qgdm9pZCopOwpAQCAtMjU4LDkgKzI1OSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFya2VkQ29uY3VycmVudGx5
KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBpc01h
cmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7Ci0gICAgYm9vbCB0ZXN0QW5kU2V0TWFya2Vk
KGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKKyAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQq
LCBEZXBlbmRlbmN5RmVuY2UpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lk
KiwgRGVwZW5kZW5jeUZlbmNlKTsKICAgICAgICAgCiAgICAgYm9vbCBpc0F0b20oY29uc3Qgdm9p
ZCopOwogICAgIHZvaWQgY2xlYXJNYXJrZWQoY29uc3Qgdm9pZCopOwpAQCAtMjgwLDkgKzI4MCw4
IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYXJlTWFya3NTdGFsZSgp
OwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7Ci0g
ICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAKLSAgICBEZXBlbmRlbmN5IGFib3V0VG9NYXJr
KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKKyAgICBEZXBlbmRlbmN5RmVuY2UgYWJvdXRU
b01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKICNpZiBBU1NFUlRf
RElTQUJMRUQKICAgICB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUoKSB7IH0KQEAgLTMxNCwxMSAr
MzEzLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RlTWFya2VkU2xvdygpOwogICAgIAogICAg
IGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKTsKKyAgICBpbmxpbmUgYm9vbCBtYXJrc0NvbnZleUxpdmVuZXNzRHVy
aW5nTWFya2luZyhIZWFwVmVyc2lvbiBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbik7CiAgICAgICAgIAogICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1f
bWFya3M7CiAKICAgICBib29sIG1fbmVlZHNEZXN0cnVjdGlvbjsKLSAgICBMb2NrIG1fbG9jazsK
KyAgICBTdGFtcGVkTG9jayBtX2xvY2s7CiAgICAgCiAgICAgLy8gVGhlIGFjdHVhbCBtYXJrIGNv
dW50IGNhbiBiZSBjb21wdXRlZCBieSBkb2luZzogbV9iaWFzZWRNYXJrQ291bnQgLSBtX21hcmtD
b3VudEJpYXMuIE5vdGUKICAgICAvLyB0aGF0IHRoaXMgY291bnQgaXMgcmFjeS4gSXQgd2lsbCBh
Y2N1cmF0ZWx5IGRldGVjdCB3aGV0aGVyIG9yIG5vdCBleGFjdGx5IHplcm8gdGhpbmdzIHdlcmUK
QEAgLTQ5OCwxOCArNDk4LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0
YWxlKEgKICAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0K
IAotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFy
a3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQoraW5saW5l
IERlcGVuZGVuY3lGZW5jZSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24pCiB7CiAgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNp
b247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNp
b24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCi1pbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9j
azo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9
IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9u
KTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIERlcGVuZGVuY3lG
ZW5jZSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNz
ZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMjQgKzUxOCwxOSBAQCBpbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01h
cmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKIHsKLSAgICBy
ZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikgPyBmYWxzZSA6IGlzTWFya2VkUmF3
KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHko
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCi17Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1Zl
cnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCks
IHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihw
KSwgRGVwZW5kZW5jeUZlbmNlKHZlcnNpb24pKTsKIH0KIAotaW5saW5lIGJvb2wgTWFya2VkQmxv
Y2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKK2lubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5RmVu
Y2UgZGVwZW5kZW5jeSkKIHsKICAgICBhc3NlcnRNYXJrc05vdFN0YWxlKCk7CiAgICAgcmV0dXJu
IG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOwogfQogCi1pbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5
IGRlcGVuZGVuY3kpCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlZChj
b25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsKICAgICBhc3NlcnRN
YXJrc05vdFN0YWxlKCk7CiAgICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RBbmRTZXQo
YXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
U3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29y
aXRobUlubGluZXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY3LDYgKzY4LDExIEBAIGlu
bGluZSBNYXJrZWRTcGFjZSogTWFya2VkQmxvY2s6OkhhbmRsZToKIAogaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKQogeworICAgIHJldHVybiBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFy
a2luZyhtX21hcmtpbmdWZXJzaW9uLCBtYXJraW5nVmVyc2lvbik7Cit9CisKK2lubGluZSBib29s
IE1hcmtlZEJsb2NrOjptYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lv
biBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKK3sKICAgICAv
LyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlc2UgaXMgdHJ1ZToKICAgICAvLyAtIFdl
IGp1c3QgY3JlYXRlZCB0aGUgYmxvY2sgYW5kIHNvIHRoZSBiaXRzIGFyZSBjbGVhciBhbHJlYWR5
LgogICAgIC8vIC0gVGhpcyBibG9jayBoYXMgb2JqZWN0cyBtYXJrZWQgZHVyaW5nIHRoZSBsYXN0
IEdDLCBhbmQgc28gaXRzIHZlcnNpb24gd2FzIHVwLXRvLWRhdGUganVzdApAQCAtODIsMzkgKzg4
LDExMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6bWFya3NDb252ZXlMaXZlCiAgICAgQVNT
RVJUKHNwYWNlKCktPmlzTWFya2luZygpKTsKICAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2Nv
cGUoKSAhPSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gbV9tYXJraW5nVmVyc2lvbiA9PSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb24KLSAg
ICAgICAgfHwgTWFya2VkU3BhY2U6Om5leHRWZXJzaW9uKG1fbWFya2luZ1ZlcnNpb24pID09IG1h
cmtpbmdWZXJzaW9uOworICAgIHJldHVybiBteU1hcmtpbmdWZXJzaW9uID09IE1hcmtlZFNwYWNl
OjpudWxsVmVyc2lvbgorICAgICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJr
aW5nVmVyc2lvbikgPT0gbWFya2luZ1ZlcnNpb247CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgYm9vbCBpc01h
cmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Okhh
bmRsZTo6aXNMaXZlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXds
eUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCogY2VsbCkK
IHsKLSAgICBBU1NFUlQoIWlzRnJlZUxpc3RlZCgpKTsKLSAgICAKLSAgICBpZiAoVU5MSUtFTFko
aGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkpIHsKLSAgICAgICAgaWYgKGlzTmV3bHlBbGxvY2F0ZWQo
Y2VsbCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCiAgICAgaWYgKGFs
bG9jYXRvcigpLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSB0aGlzLT5ibG9j
aygpOworICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIGJl
Y2F1c2UgbWFya3MgbWlnaHQgYmUgc3RhbGUuIEluIHRoYXQgY2FzZSwgbmV3bHkKKyAgICAvLyBh
bGxvY2F0ZWQgd2lsbCBub3QgeWV0IGJlIHZhbGlkLiBDb25zaWRlciB0aGlzIGludGVybGVhdmlu
Zy4KKyAgICAvLyAKKyAgICAvLyBPbmUgdGhyZWFkIGlzIGRvaW5nIHRoaXM6CisgICAgLy8KKyAg
ICAvLyAxKSBJc0xpdmVDaGVja3NOZXdseUFsbG9jYXRlZDogV2UgY2hlY2sgaWYgbmV3bHkgYWxs
b2NhdGVkIGlzIHZhbGlkLiBJZiBpdCBpcyB2YWxpZCwgYW5kIHRoZSBiaXQgaXMKKyAgICAvLyAg
ICBzZXQsIHdlIHJldHVybiB0cnVlLiBMZXQncyBhc3N1bWUgdGhhdCB0aGlzIGV4ZWN1dGVzIGF0
b21pY2FsbHkuIEl0IGRvZXNuJ3QgaGF2ZSB0byBpbiBnZW5lcmFsLAorICAgIC8vICAgIGJ1dCB3
ZSBjYW4gYXNzdW1lIHRoYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHNlZWluZyB0aGlzIGJ1Zy4KKyAg
ICAvLworICAgIC8vIDIpIElzTGl2ZUNoZWNrc01hcmtzOiBIYXZpbmcgZmFpbGVkIHRoYXQsIHdl
IGNoZWNrIHRoZSBtYXJrIGJpdHMuIFRoaXMgc3RlcCBpbXBsaWVzIHRoZSByZXN0IG9mCisgICAg
Ly8gICAgdGhpcyBmdW5jdGlvbi4gSXQgaGFwcGVucyB1bmRlciBhIGxvY2sgc28gaXQncyBhdG9t
aWMuCisgICAgLy8KKyAgICAvLyBBbm90aGVyIHRocmVhZCBpcyBkb2luZzoKKyAgICAvLworICAg
IC8vIDEpIEFib3V0VG9NYXJrU2xvdzogVGhpcyBpcyB0aGUgZW50aXJlIGFib3V0VG9NYXJrU2xv
dyBmdW5jdGlvbiwgYW5kIGxldCdzIHNheSBpdCdzIGF0b21pYy4gSXQKKyAgICAvLyAgICBzb3J0
YSBpcyBzaW5jZSBpdCBob2xkcyBhIGxvY2ssIGJ1dCB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgbWFr
ZSBpdCBhdG9taWMgd2l0aCByZXNwZWN0IHRvCisgICAgLy8gICAgSXNMaXZlQ2hlY2tzTmV3bHlB
bGxvY2F0ZWQsIHNpbmNlIHRoYXQgZG9lcyBub3QgaG9sZCBhIGxvY2sgaW4gb3VyIHNjZW5hcmlv
LgorICAgIC8vCisgICAgLy8gVGhlIGhhcm1mdWwgaW50ZXJsZWF2aW5nIGhhcHBlbnMgaWYgd2Ug
c3RhcnQgb3V0IHdpdGggYSBibG9jayB0aGF0IGhhcyBzdGFsZSBtYXJrIGJpdHMgdGhhdAorICAg
IC8vIG5vbmV0aGVsZXNzIGNvbnZleSBsaXZlbmVzcyBkdXJpbmcgbWFya2luZyAodGhlIG9mZi1i
eS1vbmUgdmVyc2lvbiB0cmljaykuIFRoZSBpbnRlcmxlYXZpbmcgaXMKKyAgICAvLyBqdXN0Ogor
ICAgIC8vCisgICAgLy8gSXNMaXZlQ2hlY2tzTmV3bHlBbGxvY2F0ZWQgQWJvdXRUb01hcmtTbG93
IElzTGl2ZUNoZWNrc01hcmtzCisgICAgLy8KKyAgICAvLyBXZSBzdGFydGVkIHdpdGggdmFsaWQg
bWFya3MgYnV0IGludmFsaWQgbmV3bHkgYWxsb2NhdGVkLiBTbywgdGhlIGZpcnN0IHBhcnQgZG9l
c24ndCB0aGluayB0aGF0CisgICAgLy8gYW55dGhpbmcgaXMgbGl2ZSwgYnV0IGR1dGlmdWxseSBk
cm9wcyBkb3duIHRvIHRoZSBtYXJrcyBzdGVwLiBCdXQgaW4gdGhlIG1lYW50aW1lLCB3ZSBjbGVh
ciB0aGUKKyAgICAvLyBtYXJrIGJpdHMgYW5kIHRyYW5zZmVyIHRoZWlyIGNvbnRlbnRzIGludG8g
bmV3bHlBbGxvY2F0ZWQuIFNvIElzTGl2ZUNoZWNrc01hcmtzIGFsc28gc2VlcyBub3RoaW5nCisg
ICAgLy8gbGl2ZS4gT29vcHMhCisgICAgLy8KKyAgICAvLyBGb3J0dW5hdGVseSwgc2luY2UgdGhp
cyBpcyBqdXN0IGEgcmVhZCBjcml0aWNhbCBzZWN0aW9uLCB3ZSBjYW4gdXNlIGEgU3RhbXBlZExv
Y2suCisKKyAgICBhdXRvIGZlbmNlbGVzc0lzTGl2ZUltcGwgPSBbJl0gKERlcGVuZGVuY3lGZW5j
ZSYgZGVwZW5kZW5jeSwgU3RhbXBlZExvY2s6OlN0YW1wKSAtPiBib29sIHsKKyAgICAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogdGhpc0hhbmRsZSA9IGRlcGVuZGVuY3kuY29uc3VtZSh0aGlzKTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVCghdGhpc0hhbmRsZS0+aXNGcmVlTGlzdGVkKCkpOwog
ICAgIAotICAgIGlmIChibG9jay5hcmVNYXJrc1N0YWxlKCkpIHsKLSAgICAgICAgaWYgKCFpc01h
cmtpbmcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghYmxvY2subWFy
a3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pKQorICAgICAgICBI
ZWFwVmVyc2lvbiBteU5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHRoaXNIYW5kbGUtPm1fbmV3bHlB
bGxvY2F0ZWRWZXJzaW9uOworICAgICAgICBpZiAobXlOZXdseUFsbG9jYXRlZFZlcnNpb24gPT0g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRoaXNI
YW5kbGUtPmlzTmV3bHlBbGxvY2F0ZWQoY2VsbCk7CisgICAgICAgICAgICBkZXBlbmRlbmN5ID0g
RGVwZW5kZW5jeUZlbmNlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSB0aGlzSGFuZGxl
LT5ibG9jaygpOworICAgICAgICAKKyAgICAgICAgSGVhcFZlcnNpb24gbXlNYXJraW5nVmVyc2lv
biA9IGJsb2NrLm1fbWFya2luZ1ZlcnNpb247CisgICAgICAgIGlmIChteU1hcmtpbmdWZXJzaW9u
ICE9IG1hcmtpbmdWZXJzaW9uCisgICAgICAgICAgICAmJiAoIWlzTWFya2luZyB8fCAhYmxvY2su
bWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobXlNYXJraW5nVmVyc2lvbiwgbWFya2lu
Z1ZlcnNpb24pKSkgeworICAgICAgICAgICAgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3lGZW5jZSht
eU1hcmtpbmdWZXJzaW9uKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgcmVzdWx0ID0gYmxvY2subV9tYXJrcy5nZXQo
YmxvY2suYXRvbU51bWJlcihjZWxsKSk7CisgICAgICAgIGRlcGVuZGVuY3kgPSBEZXBlbmRlbmN5
RmVuY2UocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIAorICAg
IGF1dG8gaXNMaXZlSW1wbCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgQVNTRVJUKCFpc0Zy
ZWVMaXN0ZWQoKSk7CisgICAgCisgICAgICAgIEhlYXBWZXJzaW9uIG15TmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uID0gbV9uZXdseUFsbG9jYXRlZFZlcnNpb247CisgICAgICAgIGlmIChteU5ld2x5QWxs
b2NhdGVkVmVyc2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pCisgICAgICAgICAgICByZXR1
cm4gaXNOZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAKKyAgICAgICAgTWFya2VkQmxvY2smIGJs
b2NrID0gdGhpcy0+YmxvY2soKTsKKyAgICAKKyAgICAgICAgaWYgKGJsb2NrLmFyZU1hcmtzU3Rh
bGUobWFya2luZ1ZlcnNpb24pKSB7CisgICAgICAgICAgICBpZiAoIWlzTWFya2luZykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWJsb2NrLm1hcmtzQ29u
dmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIHJldHVybiBibG9jay5tX21hcmtzLmdl
dChibG9jay5hdG9tTnVtYmVyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLm1fbWFya3Mu
Z2V0KGJsb2NrLmF0b21OdW1iZXIoY2VsbCkpOworICAgIH07CisgICAgCisgICAgaWYgKCFpc01h
cmtpbmcpCisgICAgICAgIHJldHVybiBpc0xpdmVJbXBsKCk7CisgICAgCisgICAgcmV0dXJuIG1f
YmxvY2stPm1fbG9jay5kb09wdGltaXplZEZlbmNlbGVzc1JlYWQoZmVuY2VsZXNzSXNMaXZlSW1w
bCwgaXNMaXZlSW1wbCk7CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omlz
TGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25z
dCB2b2lkKiBwKQoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJz
aW9uLCBib29sIGlzTWFya2luZywgY29uc3Qgdm9pZCogcCkKIHsKICAgICBpZiAoIW1fYmxvY2st
PmlzQXRvbShwKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc0xpdmUobWFy
a2luZ1ZlcnNpb24sIGlzTWFya2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgSGVhcENlbGwqPihwKSk7
CisgICAgcmV0dXJuIGlzTGl2ZShtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBpc01hcmtpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEhlYXBDZWxsKj4ocCkpOworfQorCitpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoY29uc3QgSGVhcENlbGwqIGNlbGwp
Cit7CisgICAgcmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFjZSgp
LT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKSwgc3BhY2UoKS0+aXNNYXJraW5nKCksIGNlbGwpOwor
fQorCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmVDZWxsKGNvbnN0IHZv
aWQqIHApCit7CisgICAgcmV0dXJuIGlzTGl2ZUNlbGwoc3BhY2UoKS0+bWFya2luZ1ZlcnNpb24o
KSwgc3BhY2UoKS0+bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2luZygp
LCBwKTsKIH0KIAogLy8gVGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdHJ1ZSBmb3Igc3BlY2lhbGl6
YXRpb24gdG8ga2ljayBpbjoKQEAgLTM4Niw2ICs0NjUsMTUgQEAgaW5saW5lIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6Ok1hcmtzTW9kZSBNYQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CiBpbmxp
bmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjdXJy
ZW50bHkgZWZmaWNpZW50IHRvIHVzZSBpbiB0aGUgY29uc3RyYWludCBzb2x2ZXIgYmVjYXVzZSBp
c0xpdmUoKSBncmFicyBhCisgICAgLy8gbG9jayB0byBwcm90ZWN0IGl0c2VsZiBmcm9tIGNvbmN1
cnJlbnQgY2FsbHMgdG8gYWJvdXRUb01hcmtTbG93KCkuIEJ1dCB3ZSBjb3VsZCBnZXQgYXJvdW5k
IHRoaXMgYnkKKyAgICAvLyBoYXZpbmcgdGhpcyBmdW5jdGlvbiBncmFiIHRoZSBsb2NrIGJlZm9y
ZSBhbmQgYWZ0ZXIgdGhlIGl0ZXJhdGlvbiwgYW5kIGNoZWNrIGlmIHRoZSBtYXJraW5nIHZlcnNp
b24KKyAgICAvLyBjaGFuZ2VkLiBJZiBpdCBkaWQsIGp1c3QgcnVuIGFnYWluLiBJbnNpZGUgdGhl
IGxvb3AsIHdlIG9ubHkgbmVlZCB0byBlbnN1cmUgdGhhdCBpZiBhIHJhY2Ugd2VyZSB0bworICAg
IC8vIGhhcHBlbiwgd2Ugd2lsbCBqdXN0IG92ZXJsb29rIG9iamVjdHMuIEkgdGhpbmsgdGhhdCBi
ZWNhdXNlIG9mIGhvdyBhYm91dFRvTWFya1Nsb3coKSBkb2VzIHRoaW5ncywKKyAgICAvLyBhIHJh
Y2Ugb3VnaHQgdG8gbWVhbiB0aGF0IGl0IGp1c3QgcmV0dXJucyBmYWxzZSB3aGVuIGl0IHNob3Vs
ZCBoYXZlIHJldHVybmVkIHRydWUgLSBidXQgdGhpcyBpcworICAgIC8vIHNvbWV0aGluZyB0aGF0
IHdvdWxkIGhhdmUgdG8gYmUgdmVyaWZpZWQgY2FyZWZ1bGx5LgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTUKKyAgICAKICAgICBIZWFwQ2VsbDo6
S2luZCBraW5kID0gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwogICAgIGZvciAoc2l6ZV90IGkgPSBm
aXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAgICAg
ICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJm1fYmxv
Y2stPmF0b21zKClbaV0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNyArNDIxLDcgQEAgdm9p
ZCBNYXJrZWRTcGFjZTo6ZW5kTWFya2luZygpCiAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZXNl
dEFsbG9jYXRlZCgpOwogICAgICAgICAgICAgfSk7CiAgICAgfQotICAgICAgICAKKyAgICAKICAg
ICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IG5leHRWZXJzaW9uKG1fbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xhcmdlQWxsb2NhdGlvbnNP
ZmZzZXRGb3JUaGlzQ29sbGVjdGlvbjsgaSA8IG1fbGFyZ2VBbGxvY2F0aW9ucy5zaXplKCk7ICsr
aSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY1LDYgKzE2NSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gV2hlbiB0
aGlzIGlzIHRydWUgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQgYnV0IHRoZSBtYXJrIGJp
dHMgaGF2ZW4ndCBjb252ZXJnZWQgeWV0LgogICAgIGJvb2wgaXNNYXJraW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc01hcmtpbmc7IH0KICAgICAKKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0Jl
Z2luKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCog
YWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9Cisg
ICAgV2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0dXJuIG1fbmV3QWN0aXZl
V2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzRW5kKCkg
eyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQorICAgIAogICAgIHZvaWQgZHVt
cEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgc3RkOjphcnJheTxzaXplX3QsIG51bVNpemVDbGFzc2VzPiBzX3Np
emVDbGFzc0ZvclNpemVTdGVwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywzMCArMjcsMTggQEAKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lk
KFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwK
LSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQotICAgIDogbV9hYmJyZXZpYXRl
ZE5hbWUoYWJicmV2aWF0ZWROYW1lKQotICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAg
LCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3Zv
bGF0aWxpdHkodm9sYXRpbGl0eSkKLXsKLX0KK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24s
Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorTWFya2luZ0Nv
bnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25j
dXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQog
ICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1lKFdU
Rk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5j
dGlvbikpCi0gICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dv
cmtFc3RpbWF0ZUZ1bmN0aW9uKSkKICAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorICAg
ICwgbV9jb25jdXJyZW5jeShjb25jdXJyZW5jeSkKKyAgICAsIG1fcGFyYWxsZWxpc20ocGFyYWxs
ZWxpc20pCiB7CiB9CiAKQEAgLTYzLDE0ICs1MSw3NCBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlz
bSBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSByZXN1bHQgPSBleGVjdXRlSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENv
dW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJvc2UgJiYgdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVk
TmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVj
dXRlKSIpOworICAgIGlmIChyZXN1bHQgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bCkgeworICAgICAgICAvLyBJdCdzIGlsbGVnYWwgdG8gcHJvZHVjZSBwYXJhbGxlbCB3b3JrIGlm
IHlvdSBoYXZlbid0IGFkdmVydGlzZWQgaXQgdXBmcm9udCBiZWNhdXNlIHRoZSBzb2x2ZXIKKyAg
ICAgICAgLy8gaGFzIG9wdGltaXphdGlvbnMgZm9yIGNvbnN0cmFpbnRzIHRoYXQgcHJvbWlzZSB0
byBuZXZlciBwcm9kdWNlIHBhcmFsbGVsIHdvcmsuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
cGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tX
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUg
TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3Ip
OworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coYWJicmV2
aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRv
ciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZp
c2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5n
VGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlz
aXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAgIFZpc2l0Q291bnRl
ciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Ry
YWludFNvbHZpbmdMb2NrZXIsIHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNp
dENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIGlmICh2ZXJib3NlICYmIHZpc2l0Q291bnRlci52
aXNpdENvdW50KCkpCisgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2
aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gcHJlcGFyZVRvRXhlY3V0
ZSkiKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9y
KTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgaWYgKHZlcmJvc2UgJiYg
dmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlh
dGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBk
b1BhcmFsbGVsV29yaykiKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxs
ZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENv
dW50ZXIodmlzaXRvcik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAg
ICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYg
KHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygi
KCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291
bnQoKSwgIiBpbiBmaW5pc2hQYXJhbGxlbFdvcmspIik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZp
c2l0b3ImKQoreworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0lt
cGwoU2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNp
dG9yJikKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNv
bnN0cmFpbnRDb25jdXJyZW5jeS5oIgorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5o
IgogI2luY2x1ZGUgIkNvbnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdU
aW1lb3V0LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00NCwxNyArNDQsMTEgQEAgY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENT
dHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25j
dXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsK
ICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6
OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAg
ICAgCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAg
CkBAIC02NSwzMiArNTksMzkgQEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKLSAgICB2b2lk
IGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZShTbG90Vmlz
aXRvciYpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICBkb3VibGUgd29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKICAgICAKLSAgICBkb3VibGUgcXVpY2tX
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBpZiAoIW1f
cXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOwotICAgIH0KLSAg
ICAKLSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNp
dG9yKTsKLSAgICB9CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICB2
b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxl
bFdvcmsoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisgICAgQ29uc3Ry
YWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9jb25jdXJyZW5j
eTsgfQorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyYWxsZWxpc207IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFj
dExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdmly
dHVhbCB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNl
dCBtX2luZGV4LgogICAgIAogICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OwogICAg
IENTdHJpbmcgbV9hYmJyZXZpYXRlZE5hbWU7CiAgICAgQ1N0cmluZyBtX25hbWU7Ci0gICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0aW1lb3V0
KT4gbV9leGVjdXRlRnVuY3Rpb247Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3Im
KT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IG1fdm9sYXRpbGl0eTsKKyAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgbV9jb25jdXJyZW5jeTsK
KyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9wYXJhbGxlbGlzbTsKICAgICBzaXplX3QgbV9s
YXN0VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2MCArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29u
c3RyYWludFNldC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50U29sdmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OkV4ZWN1dGlvbkNvbnRleHQgewotcHVibGljOgotICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUg
dGltZW91dCkKLSAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICwgbV92aXNpdG9yKHZpc2l0
b3IpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2RpZFZpc2l0U29tZXRoaW5nOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFz
RWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlm
IGl0IHRpbWVzIG91dC4KLSAgICBib29sIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKLSAg
ICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgewotICAgICAgICAg
ICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsK
LSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVk
LmdldChpbmRleCk7IH0KLQotICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCi0gICAgewot
ICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0
U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7Ci0g
ICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Ci0g
ICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsK
LSAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcg
eyBmYWxzZSB9OwotfTsKLQotTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50
U2V0KCkKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldChIZWFwJiBo
ZWFwKQorICAgIDogbV9oZWFwKGhlYXApCiB7CiB9CiAKQEAgLTEwNywxOCArNjUsOSBAQCB2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAx
OwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGls
aXR5KQotewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZN
b3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2
b2xhdGlsaXR5KSk7Ci19Ci0KLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKLSAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24s
Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQog
ewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFi
YnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwg
V1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFk
ZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJl
dmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5
LCBjb25jdXJyZW5jeSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBA
IC0xMzEsOSArODAsOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgbV9z
ZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJn
ZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVD
b252ZXJnZW5jZUltcGwodmlzaXRvciwgdGltZW91dCk7CisgICAgYm9vbCByZXN1bHQgPSBleGVj
dXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQog
ICAgICAgICBkYXRhTG9nKCIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0OCwyNyArOTcs
MjcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRo
aXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRoaXMp
OwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlvbiA9IG1faXRlcmF0aW9uKys7CiAgICAgCiAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9u
LCAiOiIpOwogCi0gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdlIGhh
dmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhlbgotICAgIC8vIHdl
IHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJh
aW4obV91bmV4ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBhbnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQn
cyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25zdHJhaW50cyBvdGhlcgotICAgIC8vIHRoYW4g
cm9vdHMuCi0gICAgaWYgKGl0ZXJhdGlvbiA9PSAxKQorICAgIGlmIChpdGVyYXRpb24gPT0gMSkg
eworICAgICAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWlu
aW5nLCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzCisgICAgICAg
IC8vIG90aGVyIHRoYW4gcm9vdHMuCisgICAgICAgIHNvbHZlci5kcmFpbihtX3VuZXhlY3V0ZWRS
b290cyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCi0gICAgaWYgKCFleGVj
dXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQorICAgIGlmIChpdGVy
YXRpb24gPT0gMikgeworICAgICAgICBzb2x2ZXIuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3Ro
cyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0
byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRo
YXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxk
IEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8g
Z28gdG90YWxseQpAQCAtMjE1LDMzICsxNjQsMTYgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUNvbnZlcgogICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGIt
PnZvbGF0aWxpdHkoKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3Ry
YWludCogY29uc3RyYWludCA6IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0
cmFpbnQtPmluZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5k
aWRFeGVjdXRlKGkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNv
bnRleHQuZXhlY3V0ZShpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29u
dmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFw
cGVuIGFueXRpbWUKLSAgICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTog
TWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8g
Tm90IGNsZWFyIGlmIHRoYXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2
ZW4gYmV0dGVyIGlzIHRoaXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHks
IGtlZXAgcnVubmluZy4KLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVh
c3QgTiB0aGluZ3MsIHJldHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
ODMyCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHNvbHZlci5jb252ZXJnZShtX29y
ZGVyZWQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIFJldHVybiB0cnVlIGlmIHdl
J3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlmIHdlIGRpZCBub3QgdmlzaXQgYW55dGhpbmcu
CisgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAogdm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBjb25zdHJh
aW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICBjb25zdHJh
aW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAg
ICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDkgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOworY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CisKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0
IHsKIHB1YmxpYzoKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIE1hcmtpbmdDb25z
dHJhaW50U2V0KEhlYXAmKTsKICAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKICAgICAKICAg
ICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwpAQCAtNDEsMTUgKzQ0LDkgQEAgcHVibGljOgogICAg
IHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0
cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAK
LSAgICB2b2lkIGFkZCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCi0gICAgICAg
IENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90Vmlz
aXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAor
ICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNv
bmN1cnJlbnQpOwogICAgIAogICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29u
c3RyYWludD4pOwogICAgIApAQCAtNjAsMjEgKzU3LDE5IEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUg
b2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3Un
dmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RWaXNpdG9yJiwKLSAgICAgICAgTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBTaW1wbHkg
cnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAgICAgdm9pZCBl
eGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgotICAgIGNsYXNzIEV4ZWN1
dGlvbkNvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgZnJp
ZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogICAgIAotICAgIGJvb2wgZXhlY3V0
ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7Cisg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAg
Ym9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVj
dXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAg
IGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3Rv
ciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAKKyAgICBIZWFwJiBt
X2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOwogICAgIEJpdFZlY3RvciBt
X3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2lu
Z0NvbnN0cmFpbnQ+PiBtX3NldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCisKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyAKKworTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQp
CisgICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKKyAgICAsIG1fbWFpblZpc2l0b3IobV9oZWFwLmNv
bGxlY3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX3NldChzZXQpCit7CisgICAgbV9oZWFwLmZv
ckVhY2hTbG90VmlzaXRvcigKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgewor
ICAgICAgICAgICAgbV92aXNpdENvdW50ZXJzLmFwcGVuZChWaXNpdENvdW50ZXIodmlzaXRvcikp
OworICAgICAgICB9KTsKK30KKworTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6On5NYXJraW5nQ29u
c3RyYWludFNvbHZlcigpCit7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRp
ZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IFZpc2l0Q291bnRlciYg
dmlzaXRDb3VudGVyIDogbV92aXNpdENvdW50ZXJzKSB7CisgICAgICAgIGlmICh2aXNpdENvdW50
ZXIudmlzaXRDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShT
Y2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3sKKyAgICBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSA9
IHRydWU7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29y
ayk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnVzZVBhcmFsbGVsTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRh
dGFMb2cocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCA/ICJQIiA6ICJOIiwgIjwiKTsK
KyAgICAgICAgCisgICAgICAgIG1faGVhcC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAg
ICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJ1bkV4ZWN1dGlvblRocmVhZCh2aXNp
dG9yLCBwcmVmZXJlbmNlLCBwaWNrTmV4dCk7IH0pOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCI+Iik7CisgICAgfSBlbHNlCisg
ICAgICAgIHJ1bkV4ZWN1dGlvblRocmVhZChtX21haW5WaXNpdG9yLCBwcmVmZXJlbmNlLCBwaWNr
TmV4dCk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGlja05leHRJc1N0aWxsQWN0aXZl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrKTsK
KyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV9kaWRFeGVjdXRlSW5Q
YXJhbGxlbCkKKyAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0tPmZpbmlzaFBhcmFsbGVs
V29yayhtX21haW5WaXNpdG9yKTsKKyAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsLmNsZWFyKCk7
CisgICAgCisgICAgaWYgKCFtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkp
CisgICAgICAgICAgICBleGVjdXRlKCptX3NldC5tX3NldFtpbmRleFRvUnVuXSk7CisgICAgICAg
IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmNsZWFyKCk7CisgICAgfQorICAgICAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQp
Cit7CisgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgIGF1dG8gZW5kID0g
dW5leGVjdXRlZC5lbmQoKTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVybjsK
KyAgICBhdXRvIHBpY2tOZXh0ID0gc2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
KCk+KAorICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsKKyAgICAgICAgfSk7CisgICAgZXhlY3V0
ZShOZXh0Q29uc3RyYWludEZpcnN0LCBwaWNrTmV4dCk7CisgICAgdW5leGVjdXRlZC5jbGVhckFs
bCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpjb252ZXJnZShjb25zdCBW
ZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpCit7CisgICAgaWYgKGRpZFZpc2l0U29t
ZXRoaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAob3JkZXIuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIHNpemVfdCBpbmRleCA9IDA7CisKKyAg
ICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbnN0cmFpbnQgc2VxdWVudGlhbGx5
IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVpY2tseSBnaXZlIHVzIGEKKyAgICAvLyByZXN1bHQuIElm
IHdlIHJhbiBpdCBpbiBwYXJhbGxlbCB0byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3ZSBtaWdo
dCBlbmQgdXAgaGF2aW5nIHRvIHdhaXQgZm9yCisgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3RyYWlu
dHMgdG8gZmluaXNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVyaW5n
IGNvbnZlcmdlbmNlIGl0J3MKKyAgICAvLyBlbXBpcmljYWxseSBtb3N0IG9wdGltYWwgdG8gcmV0
dXJuIHRvIGRyYWluaW5nIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBN
b3N0CisgICAgLy8gY29uc3RyYWludHMgZG9uJ3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9zdCBvZiB0
aGUgdGltZSwgYW5kIHdoZW4gdGhleSBkbyBnZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQKKyAgICAv
LyB0byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmluZyBjeWNs
ZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisgICAgLy8gd2UgZ2V0IHRo
ZSBoZWNrIG91dCBvZiBoZXJlIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3Jr
LiBJIHRoaW5rIHRoYXQgcGFydCBvZiB3aGF0CisgICAgLy8gbWFrZXMgdGhpcyBvcHRpbWFsIGlz
IHRoYXQgd2UgYWxzbyBuZXZlciBhYm9ydCBydW5uaW5nIGEgY29uc3RyYWludCBlYXJseSwgc28g
d2hlbiB3ZSBkbyBydW4KKyAgICAvLyBvbmUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byBnZW5l
cmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2libHkgY2FuLgorICAgIGlmIChvcmRlcltpbmRl
eF0tPnF1aWNrV29ya0VzdGltYXRlKG1fbWFpblZpc2l0b3IpKSB7CisgICAgICAgIGV4ZWN1dGUo
Km9yZGVyW2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFy
YWxsZWwuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAob3JkZXIuaXNFbXB0eSgpIHx8IGRpZFZp
c2l0U29tZXRoaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBh
dXRvIHBpY2tOZXh0ID0gc2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+KAor
ICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAg
aWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4ID49IG9yZGVyLnNpemUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgCisg
ICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICpvcmRlcltpbmRleCsr
XTsKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50LmluZGV4KCk7CisgICAgICAgIH0pOwor
ICAgIAorICAgIGV4ZWN1dGUoUGFyYWxsZWxXb3JrRmlyc3QsIHBpY2tOZXh0KTsKK30KKwordm9p
ZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYgY29u
c3RyYWludCkKK3sKKyAgICBpZiAobV9leGVjdXRlZC5nZXQoY29uc3RyYWludC5pbmRleCgpKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNvbnN0cmFpbnQucHJlcGFyZVRvRXhlY3V0ZShO
b0xvY2tpbmdOZWNlc3NhcnksIG1fbWFpblZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZShtX21haW5WaXNpdG9yKTsKKyAg
ICBkaWRFeGVjdXRlKHBhcmFsbGVsaXNtLCBjb25zdHJhaW50LmluZGV4KCkpOworfQorCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIGZvciAoOzspIHsKKyAg
ICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgIHVuc2lnbmVkIGluZGV4VG9S
dW47CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwu
Zmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHRyeU5leHRD
b25zdHJhaW50ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
cGlja05leHRJc1N0aWxsQWN0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcGlja1Jl
c3VsdCA9IHBpY2tOZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBpY2tSZXN1
bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KCpwaWNrUmVzdWx0KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQm
IGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbKnBpY2tSZXN1bHRdOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PSBDb25zdHJhaW50Q29uY3Vy
cmVuY3k6OlNlcXVlbnRpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhl
Y3V0ZVNlcXVlbnRpYWxseS5hcHBlbmQoKnBpY2tSZXN1bHQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVt
VGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yaysrOworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhUb1J1biA9ICpwaWNrUmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxl
bFdvcmtNb2RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50LnBy
ZXBhcmVUb0V4ZWN1dGUobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHJlZmVyZW5jZSA9PSBQYXJh
bGxlbFdvcmtGaXJzdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyYWxsZWxXb3Jr
KCkgfHwgdHJ5TmV4dENvbnN0cmFpbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlO
ZXh0Q29uc3RyYWludCgpIHx8IHRyeVBhcmFsbGVsV29yaygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIG5vdGhpbmcgbGVmdCB0byBydW4u
IFRoZSBvbmx5IHdheSBmb3IgdXMgdG8gaGF2ZSBtb3JlIHdvcmsgaXMKKyAgICAgICAgICAgICAg
ICAvLyBpZiBzb21lb25lIGlzIHJ1bm5pbmcgYSBjb25zdHJhaW50IHRoYXQgbWF5IHByb2R1Y2Ug
cGFyYWxsZWwgd29yay4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIW1f
bnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBbnkgd2FpdGlu
ZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1c3QgcnVubmluZyB0aGUgU2xvdFZpc2l0b3IuCisg
ICAgICAgICAgICAgICAgLy8gSSB3b25kZXIgaWYgdGhhdCB3b3VsZCBiZSBwcm9maXRhYmxlLgor
ICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFp
bnQgPSAqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl07CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKQorICAgICAgICAgICAgY29uc3RyYWludC5kb1Bh
cmFsbGVsV29yayh2aXNpdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyYWxsZWxp
c20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01v
ZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmdldChp
bmRleFRvUnVuKSkgeworICAgICAgICAgICAgICAgICAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVs
LmFwcGVuZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC50YWtlRmlyc3QoCisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9
PSBpbmRleFRvUnVuOyB9KTsKKyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFs
bGVsU2V0LmNsZWFyKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxpc20oKSA9
PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAgICBt
X251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmstLTsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1
dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxpc20gPT0g
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAgICAgICAgICAgICBt
X3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAg
ICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1dGUoQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBtX2V4ZWN1dGVkLnNldChp
bmRleCk7CisgICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwpIHsKKyAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleCk7Cisg
ICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXgpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlZpc2l0Q291bnRlci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKKworY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdD
b25zdHJhaW50U29sdmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1
YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYp
OworICAgIH5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpOworICAgIAorICAgIGJvb2wgZGlkVmlz
aXRTb21ldGhpbmcoKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2Ug
eworICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJz
dAorICAgIH07CisKKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVk
TGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICAKKyAgICB2
b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCk7CisgICAgCisgICAgdm9pZCBjb252ZXJn
ZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpOworICAgIAorICAgIHZv
aWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lk
IHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNj
b3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgCisg
ICAgdm9pZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgp
OworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOwor
ICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKKyAgICBCaXRWZWN0b3IgbV9leGVjdXRl
ZDsKKyAgICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBC
aXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwg
MzI+IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV90
b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1f
Y29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yayB7
IDAgfTsKKyAgICBib29sIG1fcGlja05leHRJc1N0aWxsQWN0aXZlIHsgdHJ1ZSB9OworICAgIFZl
Y3RvcjxWaXNpdENvdW50ZXIsIDE2PiBtX3Zpc2l0Q291bnRlcnM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RT
ZXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3Bh
cXVlUm9vdFNldC5oCShub25leGlzdGVudCkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotY2xhc3MgT3BhcXVlUm9vdFNldCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoT3BhcXVlUm9vdFNldCk7Ci1wdWJsaWM6Ci0gICAgT3BhcXVlUm9vdFNldCgpCi0gICAgICAg
IDogbV9sYXN0UXVlcmllZFJvb3QobnVsbHB0cikKLSAgICAgICAgLCBtX2NvbnRhaW5zTGFzdFF1
ZXJpZWRSb290KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRhaW5zKHZvaWQq
IHJvb3QpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAocm9vdCAhPSBtX2xhc3RRdWVyaWVkUm9v
dCkgewotICAgICAgICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSByb290OwotICAgICAgICAgICAg
bV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IG1fcm9vdHMuY29udGFpbnMocm9vdCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3Rz
LmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1f
cm9vdHMuY2xlYXIoKTsKLSAgICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSBudWxscHRyOwotICAg
ICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9v
bCBhZGQodm9pZCogcm9vdCkKLSAgICB7Ci0gICAgICAgIGlmIChyb290ID09IG1fbGFzdFF1ZXJp
ZWRSb290KQotICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IHRydWU7Ci0g
ICAgICAgIHJldHVybiBtX3Jvb3RzLmFkZChyb290KS5pc05ld0VudHJ5OwotICAgIH0KLQotICAg
IGludCBzaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLnNpemUoKTsK
LSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBI
YXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3Jvb3RzLmVuZCgpOwotICAgIH0KLQotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8
dm9pZCo+IG1fcm9vdHM7Ci0gICAgbXV0YWJsZSB2b2lkKiBtX2xhc3RRdWVyaWVkUm9vdDsKLSAg
ICBtdXRhYmxlIGJvb2wgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3Vy
Y2VBZGFwdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJl
ZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlw
ZSwgdHlwZW5hbWUgSW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorY2xhc3MgUGFyYWxs
ZWxTb3VyY2VBZGFwdGVyIDogcHVibGljIFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+IHsKK3B1Ymxp
YzoKKyAgICBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBl
KCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53cmFwRnVuYykKKyAgICAgICAg
OiBtX291dGVyU291cmNlKG91dGVyU291cmNlKQorICAgICAgICAsIG1fdW53cmFwRnVuYyh1bndy
YXBGdW5jKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5uZXJUeXBlIHJ1bigpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIGlmIChtX2lubmVyU291cmNlKSB7CisgICAgICAgICAgICAgICAg
aWYgKElubmVyVHlwZSByZXN1bHQgPSBtX2lubmVyU291cmNlLT5ydW4oKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBtX2lubmVyU291cmNlID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbm5l
clNvdXJjZSA9IG1fdW53cmFwRnVuYyhtX291dGVyU291cmNlLT5ydW4oKSk7CisgICAgICAgIH0g
d2hpbGUgKG1faW5uZXJTb3VyY2UpOworICAgICAgICByZXR1cm4gSW5uZXJUeXBlKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gbV9vdXRl
clNvdXJjZTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxJbm5lclR5cGUoKT4+IG1faW5uZXJTb3Vy
Y2U7CisgICAgVW53cmFwRnVuYyBtX3Vud3JhcEZ1bmM7CisgICAgTG9jayBtX2xvY2s7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5h
bWUgVW53cmFwRnVuYz4KK1JlZjxQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBlLCBJbm5l
clR5cGUsIFVud3JhcEZ1bmM+PiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNo
YXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53
cmFwRnVuYykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXJhbGxlbFNvdXJjZUFkYXB0
ZXI8T3V0ZXJUeXBlLCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+KG91dGVyU291cmNlLCB1bndyYXBG
dW5jKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5n
IG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlv
biwKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3Vy
cmVuY3kgY29uY3VycmVuY3kpCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJl
dmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBDb25z
dHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihX
VEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCit7Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKQoreworfQorCitDb25zdHJhaW50UGFyYWxsZWxp
c20gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIHJldHVybiBDb25z
dHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3Ry
YWludC5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhpcyBhbGxvd3MgZm9yIGFuIGluZm9ybWFsIHdheSB0byBkZWZpbmUgY29uc3RyYWludHMu
IEp1c3QgcGFzcyBhIGxhbWJkYSB0byB0aGUgY29uc3RydWN0b3IuIFRoZSBvbmx5CisvLyBkb3du
c2lkZSBpcyB0aGF0IHRoaXMgbWFrZXMgaXQgaGFyZCBmb3IgY29uc3RyYWludHMgdG8gYmUgc3Rh
dGVmdWwsIHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBiZQorLy8gcGFyYWxsZWwuIElu
IHRob3NlIGNhc2VzLCBpdCdzIGVhc2llciB0byBqdXN0IHN1YmNsYXNzIE1hcmtpbmdDb25zdHJh
aW50LgorY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0
cmFpbnQgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50
Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5T
aW1wbGVNYXJraW5nQ29uc3RyYWludCgpOworICAgIAorcHJpdmF0ZToKKyAgICBDb25zdHJhaW50
UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDkgKzk4LDcgQEAgU2xv
dFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFy
a2luZygpCiB7Ci0gICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlv
blNjb3BlOjpGdWxsKQotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1w
dHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cuCi0gICAgZWxzZQorICAgIGlmICho
ZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbikKICAgICAg
ICAgcmVzZXQoKTsKIAogICAgIGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IHZtKCku
aGVhcFByb2ZpbGVyKCkpCkBAIC0xMTEsNyArMTA5LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlk
U3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogewotICAgIFJFTEVB
U0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAw
OwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyID0gbnVs
bHB0cjsKQEAgLTIyMyw3ICsyMjAsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxP
ckF1eGlsaWFyCiAgICAgfSB9CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlND
ZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCit2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeUZlbmNlIGRlcGVuZGVuY3kpCiB7CiAgICAg
aWYgKFVOTElLRUxZKG1faGVhcFNuYXBzaG90QnVpbGRlcikpCiAgICAgICAgIG1faGVhcFNuYXBz
aG90QnVpbGRlci0+YXBwZW5kRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsKTsKQEAgLTIzMSwxMiAr
MjI4LDEyIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlNDZWxsKiBjZWwKICAgICBh
cHBlbmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kSGlkZGVuU2xvdyhKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5j
eSkKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiBjZWxsLCBEZXBl
bmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsKICAgICBhcHBlbmRIaWRkZW5TbG93SW1wbChjZWxs
LCBkZXBlbmRlbmN5KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRIaWRkZW5TbG93SW1wbChKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKK0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuU2xvd0ltcGwoSlNDZWxs
KiBjZWxsLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsKICAgICBBU1NFUlQoIW1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKTsKIApAQCAtMjUxLDcgKzI0OCw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGFpbmVyVHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0
TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0Nl
bGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29u
dGFpbmVyLCBKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3lGZW5jZSBkZXBlbmRlbmN5KQogewogICAg
IGlmIChjb250YWluZXIudGVzdEFuZFNldE1hcmtlZChjZWxsLCBkZXBlbmRlbmN5KSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjc3LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRv
TWFya1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUm
IGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAg
ICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFy
a2VkKCk7CkBAIC0zNDYsNyArMzQzLDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50
Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAgLTQzNSw3ICs0MzIsNyBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6dXBk
YXRlTXV0YXRvcklzU3RvcHBlZChjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0gICAgbV9tdXRh
dG9ySXNTdG9wcGVkID0gKG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICBtX211dGF0b3JJ
c1N0b3BwZWQgPSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3Rv
cHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKCkKQEAgLTQ1Miw3ICs0NDksNyBAQCBib29sIFNsb3RWaXNpdG9yOjpoYXNBY2tub3dsZWRn
ZWRUaGF0VGhlCiAKIGJvb2wgU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAuY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JT
dG9wcGVkTXV0YXRvcik7CisgICAgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFw
LndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4
ICs0ODcsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAg
ICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxl
bCgpOwogICAgIH0KLSAgICAKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBT
bG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVz
dGVkKQpAQCAtNTUwLDcgKzU0NSw2IEBAIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3Jl
bWVudE9mRHIKICAgICB9CiAKICAgICBkb25hdGVBbGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5
KCk7CiAKICAgICByZXR1cm4gYnl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1NSwxNiBA
QCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlk
UmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFj
aFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRp
ZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBy
ZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFs
bGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFy
a2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9y
OjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5t
X3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5
KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCk7CiB9CiAKQEAgLTU4MywxMiArNTc2LDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6
U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBi
b251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZl
KQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
LS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMr
KzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1h
c3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYyNCw1MSBAQCBO
RVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAg
ICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5t
X2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3Bh
cmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFw
Lm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAm
JiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rh
c2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZd
IChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwog
ICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAo
Ym9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGlsbCBiZSBydW5u
aW5nLCBhbmQgbWF5IHJ1biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRoZSB0YXNrCisg
ICAgICAgICAgICAvLyBvdXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFyb3VuZCB0cnlp
bmcgdG8gcnVuIHRoZSB0YXNrLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisgICAgICAgICAg
ICAgICAgICAgIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgIGJvbnVzVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFy
a2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHkoKSk7CisgICAg
ICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaXNB
Y3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAgLTY3MCwxNSArNjg4LDE5IEBAIFNsb3RWaXNpdG9y
OjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZH
Q01hcmtlcnMoKSA9PSAxCiAgICAgICAgIHx8IChtX2hlYXAubV93b3JsZFN0YXRlLmxvYWQoKSAm
IEhlYXA6Om11dGF0b3JXYWl0aW5nQml0KQogICAgICAgICB8fCAhbV9oZWFwLmhhc0hlYXBBY2Nl
c3MoKQotICAgICAgICB8fCBtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQoKSkgeworICAgICAgICB8fCBtX2hlYXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAg
ICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBvdmVyIGRyYWluSW5QYXJhbGxlbCgpIHdoZW4g
d2UgaGF2ZSBhIGNvbmN1cnJlbnQgbXV0YXRvciBidXQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0
IGlzIG5vdCBwcm9maXRhYmxlLgogICAgICAgICByZXR1cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVv
dXQpOwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRl
eCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9uYXRlQWxsKGhvbGRMb2Nr
KG1faGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3YWl0Rm9yVGVybWluYXRpb24o
dGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRv
cjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgZm9yICg7Oykg
ewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkBAIC03MTEsNjEgKzczMyw2IEBAIHZvaWQgU2xv
dFZpc2l0b3I6OmRvbmF0ZUFsbChjb25zdCBBYnN0cmEKICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZE9w
YXF1ZVJvb3Qodm9pZCogcm9vdCkKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKLSAgICAg
ICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX2hl
YXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUg
ZXZlcnkgb25jZSBpbgotICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2Fs
IHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0
YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotfQotCi1ib29sIFNsb3RWaXNp
dG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJv
b3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoIW1faXNJblBhcmFs
bGVsTW9kZSk7Ci0gICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3Qp
OwotfQotCi1UcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUo
dm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBGYWxz
ZVRyaVN0YXRlOwotICAgIAotICAgIGlmIChtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQot
ICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgIGlmIChtX2hlYXAubV9vcGFxdWVS
b290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vz
c2FyeSgpCi17Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJn
ZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVz
aG9sZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotICAg
IAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAgICBpZiAoIW1faXNJblBhcmFsbGVs
TW9kZSkgewpAQCAtNzg1LDE2ICs3NTIsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmRE
cmFpbihNb25vdG9uCiAgICAgZHJhaW4odGltZW91dCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6
Om1lcmdlT3BhcXVlUm9vdHMoKQotewotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgICAgIGZvciAoYXV0byog
cm9vdCA6IG1fb3BhcXVlUm9vdHMpCi0gICAgICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5h
ZGQocm9vdCk7Ci0gICAgfQotICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLX0KLQogdm9pZCBT
bG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVz
dGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1
ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUg
Ik9wYXF1ZVJvb3RTZXQuaCIKICNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3
dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk1
LDEwICs5NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
VmFsdWUpOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOworICAgIGJvb2wg
YWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3
LgogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZv
aWQqKSBjb25zdDsKLSAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lk
KikgY29uc3Q7CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogCiAg
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYg
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKQEAgLTEyMSw2ICsxMTksOCBAQCBwdWJsaWM6
CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0
aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1
bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRG
b3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRy
YWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4g
VGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3Mg
dGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpA
QCAtMTI4LDggKzEyOCw2IEBAIHB1YmxpYzoKICAgICAvLyByYXJlIGNhc2VzIGhhcHBlbiB0ZW1w
b3JhcmlseSBldmVuIGlmIHdlJ3JlIG5vdCByZWFjaGluZyB0ZXJtaW5hdGlvbikuCiAgICAgc2l6
ZV90IHBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKHNpemVfdCBieXRlcyk7CiAgICAgCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZUlmTmVjZXNzYXJ5KCk7Ci0KICAgICAvLyBUaGlz
IGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUg
a2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFj
ZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KICAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29u
c3Qgdm9pZCogYmFzZSk7CkBAIC0xNzgsMTIgKzE3NiwxMiBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkoSGVhcENlbGwqKTsKIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYXBwZW5kU2xvdyhKU0NlbGwqLCBEZXBlbmRlbmN5KTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiwgRGVwZW5kZW5jeSk7
Ci0gICAgdm9pZCBhcHBlbmRIaWRkZW5TbG93SW1wbChKU0NlbGwqLCBEZXBlbmRlbmN5KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiwgRGVwZW5kZW5jeUZl
bmNlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZEhpZGRlblNsb3coSlNDZWxs
KiwgRGVwZW5kZW5jeUZlbmNlKTsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblNsb3dJbXBsKEpTQ2Vs
bCosIERlcGVuZGVuY3lGZW5jZSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFp
bmVyVHlwZT4KLSAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5l
clR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5KTsKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVu
ZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5RmVuY2UpOwog
ICAgIAogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CiAgICAgCkBAIC0xOTQs
MTAgKzE5Miw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNl
bGwoSGVhcENlbGwqKTsKICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLQotICAg
IHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9pZCB2aXNpdENo
aWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxl
bCgpOwpAQCAtMjE1LDcgKzIwOSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSBt
X2NvbGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAg
IE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVj
dHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIGJvb2wgbV9p
Z25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBt
b2RlLgogICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsOSArNDUsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFVuCiAgICAgaWYgKCFjZWxsKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OworICAgIERlcGVuZGVuY3lGZW5jZSBkZXBlbmRlbmN5
OwogICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKSkgewotICAgICAg
ICBkZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKTsKICAgICAgICAgaWYgKExJS0VMWShjZWxs
LT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkgewogICAgICAgICAgICAgaWYgKExJS0VM
WSghbV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC04
NCw5ICs4Myw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKICAg
ICBpZiAoIWNlbGwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3k7CisgICAgRGVwZW5kZW5jeUZlbmNlIGRlcGVuZGVuY3k7CiAgICAgaWYgKFVOTElLRUxZ
KGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpKSB7Ci0gICAgICAgIGRlcGVuZGVuY3kgPSBudWxs
RGVwZW5kZW5jeSgpOwogICAgICAgICBpZiAoTElLRUxZKGNlbGwtPmxhcmdlQWxsb2NhdGlvbigp
LmlzTWFya2VkKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7CkBAIC0xMzYs
NiArMTM0LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZp
c2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQocHRyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJldHVybiB0
cnVlOworfQorCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZv
aWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRh
aW5zKHB0cik7Cit9CisKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKG1faXNGaXJzdFZpc2l0KSB7CkBAIC0x
NTksMTIgKzE3NCwxMiBAQCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAog
CiBpbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92
bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RW
aXNpdG9yOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1
cm4gKm1faGVhcC52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtl
ZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNp
bmNsdWRlICJQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVj
dGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKQEAgLTg4LDUgKzg5
LDQyIEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4g
U3Vic3BhY2U6OnBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDog
cHVibGljIFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgcHVibGljOgorICAg
ICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2Fs
bG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBNYXJrZWRBbGxv
Y2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRvckluU3Vic3Bh
Y2UoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICAg
ICAgTG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRh
c2sobV9maXJzdEFsbG9jYXRvcikpOworfQorCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9j
azo6SGFuZGxlKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJj
ZSgpCit7CisgICAgcmV0dXJuIGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxv
Y2F0b3IqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4oCisgICAgICAgIHBhcmFsbGVsQWxsb2NhdG9y
U291cmNlKCksCisgICAgICAgIFtdIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVm
UHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAgICAgICAgIGlm
ICghYWxsb2NhdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRvci0+cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAg
ICAgIH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNyArNjksMjQgQEAg
cHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQWxs
b2NhdG9yKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRB
bGxvY2F0b3IqKCk+PiBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpOworICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVu
YyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNo
Tm90RW1wdHlNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAgICAgCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVs
Tm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmMmKTsKICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENl
bGwoY29uc3QgRnVuYyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJ
blBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAg
ICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw2ICs4NCw1MyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChj
b25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhTdWJzcGFj
ZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgICAgICA6IG1fc3Vic3BhY2Uo
c3Vic3BhY2UpCisgICAgICAgICAgICAsIG1fYmxvY2tTb3VyY2Uoc3Vic3BhY2UucGFyYWxsZWxO
b3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCkpCisgICAgICAgICAgICAsIG1fZnVuYyhmdW5jKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcnVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKKyAgICAg
ICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25T
dGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGNlbGwsIGtp
bmQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICAgICAgICAgIGlmICghbV9uZWVkVG9WaXNpdExhcmdlQWxsb2Nh
dGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBtX25l
ZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX3N1YnNwYWNlLmZvckVhY2hMYXJnZUFsbG9jYXRpb24oCisg
ICAgICAgICAgICAgICAgWyZdIChMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb24tPmlzTWFya2VkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgYWxsb2NhdGlvbi0+Y2VsbCgpLCBtX3N1YnNwYWNl
Lm1fYXR0cmlidXRlcy5jZWxsS2luZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vic3BhY2UmIG1fc3Vic3BhY2U7Cisg
ICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBtX2Jsb2Nr
U291cmNlOworICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAg
ICAgIGJvb2wgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgeyB0cnVlIH07CisgICAgfTsK
KyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMsIGZ1bmMpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvckVhY2hNYXJrZWRCbG9jaygKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgewor
cHVibGljOgorICAgIFZpc2l0Q291bnRlcigpIHsgfQorICAgIAorICAgIFZpc2l0Q291bnRlcihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCisgICAg
ICAgICwgbV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1f
dmlzaXRvcjsgfQorICAgIAorICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3Zpc2l0b3ItPnZpc2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291
bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsg
bnVsbHB0ciB9OworICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zp
c2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgi
Ci0jaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoKLSAgICBWaXNpdGluZ1Rp
bWVvdXQoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCi0gICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKLSAg
ICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCi0gICAgICAg
ICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3Qgdmlz
aXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKLSAgICB9Ci0KLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNp
dG9yKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZp
c2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgot
ICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6ZV90IG1fdmlz
aXRDb3VudEJlZm9yZSB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtCbG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lk
IFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAg
ICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1hcmtpbmdWZXJzaW9uLCBq
c1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5n
VmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgCiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1Zh
bHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zODIsNyArMzgyLDcgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNp
dAogICAgIHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAgICAgbGFz
dE9mZnNldCA9IHN0cnVjdHVyZS0+bGFzdE9mZnNldCgpOwogICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOwotICAgIERlcGVuZGVuY3kgaW5k
ZXhpbmdUeXBlRGVwZW5kZW5jeSA9IGRlcGVuZGVuY3koaW5kZXhpbmdUeXBlKTsKKyAgICBEZXBl
bmRlbmN5RmVuY2UgaW5kZXhpbmdUeXBlRGVwZW5kZW5jeShpbmRleGluZ1R5cGUpOwogICAgIExv
Y2tlcjxKU0NlbGw+IGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwogICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKSB7CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKQEAg
LTM5NiwxMyArMzk2LDEzIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlz
aXQKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgYnV0dGVyZmx5ID0g
Y29uc3VtZSh0aGlzLCBpbmRleGluZ1R5cGVEZXBlbmRlbmN5KS0+YnV0dGVyZmx5KCk7Ci0gICAg
RGVwZW5kZW5jeSBidXR0ZXJmbHlEZXBlbmRlbmN5ID0gZGVwZW5kZW5jeShidXR0ZXJmbHkpOwor
ICAgIGJ1dHRlcmZseSA9IGluZGV4aW5nVHlwZURlcGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+YnV0
dGVyZmx5KCk7CisgICAgRGVwZW5kZW5jeUZlbmNlIGJ1dHRlcmZseURlcGVuZGVuY3koYnV0dGVy
Zmx5KTsKICAgICBpZiAoIWJ1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAg
ICBpZiAoY29uc3VtZSh0aGlzLCBidXR0ZXJmbHlEZXBlbmRlbmN5KS0+c3RydWN0dXJlSUQoKSAh
PSBzdHJ1Y3R1cmVJRCkKKyAgICBpZiAoYnV0dGVyZmx5RGVwZW5kZW5jeS5jb25zdW1lKHRoaXMp
LT5zdHJ1Y3R1cmVJRCgpICE9IHN0cnVjdHVyZUlEKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAoY29uc3VtZShzdHJ1Y3R1cmUsIGJ1dHRlcmZseURlcGVuZGVuY3kpLT5sYXN0T2Zm
c2V0KCkgIT0gbGFzdE9mZnNldCkKKyAgICBpZiAoYnV0dGVyZmx5RGVwZW5kZW5jeS5jb25zdW1l
KHN0cnVjdHVyZSktPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0
aWVzKHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLCBsYXN0T2Zmc2V0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzU0LDYgKzM1NCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZUFzeW5jSXRlcmF0aW9uID0g
ZmEKICAgICBcCiAgICAgdih1bnNpZ25lZCwgbWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmVi
YWxhbmNlLCAxMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9m
R0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoOCksIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoYm9vbCwgdXNlUGFyYWxsZWxNYXJraW5nQ29uc3RyYWludFNvbHZlciwgdHJ1ZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgb3BhcXVlUm9vdE1lcmdlVGhyZXNo
b2xkLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgbWluSGVhcFV0aWxp
emF0aW9uLCAwLjgsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBtaW5NYXJrZWRC
bG9ja1V0aWxpemF0aW9uLCAwLjksIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5n
R0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVy
biAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fZ2xvYmFs
T2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90
b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFy
a2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8
ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0
dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAgICByZXR1cm4gSGVh
cDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0
aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE3LTEy
LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3Ry
YWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGRvZXMgc29tZSBjaGFuZ2VzIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIGRvIHBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZzoKKyAgICAg
ICAgCisgICAgICAgIC0gSSBmaW5hbGx5IHJlbW92ZWQgZGVwZW5kZW5jeVdpdGguIFRoaXMgd2Fz
IGEgc2lsbHkgY29uc3RydWN0IHdob3NlIG9ubHkgcHVycG9zZSBpcyB0byBjb25mdXNlCisgICAg
ICAgICAgcGVvcGxlIGFib3V0IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIGRlcGVuZGVuY3kgY2hh
aW4uIEkgdG9vayB0aGF0IGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdyZWFseQorICAgICAgICAgIHNp
bXBsaWZ5IHRoZSBHQydzIHVzZSBvZiBkZXBlbmRlbmN5IGNoYWluaW5nLgorICAgICAgICAKKyAg
ICAgICAgLSBBZGRlZCBtb3JlIGxvZ2ljIHRvIERlcXVlPD4sIHNpbmNlIEkgdXNlIGl0IGZvciBw
YXJ0IG9mIHRoZSBsb2FkIGJhbGFuY2VyLgorICAgICAgICAKKyAgICAgICAgLSBNYWRlIGl0IHBv
c3NpYmxlIHRvIHByb2ZpbGUgbG9jayBjb250ZW50aW9uLiBTZWUKKyAgICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMjUwI2MwIGZvciBzb21lIHByZWxp
bWluYXJ5IG1lYXN1cmVtZW50cy4KKyAgICAgICAgCisgICAgICAgIC0gSW50cm9kdWNlZCBob2xk
TG9ja0lmLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBlcmZvcm0gcHJlZGljYXRlZCBsb2NrIGFj
cXVpc2l0aW9uLiBXZSB1c2UgdGhhdAorICAgICAgICAgIHRvIHBpY2sgYSBsb2NrIGluIFdlYkNv
cmUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpkZXBlbmRlbmN5KToKKyAgICAgICAgKFdU
Rjo6RGVwZW5kZW5jeVdpdGg6OkRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6ZGVwZW5kZW5jeVdpdGgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
ICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRySGFzaFNl
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3Vy
cmVudFB0ckhhc2hTZXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6fkNv
bmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6
OmRlbGV0ZU9sZFRhYmxlcyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpj
bGVhcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3cpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9Db25j
dXJyZW50UHRySGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhh
c2hTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFk
ZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpzaXplIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjptYXhMb2FkIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6Omhhc2gpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50UHRySGFzaFNldDo6Y2FzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQ
dHJIYXNoU2V0Ojpjb250YWluc0ltcGwgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
UHRySGFzaFNldDo6YWRkSW1wbCk6CisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIChX
VEY6OmlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxv
Yy5oOgorICAgICAgICAqIHd0Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6Omxv
Y2tTbG93KToKKyAgICAgICAgKiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChXVEY6OmhvbGRMb2Nr
SWYpOgorICAgICAgICAqIHd0Zi9TY29wZWRMYW1iZGEuaDoKKyAgICAgICAgKiB3dGYvU2hhcmVk
VGFzay5oOgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUpOgorICAg
ICAgICAoV1RGOjpTaGFyZWRUYXNrPFJlc3VsdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0
Zi9TdGFja1Nob3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6U3RhY2tTaG90
KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpT
dGFja1Nob3Q6OmFycmF5IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6
U3RhY2tTaG90OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojppc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0
b3I+IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpkZWxldGVkVmFsdWVBcnJheSk6
CisgICAgICAgIChXVEY6OlN0YWNrU2hvdEhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpTdGFj
a1Nob3RIYXNoOjplcXVhbCk6CisgICAgICAgICogd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6U3RhY2tTaG90UHJvZmlsZXIp
OgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cHJvZmlsZSk6CisgICAgICAgIChX
VEY6OlN0YWNrU2hvdFByb2ZpbGVyOjpydW4pOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBm
b3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2luIFBC
WEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJp
bmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi87IH07CiAJ
CTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJD
QTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKKwkJMEYzMENCNUExRkNERjEzNDAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJy
ZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBB
dXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAg
Ki87IH07CiAJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3NDFGMjNENDlB
MDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovOyB9OwogCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZE
NkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50
U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4Myw2ICsxODQsOCBAQAogCQkwRjMwQkE4RDFFNzg3MDhF
MDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
MEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzBCQThGMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyog
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJFQjRBIC8q
IExvY2tBbGdvcml0aG1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG1Jbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQwMDND
RkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBX
ZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNiw2ICsyMjksOCBAQAogCQkwRjlE
MzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcgLyogUHJp
bnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRTdHJlYW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDQxRkQxQzM3QjAwNzlDNUIy
IC8qIFN0YWNrU2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1No
b3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDUxRkQxQzM3QjAwNzlD
NUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgx
MEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNo
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdF
Mzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN5c3RlbVRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MCw2ICsy
NTUsNyBAQAogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRjRCNEM0MUU4ODkzOUMwMERCQkU4NiAvKiBMaXZlbmVzcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBh
cmlzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlz
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQkNCRkExRkQzN0UwRjAwNzJB
QUYwIC8qIFN0YW1wZWRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
YW1wZWRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkYxOURBMUJCMzM0
RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVy
UG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBv
b2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZG
MEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC03OTQsNiArODAwLDggQEAKIAkJCQkwRjhGMkI5
MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3
MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVBQjFGNENENjFF
MDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1ODFGQ0RGMTMz
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBGMzBDQjU5MUZD
REYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJCTBGREI2OThE
MUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEyNjFFQjRFMDY4
MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5NTdE
IC8qIENQVVRpbWUuaCAqLywKQEAgLTEwMDUsMTAgKzEwMTMsMTMgQEAKIAkJCQlBOEE0NzMwRDE1
MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0
MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdGFja0JvdW5kcy5oICovLAorCQkJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBT
dGFja1Nob3QuaCAqLywKKwkJCQkwRjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90
UHJvZmlsZXIuaCAqLywKIAkJCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0
cy5jcHAgKi8sCiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAq
LywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8sCiAJ
CQkJRUY3RDZDRDU5RDg2NDJBOEEwREE4NkFEIC8qIFN0YWNrVHJhY2UuaCAqLywKKwkJCQkwRkZC
Q0JGQTFGRDM3RTBGMDA3MkFBRjAgLyogU3RhbXBlZExvY2suaCAqLywKIAkJCQlBOEE0NzMxMTE1
MUE4MjVCMDA0MTIzRkYgLyogU3RkTGliRXh0cmFzLmggKi8sCiAJCQkJQzRGOEE5MzYxOUM2NUVC
NDAwQjJCMTVEIC8qIFN0b3B3YXRjaC5oICovLAogCQkJCTFBNkJCNzY4MTYyRjMwMDUwMEREMTZE
QiAvKiBTdHJlYW1CdWZmZXIuaCAqLywKQEAgLTE0MjYsNiArMTQzNyw3IEBACiAJCQkJMEY4MjRB
NjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFGMTc1MkIxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRDb2RlcnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGMTc1MkMxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnREZWNvZGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyRDFGM0Q0ODYw
MDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
RDMzNjIxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQXRv
bWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksMTEzICszMzksMTE3IEBAIGlubGluZSB2b2lk
IGNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCkgeyAKIAogI2VuZGlmCiAKLXR5cGVkZWYgdW5zaWdu
ZWQgRGVwZW5kZW5jeTsKK3R5cGVkZWYgdW5zaWduZWQgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZTsK
IAotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5KCkKK2lubGluZSBJbnRl
cm5hbERlcGVuZGVuY3lUeXBlIHByZXBhcmVPcGFxdWVEZXBlbmRlbmN5SW1wbCgpCiB7CiAgICAg
cmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHMsIHR5cGVuYW1lIFQ+CitpbmxpbmUgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBwcmVwYXJlT3Bh
cXVlRGVwZW5kZW5jeUltcGwoQXJndW1lbnRzLi4uIGFyZ3VtZW50cywgVCB2YWx1ZSkKIHsKLSAg
ICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgLy8gQ3JlYXRlIGEgbWFnaWNh
bCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgot
ICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4g
dXNhYmxlIGFzIGFuIG9mZnNldCBpbgotICAgIC8vIGZ1cnRoZXIgYWRkcmVzcyBjb21wdXRhdGlv
bnM6IGFkZGluZyB6ZXJvIGRvZXMgbm90aGluZywgYnV0IHRoZSBjb21waWxlcgotICAgIC8vIGRv
ZXNuJ3Qga25vdyBpdC4gSXQncyBtYWdpY2FsIGJlY2F1c2UgaXQgY3JlYXRlcyBhbiBhZGRyZXNz
IGRlcGVuZGVuY3kKLSAgICAvLyBmcm9tIHRoZSBsb2FkIG9mIGBsb2NhdGlvbmAgdG8gdGhlIHVz
ZXMgb2YgdGhlIGRlcGVuZGVuY3ksIHdoaWNoIHRyaWdnZXJzCi0gICAgLy8gdGhlIEFSTSBJU0En
cyBhZGRyZXNzIGRlcGVuZGVuY3kgcnVsZSwgYS5rLmEuIHRoZSBteXRoaWNhbCBDKysgY29uc3Vt
ZQotICAgIC8vIG9yZGVyaW5nLiBUaGlzIGZvcmNlcyB3ZWFrIG1lbW9yeSBvcmRlciBDUFVzIHRv
IG9ic2VydmUgYGxvY2F0aW9uYCBhbmQKLSAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIg
c3RvcmUgb3JkZXIgd2l0aG91dCB0aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgotICAgIC8vIG9y
IGFuIGFjcXVpcmUgbG9hZC4KLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAl
d1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAg
OiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5k
ZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRl
bmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgLy8gTm8gZGVwZW5k
ZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgotICAgIGxvYWRMb2FkRmVuY2Uo
KTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gZGVwZW5kZW5jeTsKKyAgICB1bmlvbiB7CisgICAgICAgIEludGVybmFsRGVw
ZW5kZW5jeVR5cGUgY29weTsKKyAgICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5
ID0gMDsKKyAgICB1LnZhbHVlID0gdmFsdWU7CisgICAgcmV0dXJuIHByZXBhcmVPcGFxdWVEZXBl
bmRlbmN5SW1wbChhcmd1bWVudHMuLi4pICsgdS5jb3B5OwogfQogCi0vLyBGSVhNRTogVGhpcyBj
b2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIGRlcGVuZGVuY3koKSBvdmVybG9h
ZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDUKLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0g
ND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50MzJfdCBjb3B5
ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSk7CitjbGFzcyBPcGFxdWVEZXBlbmRlbmN5
IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgT3Bh
cXVlRGVwZW5kZW5jeShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1fdmFsdWUo
cHJlcGFyZU9wYXF1ZURlcGVuZGVuY3lJbXBsKGFyZ3VtZW50cy4uLikpCisgICAgeworICAgICAg
ICBVTlVTRURfUEFSQU0obV92YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBJbnRl
cm5hbERlcGVuZGVuY3lUeXBlIG1fdmFsdWU7Cit9OworCisvLyBPbiBUU08gYXJjaGl0ZWN0dXJl
cywgY29uc3RydWN0aW5nIHRoaXMgaXMgYSBsb2FkLWxvYWQgZmVuY2UgYW5kIGNvbnN1bWluZyBp
dCBpcyBhbiBpZGVudGl0eS4gVGhlCisvLyBsb2FkLWxvYWQgZmVuY2UgaXMgdXN1YWxseSBqdXN0
IGEgY29tcGlsZXIgZmVuY2UuIE9uIEFSTSwgdGhpcyBlbmFibGVzIHlvdSB0byB0aHJlYWQgYW4g
aW52aXNpYmxlCisvLyBkZXBlbmRlbmN5IGZyb20gb25lIHNldCBvZiB2YWx1ZXMgdG8gc29tZSBw
b2ludGVyIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBwb2ludGVyJ3MgdmFsdWUuCitjbGFzcyBEZXBl
bmRlbmN5RmVuY2UgeworcHVibGljOgorICAgIERlcGVuZGVuY3lGZW5jZSgpCisgICAgICAgIDog
bV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIGV4cGxpY2l0IERlcGVuZGVuY3lGZW5jZShBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBpbnB1dCA9IHBy
ZXBhcmVPcGFxdWVEZXBlbmRlbmN5SW1wbChhcmd1bWVudHMuLi4pOworICAgICAgICBJbnRlcm5h
bERlcGVuZGVuY3lUeXBlIG91dHB1dDsKICNpZiBDUFUoQVJNNjQpCi0gICAgYXNtKCJlb3IgJXdb
ZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIi
KGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICAvLyBDcmVh
dGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNzZW1ibHksIHdob3NlIGNv
bXB1dGF0aW9uCisgICAgICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhp
cyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgorICAgICAgICAvLyBmdXJ0aGVy
IGFkZHJlc3MgY29tcHV0YXRpb25zOiBhZGRpbmcgemVybyBkb2VzIG5vdGhpbmcsIGJ1dCB0aGUg
Y29tcGlsZXIKKyAgICAgICAgLy8gZG9lc24ndCBrbm93IGl0LiBJdCdzIG1hZ2ljYWwgYmVjYXVz
ZSBpdCBjcmVhdGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeQorICAgICAgICAvLyBmcm9tIHRoZSBs
b2FkIG9mIGBsb2NhdGlvbmAgdG8gdGhlIHVzZXMgb2YgdGhlIGRlcGVuZGVuY3ksIHdoaWNoIHRy
aWdnZXJzCisgICAgICAgIC8vIHRoZSBBUk0gSVNBJ3MgYWRkcmVzcyBkZXBlbmRlbmN5IHJ1bGUs
IGEuay5hLiB0aGUgbXl0aGljYWwgQysrIGNvbnN1bWUKKyAgICAgICAgLy8gb3JkZXJpbmcuIFRo
aXMgZm9yY2VzIHdlYWsgbWVtb3J5IG9yZGVyIENQVXMgdG8gb2JzZXJ2ZSBgbG9jYXRpb25gIGFu
ZAorICAgICAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIgc3RvcmUgb3JkZXIgd2l0aG91
dCB0aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgorICAgICAgICAvLyBvciBhbiBhY3F1aXJlIGxv
YWQuCisgICAgICAgIGFzbSgiZW9yICV3W291dF0sICV3W2luXSwgJXdbaW5dIgorICAgICAgICAg
ICAgOiBbb3V0XSAiPXIiKG91dHB1dCkKKyAgICAgICAgICAgIDogW2luXSAiciIoaW5wdXQpKTsK
ICNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5d
IgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2lu
XSAiciIoY29weSkpOworICAgICAgICBhc20oImVvciAlW291dF0sICVbaW5dLCAlW2luXSIKKyAg
ICAgICAgICAgIDogW291dF0gIj1yIihvdXRwdXQpCisgICAgICAgICAgICA6IFtpbl0gInIiKGlu
cHV0KSk7CiAjZWxzZQotICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsK
LSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVl
ZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgbG9hZExvYWRGZW5jZSgpOworICAg
ICAgICBvdXRwdXQgPSAwOworICAgICAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwogI2VuZGlmCi0g
ICAgcmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRl
cGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUq
ID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdpdGggewotcHVi
bGljOgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5KG51bGxEZXBl
bmRlbmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQorICAgICAgICBtX3ZhbHVlID0gb3V0cHV0Owor
ICAgIH0KKyAgICAKKyAgICBEZXBlbmRlbmN5RmVuY2UoY29uc3QgRGVwZW5kZW5jeUZlbmNlJiBv
dGhlcikKKyAgICAgICAgOiBtX3ZhbHVlKG90aGVyLm1fdmFsdWUpCiAgICAgewogICAgIH0KICAg
ICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZh
bHVlKQotICAgICAgICA6IGRlcGVuZGVuY3koZGVwZW5kZW5jeSkKLSAgICAgICAgLCB2YWx1ZSh2
YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSBUKiBjb25zdW1lKFQq
IHBvaW50ZXIpCiAgICAgeworI2lmIENQVShBUk02NCkgfHwgQ1BVKEFSTSkKKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPihwb2ludGVyKSArIG1fdmFs
dWUpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1fdmFsdWUpOworICAgICAgICByZXR1
cm4gcG9pbnRlcjsKKyNlbmRpZgogICAgIH0KICAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3k7Ci0gICAgVCB2YWx1ZTsKK3ByaXZhdGU6CisgICAgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBt
X3ZhbHVlOwogfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRUeXBlLCB0eXBlbmFtZSBWYWx1
ZVR5cGU+CitzdHJ1Y3QgSW5wdXRBbmRWYWx1ZSB7CisgICAgSW5wdXRBbmRWYWx1ZSgpIHsgfQog
ICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBl
bmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAg
IHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19CisgICAgSW5w
dXRBbmRWYWx1ZShJbnB1dFR5cGUgaW5wdXQsIFZhbHVlVHlwZSB2YWx1ZSkKKyAgICAgICAgOiBp
bnB1dChpbnB1dCkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIElucHV0VHlwZSBpbnB1dDsKKyAgICBWYWx1ZVR5cGUgdmFsdWU7Cit9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KQordGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5
cGU+CitJbnB1dEFuZFZhbHVlPElucHV0VHlwZSwgVmFsdWVUeXBlPiBpbnB1dEFuZFZhbHVlKElu
cHV0VHlwZSBpbnB1dCwgVmFsdWVUeXBlIHZhbHVlKQogewotI2lmIENQVShBUk02NCkgfHwgQ1BV
KEFSTSkKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBv
aW50ZXIpICsgZGVwZW5kZW5jeSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXBlbmRlbmN5
KTsKLSAgICByZXR1cm4gcG9pbnRlcjsKLSNlbmRpZgorICAgIHJldHVybiBJbnB1dEFuZFZhbHVl
PElucHV0VHlwZSwgVmFsdWVUeXBlPihpbnB1dCwgdmFsdWUpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBGdW5jPgpAQCAtNDY4LDEyICs0NzIsMTAgQEAgQUxXQVlTX0lOTElO
RSBUJiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKgogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5n
IFdURjo6QXRvbWljOwotdXNpbmcgV1RGOjpEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpEZXBlbmRl
bmN5V2l0aDsKLXVzaW5nIFdURjo6Y29uc3VtZTsKLXVzaW5nIFdURjo6ZGVwZW5kZW5jeTsKLXVz
aW5nIFdURjo6ZGVwZW5kZW5jeVdpdGg7Cit1c2luZyBXVEY6Ok9wYXF1ZURlcGVuZGVuY3k7Cit1
c2luZyBXVEY6OkRlcGVuZGVuY3lGZW5jZTsKK3VzaW5nIFdURjo6SW5wdXRBbmRWYWx1ZTsKK3Vz
aW5nIFdURjo6aW5wdXRBbmRWYWx1ZTsKIHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsKLXVzaW5n
IFdURjo6bnVsbERlcGVuZGVuY3k7CiAKICNlbmRpZiAvLyBBdG9taWNzX2gKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZl
Y3Rvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhp
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOworICAg
ICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDEzICs0MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXRtYXBTaXplOwog
ICAgIH0KIAotICAgIGJvb2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5
KCkpIGNvbnN0OworICAgIGJvb2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeUZlbmNlID0gRGVwZW5k
ZW5jeUZlbmNlKCkpIGNvbnN0OwogICAgIHZvaWQgc2V0KHNpemVfdCk7CiAgICAgdm9pZCBzZXQo
c2l6ZV90LCBib29sKTsKICAgICBib29sIHRlc3RBbmRTZXQoc2l6ZV90KTsKICAgICBib29sIHRl
c3RBbmRDbGVhcihzaXplX3QpOwotICAgIGJvb2wgY29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90
LCBEZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKSk7Ci0gICAgYm9vbCBjb25jdXJyZW50VGVz
dEFuZENsZWFyKHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5KCkpOworICAgIGJv
b2wgY29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90LCBEZXBlbmRlbmN5RmVuY2UgPSBEZXBlbmRl
bmN5RmVuY2UoKSk7CisgICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZENsZWFyKHNpemVfdCwgRGVw
ZW5kZW5jeUZlbmNlID0gRGVwZW5kZW5jeUZlbmNlKCkpOwogICAgIHNpemVfdCBuZXh0UG9zc2li
bHlVbnNldChzaXplX3QpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lk
IGNsZWFyQWxsKCk7CkBAIC0xMzYsOSArMTM2LDkgQEAgaW5saW5lIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OkJpdAogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5h
bWUgV29yZFR5cGU+Ci1pbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpn
ZXQoc2l6ZV90IG4sIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkgY29uc3QKK2lubGluZSBib29sIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmdldChzaXplX3QgbiwgRGVwZW5kZW5jeUZlbmNl
IGRlcGVuZGVuY3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplICsg
ZGVwZW5kZW5jeV0gJiAob25lIDw8IChuICUgd29yZFNpemUpKSk7CisgICAgcmV0dXJuICEhKGRl
cGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+Yml0c1tuIC8gd29yZFNpemVdICYgKG9uZSA8PCAobiAl
IHdvcmRTaXplKSkpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUg
V29yZFR5cGU+CkBAIC0xNzcsMTEgKzE3NywxMSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFw
U2l6ZSwgV29yZFR5cGU+CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFt
ZSBXb3JkVHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5
cGU+Ojpjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KQorQUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1
cnJlbnRUZXN0QW5kU2V0KHNpemVfdCBuLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsK
ICAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwogICAgIHNpemVfdCBp
bmRleCA9IG4gLyB3b3JkU2l6ZTsKLSAgICBXb3JkVHlwZSogZGF0YSA9IGJpdHMuZGF0YSgpICsg
aW5kZXggKyBkZXBlbmRlbmN5OworICAgIFdvcmRUeXBlKiBkYXRhID0gZGVwZW5kZW5jeS5jb25z
dW1lKGJpdHMuZGF0YSgpKSArIGluZGV4OwogICAgIHJldHVybiAhYml0d2lzZV9jYXN0PEF0b21p
YzxXb3JkVHlwZT4qPihkYXRhKS0+dHJhbnNhY3Rpb25SZWxheGVkKAogICAgICAgICBbJl0gKFdv
cmRUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBpZiAodmFsdWUgJiBtYXNrKQpA
QCAtMTkzLDExICsxOTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXpl
LCBXbwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3Vy
cmVudFRlc3RBbmRDbGVhcihzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQorQUxXQVlT
X0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1cnJlbnRUZXN0
QW5kQ2xlYXIoc2l6ZV90IG4sIERlcGVuZGVuY3lGZW5jZSBkZXBlbmRlbmN5KQogewogICAgIFdv
cmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7CiAgICAgc2l6ZV90IGluZGV4ID0g
biAvIHdvcmRTaXplOwotICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5kYXRhKCkgKyBpbmRleCAr
IGRlcGVuZGVuY3k7CisgICAgV29yZFR5cGUqIGRhdGEgPSBkZXBlbmRlbmN5LmNvbnN1bWUoYml0
cy5kYXRhKCkpICsgaW5kZXg7CiAgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRU
eXBlPio+KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCiAgICAgICAgIFsmXSAoV29yZFR5cGUm
IHZhbHVlKSAtPiBib29sIHsKICAgICAgICAgICAgIGlmICghKHZhbHVlICYgbWFzaykpCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDcgQEAgc2V0KFdURl9I
RUFERVJTCiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29t
cGlsZXIuaAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKICAgICBDb25kaXRpb24uaAogICAg
IENyb3NzVGhyZWFkQ29waWVyLmgKICAgICBDcm9zc1RocmVhZFRhc2suaApAQCAtMTMyLDggKzEz
MywxMSBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxs
UHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCisgICAgU3RhY2tTaG90LmgKKyAgICBTdGFja1No
b3RQcm9maWxlci5oCiAgICAgU3RhY2tTdGF0cy5oCiAgICAgU3RhY2tUcmFjZS5oCisgICAgU3Rh
bXBlZExvY2suaAogICAgIFN0ZExpYkV4dHJhcy5oCiAgICAgU3RvcHdhdGNoLmgKICAgICBTdHJp
bmdFeHRyYXMuaApAQCAtMjE4LDYgKzIyMiw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIENQVVRp
bWUuY3BwCiAgICAgQ2xvY2tUeXBlLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAorICAg
IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAg
IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29u
Y3VycmVudFB0ckhhc2hTZXQuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCitDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQo
KQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25j
dXJyZW50UHRySGFzaFNldCgpCit7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRl
bGV0ZU9sZFRhYmxlcygpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMg
bm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1p
Z2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQg
bWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAg
IG1fYWxsVGFibGVzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVl
X3B0cjxUYWJsZT4mIHRhYmxlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS5n
ZXQoKSAhPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIH0pOworfQorCit2b2lkIENv
bmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcigpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNh
c2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQo
KS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRp
ZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
IAorICAgIAorICAgIG1fYWxsVGFibGVzLmNsZWFyKCk7CisgICAgaW5pdGlhbGl6ZSgpOworfQor
Cit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKCkKK3sKKyAgICBjb25zdGV4
cHIgdW5zaWduZWQgaW5pdGlhbFNpemUgPSAzMjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+
IHRhYmxlID0gVGFibGU6OmNyZWF0ZShpbml0aWFsU2l6ZSk7CisgICAgbV90YWJsZS5zdG9yZVJl
bGF4ZWQodGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKHRhYmxl
KSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3coVGFibGUqIHRhYmxl
LCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9p
ZCogcHRyKQoreworICAgIGlmICh0YWJsZS0+bG9hZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJsZS0+
bWF4TG9hZCgpKQorICAgICAgICByZXR1cm4gcmVzaXplQW5kQWRkKHB0cik7CisgICAgCisgICAg
Zm9yICg7OykgeworICAgICAgICB2b2lkKiBvbGRFbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0u
Y29tcGFyZUV4Y2hhbmdlU3Ryb25nKG51bGxwdHIsIHB0cik7CisgICAgICAgIGlmICghb2xkRW50
cnkpIHsKKyAgICAgICAgICAgIGlmIChtX3RhYmxlLmxvYWQoKSAhPSB0YWJsZSkgeworICAgICAg
ICAgICAgICAgIC8vIFdlIGFkZGVkIGFuIGVudHJ5IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVlZCB0
byByZWV4ZWN1dGUgdGhlIGFkZCBvbiB0aGUgbmV3IHRhYmxlLgorICAgICAgICAgICAgICAgIHJl
dHVybiBhZGQocHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChvbGRFbnRyeSA9PSBwdHIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
Y3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVs
YXhlZCgpOworICAgIGlmICh0YWJsZS0+bG9hZC5sb2FkUmVsYXhlZCgpIDwgdGFibGUtPm1heExv
YWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4g
bmV3VGFibGUgPSBUYWJsZTo6Y3JlYXRlKHRhYmxlLT5zaXplICogMik7CisgICAgdW5zaWduZWQg
bWFzayA9IG5ld1RhYmxlLT5tYXNrOworICAgIHVuc2lnbmVkIGxvYWQgPSAwOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgKytpKSB7CisgICAgICAgIHZvaWQqIHB0
ciA9IHRhYmxlLT5hcnJheVtpXS5sb2FkUmVsYXhlZCgpOworICAgICAgICBpZiAoIXB0cikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRl
eCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRl
eDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgQXRvbWljPHZvaWQqPiYgZW50cnlS
ZWYgPSBuZXdUYWJsZS0+YXJyYXlbaW5kZXhdOworICAgICAgICAgICAgdm9pZCogZW50cnkgPSBl
bnRyeVJlZi5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAg
ICAgICAgICAgIGVudHJ5UmVmLnN0b3JlUmVsYXhlZChwdHIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkgIT0g
cHRyKTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGxvYWQrKzsKKyAgICB9CisgICAgCisgICAgbmV3VGFibGUtPmxvYWQuc3Rv
cmVSZWxheGVkKGxvYWQpOworICAgIAorICAgIG1fdGFibGUuc3RvcmUobmV3VGFibGUuZ2V0KCkp
OworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKG5ld1RhYmxlKSk7Cit9CisKK2Jvb2wg
Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAgcmVz
aXplSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpU
YWJsZTo6Y3JlYXRlKHVuc2lnbmVkIHNpemUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbmN1
cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gcmVzdWx0KG5ldyAoZmFzdE1hbGxvYyhPQkpFQ1RfT0ZG
U0VUT0YoVGFibGUsIGFycmF5KSArIHNpemVvZihBdG9taWM8dm9pZCo+KSAqIHNpemUpKSBUYWJs
ZSgpKTsKKyAgICByZXN1bHQtPnNpemUgPSBzaXplOworICAgIHJlc3VsdC0+bWFzayA9IHNpemUg
LSAxOworICAgIHJlc3VsdC0+bG9hZC5zdG9yZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9yZVJl
bGF4ZWQobnVsbHB0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEg
Y29uY3VycmVudCBoYXNoLWJhc2VkIHNldCBmb3IgcG9pbnRlcnMuIEl0J3Mgb3B0aW1pemVkIGZv
cjoKKy8vCisvLyAtIEhpZ2ggcmF0ZSBvZiBjb250YWlucygpIGNhbGxzLgorLy8gLSBIaWdoIHJh
dGUgb2YgYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgbmV3LiBhZGQoKSBjYWxs
cyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyAobm9wIGFkZHMpCisvLyAgIGRvbid0IG11dGF0ZSB0
aGUgdGFibGUgYXQgYWxsLgorLy8gLSBOb3QgdG9vIG1hbnkgdGhyZWFkcy4gSSBkb3VidCB0aGlz
IHNjYWxlcyBiZXlvbmQgfjQuIFRob3VnaCwgaXQgbWF5IGFjdHVhbGx5IHNjYWxlIGJldHRlciB0
aGFuIHRoYXQKKy8vICAgaWYgdGhlIHJhdGUgb2Ygbm9wIGFkZHMgaXMgYWJzdXJkbHkgaGlnaC4K
Ky8vCisvLyBJZiB3ZSB3YW50ZWQgdGhpcyB0byBzY2FsZSBiZXR0ZXIsIHRoZSBtYWluIGNoYW5n
ZSB3ZSdkIGhhdmUgdG8gbWFrZSBpcyBob3cgdGhpcyB0YWJsZSBkZXRlcm1pbmVzIHdoZW4KKy8v
IHRvIHJlc2l6ZS4gUmlnaHQgbm93IGl0J3MgYSBzaGFyZWQgY291bnRlci4gV2UgbG9jazt4YWRk
IHRoaXMgY291bnRlci4gT25lIGVhc3kgd2F5IHRvIG1ha2UgdGhhdAorLy8gc2NhbGFibGUgaXMg
dG8gcmVxdWlyZSBlYWNoIHRocmVhZCB0aGF0IHdvcmtzIHdpdGggdGhlIENvbmN1cnJlbnRQdHJI
YXNoU2V0IHRvIHJlZ2lzdGVyIGl0c2VsZiBmaXJzdC4KKy8vIFRoZW4gZWFjaCB0aHJlYWQgd291
bGQgaGF2ZSBzb21lIGRhdGEgc3RydWN0dXJlIHRoYXQgaGFzIGEgY291bnRlci4gV2UgY291bGQg
aW5zdGl0dXRlIHRoZSBwb2xpY3kgdGhhdAorLy8gZWFjaCB0aHJlYWQgc2ltcGx5IGluY3JlbWVu
dHMgaXRzIG93biBsb2FkIGNvdW50ZXIsIGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmUuIFRoZW4s
IGlmIGFueSBzZWFyY2ggdG8KKy8vIHJlc29sdmUgYSBjb2xsaXNpb24gZG9lcyBtb3JlIHRoYW4g
TiBpdGVyYXRpb25zLCB3ZSBjYW4gY29tcHV0ZSBhIGNvbWJpbmVkIGxvYWQgYnkgc3VtbWluZyB0
aGUgbG9hZAorLy8gY291bnRlcnMgb2YgYWxsIG9mIHRoZSB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVz
LgorLy8KKy8vIENvbmN1cnJlbnRQdHJIYXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNlZXMg
YSA5OCUgbm9wIGFkZCByYXRlIGluIFNwZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIGZv
Y3VzZXMgc28gbXVjaCBvbiBjYXNlcyB3aGVyZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdlLgor
Y2xhc3MgQ29uY3VycmVudFB0ckhhc2hTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENv
bmN1cnJlbnRQdHJIYXNoU2V0KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVi
bGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBDb25jdXJyZW50UHRySGFzaFNldCgpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB+Q29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb250YWluc0ltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRkSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHNpemVf
dCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxlLmxvYWRSZWxheGVk
KCktPmxvYWQubG9hZFJlbGF4ZWQoKTsKKyAgICB9CisgICAgCisgICAgLy8gT25seSBjYWxsIHdo
ZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJl
ZXMgdXAgbWVtb3J5IHdpdGhvdXQgY2hhbmdpbmcKKyAgICAvLyB0aGUgY29udGVudHMgb2YgdGhl
IHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygpOwor
ICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFk
IGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZyZWVzIHVwIGFsbCBtZW1vcnkgZXhjZXB0IGZvcgorICAg
IC8vIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBoYXNodGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgY2xlYXIoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RydWN0IFRhYmxlIHsKKyAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgbWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLyAy
OyB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0YWJs
ZS4KKyAgICAgICAgdW5zaWduZWQgbWFzazsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAg
IEF0b21pYzx1bnNpZ25lZD4gbG9hZDsKKyAgICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsxXTsK
KyAgICB9OworICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0cikKKyAgICB7
CisgICAgICAgIHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChwdHIpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHZvaWQqIGNhc3QoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFQpIDw9IHNpemVvZih2b2lkKiksICJ0eXBlIHRvbyBiaWciKTsKKyAgICAgICAgdW5pb24g
eworICAgICAgICAgICAgdm9pZCogcHRyOworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAg
fSB1OworICAgICAgICB1LnB0ciA9IG51bGxwdHI7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHUucHRyOworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zSW1w
bCh2b2lkKiBwdHIpIGNvbnN0CisgICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxl
LmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAg
ICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAg
ICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAg
ICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQuCisgICAgYm9vbCBh
ZGRJbXBsKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUu
bG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAg
ICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAg
ICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3codGFibGUs
IG1hc2ssIHN0YXJ0SW5kZXgsIGluZGV4LCBwdHIpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09
IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbmRleCA9
IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9
IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKTsKKworICAgIHZvaWQgcmVzaXpl
SWZOZWNlc3NhcnkoKTsKKyAgICBib29sIHJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpOworICAgIAor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+LCA0PiBtX2FsbFRhYmxlczsKKyAgICBB
dG9taWM8VGFibGUqPiBtX3RhYmxlOyAvLyBUaGlzIGlzIG5ldmVyIG51bGwuCisgICAgTG9jayBt
X2xvY2s7IC8vIFdlIGp1c3QgdXNlIHRoaXMgdG8gY29udHJvbCByZXNpemUgcmFjZXMuCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYs
IGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3Qg
ZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51
bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5z
IGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3QoY29u
c3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBm
b3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lv
biBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGluZSB2
b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBU
IERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXpl
KCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRh
a2VGaXJzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICB3
aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOwor
ICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6
dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9G
YXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsNyBAQCB1c2luZyBXVEY6
OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5FIGlubGluZQogI2Vu
ZGlmCiAKLSNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAotcHVibGljOiBcCisjZGVm
aW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogICAgIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIHZvaWQqIG9wZXJhdG9yIG5l
d1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgXApAQCAtMjYzLDcgKzI2
MiwxNSBAQCBwdWJsaWM6IFwKICAgICAgICAgQVNTRVJUKGxvY2F0aW9uKTsgXAogICAgICAgICBy
ZXR1cm4gbG9jYXRpb247IFwKICAgICB9IFwKKworI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRCBcCitwdWJsaWM6IFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKIHBy
aXZhdGU6IFwKIHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJU
aGlzTWFjcm8KIAorI2RlZmluZSBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQgXAorICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAordHlwZWRlZiBpbnQgX190aGlzSXNIZXJl
VG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybworCiAjZW5kaWYgLyogV1RGX0Zhc3RNYWxs
b2NfaCAqLwpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3Rm
L0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTYgQEAKICNpbmNsdWRlICJM
b2NrLmgiCiAKICNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaD4KKyNpbmNsdWRl
IDx3dGYvU3RhY2tTaG90UHJvZmlsZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK3N0YXRpYyBj
b25zdGV4cHIgYm9vbCBwcm9maWxlTG9ja0NvbnRlbnRpb24gPSBmYWxzZTsKKwogdm9pZCBMb2Nr
QmFzZTo6bG9ja1Nsb3coKQogeworICAgIGlmIChwcm9maWxlTG9ja0NvbnRlbnRpb24pCisgICAg
ICAgIFNUQUNLX1NIT1RfUFJPRklMRSg0LCAyLCA1KTsKICAgICBEZWZhdWx0TG9ja0FsZ29yaXRo
bTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvTG9ja0FsZ29y
aXRobS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIGZpZWxkLiBUaGUg
bGltaXQgb2Ygb25lIGxvY2sgaXMgZHVlIHRvIHRoZSB1c2Ugb2YgdGhlIGZpZWxkJ3MgYWRkcmVz
cyBhcyBhIGtleSB0byBmaW5kIHRoZSBsb2NrJ3MKIC8vIHF1ZXVlLgogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQ+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK3N0cnVjdCBFbXB0eUxvY2tIb29rcyB7Cisg
ICAgc3RhdGljIExvY2tUeXBlIGxvY2tIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1
ZTsgfQorICAgIHN0YXRpYyBMb2NrVHlwZSB1bmxvY2tIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZTsgfQorICAgIHN0YXRpYyBMb2NrVHlwZSBwYXJrSG9vayhMb2NrVHlwZSB2YWx1
ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICBzdGF0aWMgTG9ja1R5cGUgaGFuZG9mZkhvb2soTG9j
a1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBM
b2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQsIHR5cGVu
YW1lIEhvb2tzID0gRW1wdHlMb2NrSG9va3M8TG9ja1R5cGU+PgogY2xhc3MgTG9ja0FsZ29yaXRo
bSB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIHN0YXRpYyBj
b25zdCBMb2NrVHlwZSBtYXNrID0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0OwpAQCAtNDMsNyAr
NTEsNyBAQCBjbGFzcyBMb2NrQWxnb3JpdGhtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBs
b2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVt
b3J5X29yZGVyX2FjcXVpcmUpOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKDAsIEhvb2tzOjpsb2NrSG9vayhpc0hlbGRCaXQpLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1
aXJlKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3QoQXRvbWljPExvY2tU
eXBlPiYgbG9jaykKQEAgLTUzLDYgKzYxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSAmIGlzSGVsZEJpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgIHZhbHVlIHw9IGlzSGVsZEJpdDsKKyAgICAgICAgICAgICAgICB2YWx1
ZSA9IEhvb2tzOjpsb2NrSG9vayh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7
CkBAIC02NywxNyArNzYsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRyeUxvY2soQXRv
bWljPExvY2tUeXBlPiYgbG9jaykKICAgICB7CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAg
ICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0
KQorICAgICAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmIGlzSGVs
ZEJpdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobG9j
ay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUg
fCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQorICAgICAgICAgICAgaWYg
KGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50VmFsdWUsIEhvb2tzOjpsb2NrSG9vayhj
dXJyZW50VmFsdWUgfCBpc0hlbGRCaXQpLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRp
YyBib29sIHVubG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRvbWljPExvY2tUeXBlPiYgbG9jaykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAw
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFy
ZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIEhvb2tzOjp1bmxvY2tIb29rKDApLCBzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxlYXNlKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFz
dChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQpAQCAtODcsNiArOTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIG1hc2spICE9IGlzSGVsZEJpdCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIHZhbHVlICY9IH5pc0hlbGRC
aXQ7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBIb29rczo6dW5sb2NrSG9vayh2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxn
b3JpdGhtSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0
aG1JbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdv
cml0aG1JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrQWxn
b3JpdGhtLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmtpbmdMb3QuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CkBAIC0zNSw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJr
ZWRCaXQ+Ci12b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgaGFzUGFya2Vk
Qml0Pjo6bG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaykKK3RlbXBsYXRlPHR5cGVuYW1l
IExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdCwgdHlw
ZW5hbWUgSG9va3M+Cit2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgaGFz
UGFya2VkQml0LCBIb29rcz46OmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCiB7CiAg
ICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24g
cGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3Bp
bkxpbWl0ID0gNDA7CkBAIC00NCwxNSArNDUsMTcgQEAgdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tU
eXBlLCBpc0hlbGRCaXQsIAogICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CiAgICAgCiAgICAg
Zm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQo
KTsKKyAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gbG9jay5sb2FkKCk7CiAgICAgICAg
IAogICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCi0gICAgICAgIGlm
ICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAmJiBsb2NrLmNv
bXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlz
SGVsZEJpdCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1
ZSAmIGlzSGVsZEJpdCkpIHsKKyAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoY3VycmVudFZhbHVlLCBIb29rczo6bG9ja0hvb2soY3VycmVudFZhbHVlIHwgaXNIZWxkQml0
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZl
bid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KLSAgICAg
ICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwg
c3BpbkxpbWl0KSB7CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJpdCkg
JiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CiAgICAgICAgICAgICBzcGluQ291bnQrKzsKICAg
ICAgICAgICAgIFRocmVhZDo6eWllbGQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjAs
MTMgKzYzLDI1IEBAIHZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKIAog
ICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgcGFya2Vk
IGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKICAgICAgICAgLy8g
aWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRpbmcgaXQu
Ci0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCi0gICAgICAg
ICAgICAmJiAhbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJl
bnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJpdCkpIHsKKyAgICAgICAgICAgIExv
Y2tUeXBlIG5ld1ZhbHVlID0gSG9va3M6OnBhcmtIb29rKGN1cnJlbnRWYWx1ZSB8IGhhc1Bhcmtl
ZEJpdCk7CisgICAgICAgICAgICBpZiAoIWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50
VmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGN1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoIShjdXJyZW50VmFsdWUgJiBpc0hlbGRCaXQpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJM
b2NrIG5vdCBoZWxkIVxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJp
dCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkxvY2sgbm90IHBhcmtlZCFcbiIpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogCiAgICAgICAg
IC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxv
bmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KICAgICAgICAgUGFya2luZ0xvdDo6
UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVB
bmRQYXJrKCZsb2NrLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0
KTsKKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZsb2NrLCBjdXJyZW50
VmFsdWUpOwogICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtlZCkgewogICAgICAgICAg
ICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUb2tlbj4ocGFya1Jlc3VsdC50b2tlbikpIHsKICAgICAg
ICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKQEAgLTg3LDggKzEwMiw4IEBAIHZvaWQgTG9ja0Fs
Z29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4K
LXZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCBoYXNQYXJrZWRCaXQ+Ojp1
bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNzKQordGVt
cGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUgaGFz
UGFya2VkQml0LCB0eXBlbmFtZSBIb29rcz4KK3ZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwg
aXNIZWxkQml0LCBoYXNQYXJrZWRCaXQsIEhvb2tzPjo6dW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5
cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVzcykKIHsKICAgICAvLyBXZSBjb3VsZCBnZXQgaGVy
ZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWlsZWQgc3B1cmlvdXNseSwgb3Ig
YmVjYXVzZSB0aGVyZSBpcwogICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENB
UyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxk
CkBAIC0xMDAsNyArMTE1LDcgQEAgdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRC
aXQsIAogICAgICAgICAgICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQg
fCBoYXNQYXJrZWRCaXQpKTsKICAgICAgICAgCiAgICAgICAgIGlmICgob2xkQnl0ZVZhbHVlICYg
bWFzaykgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFu
Z2VXZWFrKG9sZEJ5dGVWYWx1ZSwgb2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpCisgICAgICAg
ICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgSG9va3M6OnVu
bG9ja0hvb2sob2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xMjAsMTIgKzEzNSwy
MSBAQCB2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgCiAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZhaXIgfHwg
cmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
dW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRoZSB0aHJlYWQg
dGhhdCB3YXMKICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGluZy4KKyAgICAgICAgICAgICAg
ICAgICAgbG9jay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoTG9j
a1R5cGUmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2Nr
VHlwZSBuZXdWYWx1ZSA9IEhvb2tzOjpoYW5kb2ZmSG9vayh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09IHZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBuZXdWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRGlyZWN0SGFuZG9mZjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKICAgICAgICAgICAgICAgICAgICAgWyZd
IChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgJj0gfm1hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEhvb2tzOjp1bmxv
Y2tIb29rKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2
ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IGhhc1Bh
cmtlZEJpdDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291
cmNlL1dURi93dGYvTG9ja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja2Vy
LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgTG9ja2VyX2gKIAogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02NCw2ICs2NSw3
IEBAIHB1YmxpYzoKIAogICAgIH5Mb2NrZXIoKQogICAgIHsKKyAgICAgICAgY29tcGlsZXJGZW5j
ZSgpOwogICAgICAgICBpZiAobV9sb2NrYWJsZSkKICAgICAgICAgICAgIG1fbG9ja2FibGUtPnVu
bG9jaygpOwogICAgIH0KQEAgLTEwOCw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgaWYgKG1fbG9ja2FibGUpCiAgICAgICAgICAgICBtX2xvY2thYmxlLT5sb2NrKCk7CisgICAg
ICAgIGNvbXBpbGVyRmVuY2UoKTsKICAgICB9CiAgICAgCiAgICAgVCogbV9sb2NrYWJsZTsKQEAg
LTEyMiw2ICsxMjUsMTIgQEAgTG9ja2VyPExvY2tUeXBlPiBob2xkTG9jayhMb2NrVHlwZSYgbG9j
awogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK0xvY2tlcjxMb2NrVHlwZT4gaG9s
ZExvY2tJZihMb2NrVHlwZSYgbG9jaywgYm9vbCBwcmVkaWNhdGUpCit7CisgICAgcmV0dXJuIExv
Y2tlcjxMb2NrVHlwZT4ocHJlZGljYXRlID8gJmxvY2sgOiBudWxscHRyKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2NrZXI8TG9ja1R5cGU+IHRyeUhvbGRMb2NrKExvY2tU
eXBlJiBsb2NrKQogewogICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+Ojp0cnlMb2NrKGxvY2sp
OwpAQCAtMTM0LDUgKzE0Myw2IEBAIHVzaW5nIFdURjo6TG9ja2VyOwogdXNpbmcgV1RGOjpOb0xv
Y2tpbmdOZWNlc3NhcnlUYWc7CiB1c2luZyBXVEY6Ok5vTG9ja2luZ05lY2Vzc2FyeTsKIHVzaW5n
IFdURjo6aG9sZExvY2s7Cit1c2luZyBXVEY6OmhvbGRMb2NrSWY7CiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL1Nj
b3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDEzIEBAIHByaXZhdGU6
CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFscmVhZHkgcmVmZXIgdG8gYSBmdW5jdG9yIGJ5
IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBsaWZldGltZSBpcwogLy8gZ29vZC4gVGhpcyBq
dXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhhdCBwb2ludHMgdG8geW91ciBmdW5jdG9yLgor
Ly8KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGFsd2F5cyB3cm9uZzoKKy8vCisvLyBhdXRvIHJlZiA9
IHNjb3BlZExhbWJkYVJlZihbLi4uXSAoLi4uKSB7Li4ufSk7CisvLworLy8gQmVjYXVzZSB0aGUg
c2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIgdG8gdGhlIGxhbWJkYSBieSByZWZlcmVuY2UsIGFu
ZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVyIHRoZQorLy8gc2VtaWNvbG9uLiBVc2Ugc2NvcGVk
TGFtYmRhKCkgaW4gdGhhdCBjYXNlLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0
eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVkTGFtYmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1
bmN0b3I+IHNjb3BlZExhbWJkYVJlZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewpJbmRleDog
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvU2hhcmVk
VGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsK
IC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5
b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJl
ZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUg
KEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRU
YXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUg
UGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJl
ZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5
cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2so
KSB7IH0KIApJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3Rh
Y2tTaG90IHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3QoKSB7IH0KKyAgICAKKyAgICBBTFdBWVNf
SU5MSU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICB7CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgICBtX2FycmF5ID0gc3RkOjptYWtl
X3VuaXF1ZTx2b2lkKltdPihzaXplKTsKKyAgICAgICAgICAgIGludCBpbnRTaXplID0gc2l6ZTsK
KyAgICAgICAgICAgIFdURkdldEJhY2t0cmFjZShtX2FycmF5LmdldCgpLCAmaW50U2l6ZSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGludFNpemUpIDw9
IHNpemUpOworICAgICAgICAgICAgbV9zaXplID0gaW50U2l6ZTsKKyAgICAgICAgICAgIGlmICgh
bV9zaXplKQorICAgICAgICAgICAgICAgIG1fYXJyYXkgPSBudWxscHRyOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIFN0YWNrU2hvdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9hcnJheShkZWxldGVkVmFsdWVBcnJheSgpKQorICAgICAgICAsIG1fc2l6
ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90JiBvcGVyYXRvcj0oY29uc3Qg
U3RhY2tTaG90JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lkKltd
PiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4ob3RoZXIubV9zaXplKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG90aGVyLm1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIG5l
d0FycmF5W2ldID0gb3RoZXIubV9hcnJheVtpXTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIubV9z
aXplOworICAgICAgICBtX2FycmF5ID0gV1RGTW92ZShuZXdBcnJheSk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90KGNvbnN0IFN0YWNrU2hvdCYgb3Ro
ZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2b2lk
KiogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LmdldCgpOyB9CisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2FycmF5OyB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV9zaXplICE9IG90aGVyLm1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3NpemU7IGktLTspIHsKKyAgICAgICAgICAg
IGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1fYXJyYXlbaV0pCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBtX3NpemU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0g
bV9zaXplOyBpLS07KQorICAgICAgICAgICAgcmVzdWx0IF49IFB0ckhhc2g8dm9pZCo+OjpoYXNo
KG1fYXJyYXlbaV0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fc2l6ZSAmJiBtX2FycmF5LmdldCgpID09IGRlbGV0ZWRWYWx1ZUFycmF5
KCk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgU3BlY3RydW08PiBoYXBweS4KKyAgICBib29s
IG9wZXJhdG9yPihjb25zdCBTdGFja1Nob3QmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCoqIGRlbGV0ZWRWYWx1ZUFycmF5KCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KKyAg
ICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbV9hcnJheTsKKyAgICBzaXplX3QgbV9z
aXplIHsgMCB9OworfTsKKworc3RydWN0IFN0YWNrU2hvdEhhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYgc2hvdCkgeyByZXR1cm4gc2hvdC5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdGFja1Nob3QmIGEsIGNvbnN0IFN0YWNrU2hv
dCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0YWNr
U2hvdD4geworICAgIHR5cGVkZWYgU3RhY2tTaG90SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U3RhY2tTaG90PiB7IH07CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9m
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgor
I2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+Cisj
aW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNr
U2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3RQcm9maWxlcih1bnNpZ25lZCBu
dW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCwgdW5zaWduZWQgc3RhY2tzVG9SZXBvcnQp
CisgICAgICAgIDogbV9udW1GcmFtZXMobnVtRnJhbWVzKQorICAgICAgICAsIG1fZnJhbWVzVG9T
a2lwKGZyYW1lc1RvU2tpcCkKKyAgICAgICAgLCBtX3N0YWNrc1RvUmVwb3J0KHN0YWNrc1RvUmVw
b3J0KQorICAgIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIlN0YWNrU2hvdFByb2ZpbGVyIiwg
W3RoaXNdICgpIHsgcnVuKCk7IH0pOworICAgIH0KKworICAgIC8vIE5FVkVSX0lOTElORSBzbyB0
aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0YWJsZS4KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBw
cm9maWxlKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAgICAgbV9wcm9maWxlLmFkZChTdGFja1Nob3QobV9udW1GcmFtZXMgKyBtX2ZyYW1lc1Rv
U2tpcCkpOworICAgICAgICBtX3RvdGFsQ291bnQrKzsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICBzbGVlcCgxX3MpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICAgICAgYXV0byBsaXN0ID0gbV9wcm9maWxlLmJ1aWxkTGlzdCgpOwor
ICAgICAgICAgICAgZGF0YUxvZygiXG5Ib3R0ZXN0IHN0YWNrcyBpbiAiLCBnZXRDdXJyZW50UHJv
Y2Vzc0lEKCksICI6XG4iKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUo
KSwgY291bnQgPSAwOyBpLS0gJiYgY291bnQgPCBtX3N0YWNrc1RvUmVwb3J0OyBjb3VudCsrKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBsaXN0W2ldOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIlxuVG9wICMiLCBjb3VudCArIDEsICIgc3RhY2s6ICIsIGVudHJ5LmNvdW50ICog
MTAwIC8gbV90b3RhbENvdW50LCAiJVxuIik7CisgICAgICAgICAgICAgICAgU3RhY2tUcmFjZSB0
cmFjZShlbnRyeS5rZXkuYXJyYXkoKSArIG1fZnJhbWVzVG9Ta2lwLCBlbnRyeS5rZXkuc2l6ZSgp
IC0gbV9mcmFtZXNUb1NraXApOworICAgICAgICAgICAgICAgIGRhdGFMb2codHJhY2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBXb3JkTG9jayBtX2xvY2s7CisgICAgU3BlY3RydW08U3RhY2tTaG90LCBkb3Vi
bGU+IG1fcHJvZmlsZTsKKyAgICBkb3VibGUgbV90b3RhbENvdW50IHsgMCB9OworICAgIHVuc2ln
bmVkIG1fbnVtRnJhbWVzOworICAgIHVuc2lnbmVkIG1fZnJhbWVzVG9Ta2lwOworICAgIHVuc2ln
bmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9OworCisjZGVmaW5lIFNUQUNLX1NIT1RfUFJPRklMRShu
dW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tzVG9SZXBvcnQpIGRvIHsgXAorICAgIHN0YXRp
YyBTdGFja1Nob3RQcm9maWxlciogc3RhY2tTaG90UHJvZmlsZXI7IFwKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJvZmlsZXJPbmNlRmxhZzsgXAorICAgIHN0ZDo6Y2FsbF9v
bmNlKHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWcsIFtdIHsgc3RhY2tTaG90UHJvZmlsZXIgPSBu
ZXcgU3RhY2tTaG90UHJvZmlsZXIobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVw
b3J0KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQcm9maWxlci0+cHJvZmlsZSgpOyBcCit9IHdoaWxl
IChmYWxzZSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0
YW1wZWRMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhbXBlZExvY2suaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFtcGVkTG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24g
b2YgYSBTdGFtcGVkTG9jaywgd2hpY2ggdXNlcyBqdXN0IGFuIGV4Y2x1c2l2ZSBsb2NrIGFzIGEg
ZmFsbGJhY2suIFRoaXMKKy8vIG1ha2VzIHRoZSBsb2NrIHZlcnkgY29tcGFjdC4KKworLy8gRklY
TUU6IEl0J3MgY3VycmVudGx5IG5lY2Vzc2FyeSBmb3IgY2FsbGVycyBvZiBsb2NrKCkvdW5sb2Nr
KCkgdG8gI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oPi4KKy8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMjIKKworY2xhc3MgU3RhbXBlZExv
Y2sgeworICAgIHR5cGVkZWYgdWludHB0cl90IExvY2tUeXBlOworICAgIAorICAgIHN0YXRpYyBj
b25zdGV4cHIgTG9ja1R5cGUgaXNIZWxkQml0ID0gMTsKKyAgICBzdGF0aWMgY29uc3RleHByIExv
Y2tUeXBlIGhhc1BhcmtlZEJpdCA9IDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBt
YXNrID0gMSAmIDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBzaGlmdCA9IDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBzdGFtcFVuaXQgPSA0OworICAgIAorICAgIHN0
cnVjdCBMb2NrSG9va3MgeworICAgICAgICBzdGF0aWMgTG9ja1R5cGUgbG9ja0hvb2soTG9ja1R5
cGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIHN0YW1wVW5p
dDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIExvY2tUeXBlIHVubG9ja0hv
b2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgICAgIHN0YXRpYyBMb2Nr
VHlwZSBwYXJrSG9vayhMb2NrVHlwZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICAgICAg
c3RhdGljIExvY2tUeXBlIGhhbmRvZmZIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1
ZTsgfQorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBp
c0hlbGRCaXQsIGhhc1BhcmtlZEJpdCwgTG9ja0hvb2tzPiBFeGNsdXNpdmVBbGdvcml0aG07Cisg
ICAgCitwdWJsaWM6CisgICAgU3RhbXBlZExvY2soKQorICAgIHsKKyAgICAgICAgbV93b3JkLnN0
b3JlUmVsYXhlZCgwKTsKKyAgICB9CisgICAgCisgICAgflN0YW1wZWRMb2NrKCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgdHJ5TG9jaygpCisgICAgeworICAgICAgICByZXR1cm4gRXhj
bHVzaXZlQWxnb3JpdGhtOjp0cnlMb2NrKG1fd29yZCk7CisgICAgfQorCisgICAgdm9pZCBsb2Nr
KCkKKyAgICB7CisgICAgICAgIEV4Y2x1c2l2ZUFsZ29yaXRobTo6bG9jayhtX3dvcmQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBFeGNsdXNpdmVBbGdv
cml0aG06OnVubG9jayhtX3dvcmQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGVsZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gRXhjbHVzaXZlQWxnb3JpdGhtOjppc0xvY2tlZCht
X3dvcmQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0hlbGQoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIG9ubHkgdGhp
bmcgeW91J3JlIGFsbG93ZWQgdG8gaW5mZXIgZnJvbSB0aGlzIHZhbHVlIGlzIHRoYXQgaWYgaXQn
cyB6ZXJvLCB0aGVuIHlvdSBkaWRuJ3QgZ2V0CisgICAgLy8gYSByZWFsIHN0YW1wLgorICAgIGNs
YXNzIFN0YW1wIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdGFtcCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gb3Ro
ZXIubV92YWx1ZTsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RhbXAmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7IH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFN0YW1wZWRMb2NrOworICAgICAgICAK
KyAgICAgICAgTG9ja1R5cGUgbV92YWx1ZSB7IDAgfTsKKyAgICB9OworICAgIAorICAgIFN0YW1w
IHRyeU9wdGltaXN0aWNSZWFkKCkKKyAgICB7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1
ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiBpc0hlbGRCaXQp
CisgICAgICAgICAgICByZXR1cm4gU3RhbXAoKTsKKyAgICAgICAgcmV0dXJuIGdldFN0YW1wKGN1
cnJlbnRWYWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgdmFsaWRhdGUoU3RhbXAgc3RhbXAp
CisgICAgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgTG9ja1R5cGUg
Y3VycmVudFZhbHVlID0gbV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHJldHVybiBnZXRT
dGFtcChjdXJyZW50VmFsdWUpID09IHN0YW1wOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIGF1dG8gZG9PcHRpbWl6ZWRSZWFkKGNvbnN0IEZ1bmMmIGZ1bmMp
CisgICAgeworICAgICAgICBTdGFtcCBzdGFtcCA9IHRyeU9wdGltaXN0aWNSZWFkKCk7CisgICAg
ICAgIGlmIChzdGFtcCkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jKCk7CisgICAg
ICAgICAgICBpZiAodmFsaWRhdGUoc3RhbXApKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICAgICAgbG9jaygpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGZ1
bmMoKTsKKyAgICAgICAgdW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIC8vIFVzZSB0aGlzIHRvIGNyZWF0ZSBhIHJlYWQgdHJhbnNhY3Rpb24gdXNpbmcg
ZGVwZW5kZW5jeSBjaGFpbnMgb25seS4KKyAgICBJbnB1dEFuZFZhbHVlPExvY2tUeXBlLCBTdGFt
cD4gdHJ5T3B0aW1pc3RpY0ZlbmNlbGVzc1JlYWQoKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUg
Y3VycmVudFZhbHVlID0gbV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlmIChjdXJyZW50
VmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICByZXR1cm4gaW5wdXRBbmRWYWx1ZShjdXJy
ZW50VmFsdWUsIFN0YW1wKCkpOworICAgICAgICByZXR1cm4gaW5wdXRBbmRWYWx1ZShjdXJyZW50
VmFsdWUsIGdldFN0YW1wKGN1cnJlbnRWYWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIGZl
bmNlbGVzc1ZhbGlkYXRlKFN0YW1wIHN0YW1wLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkK
KyAgICB7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IGRlcGVuZGVuY3kuY29uc3Vt
ZSh0aGlzKS0+bV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHJldHVybiBnZXRTdGFtcChj
dXJyZW50VmFsdWUpID09IHN0YW1wOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcHRpbWlzdGljRnVuYywgdHlwZW5hbWUgRnVuYz4KKyAgICBhdXRvIGRvT3B0aW1pemVkRmVu
Y2VsZXNzUmVhZChjb25zdCBPcHRpbWlzdGljRnVuYyYgb3B0aW1pc3RpY0Z1bmMsIGNvbnN0IEZ1
bmMmIGZ1bmMpCisgICAgeworICAgICAgICBhdXRvIHN0YW1wID0gdHJ5T3B0aW1pc3RpY0ZlbmNl
bGVzc1JlYWQoKTsKKyAgICAgICAgaWYgKHN0YW1wLnZhbHVlKSB7CisgICAgICAgICAgICBEZXBl
bmRlbmN5RmVuY2UgZGVwZW5kZW5jeShzdGFtcC5pbnB1dCk7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IG9wdGltaXN0aWNGdW5jKGRlcGVuZGVuY3ksIHN0YW1wLnZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChmZW5jZWxlc3NWYWxpZGF0ZShzdGFtcC52YWx1ZSwgZGVwZW5kZW5jeSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBsb2NrKCk7Cisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuYygpOworICAgICAgICB1bmxvY2soKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFN0YW1wIGdldFN0YW1w
KExvY2tUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgU3RhbXAgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9ICh2YWx1ZSAmIH5tYXNrKSB8IDE7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIEF0b21pYzxMb2NrVHlwZT4gbV93b3JkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RhbXBlZExvY2s7CisKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBw
YXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlzIGNoYW5nZSBp
cyBiZXN0IHRlc3RlZCB1c2luZyBET00tR0MtaW50ZW5zaXZlCisgICAgICAgIGJlbmNobWFya3Mg
bGlrZSBTcGVlZG9tZXRlciBhbmQgRHJvbWFlby4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGFy
YWxsZWxpemVzIHRoZSBET00ncyBvdXRwdXQgY29uc3RyYWludCwgYW5kIG1ha2VzIHNvbWUgc21h
bGwgY2hhbmdlcyB0byBtYWtlIHRoaXMgbW9yZQorICAgICAgICBzY2FsYWJsZS4KKworICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRk
ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRD
b25zdHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0
cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091
dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgorICAgICAgICAqIGRvbS9O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJl
bnRseSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVFdmVudFRhcmdldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEpOgorCiAyMDE3LTEy
LTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50
ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0
IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRMb2Fk
ZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAogYmluZGluZ3MvanMv
Q2FsbFRyYWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmluZGluZ3MvanMvRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAog
YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdtYSBvbmNl
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KKwpJ
bmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVv
dXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFw
L1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAg
LTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WaXNp
dGluZ1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUx
LDYgKzM1MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzE2NkUx
Qzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAwNDQzQzNGIC8qIElu
dGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRlcnNlY3Rp
b25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFEQkEwMDQ0M0MzRiAv
KiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFBMEYxRkQxQzY2QTAw
NzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIyIC8qIERPTUdD
T3V0cHV0Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5MDBBM0Y0QzAgLyog
R3JhcGhpY3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBk
YXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQjYyNTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1MkQxOERFMUIxNTAw
QTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9s
bGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNr
eU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNTQ0Niw2ICs1NDQ3LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpTRE9NUXVhZEN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWRDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1NzE1NURBODFFMDBGQURE
NEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9NR0NPdXRw
dXRDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERP
TUdDT3V0cHV0Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEwMDk3NUZERCAvKiBDU1NQ
cm9wZXJ0aWVzLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpzb247IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xh
eWVyVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFw
aGljc0xheWVyVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0
RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI5ODAsNiArMjI5ODMsOCBAQAogCQkJCTk1MjA3NjAyMUYy
Njc1RjkwMDdEMkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJCQkwRjYwRjMyOTFERkJC
MTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQx
NkQ2QyAvKiBDb21tb25WTS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2NjMwMDc5QzVCMiAvKiBE
T01HQ091dHB1dENvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVC
MiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUxNkFEMjFGMzUyNTIwMDAz
NEI2QkYgLyogRE9NUHJvbWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0RDAwMEQ4
MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIxRTAwMEQ4
MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5oICovLApAQCAtMjc1NDcsNiArMjc1NTIsNyBAQAogCQkJ
CTUxOEY1MDA0MTk0Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0b24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdD
T3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQTdDMUYxODgzMjJGQzAw
Qzk1NEI1IC8qIEpTR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgyQjc1MjEx
OThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENv
bnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisKKyNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5o
PgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPGhl
YXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENv
bnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKKyAgICA6IE1hcmtp
bmdDb25zdHJhaW50KCJEb21vIiwgIkRPTSBPdXRwdXQiLCBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
U2VsZG9tR3JleWVkLCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpCisgICAgLCBtX3ZtKHZtKQorICAgICwgbV9jbGllbnRE
YXRhKGNsaWVudERhdGEpCisgICAgLCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKHZtLmhlYXAubXV0
YXRvckV4ZWN1dGlvblZlcnNpb24oKSkKK3sKK30KKworRE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+
RE9NR0NPdXRwdXRDb25zdHJhaW50KCkKK3sKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIERP
TUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIEhl
YXAmIGhlYXAgPSBtX3ZtLmhlYXA7CisgICAgCisgICAgaWYgKGhlYXAubXV0YXRvckV4ZWN1dGlv
blZlcnNpb24oKSA9PSBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKQorICAgICAgICByZXR1cm4gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworICAgIAorICAgIG1fbGFzdEV4ZWN1dGlv
blZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlQobV90YXNrcy5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50RGF0YS5mb3JFYWNo
T3V0cHV0Q29uc3RyYWludFNwYWNlKAorICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkg
eworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFw
Q2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgSlNDZWxs
KiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgICAg
IGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
Y2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX3Rhc2tzLmFwcGVuZChzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoZnVu
YykpOworICAgICAgICB9KTsKKyAgICAKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpQYXJhbGxlbDsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZG9Q
YXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoYXV0byYg
dGFzayA6IG1fdGFza3MpCisgICAgICAgIHRhc2stPnJ1bih2aXNpdG9yKTsKK30KKyAgICAgICAg
Cit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90
VmlzaXRvciYpCit7CisgICAgbV90YXNrcy5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CisjaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSlNWTUNsaWVudERhdGE7CisKK2NsYXNzIERPTUdDT3V0cHV0
Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAg
ICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTVk1DbGllbnREYXRhJik7CisgICAg
fkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTQzo6Q29u
c3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworICAgIEpTVk1DbGllbnRE
YXRhJiBtX2NsaWVudERhdGE7CisgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsK
KyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4+IG1fdGFz
a3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAorI2luY2x1ZGUgIkRPTUdDT3V0
cHV0Q29uc3RyYWludC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhl
YXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxoZWFwL0hl
YXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgotI2luY2x1
ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2Vk
QmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNs
dWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CkBA
IC03NCw0MyArNzIsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQoVk0q
CiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEoKnZt
KTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRoaXMg
cG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1h
cmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29uc3Ry
YWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9uID0g
dm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7Ci0gICAgICAg
ICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0
RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKLQotICAg
ICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNvdW50IGhlcmUgb3Vyc2Vs
dmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKLSAgICAgICAgICAgIC8vIG9w
YXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0aW9uIHlldC4gVGhlIHdh
eSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAgICAgIC8vIGNvbnN0cmFpbnQgc29sdmVy
IGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCi0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9vdHMoKTsK
LQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAgICAgICAgICAg
IHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnREYXRhLT5mb3JF
YWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAgICAgICAgICAgIFsmXSAoU3Vic3BhY2Um
IHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRD
ZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVhcENlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxs
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2Vs
bCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVJldmlzaXRl
ZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90
VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNs
b3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBudW1PcGFx
dWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdURk1v
dmUoY29uc3RyYWludCkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6
bWFrZV91bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7CiAg
ICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6
OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRv
cHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNs
dWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rv
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNs
dWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIsNyArMjE2MywxNCBAQCBFdmVu
dFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAKIEV2ZW50VGFyZ2V0RGF0YSog
Tm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCkKIHsKLSAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CisgICAgLy8gTm90IGhvbGRpbmcg
dGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBlZCBhY2NlbGVyYXRlcyBwYXJhbGxlbCBj
b25zdHJhaW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8gY2FsbHMgdGhpcyBmdW5jdGlvbiBmcm9t
IG1hbnkgdGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nIGNhbiBoYXBwZW4gd2l0
aCB0aGUgd29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0b3BwZWQsIGJ1dCBpZiB3ZSBkbyBpdCB3
aXRoIGEgcnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5IG1peGluZyBjb25zdHJhaW50
CisgICAgLy8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJlZm9yZSwgdGhlIG1vc3QgbGlr
ZWx5IHRpbWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBsb2NrIGlzIHdoZW4gdGhlCisgICAgLy8g
d29ybGQgaXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHdoZW4gdGhl
IHdvcmxkIGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdvcmxkCisgICAgLy8gbWVhbnMg
dGhhdCB3ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFyZ2V0IGRhdGEgbWFwLgorICAg
IEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrSWYoc19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2bSAmJiB2bS0+aGVhcC53b3JsZElzUnVu
bmluZygpKTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRhKCkgPyBldmVudFRhcmdldERh
dGFNYXAoKS5nZXQodGhpcykgOiBudWxscHRyOwogfQogCkBAIC0yMTcxLDYgKzIxNzksOSBAQCBF
dmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAgICAgaWYgKGhhc0V2ZW50
VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmdldCh0
aGlzKTsKIAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CisKICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAgc2V0SGFzRXZl
bnRUYXJnZXREYXRhKHRydWUpOwogICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFwKCkuYWRk
KHRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJnZXREYXRhPigpKS5pdGVyYXRvci0+dmFs
dWU7CkBAIC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2
ZW50VGFyZ2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogeworICAgIEpT
Qzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwg
dm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhz
X2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2ZW50VGFyZ2V0RGF0YU1hcCgpLnJlbW92
ZSh0aGlzKTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJh
bGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICAqIFNjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzOiBBZGQgc3BsYXktbGF0ZW5jeSB0ZXN0
LCBzaW5jZSB0aGlzIGNoYW5nZSBuZWVkZWQgdG8gYmUgY2FyZWZ1bGx5IHZhbGlkYXRlZCB3aXRo
IHRoYXQgYmVuY2htYXJrLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0
ckhhc2hTZXQuY3BwOiBBZGRlZC4gVGhpcyBoYXMgdW5pdCB0ZXN0cyBvZiB0aGUgbmV3IGNvbmN1
cnJlbnQgZGF0YSBzdHJ1Y3R1cmUuIFRoZSB0ZXN0cyBmb2N1cyBvbiBjb3JyZWN0bmVzcyB1bmRl
ciBzZXJpYWwgZXhlY3V0aW9uLCB3aGljaCBhcHBlYXJzIHRvIGJlIGVub3VnaCBmb3Igbm93IChp
dCdzIHNvIGVhc3kgdG8gY2F0Y2ggYSBjb25jdXJyZW5jeSBidWcgYnkganVzdCBydW5uaW5nIHRo
ZSBHQykuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0xMi0wMSAgQWxp
Y2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRk
IFNhbXBsZU1hcC5jcHAgQVBJIHRlc3RzIHRvIENNYWtlCkluZGV4OiBUb29scy9TY3JpcHRzL3J1
bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVu
Y2htYXJrcwkocmV2aXNpb24gMjI1NDAzKQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNo
bWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgTE9OR1NQSURFUl9QQVRIID0g
UEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAr
ICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2OC12NiIKIFRBSUxCRU5DSF9QQVRIID0gUEVSRk9S
TUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5jaDkwMDAiCiBNSUNST0JFTkNITUFSS1NfUEFUSCA9
IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3RzIiArICJtaWNyb2JlbmNobWFya3MiCi1PQ1RBTkVf
V1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIgKyAid3JhcHBl
cnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9j
dGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEggPSBPUEVOU09VUkNFX09DVEFORV9QQVRIICsgIndy
YXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIkpTQmVuY2gi
CiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ0
ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJT
aXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04NDEsNiArODQyLDIwIEBAIGNsYXNzIFNpbmdsZUZp
bGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKICAgZW5kCiBlbmQKIAorIyBCZW5jaG1hcmsgdGhh
dCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0IGJlIGxvYWRlZCBpbiBpdHMgb3du
IGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1bigpKSwgYnV0IHJldHVybnMgaXRz
IHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitjbGFzcyBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5j
aG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5jaFBhdGgKKyAgCisgIGRlZiBpbml0
aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVuY2hQYXRoID0gYmVuY2hQYXRoCisgIGVuZAorICAK
KyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgIGVuZAor
ZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgZGF0YSBmaWxl
cyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZvbGxvd2VkCiAjIGJ5IGEgY29tbWFu
ZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNsYXNzIE11bHRpRmlsZVRpbWVkQmVuY2htYXJrUGFy
YW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1pdEJlbmNoUnVuQ29kZUZpbGUobmFt
ZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgaWYgKF9f
YmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0pIHByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTog
I3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hlcl9pbmRleCAtICN7d2FybXVwfSkgKyBc
IjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1bnMpKTsiKQogICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxl
LCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29tbWFuZC5qc30iKQorICAgICAgZWxzaWYgYmVuY2hQ
YXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93
aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHZhciBfX2JlbmNo
ZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsiKQorICAgICAgICAkcmVydW4udGltZXMgeworICAg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBydW4oX19iZW5jaGVyX3doYXQsIF9f
YmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAgIH0KKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVzdWx0LnZhbHVlID09IG51bGwpIikKKyAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICAgIHRocm93IG5ldyBFcnJvcihcIk51bGwgcmVz
dWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICByZXR1cm4gX19i
ZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
fSIpCisgICAgICAgICR3YXJtdXAudGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSIp
CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4u
dm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KKyAgICAgICAgJGlubmVyLnRpbWVzIHsKKyAg
ICAgICAgICB8IGlubmVySW5kZXggfAorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxl
LCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiAje2lubmVy
SW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmlu
c3BlY3R9KSk7IikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1
bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQogICAgICAgZWxzZQogICAg
ICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZVRpbWVkQmVu
Y2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNo
ZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKQEAgLTE1OTQsNiArMTYyOCwxOSBAQCBjbGFzcyBP
Y3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQKIAorY2xhc3MgQ3VzdG9tVGltZWRCZW5jaG1hcmsK
KyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0aWFsaXplKG5hbWUsIGZ1bGxQYXRo
KQorICAgIEBuYW1lID0gbmFtZQorICAgIEBmdWxsUGF0aCA9IGZ1bGxQYXRoCisgIGVuZAorICAK
KyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisgICAgZW1pdEJlbmNoUnVuQ29kZShmdWxsbmFtZSwg
cGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycy5uZXcoZW5zdXJl
RmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0iLCBAZnVsbFBhdGgpKSkKKyAgZW5kCitlbmQKKwog
Y2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGluY2x1ZGUgQmVuY2htYXJrCiAgIApAQCAtMzAxMCw2
ICszMDU3LDcgQEAgYmVnaW4KICAgICB8IGFyZ3MgfAogICAgIE9DVEFORS5hZGQgT2N0YW5lQmVu
Y2htYXJrLm5ldygqYXJncykKICAgfQorICBPQ1RBTkUuYWRkIEN1c3RvbVRpbWVkQmVuY2htYXJr
Lm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVOU09VUkNFX09DVEFORV9QQVRIICsgInNwbGF5Lmpz
IikudG9fcykKIAogICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0ZS5uZXcoIktyYWtlbiIsIDphcml0
aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0YXIiLCAiYXVkaW8tYmVhdC1kZXRlY3Rpb24iLCAi
YXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcAorICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRoLmNwcApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0g
Ki87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0Nv
Y29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
MzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07
CiAJCTBGMkMyMEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAv
KiBUaW1lLmNwcCAqLzsgfTsKKwkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0
ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2Ny
aXB0Lm1tICovOyB9OwogCQkwRjRGRkE5RTFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFS
ZW5kZXJJbkNvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNv
bnRleHQubW0gKi87IH07CiAJCTBGNTY1MUY3MUZDRTREREMwMDMxMEZCQyAvKiBOb0hpc3RvcnlJ
dGVtU2Nyb2xsVG9GcmFnbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNTY1MUY2MUZDRTREREIwMDMxMEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Ny
b2xsVG9GcmFnbWVudC5tbSAqLzsgfTsKQEAgLTEwNzIsNiArMTA3Myw3IEBACiAJCTBGMTM5RTc1
MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2EvV2Vha09iakNQ
dHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVBRjZDNEQwMDdB
Qjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9j
ZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcxRENENTQ0ODAw
NTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVCMUZDRTE3OTIw
MDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFs
dWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29u
dGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNuYXBzaG90
VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRG
RkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFt
ZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9J
bWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0yNTkzLDYgKzI1
OTUsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNTdHJpbmcuY3Bw
ICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgKi8s
CiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0
aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQ
dHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0
aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRU
YXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAg
Ki8sCkBAIC0zMTc5LDYgKzMxODIsNyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMwMEZFQkNGMyAv
KiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUZFMUQwQTU5MEMw
MEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4
QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYz
MENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVj
dFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25hbWVzcGFj
ZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlzIHRoaW5nIHdo
YXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisv
LyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6CisvLworLy8gK3gg
ICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBhbmQgYXNzZXJ0
cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgYW5kIGFzc2Vy
dHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRzIHRoYXQgJ3gn
IGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5vdCBpbiB0aGUg
c2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBDb25jdXJyZW50
UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0gY29tbWFuZHM7
IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAgICAgIHZvaWQq
IHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb21tYW5k
WzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZFswXSkgeworICAgICAgICBjYXNlICcrJzoK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5hZGQocHRyKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmFkZChw
dHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMocHRy
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoV1RGX0NvbmN1
cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAgICBkb1Rlc3QoIiIpOworfQorCitURVNUKFdU
Rl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudCkKK3sKKyAgICBkb1Rlc3QoIit4
PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVt
ZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4IXgheCF4IXg9
eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1l
bnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgteS0w
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgiKTsKK30KKworVEVTVChXVEZfQ29uY3Vy
cmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzKQoreworICAgIGRvVGVzdCgiKzErMisz
KzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6K3gr
Yyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitC
K04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9
aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1M
PVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwg
QWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYr
Nys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraytsK3oreCtjK3YrYitu
K20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9
Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16
PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9
Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFm
IWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUgh
SiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFv
IXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEh
UyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFy
IXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkh
VSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5
ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEh
VyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0
ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMh
diFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFO
IU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWoh
ayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFa
IVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMh
ZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFH
IUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUh
aSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQ
IUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXch
ZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFU
IVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNIik7Cit9CisKK1RFU1Qo
V1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c0FuZFF1ZXJ5U29tZUJl
Zm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtx
K3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9
dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1S
LVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2Ir
bittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0x
PTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9
ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1D
PVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkU29t
ZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRUaGVSZXN0QW5kUXVlcnlTb21lQmVmb3JlQWRk
aW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3Ir
dCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFl
IXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEh
dyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9
cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWItbi1tLVEtVy1F
LVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTStsK3oreCtjK3Yr
YituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitN
PTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9
bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1Y
PUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328280</attachid>
            <date>2017-12-02 20:10:18 -0800</date>
            <delta_ts>2017-12-03 11:55:19 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>305801</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIFRoaXMgbG9va3MgbGlrZSBhIDElIFNwZWVkb21ldGVy
CisgICAgICAgIHNwZWVkLXVwLgorICAgICAgICAKKyAgICAgICAgVGhlIGNvbnN0cmFpbnQgc29s
dmVyIHN1cHBvcnRzIHJ1bm5pbmcgY29uc3RyYWludHMgaW4gcGFyYWxsZWwgaW4gdHdvIGRpZmZl
cmVudCB3YXlzOgorICAgICAgICAKKyAgICAgICAgLSBSdW4gbXVsdGlwbGUgY29uc3RyYWludHMg
aW4gcGFyYWxsZWwgdG8gZWFjaCBvdGhlci4gVGhpcyBvbmx5IHdvcmtzIGZvciBjb25zdHJhaW50
cyB0aGF0IGNhbgorICAgICAgICAgIHRvbGVyYXRlIG90aGVyIGNvbnN0cmFpbnRzIHJ1bm5pbmcg
Y29uY3VycmVudGx5IHRvIHRoZW0gKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PQorICAgICAg
ICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCkuIFRoaXMgaXMgdGhlIG1vc3Qg
YmFzaWMga2luZCBvZiBwYXJhbGxlbGlzbSB0aGF0IHRoZQorICAgICAgICAgIGNvbnN0cmFpbnQg
c29sdmVyIHN1cHBvcnRzLiBBbGwgY29uc3RyYWludHMgZXhjZXB0IHRoZSBKU0MgU1BJIGNvbnN0
cmFpbnRzIGFyZSBjb25jdXJyZW50LiBXZQorICAgICAgICAgIGNvdWxkIHByb2JhYmx5IG1ha2Ug
dGhlbSBjb25jdXJyZW50LCBidXQgSSdtIHBsYXlpbmcgaXQgc2FmZSBmb3Igbm93LgorICAgICAg
ICAKKyAgICAgICAgLSBBIGNvbnN0cmFpbnQgY2FuIGNyZWF0ZSBwYXJhbGxlbCB3b3JrIGZvciBp
dHNlbGYsIHdoaWNoIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGludGVybGVhdmUKKyAgICAg
ICAgICB3aXRoIG90aGVyIHN0dWZmLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9ydCB0aGF0IGl0IGhh
cyBwYXJhbGxlbCB3b3JrIGJ5IHJldHVybmluZworICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlvbi4gVGhlbiB0aGUg
c29sdmVyIHdpbGwgYWxsb3cgdGhhdAorICAgICAgICAgIGNvbnN0cmFpbnQncyBkb1BhcmFsbGVs
V29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJrZXIgdGhyZWFkcyBh
cyBhcmUgYXZhaWxhYmxlLAorICAgICAgICAgIGZvciBhcyBsb25nIGFzIHRoYXQgZnVuY3Rpb24g
d2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9zc2libGUgdG8gaGF2
ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBhcmFsbGVsIHdvcmsu
CisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVtZW50ZWQgaW4gdGVy
bXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1cm5zIG91dCB0byBi
ZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAgICAgICAKKyAgICAg
ICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEgU2xvdFZpc2l0b3Iu
IFJ1bm5pbmcgb24gdGhlIG1hcmtlciB0aHJlYWRzIG1lYW5zIGhhdmluZworICAgICAgICAgIGFj
Y2VzcyB0byB0aG9zZSB0aHJlYWRzJyBTbG90VmlzaXRvcnMuIEFsc28sIGl0IG1lYW5zIGxlc3Mg
bG9hZCBiYWxhbmNpbmcuIFRoZSBzb2x2ZXIgd2lsbAorICAgICAgICAgIGNyZWF0ZSB3b3JrIG9u
IGVhY2ggbWFya2luZyB0aHJlYWQncyBTbG90VmlzaXRvci4gV2hlbiB0aGUgc29sdmVyIGlzIGRv
bmUgInN0ZWFsaW5nIiBhIG1hcmtlcgorICAgICAgICAgIHRocmVhZCwgdGhhdCB0aHJlYWQgd2ls
bCBoYXZlIHdvcmsgaXQgY2FuIHN0YXJ0IGRvaW5nIGltbWVkaWF0ZWx5LiBCZWZvcmUgdGhpcyBj
aGFuZ2UsIHdlIGhhZCB0bworICAgICAgICAgIGNvbnRyaWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkg
dGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9iYWwgd29ya2xpc3Qgc28gdGhhdCBpdCBj
b3VsZCBiZQorICAgICAgICAgIGRpc3RyaWJ1dGVkIHRvIHRoZSBtYXJrZXIgdGhyZWFkcyBieSBs
b2FkIGJhbGFuY2luZy4gVGhpcyBjaGFuZ2UgcHJvYmFibHkgaGVscHMgdG8gYXZvaWQgdGhhdAor
ICAgICAgICAgIGxvYWQgYmFsYW5jaW5nIHN0ZXAuCisgICAgICAgIAorICAgICAgICBBIGxvdCBv
ZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcgaXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEg
c3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcworICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0
IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFibGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0
cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQg
Y29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2VkIGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRo
aXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVs
IGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxsb2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMu
CisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJhbGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBv
dXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAg
ICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5l
eHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4uIGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20g
dGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9uZQorICAgICAgICB3aGVuIGl0IHJldHVybnMg
YSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3
YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAgICBkb25lIGlzIGluZGljYXRlZCBieSBudWxs
KS4KKyAgICAgICAgCisgICAgICAgIERldGFpbGVkIGFuYWx5c2lzIG9mIHRoZSBwZXJmb3JtYW5j
ZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBpbmRpY2F0ZSBhIGRlZmluaXRlIDElIFNwZWVkb21l
dGVyCisgICAgICAgIHByb2dyZXNzaW9uIGFuZCBubyBjaGFuZ2Ugb24gSmV0U3RyZWFtLiBJIGhh
dmUgZG9uZSB0aGUgU3BlZWRvbWV0ZXIgY29tcGFyaXNvbiBtYW55IHRpbWVzIG5vdyBhbmQKKyAg
ICAgICAgdGhlIHByb2dyZXNzaW9uIGlzIG5vdyBlYXNpbHkgcmVwcm9kdWNpYmxlIG9uIG15IG1h
Y2hpbmUuIEl0IHN0YXJ0ZWQgaW5pdGlhbGx5IGFzIGFuIHVucmVsaWFibGUKKyAgICAgICAgfjAu
NSUgc3BlZWQtdXAgb24gU3BlZWRvbWV0ZXIgYW5kIGEgcmVsaWFibGUgfjAuNSUgcmVncmVzc2lv
biBvbiBKZXRTdHJlYW0uIEFmdGVyIGZpeGluZyBsb3RzIG9mCisgICAgICAgIGJ1Z3MgaW4gdGhl
IGxvYWQgYmFsYW5jZXIgYW5kIHNvbWUgcmVhbGx5IGZ1bm55IHBhdGhvbG9naWVzLCB0aGUgSmV0
U3RyZWFtIHNjb3JlIGJlY2FtZSBuZXV0cmFsCisgICAgICAgIGFuZCB0aGUgU3BlZWRvbWV0ZXIg
c2NvcmUgZ290IGV2ZW4gYmV0dGVyLiAoV2VpcmRlc3QgcGF0aG9sb2d5IHRoYXQgSSBmaXhlZDog
aWYgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBzY2FuIGNvbnN0cmFpbnQgaXMgcnVuIGJ5IHNv
bWUgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIGFuZCB0aGUgbXV0YXRvciBoYXMgdGhl
IGNvbm4gW3NvCisgICAgICAgIHRoZSBtYWluIHRocmVhZCdzIHRvcCBmcmFtZXMgYXJlIHRoZSBH
QyBpdHNlbGZdIHRoZW4gd2Ugd2lsbCBzY2FuIHRoZSBtYWluIHRocmVhZCB0d2ljZSAtIG9uY2UK
KyAgICAgICAgdXNpbmcgQ3VycmVudFRocmVhZFN0YXRlIFt3aGljaCBjYXJlZnVsbHkgYXZvaWRz
IHNjYW5uaW5nIHRoZSBHQydzIHN0YWNrIGZyYW1lc10gYW5kIG9uY2UgYXMgaWYgaXQKKyAgICAg
ICAgd2FzIGEgcmFuZG9tIG5hdGl2ZSB0aHJlYWQgW3doaWNoIHdpbGwgc2NhbiB0aGUgR0MncyBm
cmFtZXNdOyB0aGUgbGF0dGVyIHNjYW4gd291bGQgcGljayB1cAorICAgICAgICBvYmplY3RzIHRo
YXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGhhZCBjb25zaWRlcmVkIGJ1dCByZWplY3RlZCwgd2hp
Y2ggd291bGQgc29tZXRpbWVzIGxlYWQgdG8KKyAgICAgICAgcnVuYXdheSBHQ3MuIEkgZml4ZWQg
dGhpcyBieSB0ZWFjaGluZyB0aGUgY29uc2VydmF0aXZlIHNjYW4gbm90IHRvIHNjYW4gdGhlIHRo
cmVhZCBydW5uaW5nIEdDCisgICAgICAgIHVzaW5nIHRoZSByYW5kb20gbmF0aXZlIHRocmVhZCBz
Y2FubmluZyBhbGdvcml0aG0uKQorCisgICAgICAgICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQp
OgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVl
VG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3Qu
Y3BwOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlKToKKyAgICAgICAgKiBoZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkZpeHBvaW50UGhhc2UpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
cmVzdW1lVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9y
RWFjaFNsb3RWaXNpdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d29ybGRJc1J1bm5pbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpydW5GdW5jdGlvbkluUGFyYWxsZWwpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6d29ybGRJc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxs
b2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkKToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oOgorICAgICAgICAoSlNDOjps
b2NrRHVyaW5nTWFya2luZyk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJj
ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFwL01h
cmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFyayk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAg
ICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2
ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNCZWdp
bik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpuZXdBY3RpdmVXZWFrU2V0c0VuZCk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1
aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtF
c3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwp
OgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnQ6Omxhc3RFeGVjdXRlUGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6cGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OkV4ZWN1dGlvbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkVmlzaXRT
b21ldGhpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6c2hvdWxkVGltZU91dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkcmFp
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpkaWRFeGVjdXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUpOiBEZWxldGVkLgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
Lmg6CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVy
Z2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9u
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1
dGUpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDogQWRkZWQuCisg
ICAgICAgICogaGVhcC9PcGFxdWVSb290U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9Q
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBhcmFsbGVsU291
cmNlQWRhcHRlcjo6UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50
OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdD
b25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpT
aW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9E
YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZy
b21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBhcmFsbGVsUGFz
c2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZUlmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVl
Um9vdHNJZlByb2ZpdGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VPcGFxdWVSb290cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9T
dWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNv
dXJjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxv
Y2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1
YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL1Zpc2l0Q291bnRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpW
aXNpdENvdW50ZXI6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAqIGhlYXAvVmlzaXRpbmdU
aW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9XZWFrQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKToKKwogMjAxNy0xMS0zMCAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBV
c2UgSlNGaXhlZEFycmF5IGZvciBvcF9uZXdfYXJyYXlfYnVmZmVyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMCwxMyArNTAwLDE2IEBAIGhlYXAv
SklUU3R1YlJvdXRpbmVTZXQuY3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCitoZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCiBoZWFwL01hcmtl
ZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAoraGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0yOTEsNiArMjkwLDcgQEAKIAkJ
MEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8q
IEFpck9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNDBFNEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzM0MUM0
NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBOTFDNDk3Rjc0MDBBNTc3RkEg
LyogQWlyT3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDE1NDVC
MUZEMjBCMjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDE1NDVBMUZEMjBCMUYwMDFCNThG
NiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAx
MzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTMxMiw2ICszMTIsOSBAQAogCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyog
U3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYy
MDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07CisJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAq
LzsgfTsKKwkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhD
NzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEQ4Qzc4MUZDQTNDRkEw
MDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlv
dXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi87IH07
CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTQsNiArMzU3LDcgQEAKIAkJMEY2
Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8q
IEFycmF5UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
OyB9OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IH07CisJCTBGNjQ1MzE4MUZEMjQ2QTcwMDI0
MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NDUzMTUxRkQyNDZBMDAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi87IH07CiAJCTBGNjRCMjcyMUE3ODRCQUYwMDZF
NEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY0QjI3
QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIg
LyogQWlyQXJnSW5saW5lcy5oICovOyB9OwpAQCAtNDQ2LDYgKzQ1MCw4IEBACiAJCTBGOUQzNjk1
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBE
RkdDbGVhblVwUGhhc2UuaCAqLzsgfTsKIAkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovOyB9OwogCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuaCAqLzsgfTsKKwkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAq
LzsgfTsKKwkJMEY5REFBMEExRkQxQzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFB
MDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovOyB9OwogCQkw
RjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyB9
OwogCQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgfTsKIAkJMEY5RkM4QzUx
NEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0OTks
NyArMTUwNSw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1NEQ1
MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVCRjcz
OCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5NzAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21O
YW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFFMDhG
MURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlu
a0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclBy
b3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xOTgxLDcgKzE5ODYsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIw
MEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUx
NzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxh
bklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5l
cy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjM0LDYgKzIyMzgsNyBAQAogCQkwRjNCRDFC
NjFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZH
SW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzFGMTgx
Qjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgcGF0aCA9
IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBw
YXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDE1NDVBMUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludENvbmN1cnJlbmN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
bHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI3MCw2ICsyMjc1LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAv
KiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJT
YW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5E
dW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5NzMwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzczMUZD
N0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1
NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRE
NzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDEsNiArMjM1MCw4IEBACiAJCTBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJyYXlNb2RlLmNw
cDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0Fy
cmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY0NTMxNTFGRDI0NkEw
MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlTd2l0Y2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRj
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwMyw2ICsyNTE0
LDkgQEAKIAkJMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQuaDsg
cGF0aCA9IGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5jcHA7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBGMUMzRTJD
NzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgcGF0
aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURB
QTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
cmFsbGVsU291cmNlQWRhcHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlF
MzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00MjY3LDcgKzQyODEsNiBAQAogCQlBREQwOUFGMzFGNjI0ODJF
MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAv
KiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5MzFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NDFFMDhGMUM5MDA1
OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmg7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk1MUUw
OEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0
b3IuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MTcsNiArNTUzMCw4IEBACiAJCQkJMEZEQ0UxMjgx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEy
RUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYy
MTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNDE1NDVB
MUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLywKKwkJCQkwRjRE
OEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJ
MEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJ
CQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2
RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjExLDE3ICs1NjI2LDIz
IEBACiAJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
Ki8sCiAJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcCAqLywKIAkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnRTZXQuaCAqLywKKwkJCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwICovLAorCQkJCTBGOURBQTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJr
U3RhY2suaCAqLywKKwkJCQkwRjY0NTMxNjFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAvKiBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3
QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJG
RCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oICovLAorCQkJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLywKIAkJCQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyog
UHJldmVudENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIw
OCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8q
IFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4
MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYw
MDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMy
QiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTU2NDMsNyArNTY2NCw3IEBACiAJCQkJ
MEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxv
b21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRp
b25hbEZpbmFsaXplci5oICovLAotCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNp
dGluZ1RpbWVvdXQuaCAqLywKKwkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgw
MDAsNiArODAyMSw3IEBACiAJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNp
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUNGOTg5MUU5RUQ2NTIwMEMxODY5MiAvKiBBaXJT
dGFja0FsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDE1NDVCMUZEMjBC
MjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MjAwLDYgKzgyMjIsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcw
MDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEz
QkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIz
RUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJy
aWVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q2FsbERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODI5Myw2ICs4MzE2LDcgQEAKIAkJCQlBNzdB
NDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY0NTMxODFGRDI0
NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg3NjgsNiArODc5Miw3IEBACiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8q
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtODkxNiw2ICs4OTQxLDcgQEAKIAkJCQlBNzQ4MkU5MzEx
NkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQz
MkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVD
NjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4
NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVy
cyAqLywKQEAgLTkwMzUsOSArOTA2MSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZG
IC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNB
M0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVS
b290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyog
T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0Myw2ICs5MjY5LDcgQEAK
IAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEExRkQxQzNE
MzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjgzLDcgKzkzMTAsNiBAQAogCQkJCTBGNkM3MzUxMUFD
OUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGlt
ZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYw
IC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyog
Vk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Miw3ICs5NzIsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRX
ZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQg
PSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAg
IGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNo
b3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGlj
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAogCiBib29sIENvZGVCbG9jazo6c2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewotICAg
IGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTExMzks
MTAgKzExMzksMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwog
I2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRp
b24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4g
JiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJh
bnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwpAQCAt
MTI0NiwxNCArMTI0NiwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5j
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8
Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGFs
bEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29t
bW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVS
ZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChk
ZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewogICAgICAgICAg
ICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3Bs
YW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93biBy
aWdodFRvUnVuLgotICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcGVk
IGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJlYWQo
Jm1fZGF0YSk7CiAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxlZCkg
ewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAu
d29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3Rv
cHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBs
YW5zLmFwcGVuZChtX3BsYW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFwLndv
cmxkSXNTdG9wcGVkKCkpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3BsYW5Db21waWxlZC5u
b3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAo
c2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgu
bV92bS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwogICAgIAogICAgIGlmIChzdGF0ZS5hbGxvY2F0
aW9uRmFpbGVkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDEyICs2NiwxMiBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+Ci1pbmxpbmUgdm9pZCBDb25zZXJ2YXRp
dmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIodm9pZCogcCwgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKK2lubGlu
ZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgbWFy
a0hvb2subWFyayhwKTsKIAogICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2ludGVyc0Zvck1h
cmtpbmcoCi0gICAgICAgIG1faGVhcCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwgcCwKKyAgICAg
ICAgbV9oZWFwLCBtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBmaWx0ZXIs
IHAsCiAgICAgICAgIFsmXSAodm9pZCogcCkgewogICAgICAgICAgICAgaWYgKG1fc2l6ZSA9PSBt
X2NhcGFjaXR5KQogICAgICAgICAgICAgICAgIGdyb3coKTsKQEAgLTk1LDggKzk1LDkgQEAgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogCiAgICAgVGlueUJsb29tRmls
dGVyIGZpbHRlciA9IG1faGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigpOyAvLyBN
YWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8gc2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3Qg
YWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxsb2NhdGVkLgogICAgIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uID0gbV9oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKTsKKyAg
ICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBtX2hlYXAub2JqZWN0U3BhY2Uo
KS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICBmb3IgKGNoYXIqKiBpdCA9IHN0YXRpY19j
YXN0PGNoYXIqKj4oYmVnaW4pOyBpdCAhPSBzdGF0aWNfY2FzdDxjaGFyKio+KGVuZCk7ICsraXQp
Ci0gICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwg
bWFya0hvb2spOworICAgICAgICBnZW5lcmljQWRkUG9pbnRlcigqaXQsIG1hcmtpbmdWZXJzaW9u
LCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGZpbHRlciwgbWFya0hvb2spOwogfQogCiBjbGFzcyBE
dW1teU1hcmtIb29rIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+Ci0gICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgSGVhcFZlcnNpb24s
IFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKKyAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVy
KHZvaWQqLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29rJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXJrSG9vaz4KICAgICB2b2lkIGdlbmVyaWNBZGRTcGFuKHZvaWQqLCB2b2lk
KiBlbmQsIE1hcmtIb29rJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
dHJhaW50Q29uY3VycmVuY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3Ry
YWludENvbmN1cnJlbmN5IDogdWludDhfdCB7CisgICAgU2VxdWVudGlhbCwKKyAgICBDb25jdXJy
ZW50Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitp
bmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWlu
dENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQoreworICAgIHN3aXRjaCAoY29uY3VycmVuY3kpIHsK
KyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsOgorICAgICAg
ICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlND
OjpDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQ6CisgICAgICAgIG91dC5wcmludCgi
Q29uY3VycmVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxs
ZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7CisgICAg
U2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAgICBz
d2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDoK
KyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVu
dGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSwxMiArMjA5LDExIEBAIGlubGluZSBjb25zdCBUIEdDU2VnbWVudGVkQXJyYXk8VD46OnJlbW8K
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogaW5saW5lIGJvb2wgR0NTZWdtZW50ZWRBcnJheTxUPjo6
aXNFbXB0eSgpCiB7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIGJlIHNhZmUgdG8gY2FsbCBjb25j
dXJyZW50bHkuIEl0J3MgaW1wb3J0YW50IHRvIHByZXNlcnZlIHRoYXQgY2FwYWJpbGl0eS4KICAg
ICBpZiAobV90b3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9zZWdtZW50cy5o
ZWFkKCktPm5leHQoKSkgewotICAgICAgICBBU1NFUlQobV9zZWdtZW50cy5oZWFkKCktPm5leHQo
KS0+bV90b3AgPT0gc19zZWdtZW50Q2FwYWNpdHkpOworICAgIGlmIChtX3NlZ21lbnRzLmhlYWQo
KS0+bmV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTWFjaGlu
ZVN0YWNrTWFya2VyLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIK
ICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkU3Bh
Y2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKQEAgLTY2LDYg
KzY3LDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtl
ZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgi
CiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjgxLDcgKzI4Myw3IEBAIEhlYXA6OkhlYXAoVk0qIHZt
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFr
ZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0
YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJr
U3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3Ry
YWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwg
bV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0
aGlzKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFr
ZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjpt
YWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTU5NCw3ICs1OTYsNyBAQCB2b2lk
IEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDCiAgICAgICAgIGZ1bmMoY29kZUJs
b2NrKTsKIH0KIAotdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQordm9p
ZCBIZWFwOjphc3NlcnRNYXJrU3RhY2tzRW1wdHkoKQogewogICAgIGJvb2wgb2sgPSB0cnVlOwog
ICAgIApAQCAtNjA4LDEyICs2MTAsMjEgQEAgdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3Rh
Y2tzRW1wdHkoKQogICAgICAgICBvayA9IGZhbHNlOwogICAgIH0KICAgICAKKyAgICBmb3JFYWNo
U2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBWaXNpdG9yICIsIFJhd1Bv
aW50ZXIoJnZpc2l0b3IpLCAiIGlzIG5vdCBlbXB0eSFcbiIpOworICAgICAgICAgICAgb2sgPSBm
YWxzZTsKKyAgICAgICAgfSk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQob2spOwogfQogCiB2
b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewot
ICAgIG1fbWFjaGluZVRocmVhZHMtPmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9q
aXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MsIG1fY3VycmVudFRocmVhZFN0YXRlKTsKKyAg
ICBtX21hY2hpbmVUaHJlYWRzLT5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0
U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzLCBtX2N1cnJlbnRUaHJlYWRTdGF0ZSwgbV9jdXJy
ZW50VGhyZWFkKTsKIH0KIAogdm9pZCBIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0
aXZlUm9vdHMmIHJvb3RzKQpAQCAtNzMwLDcgKzc0MSw3IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2lu
ZygpCiAgICAgICAgICAgICB2aXNpdG9yLnJlc2V0KCk7CiAgICAgICAgIH0pOwogCi0gICAgYXNz
ZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CisgICAgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7
CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKQEAgLTkxMSw3ICs5MjIsNyBA
QCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVy
c0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8v
IER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0
IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxs
IG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmplY3Qu
IElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBh
ZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0
LDE1ICs5MzUsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQog
ICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAg
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMg
b3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBp
c01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2Ug
ZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1h
cmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nh
bm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21p
Y0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUg
b2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAgICAg
ICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRo
aXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtlZENv
bmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAgICAg
ICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAgIC8v
IGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAgICAg
ICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlm
ZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBi
bGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sg
Y29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShD
ZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk1OSw3IEBAIHZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8v
IEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0
ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3Mg
T0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ug
d2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0x
MDkxLDYgKzExMDIsNyBAQCBhdXRvIEhlYXA6OnJ1bkN1cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciBj
CiB7CiAgICAgY2hlY2tDb25uKGNvbm4pOwogICAgIG1fY3VycmVudFRocmVhZFN0YXRlID0gY3Vy
cmVudFRocmVhZFN0YXRlOworICAgIG1fY3VycmVudFRocmVhZCA9ICZXVEY6OlRocmVhZDo6Y3Vy
cmVudCgpOwogICAgIAogICAgIGlmIChjb25uID09IEdDQ29uZHVjdG9yOjpNdXRhdG9yKQogICAg
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0oKSk7CkBAIC0xMjgzLDEzICsxMjk1LDExIEBAIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICB9CiAgICAgICAgIAog
ICAgIGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgbV9v
cGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAgICAgCiAgICAgICAgIG1fc2NoZWR1
bGVyLT5kaWRSZWFjaFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgYXNzZXJ0
U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0
b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRv
ciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3It
Pm1lcmdlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgCisgICAgICAgIGFzc2VydE1hcmtTdGFja3NF
bXB0eSgpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRvckRp
ZFJ1biBpbnRvIGFjY291bnQgd2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxpa2Vs
eSwKICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIHJvb3QgY29uc3RyYWludHMg
YWdhaW4gdW5sZXNzIHRoZSBtdXRhdG9yIGRpZCBydW4uIEF0IGEKQEAgLTEyOTcsMTcgKzEzMDcs
MTQgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAv
LyBlc3RpbWF0ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjgyOAogICAgICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZCB0aW1lb3V0LiBUaGlzIG9u
bHkgY29tZXMKLSAgICAgICAgLy8gaW50byBwbGF5IGlmIHdlJ3JlIGV4ZWN1dGluZyBjb25zdHJh
aW50cyBmb3IgdGhlIGZpcnN0IHRpbWUuIEJ1dCB0aGF0IHdpbGwgbWF0dGVyCi0gICAgICAgIC8v
IHdoZW4gd2UgaGF2ZSBkZWVwIHN0YWNrcyBvciBhIGxvdCBvZiBET00gc3R1ZmYuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzEKLSAgICAg
ICAgICAgIAogICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAg
ICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCku
Ci0gICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+
ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKKyAgICAgICAgYm9vbCBjb252ZXJnZWQgPSBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252
ZXJnZW5jZShzbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlIHNs
b3RWaXNpdG9yLmlzRW1wdHkoKSBjaGVjayBpcyBtb3N0IGxpa2VseSBub3QgbmVlZGVkLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzEwCiAg
ICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgIGFzc2VydE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzMjQsNiAr
MTMzMSwxNSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAg
ICAgIAogICAgIG1fc2NoZWR1bGVyLT5zeW5jaHJvbm91c0RyYWluaW5nRGlkU3RhbGwoKTsKIAor
ICAgIC8vIFRoaXMgaXMga2luZGEgdHJpY2t5LiBUaGUgdGVybWluYXRpb24gY2hlY2sgbG9va3Mg
YXQ6CisgICAgLy8KKyAgICAvLyAtIFdoZXRoZXIgdGhlIG1hcmtpbmcgdGhyZWFkcyBhcmUgYWN0
aXZlLiBJZiB0aGV5IGFyZSBub3QsIHRoaXMgbWVhbnMgdGhhdCB0aGUgbWFya2luZyB0aHJlYWRz
JworICAgIC8vICAgU2xvdFZpc2l0b3JzIGFyZSBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IGNvbGxlY3RvcidzIHNsb3QgdmlzaXRvciBpcyBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IHNoYXJlZCBtYXJrIHN0YWNrcyBhcmUgZW1wdHkuCisgICAgLy8KKyAgICAvLyBUaGlzIGRvZXNu
J3QgaGF2ZSB0byBjaGVjayB0aGUgbXV0YXRvciBTbG90VmlzaXRvciBiZWNhdXNlIHRoYXQgb25l
IGJlY29tZXMgZW1wdHkgYWZ0ZXIgZXZlcnkgR0MKKyAgICAvLyB3b3JrIGluY3JlbWVudCwgc28g
aXQgbXVzdCBiZSBlbXB0eSBub3cuCiAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWlu
YXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxvb3Bpbmcg
dG8gdGhlIHRvcCBpZiBydW5GaXhwb2ludFBoYXNlKCkuCiAgICAgICAgIApAQCAtMTQ4OSw2ICsx
NTA1LDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogICAgIGlm
IChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhjb25uLCAiOiBHb2luZyB0byBwaGFzZTogIiwgbV9u
ZXh0UGhhc2UsICIgKGZyb20gIiwgbV9jdXJyZW50UGhhc2UsICIpXG4iKTsKICAgICAKKyAgICBt
X3BoYXNlVmVyc2lvbisrOworICAgIAogICAgIGJvb2wgc3VzcGVuZGVkQmVmb3JlID0gd29ybGRT
aG91bGRCZVN1c3BlbmRlZChtX2N1cnJlbnRQaGFzZSk7CiAgICAgYm9vbCBzdXNwZW5kZWRBZnRl
ciA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQobV9uZXh0UGhhc2UpOwogICAgIApAQCAtMTUyNiw3
ICsxNTQ0LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogCiB2
b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgY29ubikKIHsKLSAgICBpZiAo
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmIChtX3dv
cmxkSXNTdG9wcGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiB3b3JsZCBhbHJlYWR5IHN0
b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0xNTM3LDcgKzE1NTUsNyBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25k
dWN0b3IgCiAgICAgbV9tdXRhdG9yRGlkUnVuID0gZmFsc2U7CiAKICAgICBzdXNwZW5kQ29tcGls
ZXJUaHJlYWRzKCk7Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCA9IHRydWU7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IHRydWU7CiAKICAgICBmb3JFYWNoU2xv
dFZpc2l0b3IoCiAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CkBAIC0x
NTc0LDExICsxNTkyLDExIEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OnJlc3VtZVRoZVBlcmlw
aGUKICAgICAKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAwOwogICAgIAotICAgIGlmICghbV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmICghbV93b3Js
ZElzU3RvcHBlZCkgewogICAgICAgICBkYXRhTG9nKCJGYXRhbDogY29sbGVjdG9yIGRvZXMgbm90
IGJlbGlldmUgdGhhdCB0aGUgd29ybGQgaXMgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IGZhbHNl
OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZDogd2Ug
d2FudCB0byBncmFiIHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQogICAgIC8v
IGJlY29tZSBhdmFpbGFibGUuIFdlIGJhc2ljYWxseSB3YW50IGEgbG9ja0FueSgpIG1ldGhvZCB0
aGF0IHdpbGwgbG9jayB3aGF0ZXZlciBsb2NrIGlzIGF2YWlsYWJsZQpAQCAtMjU3OCw3ICsyNTk2
LDExIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDAp
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKKyAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNl
VGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAg
ICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAt
MjU4NywxMiArMjYwOSwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
ICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNpb247CiAgICAgICAgIH0sCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsyNjM3
LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAg
ICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
ICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjYy
MSw3ICsyNjQ1LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwpA
QCAtMjY0MSwyMSArMjY2NSwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIg
Um91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVjdFNw
YWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwK
LSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
ICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xv
dFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjg4LDcgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAgICAg
ICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJl
bmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2ODQsNyArMjcwOCw3IEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAogICAgICAg
ICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdzIGJs
YWNrLgpAQCAtMjY5NSwyMyArMjcxOSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXll
ZCk7CiAgICAgCi0gICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCi0gICAgICAgICJNcm1zIiwgIk11
dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKLSAgICAgICAgICAgIC8vIEluZGlj
YXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKLSAgICAgICAgICAg
IHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3Rh
Y2stPnNpemUoKTsKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXpl
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiKCIsIHNpemUsICIpIik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOwotICAgICAgICAgICAgbV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHNs
b3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewotICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludD4oKnRoaXMpKTsKIH0KIAogdm9pZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQpCkBAIC0yNzk0LDE2
ICsyODAyLDYgQEAgdm9pZCBIZWFwOjphbGxvd0NvbGxlY3Rpb24oKQogICAgIG1fY29sbGVjdENv
bnRpbnVvdXNseUxvY2sudW5sb2NrKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgZnVu
YygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0
b3IpOwotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TXV0YXRv
clNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5j
ZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCArMjg0NSwyNCBAQCB2b2lkIEhlYXA6OnJlbW92ZUhlYXBG
aW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJlbW92ZUZp
cnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBIZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgbV9ib251c1Zpc2l0b3JUYXNrID0g
dGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwor
dm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiB0YXNrKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxSZWZDb3VudCA9IHRhc2st
PnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5y
dW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVs
bHB0cik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011
dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2stPnJlZkNvdW50KCkgPiBpbml0aWFsUmVmQ291bnQp
CisgICAgICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KG1fbWFya2luZ011
dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi
V2Vha0hhbmRsZU93bmVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgog
I2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNzMsNiArNzQsNyBA
QCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFj
aGluZVRocmVhZHM7CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKK2NsYXNzIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogY2xhc3MgTWFya2VkQXJndW1l
bnRCdWZmZXI7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKQEAgLTExNCw3ICsxMTYsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9
IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRp
YyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAg
c3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xNTQsNyArMTU1LDggQEAg
cHVibGljOgogICAgIE11dGF0b3JTdGF0ZSBtdXRhdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X211dGF0b3JTdGF0ZTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBjb2xs
ZWN0aW9uU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3Rpb25TY29wZTsgfQogICAgIGJv
b2wgaGFzSGVhcEFjY2VzcygpIGNvbnN0OwotICAgIGJvb2wgY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNTdG9wcGVkKCkgY29u
c3Q7CisgICAgYm9vbCB3b3JsZElzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuICF3b3JsZElzU3Rv
cHBlZCgpOyB9CiAKICAgICAvLyBXZSdyZSBhbHdheXMgYnVzeSBvbiB0aGUgY29sbGVjdGlvbiB0
aHJlYWRzLiBPbiB0aGUgbWFpbiB0aHJlYWQsIHRoaXMgcmV0dXJucyB0cnVlIGlmIHdlJ3JlCiAg
ICAgLy8gaGVscGluZyBoZWFwLgpAQCAtMzQ5LDYgKzM1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFsbG93Q29sbGVjdGlvbigpOwogICAgIAogICAgIHVpbnQ2NF90IG11dGF0b3JFeGVjdXRpb25W
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbjsgfQorICAg
IHVpbnQ2NF90IHBoYXNlVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2VWZXJzaW9uOyB9
CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTM1OCw2ICszNjEs
MTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNv
bnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQgcmVtb3ZlSGVhcEZpbmFsaXpl
ckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOworICAgIAorICAgIHZvaWQg
cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4p
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBydW5GdW5jdGlv
bkluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHJ1blRhc2tJblBh
cmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPihmdW5jKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRp
bmdTY29wZTsKQEAgLTM3Myw2ICszODcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBI
ZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9j
azsKQEAgLTUyNSw4ICs1NDAsMTAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB2b2lkIGFzc2VydFNoYXJl
ZE1hcmtTdGFja3NFbXB0eSgpOworICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAK
KyAgICB2b2lkIHNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4pOworICAgIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAg
Y29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5
Y2xlOwpAQCAtNTc5LDkgKzU5Niw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFNsb3RWaXNpdG9y
Kj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9yczsKICAgICBMb2NrIG1fcGFyYWxsZWxT
bG90VmlzaXRvckxvY2s7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJik7Ci0KICAgICBIYW5kbGVTZXQgbV9o
YW5kbGVTZXQ7CiAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUJsb2NrU2V0PiBtX2NvZGVCbG9ja3M7CkBAIC02MzMsOCArNjQ3LDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAg
fTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CiAKLSAg
ICBMb2NrIG1fb3BhcXVlUm9vdHNNdXRleDsKLSAgICBIYXNoU2V0PGNvbnN0IHZvaWQqPiBtX29w
YXF1ZVJvb3RzOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdHM7CiAKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCkBAIC02
NDIsNiArNjU1LDcgQEAgcHJpdmF0ZToKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25h
bEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKIAogICAgIFBhcmFs
bGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+IG1fYm9udXNWaXNpdG9yVGFzazsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2NhdGVkIHsgMCB9OwpAQCAt
NjU3LDcgKzY3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5lZWRG
aW5hbGl6ZUJpdCA9IDF1IDw8IDR1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9y
V2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMg
YXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3Rh
dGU7Ci0gICAgYm9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fd29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIE1vbm90
b25pY1RpbWUgbV9iZWZvcmVHQzsKICAgICBNb25vdG9uaWNUaW1lIG1fYWZ0ZXJHQzsKICAgICBN
b25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CkBAIC02NzIsNiArNjg2LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fdGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JE
aWRSdW4geyB0cnVlIH07CiAgICAgdWludDY0X3QgbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbiB7
IDAgfTsKKyAgICB1aW50NjRfdCBtX3BoYXNlVmVyc2lvbiB7IDAgfTsKICAgICBCb3g8TG9jaz4g
bV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fdGhy
ZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3YWl0IG9uIHRoaXMuIEl0IHdv
dWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJl
YWQ7CkBAIC02OTMsNiArNzA4LDcgQEAgcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9iYXJyaWVy
c0V4ZWN1dGVkIHsgMCB9OwogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50
VGhyZWFkU3RhdGUgeyBudWxscHRyIH07CisgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVh
ZCB7IG51bGxwdHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2lu
dGVyLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDMwICs2Mywy
MCBAQCBpbmxpbmUgYm9vbCBIZWFwOjpoYXNIZWFwQWNjZXNzKCkgY29uc3QKICAgICByZXR1cm4g
bV93b3JsZFN0YXRlLmxvYWQoKSAmIGhhc0FjY2Vzc0JpdDsKIH0KIAotaW5saW5lIGJvb2wgSGVh
cDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdAoraW5saW5l
IGJvb2wgSGVhcDo6d29ybGRJc1N0b3BwZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOworICAgIHJldHVybiBtX3dvcmxkSXNT
dG9wcGVkOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gaW5zdGFuY2UgbWV0aG9k
LCBzbyB0aGF0IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJzaW9uKCkgcXVpY2tseS4KKy8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5ODgKIEFMV0FZU19JTkxJ
TkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFTU0VS
VChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwt
PmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRp
b24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJs
b2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgpLT5o
ZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdDZWxs
KQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2Vs
bCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBj
ZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBibG9j
ayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29uY3Vy
cmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1Zl
cnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCktPmhl
YXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlTX0lO
TElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkBAIC05NSw3ICs4NSw3IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBIZWFwOjp0ZXN0QW5kU2V0TWFya2UKICAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRp
b24oKSkKICAgICAgICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLnRlc3RBbmRTZXRN
YXJrZWQoKTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwot
ICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeSA9IGJsb2NrLmFib3V0VG9NYXJrKG1hcmtpbmdWZXJz
aW9uKTsKKyAgICBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSA9IGJsb2NrLmFib3V0VG9NYXJr
KG1hcmtpbmdWZXJzaW9uKTsKICAgICByZXR1cm4gYmxvY2sudGVzdEFuZFNldE1hcmtlZChjZWxs
LCBkZXBlbmRlbmN5KTsKIH0KIApAQCAtMTc5LDE5ICsxNjksMTkgQEAgaW5saW5lIHZvaWQgSGVh
cDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPAogCiBpbmxpbmUgdm9pZCBIZWFwOjppbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0K
IAogaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNT
RVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBl
ZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OmRlY3Jl
bWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NU
aHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2Rl
ZmVycmFsRGVwdGgtLTsKICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9kaWREZWZlckdDV29yaykp
IHsKQEAgLTI2OSw0ICsyNTksMTQgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5
KCkKICAgICAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgordm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykK
K3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2sp
OworICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIGZ1bmMoKm1fbXV0YXRv
clNsb3RWaXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNs
b3RWaXNpdG9ycykKKyAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1
aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBT
bmFwc2hvdEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNyBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3QoCiB2b2lk
IEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQogewogICAgIEFT
U0VSVChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOwotICAgIEFT
U0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6
OmlzTWFya2VkKGNlbGwpKTsKIAogICAgIGlmIChoYXNFeGlzdGluZ05vZGVGb3JDZWxsKGNlbGwp
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
VXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGls
LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBV
dGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAgcHVibGljOgogICAgIC8vIGJl
Zm9yZSBsaXZlbmVzcyBkYXRhIGlzIGNsZWFyZWQgdG8gYmUgYWNjdXJhdGUuCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KICAgICBzdGF0aWMgdm9pZCBmaW5kR0NPYmplY3RQb2ludGVyc0Zv
ck1hcmtpbmcoCi0gICAgICAgIEhlYXAmIGhlYXAsIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
LCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCB2b2lkKiBwYXNzZWRQb2ludGVyLAotICAgICAgICBj
b25zdCBGdW5jJiBmdW5jKQorICAgICAgICBIZWFwJiBoZWFwLCBIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0
ZXIgZmlsdGVyLAorICAgICAgICB2b2lkKiBwYXNzZWRQb2ludGVyLCBjb25zdCBGdW5jJiBmdW5j
KQogICAgIHsKICAgICAgICAgY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JiBzZXQgPSBoZWFw
Lm9iamVjdFNwYWNlKCkuYmxvY2tzKCkuc2V0KCk7CiAgICAgICAgIApAQCAtODgsNyArODgsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgJiYgc2V0LmNvbnRhaW5zKHByZXZpb3VzQ2FuZGlk
YXRlKQogICAgICAgICAgICAgICAgICYmIHByZXZpb3VzQ2FuZGlkYXRlLT5oYW5kbGUoKS5jZWxs
S2luZCgpID09IEhlYXBDZWxsOjpBdXhpbGlhcnkpIHsKICAgICAgICAgICAgICAgICBwcmV2aW91
c1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocHJldmlvdXNDYW5kaWRhdGUtPmhhbmRsZSgp
LmNlbGxBbGlnbihwcmV2aW91c1BvaW50ZXIpKTsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlv
dXNDYW5kaWRhdGUtPmhhbmRsZSgpLmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIGlzTWFya2lu
ZywgcHJldmlvdXNQb2ludGVyKSkKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNDYW5kaWRh
dGUtPmhhbmRsZSgpLmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbiwgaXNNYXJraW5nLCBwcmV2aW91c1BvaW50ZXIpKQogICAgICAgICAgICAgICAgICAgICBm
dW5jKHByZXZpb3VzUG9pbnRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwMiw3
ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAg
ICBhdXRvIHRyeVBvaW50ZXIgPSBbJl0gKHZvaWQqIHBvaW50ZXIpIHsKLSAgICAgICAgICAgIGlm
IChjYW5kaWRhdGUtPmhhbmRsZSgpLmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIGlzTWFya2lu
ZywgcG9pbnRlcikpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5oYW5kbGUoKS5pc0xpdmVD
ZWxsKG1hcmtpbmdWZXJzaW9uLCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGlzTWFya2luZywgcG9p
bnRlcikpCiAgICAgICAgICAgICAgICAgZnVuYyhwb2ludGVyKTsKICAgICAgICAgfTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc05ld2x5QWxsb2NhdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc05ld2x5QWxsb2NhdGVkOyB9
CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzTWFya2VkKEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQotICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFy
a2VkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVh
cFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3lGZW5jZSkgeyByZXR1cm4g
aXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lv
biwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7
IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxvY2F0ZWQoKTsgfQogICAgIAogICAgIGJv
b2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZENlbGw7IH0KQEAgLTEx
MCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRl
cyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgIAotICAg
IERlcGVuZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24pIHsgcmV0dXJuIG51bGxEZXBlbmRl
bmN5KCk7IH0KKyAgICBEZXBlbmRlbmN5RmVuY2UgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24pIHsg
cmV0dXJuIERlcGVuZGVuY3lGZW5jZSgpOyB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBib29s
IHRlc3RBbmRTZXRNYXJrZWQoKQogICAgIHsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIG1faXNNYXJrZWQuY29tcGFy
ZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKICAgICB9Ci0gICAgQUxXQVlTX0lOTElORSBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcENlbGwqLCBEZXBlbmRlbmN5KSB7IHJldHVybiB0ZXN0
QW5kU2V0TWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdGVzdEFuZFNldE1hcmtl
ZChIZWFwQ2VsbCosIERlcGVuZGVuY3lGZW5jZSkgeyByZXR1cm4gdGVzdEFuZFNldE1hcmtlZCgp
OyB9CiAgICAgdm9pZCBjbGVhck1hcmtlZCgpIHsgbV9pc01hcmtlZC5zdG9yZShmYWxzZSk7IH0K
ICAgICAKICAgICB2b2lkIG5vdGVNYXJrZWQoKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9ja0R1cmluZ01hcmtpbmcuaAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9ja0R1cmluZ01hcmtpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMywxNCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIFVzZSB0aGlzIGxvY2sgc2Nv
cGUgbGlrZSBzbzoKIC8vIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcoaGVhcCwgbG9j
ayk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLUxvY2tlcjxMb2NrVHlwZT4gbG9ja0R1
cmluZ01hcmtpbmcoSGVhcCYgaGVhcCwgTG9ja1R5cGUmIHBhc3NlZExvY2spCithdXRvIGxvY2tE
dXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNzZWRMb2NrKQogewotICAgIExv
Y2tUeXBlKiBsb2NrOwotICAgIGlmIChoZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpKQotICAg
ICAgICBsb2NrID0gJnBhc3NlZExvY2s7Ci0gICAgZWxzZQotICAgICAgICBsb2NrID0gbnVsbHB0
cjsKLSAgICByZXR1cm4gTG9ja2VyPExvY2tUeXBlPihsb2NrKTsKKyAgICByZXR1cm4gaG9sZExv
Y2tJZihwYXNzZWRMb2NrLCBoZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNSw3ICsxMzUsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRT
CiAgICAgKnNpemUgKz0gc3RhY2suc2Vjb25kOwogfQogCi1ib29sIE1hY2hpbmVUaHJlYWRzOjp0
cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgdm9p
ZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKK2Jvb2wgTWFjaGluZVRo
cmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplLCBUaHJlYWQm
IGN1cnJlbnRUaHJlYWRGb3JHQykKIHsKICAgICAvLyBQcmV2ZW50IHR3byBWTXMgZnJvbSBzdXNw
ZW5kaW5nIGVhY2ggb3RoZXIncyB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUsCiAgICAgLy8gd2hp
Y2ggY2FuIGNhdXNlIGRlYWRsb2NrOiA8cmRhcjovL3Byb2JsZW0vMjAzMDA4NDI+LgpAQCAtMTQ1
LDEzICsxNDUsMTQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkUwog
ICAgICpzaXplID0gMDsKIAogICAgIFRocmVhZCYgY3VycmVudFRocmVhZCA9IFRocmVhZDo6Y3Vy
cmVudCgpOwotICAgIGNvbnN0IGF1dG8mIHRocmVhZHMgPSBtX3RocmVhZEdyb3VwLT50aHJlYWRz
KGxvY2tlcik7CisgICAgY29uc3QgTGlzdEhhc2hTZXQ8UmVmPFRocmVhZD4+JiB0aHJlYWRzID0g
bV90aHJlYWRHcm91cC0+dGhyZWFkcyhsb2NrZXIpOwogICAgIEJpdFZlY3RvciBpc1N1c3BlbmRl
ZCh0aHJlYWRzLnNpemUoKSk7CiAKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsK
LSAgICAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiB0aHJlYWRzKSB7Ci0gICAgICAgICAgICBpZiAo
dGhyZWFkLmdldCgpICE9IGN1cnJlbnRUaHJlYWQpIHsKKyAgICAgICAgZm9yIChjb25zdCBSZWY8
VGhyZWFkPiYgdGhyZWFkIDogdGhyZWFkcykgeworICAgICAgICAgICAgaWYgKHRocmVhZC5nZXQo
KSAhPSBjdXJyZW50VGhyZWFkCisgICAgICAgICAgICAgICAgJiYgdGhyZWFkLmdldCgpICE9IGN1
cnJlbnRUaHJlYWRGb3JHQykgewogICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFk
LT5zdXNwZW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgICAg
ICAgICAgaXNTdXNwZW5kZWQuc2V0KGluZGV4KTsKQEAgLTE5OSw3ICsyMDAsNyBAQCBzdGF0aWMg
dm9pZCBncm93QnVmZmVyKHNpemVfdCBzaXplLCB2b2lkCiAgICAgKmJ1ZmZlciA9IGZhc3RNYWxs
b2MoKmNhcGFjaXR5KTsKIH0KIAotdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyQ29uc2VydmF0
aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91
dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MsIEN1cnJl
bnRUaHJlYWRTdGF0ZSogY3VycmVudFRocmVhZFN0YXRlKQordm9pZCBNYWNoaW5lVGhyZWFkczo6
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJv
b3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNv
ZGVCbG9ja3MsIEN1cnJlbnRUaHJlYWRTdGF0ZSogY3VycmVudFRocmVhZFN0YXRlLCBUaHJlYWQq
IGN1cnJlbnRUaHJlYWQpCiB7CiAgICAgaWYgKGN1cnJlbnRUaHJlYWRTdGF0ZSkKICAgICAgICAg
Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoY29uc2VydmF0aXZlUm9vdHMsIGppdFN0dWJSb3V0aW5l
cywgY29kZUJsb2NrcywgKmN1cnJlbnRUaHJlYWRTdGF0ZSk7CkBAIC0yMDgsNyArMjA5LDcgQEAg
dm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyQ29uc2VydmF0aXZlUgogICAgIHNpemVfdCBjYXBh
Y2l0eSA9IDA7CiAgICAgdm9pZCogYnVmZmVyID0gbnVsbHB0cjsKICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fdGhyZWFkR3JvdXAtPmdldExvY2soKSk7Ci0gICAgd2hpbGUgKCF0cnlDb3B5
T3RoZXJUaHJlYWRTdGFja3MobG9ja2VyLCBidWZmZXIsIGNhcGFjaXR5LCAmc2l6ZSkpCisgICAg
d2hpbGUgKCF0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MobG9ja2VyLCBidWZmZXIsIGNhcGFjaXR5
LCAmc2l6ZSwgKmN1cnJlbnRUaHJlYWQpKQogICAgICAgICBncm93QnVmZmVyKHNpemUsICZidWZm
ZXIsICZjYXBhY2l0eSk7CiAKICAgICBpZiAoIWJ1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiBwdWJs
aWM6CiAgICAgTWFjaGluZVRocmVhZHMoKTsKIAotICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1Nl
dCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSopOworICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYs
IEN1cnJlbnRUaHJlYWRTdGF0ZSosIFRocmVhZCopOwogCiAgICAgLy8gT25seSBuZWVkcyB0byBi
ZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNhbiB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11bHRp
cGxlIHRocmVhZHMuCiAgICAgdm9pZCBhZGRDdXJyZW50VGhyZWFkKCkgeyBtX3RocmVhZEdyb3Vw
LT5hZGRDdXJyZW50VGhyZWFkKCk7IH0KQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJv
dXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmLCBDdXJyZW50VGhyZWFkU3RhdGUmKTsKIAogICAgIHZv
aWQgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2soVGhyZWFkJiwgdm9pZCosIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90Kik7Ci0gICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKKyAgICBib29s
IHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCosIFRocmVhZCYpOwogCiAgICAgc3RkOjpzaGFyZWRfcHRy
PFRocmVhZEdyb3VwPiBtX3RocmVhZEdyb3VwOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQorICAgIDogTWFya2lu
Z0NvbnN0cmFpbnQoIk1zbSIsICJNYXJrIFN0YWNrIE1lcmdpbmciLCBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlFeGVjdXRpb24pCisgICAgLCBtX2hlYXAoaGVhcCkKK3sKK30KKworTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6On5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpCit7
Cit9CisKK2RvdWJsZSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCkgKyBtX2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Cit9CisKK3ZvaWQgTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgLy8gTG9nZ2luZyB0aGUg
d29yayBoZXJlIGVuc3VyZXMgdGhhdCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBp
dCBkb2Vzbid0IG5lZWQgdG8gcHJvZHVjZQorICAgIC8vIGFueW1vcmUgd29yay4KKyAgICBzaXpl
X3Qgc2l6ZSA9IG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1faGVhcC5tX3Jh
Y2VNYXJrU3RhY2stPnNpemUoKTsKKyAgICB2aXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXplKTsK
KyAgICAKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIHNp
emUsICIpIik7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9oZWFw
Lm1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2so
KSk7CisgICAgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0
b3JNYXJrU3RhY2soKSk7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVu
dGlhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCA6IHB1YmxpYyBN
YXJraW5nQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQoSGVhcCYpOworICAgIH5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpOworICAgIAorICAg
IGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIAor
cHJvdGVjdGVkOgorICAgIHZvaWQgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIG92ZXJyaWRlOwor
ICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIG92ZXJy
aWRlOworICAgIAorcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDQsNiArNDQ0LDMz
IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQoKQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxl
KigpPj4gTWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKQorewor
ICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigp
PiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
KQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcnVuKCkgb3ZlcnJp
ZGUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICAgICAgbV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5LmZp
bmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2FsbG9j
YXRvci5tX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9ibG9ja3NbbV9pbmRleCsrXTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIG1f
YWxsb2NhdG9yOworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKKyAgICAgICAgTG9jayBt
X2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMp
KTsKK30KKwogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBtX2NlbGxTaXplLCAi
LyIsIG1fYXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMDMsNiAr
MTA0LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICAKKyAgICBS
ZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0
eUJsb2NrU291cmNlKCk7CisgICAgCiAgICAgdm9pZCBhZGRCbG9jayhNYXJrZWRCbG9jazo6SGFu
ZGxlKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5o
IgogI2luY2x1ZGUgIlN3ZWVwaW5nU2NvcGUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG1JbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0yMDAsNyArMjAxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAo
Y29uc3QgRnJlZQogdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKQogewogICAgIEFTU0VSVCh2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCku
aXNNYXJraW5nKCkpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIAogICAgIGlmICghYXJlTWFya3NTdGFsZSht
YXJraW5nVmVyc2lvbikpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMywxNSArMjI0LDE5IEBAIHZv
aWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAgICAgICAgIGRhdGFM
b2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcgdGhpbmdzLlxuIik7CiAgICAgICAgIEhlYXBW
ZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHNwYWNlKCktPm5ld2x5QWxsb2NhdGVkVmVy
c2lvbigpOwogICAgICAgICBpZiAoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPT0g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7Ci0gICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGVu
dHMgb2YgbWFya2VkIGludG8gbmV3bHlBbGxvY2F0ZWQuIElmIHdlIGdldCB0aGUgZnVsbCBzZXQg
b2YgYml0cwotICAgICAgICAgICAgLy8gdGhlbiBpbnZhbGlkYXRlIG5ld2x5QWxsb2NhdGVkIGFu
ZCBzZXQgYWxsb2NhdGVkLgotICAgICAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5t
ZXJnZUFuZENsZWFyKG1fbWFya3MpOworICAgICAgICAgICAgLy8gV2hlbiBkbyB3ZSBnZXQgaGVy
ZT8gVGhlIGJsb2NrIGNvdWxkIG5vdCBoYXZlIGJlZW4gZmlsbGVkIHVwLiBUaGUgbmV3bHlBbGxv
Y2F0ZWQgYml0cyB3b3VsZAorICAgICAgICAgICAgLy8gaGF2ZSBoYWQgdG8gYmUgY3JlYXRlZCBz
aW5jZSB0aGUgZW5kIG9mIHRoZSBsYXN0IGNvbGxlY3Rpb24uIFRoZSBvbmx5IHRoaW5ncyB0aGF0
IGNyZWF0ZQorICAgICAgICAgICAgLy8gdGhlbSBhcmUgYWJvdXRUb01hcmtTbG93LCBsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSwgYW5kIHN0b3BBbGxvY2F0aW5nLiBJZiBpdCBoYWQgYmVlbgorICAgICAg
ICAgICAgLy8gYWJvdXRUb01hcmtTbG93LCB0aGVuIHdlIHNob3VsZG4ndCBiZSBoZXJlIHNpbmNl
IHRoZSBtYXJrcyB3b3VsZG4ndCBiZSBzdGFsZSBhbnltb3JlLiBJdAorICAgICAgICAgICAgLy8g
Y2Fubm90IGJlIGxhc3RDaGFuY2VUb0ZpbmFsaXplLiBTbyBpdCBtdXN0IGJlIHN0b3BBbGxvY2F0
aW5nLiBUaGF0IG1lYW5zIHRoYXQgd2UganVzdAorICAgICAgICAgICAgLy8gY29tcHV0ZWQgdGhl
IG5ld2x5QWxsb2NhdGVkIGJpdHMganVzdCBiZWZvcmUgdGhlIHN0YXJ0IG9mIGFuIGluY3JlbWVu
dC4gV2hlbiB3ZSBhcmUgaW4gdGhhdAorICAgICAgICAgICAgLy8gbW9kZSwgaXQgc2VlbXMgYXMg
aWYgbmV3bHlBbGxvY2F0ZWQgc2hvdWxkIHN1YnN1bWUgbWFya3MuCisgICAgICAgICAgICBBU1NF
UlQoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zdWJzdW1lcyhtX21hcmtzKSk7CisgICAgICAg
ICAgICBtX21hcmtzLmNsZWFyQWxsKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiBuZXdseUFsbG9jYXRlZCB3aXRoIG1hcmtlZC4gSWYg
d2UgZ2V0IHRoZSBmdWxsIHNldCBvZgotICAgICAgICAgICAgLy8gYml0cyB0aGVuIGludmFsaWRh
dGUgbmV3bHlBbGxvY2F0ZWQgYW5kIHNldCBhbGxvY2F0ZWQuCiAgICAgICAgICAgICBoYW5kbGUo
KS5tX25ld2x5QWxsb2NhdGVkLnNldEFuZENsZWFyKG1fbWFya3MpOworICAgICAgICAgICAgaGFu
ZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBuZXdseUFsbG9jYXRlZFZlcnNpb247CiAg
ICAgICAgIH0KLSAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBuZXds
eUFsbG9jYXRlZFZlcnNpb247CiAgICAgfQogICAgIGNsZWFySGFzQW55TWFya2VkKCk7CiAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTM2NiwxNiArMzcxLDYgQEAgdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpkaWRSZW1vdmVGcm9tQQogICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsK
IH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoY29uc3QgSGVhcENlbGwqIGNl
bGwpCi17Ci0gICAgcmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFj
ZSgpLT5pc01hcmtpbmcoKSwgY2VsbCk7Ci19Ci0KLWJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6
aXNMaXZlQ2VsbChjb25zdCB2b2lkKiBwKQotewotICAgIHJldHVybiBpc0xpdmVDZWxsKHNwYWNl
KCktPm1hcmtpbmdWZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2luZygpLCBwKTsKLX0KLQogI2lm
ICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgTWFya2VkQmxvY2s6OmFzc2VydFZhbGlkQ2VsbChWTSYg
dm0sIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvU3RhbXBlZExvY2suaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTYx
LDggKzE2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAg
ICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlKEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwq
KTsKLSAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKKyAgICAgICAgYm9vbCBpc0xpdmUo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7CisgICAgICAgIGlubGluZSBi
b29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5l
d2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKIAogICAg
ICAgICBib29sIGlzTGl2ZShjb25zdCBIZWFwQ2VsbCopOwogICAgICAgICBib29sIGlzTGl2ZUNl
bGwoY29uc3Qgdm9pZCopOwpAQCAtMjU4LDkgKzI1OSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFya2VkQ29uY3VycmVudGx5
KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBpc01h
cmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7Ci0gICAgYm9vbCB0ZXN0QW5kU2V0TWFya2Vk
KGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKKyAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQq
LCBEZXBlbmRlbmN5RmVuY2UpOworICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lk
KiwgRGVwZW5kZW5jeUZlbmNlKTsKICAgICAgICAgCiAgICAgYm9vbCBpc0F0b20oY29uc3Qgdm9p
ZCopOwogICAgIHZvaWQgY2xlYXJNYXJrZWQoY29uc3Qgdm9pZCopOwpAQCAtMjgwLDkgKzI4MCw4
IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYXJlTWFya3NTdGFsZSgp
OwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7Ci0g
ICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAKLSAgICBEZXBlbmRlbmN5IGFib3V0VG9NYXJr
KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKKyAgICBEZXBlbmRlbmN5RmVuY2UgYWJvdXRU
b01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKICNpZiBBU1NFUlRf
RElTQUJMRUQKICAgICB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUoKSB7IH0KQEAgLTMxNCwxMSAr
MzEzLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RlTWFya2VkU2xvdygpOwogICAgIAogICAg
IGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKTsKKyAgICBpbmxpbmUgYm9vbCBtYXJrc0NvbnZleUxpdmVuZXNzRHVy
aW5nTWFya2luZyhIZWFwVmVyc2lvbiBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbik7CiAgICAgICAgIAogICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1f
bWFya3M7CiAKICAgICBib29sIG1fbmVlZHNEZXN0cnVjdGlvbjsKLSAgICBMb2NrIG1fbG9jazsK
KyAgICBTdGFtcGVkTG9jayBtX2xvY2s7CiAgICAgCiAgICAgLy8gVGhlIGFjdHVhbCBtYXJrIGNv
dW50IGNhbiBiZSBjb21wdXRlZCBieSBkb2luZzogbV9iaWFzZWRNYXJrQ291bnQgLSBtX21hcmtD
b3VudEJpYXMuIE5vdGUKICAgICAvLyB0aGF0IHRoaXMgY291bnQgaXMgcmFjeS4gSXQgd2lsbCBh
Y2N1cmF0ZWx5IGRldGVjdCB3aGV0aGVyIG9yIG5vdCBleGFjdGx5IHplcm8gdGhpbmdzIHdlcmUK
QEAgLTQ5OCwxOCArNDk4LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0
YWxlKEgKICAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0K
IAotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFy
a3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQoraW5saW5l
IERlcGVuZGVuY3lGZW5jZSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24pCiB7CiAgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNp
b247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNp
b24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCi1pbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9j
azo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9
IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9u
KTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIERlcGVuZGVuY3lG
ZW5jZSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNz
ZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMjQgKzUxOCwxOSBAQCBpbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01h
cmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKIHsKLSAgICBy
ZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikgPyBmYWxzZSA6IGlzTWFya2VkUmF3
KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHko
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCi17Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1Zl
cnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCks
IHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihw
KSwgRGVwZW5kZW5jeUZlbmNlKHZlcnNpb24pKTsKIH0KIAotaW5saW5lIGJvb2wgTWFya2VkQmxv
Y2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKK2lubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5RmVu
Y2UgZGVwZW5kZW5jeSkKIHsKICAgICBhc3NlcnRNYXJrc05vdFN0YWxlKCk7CiAgICAgcmV0dXJu
IG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOwogfQogCi1pbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5
IGRlcGVuZGVuY3kpCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlZChj
b25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsKICAgICBhc3NlcnRN
YXJrc05vdFN0YWxlKCk7CiAgICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RBbmRTZXQo
YXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
U3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29y
aXRobUlubGluZXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY3LDYgKzY4LDExIEBAIGlu
bGluZSBNYXJrZWRTcGFjZSogTWFya2VkQmxvY2s6OkhhbmRsZToKIAogaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKQogeworICAgIHJldHVybiBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFy
a2luZyhtX21hcmtpbmdWZXJzaW9uLCBtYXJraW5nVmVyc2lvbik7Cit9CisKK2lubGluZSBib29s
IE1hcmtlZEJsb2NrOjptYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lv
biBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKK3sKICAgICAv
LyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlc2UgaXMgdHJ1ZToKICAgICAvLyAtIFdl
IGp1c3QgY3JlYXRlZCB0aGUgYmxvY2sgYW5kIHNvIHRoZSBiaXRzIGFyZSBjbGVhciBhbHJlYWR5
LgogICAgIC8vIC0gVGhpcyBibG9jayBoYXMgb2JqZWN0cyBtYXJrZWQgZHVyaW5nIHRoZSBsYXN0
IEdDLCBhbmQgc28gaXRzIHZlcnNpb24gd2FzIHVwLXRvLWRhdGUganVzdApAQCAtODIsMzkgKzg4
LDExMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6bWFya3NDb252ZXlMaXZlCiAgICAgQVNT
RVJUKHNwYWNlKCktPmlzTWFya2luZygpKTsKICAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2Nv
cGUoKSAhPSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gbV9tYXJraW5nVmVyc2lvbiA9PSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb24KLSAg
ICAgICAgfHwgTWFya2VkU3BhY2U6Om5leHRWZXJzaW9uKG1fbWFya2luZ1ZlcnNpb24pID09IG1h
cmtpbmdWZXJzaW9uOworICAgIHJldHVybiBteU1hcmtpbmdWZXJzaW9uID09IE1hcmtlZFNwYWNl
OjpudWxsVmVyc2lvbgorICAgICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJr
aW5nVmVyc2lvbikgPT0gbWFya2luZ1ZlcnNpb247CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgYm9vbCBpc01h
cmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Okhh
bmRsZTo6aXNMaXZlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXds
eUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCogY2VsbCkK
IHsKLSAgICBBU1NFUlQoIWlzRnJlZUxpc3RlZCgpKTsKLSAgICAKLSAgICBpZiAoVU5MSUtFTFko
aGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkpIHsKLSAgICAgICAgaWYgKGlzTmV3bHlBbGxvY2F0ZWQo
Y2VsbCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCiAgICAgaWYgKGFs
bG9jYXRvcigpLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSB0aGlzLT5ibG9j
aygpOworICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIGJl
Y2F1c2UgbWFya3MgbWlnaHQgYmUgc3RhbGUuIEluIHRoYXQgY2FzZSwgbmV3bHkKKyAgICAvLyBh
bGxvY2F0ZWQgd2lsbCBub3QgeWV0IGJlIHZhbGlkLiBDb25zaWRlciB0aGlzIGludGVybGVhdmlu
Zy4KKyAgICAvLyAKKyAgICAvLyBPbmUgdGhyZWFkIGlzIGRvaW5nIHRoaXM6CisgICAgLy8KKyAg
ICAvLyAxKSBJc0xpdmVDaGVja3NOZXdseUFsbG9jYXRlZDogV2UgY2hlY2sgaWYgbmV3bHkgYWxs
b2NhdGVkIGlzIHZhbGlkLiBJZiBpdCBpcyB2YWxpZCwgYW5kIHRoZSBiaXQgaXMKKyAgICAvLyAg
ICBzZXQsIHdlIHJldHVybiB0cnVlLiBMZXQncyBhc3N1bWUgdGhhdCB0aGlzIGV4ZWN1dGVzIGF0
b21pY2FsbHkuIEl0IGRvZXNuJ3QgaGF2ZSB0byBpbiBnZW5lcmFsLAorICAgIC8vICAgIGJ1dCB3
ZSBjYW4gYXNzdW1lIHRoYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHNlZWluZyB0aGlzIGJ1Zy4KKyAg
ICAvLworICAgIC8vIDIpIElzTGl2ZUNoZWNrc01hcmtzOiBIYXZpbmcgZmFpbGVkIHRoYXQsIHdl
IGNoZWNrIHRoZSBtYXJrIGJpdHMuIFRoaXMgc3RlcCBpbXBsaWVzIHRoZSByZXN0IG9mCisgICAg
Ly8gICAgdGhpcyBmdW5jdGlvbi4gSXQgaGFwcGVucyB1bmRlciBhIGxvY2sgc28gaXQncyBhdG9t
aWMuCisgICAgLy8KKyAgICAvLyBBbm90aGVyIHRocmVhZCBpcyBkb2luZzoKKyAgICAvLworICAg
IC8vIDEpIEFib3V0VG9NYXJrU2xvdzogVGhpcyBpcyB0aGUgZW50aXJlIGFib3V0VG9NYXJrU2xv
dyBmdW5jdGlvbiwgYW5kIGxldCdzIHNheSBpdCdzIGF0b21pYy4gSXQKKyAgICAvLyAgICBzb3J0
YSBpcyBzaW5jZSBpdCBob2xkcyBhIGxvY2ssIGJ1dCB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgbWFr
ZSBpdCBhdG9taWMgd2l0aCByZXNwZWN0IHRvCisgICAgLy8gICAgSXNMaXZlQ2hlY2tzTmV3bHlB
bGxvY2F0ZWQsIHNpbmNlIHRoYXQgZG9lcyBub3QgaG9sZCBhIGxvY2sgaW4gb3VyIHNjZW5hcmlv
LgorICAgIC8vCisgICAgLy8gVGhlIGhhcm1mdWwgaW50ZXJsZWF2aW5nIGhhcHBlbnMgaWYgd2Ug
c3RhcnQgb3V0IHdpdGggYSBibG9jayB0aGF0IGhhcyBzdGFsZSBtYXJrIGJpdHMgdGhhdAorICAg
IC8vIG5vbmV0aGVsZXNzIGNvbnZleSBsaXZlbmVzcyBkdXJpbmcgbWFya2luZyAodGhlIG9mZi1i
eS1vbmUgdmVyc2lvbiB0cmljaykuIFRoZSBpbnRlcmxlYXZpbmcgaXMKKyAgICAvLyBqdXN0Ogor
ICAgIC8vCisgICAgLy8gSXNMaXZlQ2hlY2tzTmV3bHlBbGxvY2F0ZWQgQWJvdXRUb01hcmtTbG93
IElzTGl2ZUNoZWNrc01hcmtzCisgICAgLy8KKyAgICAvLyBXZSBzdGFydGVkIHdpdGggdmFsaWQg
bWFya3MgYnV0IGludmFsaWQgbmV3bHkgYWxsb2NhdGVkLiBTbywgdGhlIGZpcnN0IHBhcnQgZG9l
c24ndCB0aGluayB0aGF0CisgICAgLy8gYW55dGhpbmcgaXMgbGl2ZSwgYnV0IGR1dGlmdWxseSBk
cm9wcyBkb3duIHRvIHRoZSBtYXJrcyBzdGVwLiBCdXQgaW4gdGhlIG1lYW50aW1lLCB3ZSBjbGVh
ciB0aGUKKyAgICAvLyBtYXJrIGJpdHMgYW5kIHRyYW5zZmVyIHRoZWlyIGNvbnRlbnRzIGludG8g
bmV3bHlBbGxvY2F0ZWQuIFNvIElzTGl2ZUNoZWNrc01hcmtzIGFsc28gc2VlcyBub3RoaW5nCisg
ICAgLy8gbGl2ZS4gT29vcHMhCisgICAgLy8KKyAgICAvLyBGb3J0dW5hdGVseSwgc2luY2UgdGhp
cyBpcyBqdXN0IGEgcmVhZCBjcml0aWNhbCBzZWN0aW9uLCB3ZSBjYW4gdXNlIGEgU3RhbXBlZExv
Y2suCisKKyAgICBhdXRvIGZlbmNlbGVzc0lzTGl2ZUltcGwgPSBbJl0gKERlcGVuZGVuY3lGZW5j
ZSYgZGVwZW5kZW5jeSwgU3RhbXBlZExvY2s6OlN0YW1wKSAtPiBib29sIHsKKyAgICAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogdGhpc0hhbmRsZSA9IGRlcGVuZGVuY3kuY29uc3VtZSh0aGlzKTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVCghdGhpc0hhbmRsZS0+aXNGcmVlTGlzdGVkKCkpOwog
ICAgIAotICAgIGlmIChibG9jay5hcmVNYXJrc1N0YWxlKCkpIHsKLSAgICAgICAgaWYgKCFpc01h
cmtpbmcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghYmxvY2subWFy
a3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pKQorICAgICAgICBI
ZWFwVmVyc2lvbiBteU5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHRoaXNIYW5kbGUtPm1fbmV3bHlB
bGxvY2F0ZWRWZXJzaW9uOworICAgICAgICBpZiAobXlOZXdseUFsbG9jYXRlZFZlcnNpb24gPT0g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRoaXNI
YW5kbGUtPmlzTmV3bHlBbGxvY2F0ZWQoY2VsbCk7CisgICAgICAgICAgICBkZXBlbmRlbmN5ID0g
RGVwZW5kZW5jeUZlbmNlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSB0aGlzSGFuZGxl
LT5ibG9jaygpOworICAgICAgICAKKyAgICAgICAgSGVhcFZlcnNpb24gbXlNYXJraW5nVmVyc2lv
biA9IGJsb2NrLm1fbWFya2luZ1ZlcnNpb247CisgICAgICAgIGlmIChteU1hcmtpbmdWZXJzaW9u
ICE9IG1hcmtpbmdWZXJzaW9uCisgICAgICAgICAgICAmJiAoIWlzTWFya2luZyB8fCAhYmxvY2su
bWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobXlNYXJraW5nVmVyc2lvbiwgbWFya2lu
Z1ZlcnNpb24pKSkgeworICAgICAgICAgICAgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3lGZW5jZSht
eU1hcmtpbmdWZXJzaW9uKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgcmVzdWx0ID0gYmxvY2subV9tYXJrcy5nZXQo
YmxvY2suYXRvbU51bWJlcihjZWxsKSk7CisgICAgICAgIGRlcGVuZGVuY3kgPSBEZXBlbmRlbmN5
RmVuY2UocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIAorICAg
IGF1dG8gaXNMaXZlSW1wbCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgQVNTRVJUKCFpc0Zy
ZWVMaXN0ZWQoKSk7CisgICAgCisgICAgICAgIEhlYXBWZXJzaW9uIG15TmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uID0gbV9uZXdseUFsbG9jYXRlZFZlcnNpb247CisgICAgICAgIGlmIChteU5ld2x5QWxs
b2NhdGVkVmVyc2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pCisgICAgICAgICAgICByZXR1
cm4gaXNOZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAKKyAgICAgICAgTWFya2VkQmxvY2smIGJs
b2NrID0gdGhpcy0+YmxvY2soKTsKKyAgICAKKyAgICAgICAgaWYgKGJsb2NrLmFyZU1hcmtzU3Rh
bGUobWFya2luZ1ZlcnNpb24pKSB7CisgICAgICAgICAgICBpZiAoIWlzTWFya2luZykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWJsb2NrLm1hcmtzQ29u
dmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIHJldHVybiBibG9jay5tX21hcmtzLmdl
dChibG9jay5hdG9tTnVtYmVyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuIGJsb2NrLm1fbWFya3Mu
Z2V0KGJsb2NrLmF0b21OdW1iZXIoY2VsbCkpOworICAgIH07CisgICAgCisgICAgaWYgKCFpc01h
cmtpbmcpCisgICAgICAgIHJldHVybiBpc0xpdmVJbXBsKCk7CisgICAgCisgICAgcmV0dXJuIG1f
YmxvY2stPm1fbG9jay5kb09wdGltaXplZEZlbmNlbGVzc1JlYWQoZmVuY2VsZXNzSXNMaXZlSW1w
bCwgaXNMaXZlSW1wbCk7CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omlz
TGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25z
dCB2b2lkKiBwKQoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJz
aW9uLCBib29sIGlzTWFya2luZywgY29uc3Qgdm9pZCogcCkKIHsKICAgICBpZiAoIW1fYmxvY2st
PmlzQXRvbShwKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc0xpdmUobWFy
a2luZ1ZlcnNpb24sIGlzTWFya2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgSGVhcENlbGwqPihwKSk7
CisgICAgcmV0dXJuIGlzTGl2ZShtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBpc01hcmtpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEhlYXBDZWxsKj4ocCkpOworfQorCitpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoY29uc3QgSGVhcENlbGwqIGNlbGwp
Cit7CisgICAgcmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFjZSgp
LT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKSwgc3BhY2UoKS0+aXNNYXJraW5nKCksIGNlbGwpOwor
fQorCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmVDZWxsKGNvbnN0IHZv
aWQqIHApCit7CisgICAgcmV0dXJuIGlzTGl2ZUNlbGwoc3BhY2UoKS0+bWFya2luZ1ZlcnNpb24o
KSwgc3BhY2UoKS0+bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2luZygp
LCBwKTsKIH0KIAogLy8gVGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdHJ1ZSBmb3Igc3BlY2lhbGl6
YXRpb24gdG8ga2ljayBpbjoKQEAgLTM4Niw2ICs0NjUsMTUgQEAgaW5saW5lIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6Ok1hcmtzTW9kZSBNYQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CiBpbmxp
bmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjdXJy
ZW50bHkgZWZmaWNpZW50IHRvIHVzZSBpbiB0aGUgY29uc3RyYWludCBzb2x2ZXIgYmVjYXVzZSBp
c0xpdmUoKSBncmFicyBhCisgICAgLy8gbG9jayB0byBwcm90ZWN0IGl0c2VsZiBmcm9tIGNvbmN1
cnJlbnQgY2FsbHMgdG8gYWJvdXRUb01hcmtTbG93KCkuIEJ1dCB3ZSBjb3VsZCBnZXQgYXJvdW5k
IHRoaXMgYnkKKyAgICAvLyBoYXZpbmcgdGhpcyBmdW5jdGlvbiBncmFiIHRoZSBsb2NrIGJlZm9y
ZSBhbmQgYWZ0ZXIgdGhlIGl0ZXJhdGlvbiwgYW5kIGNoZWNrIGlmIHRoZSBtYXJraW5nIHZlcnNp
b24KKyAgICAvLyBjaGFuZ2VkLiBJZiBpdCBkaWQsIGp1c3QgcnVuIGFnYWluLiBJbnNpZGUgdGhl
IGxvb3AsIHdlIG9ubHkgbmVlZCB0byBlbnN1cmUgdGhhdCBpZiBhIHJhY2Ugd2VyZSB0bworICAg
IC8vIGhhcHBlbiwgd2Ugd2lsbCBqdXN0IG92ZXJsb29rIG9iamVjdHMuIEkgdGhpbmsgdGhhdCBi
ZWNhdXNlIG9mIGhvdyBhYm91dFRvTWFya1Nsb3coKSBkb2VzIHRoaW5ncywKKyAgICAvLyBhIHJh
Y2Ugb3VnaHQgdG8gbWVhbiB0aGF0IGl0IGp1c3QgcmV0dXJucyBmYWxzZSB3aGVuIGl0IHNob3Vs
ZCBoYXZlIHJldHVybmVkIHRydWUgLSBidXQgdGhpcyBpcworICAgIC8vIHNvbWV0aGluZyB0aGF0
IHdvdWxkIGhhdmUgdG8gYmUgdmVyaWZpZWQgY2FyZWZ1bGx5LgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTUKKyAgICAKICAgICBIZWFwQ2VsbDo6
S2luZCBraW5kID0gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwogICAgIGZvciAoc2l6ZV90IGkgPSBm
aXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAgICAg
ICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJm1fYmxv
Y2stPmF0b21zKClbaV0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNyArNDIxLDcgQEAgdm9p
ZCBNYXJrZWRTcGFjZTo6ZW5kTWFya2luZygpCiAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZXNl
dEFsbG9jYXRlZCgpOwogICAgICAgICAgICAgfSk7CiAgICAgfQotICAgICAgICAKKyAgICAKICAg
ICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IG5leHRWZXJzaW9uKG1fbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xhcmdlQWxsb2NhdGlvbnNP
ZmZzZXRGb3JUaGlzQ29sbGVjdGlvbjsgaSA8IG1fbGFyZ2VBbGxvY2F0aW9ucy5zaXplKCk7ICsr
aSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY1LDYgKzE2NSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gV2hlbiB0
aGlzIGlzIHRydWUgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQgYnV0IHRoZSBtYXJrIGJp
dHMgaGF2ZW4ndCBjb252ZXJnZWQgeWV0LgogICAgIGJvb2wgaXNNYXJraW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc01hcmtpbmc7IH0KICAgICAKKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0Jl
Z2luKCkgeyByZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCog
YWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9Cisg
ICAgV2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0dXJuIG1fbmV3QWN0aXZl
V2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzRW5kKCkg
eyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQorICAgIAogICAgIHZvaWQgZHVt
cEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgc3RkOjphcnJheTxzaXplX3QsIG51bVNpemVDbGFzc2VzPiBzX3Np
emVDbGFzc0ZvclNpemVTdGVwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywzMCArMjcsMTggQEAKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENT
dHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lk
KFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwK
LSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQotICAgIDogbV9hYmJyZXZpYXRl
ZE5hbWUoYWJicmV2aWF0ZWROYW1lKQotICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAg
LCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3Zv
bGF0aWxpdHkodm9sYXRpbGl0eSkKLXsKLX0KK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24s
Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorTWFya2luZ0Nv
bnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3Ry
aW5nIG5hbWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25j
dXJyZW5jeSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQog
ICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1lKFdU
Rk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5j
dGlvbikpCi0gICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dv
cmtFc3RpbWF0ZUZ1bmN0aW9uKSkKICAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorICAg
ICwgbV9jb25jdXJyZW5jeShjb25jdXJyZW5jeSkKKyAgICAsIG1fcGFyYWxsZWxpc20ocGFyYWxs
ZWxpc20pCiB7CiB9CiAKQEAgLTYzLDE0ICs1MSw3NCBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50
OjpyZXNldFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlz
bSBNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJh
bGxlbGlzbSByZXN1bHQgPSBleGVjdXRlSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENv
dW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJvc2UgJiYgdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVk
TmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVj
dXRlKSIpOworICAgIGlmIChyZXN1bHQgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxl
bCkgeworICAgICAgICAvLyBJdCdzIGlsbGVnYWwgdG8gcHJvZHVjZSBwYXJhbGxlbCB3b3JrIGlm
IHlvdSBoYXZlbid0IGFkdmVydGlzZWQgaXQgdXBmcm9udCBiZWNhdXNlIHRoZSBzb2x2ZXIKKyAg
ICAgICAgLy8gaGFzIG9wdGltaXphdGlvbnMgZm9yIGNvbnN0cmFpbnRzIHRoYXQgcHJvbWlzZSB0
byBuZXZlciBwcm9kdWNlIHBhcmFsbGVsIHdvcmsuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
cGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tX
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUg
TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3Ip
OworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coYWJicmV2
aWF0ZWROYW1lKCkpOwotICAgIFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRv
ciwgZGlkVmlzaXRTb21ldGhpbmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZp
c2l0b3IsIHZpc2l0aW5nVGltZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5n
VGltZW91dC52aXNpdENvdW50KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlz
aXRpbmdUaW1lb3V0LmRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAgIFZpc2l0Q291bnRl
ciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3Ry
YWludFNvbHZpbmdMb2NrZXIsIHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNp
dENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIGlmICh2ZXJib3NlICYmIHZpc2l0Q291bnRlci52
aXNpdENvdW50KCkpCisgICAgICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2
aXNpdGVkICIsIHZpc2l0Q291bnRlci52aXNpdENvdW50KCksICIgaW4gcHJlcGFyZVRvRXhlY3V0
ZSkiKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9y
KTsKKyAgICBkb1BhcmFsbGVsV29ya0ltcGwodmlzaXRvcik7CisgICAgaWYgKHZlcmJvc2UgJiYg
dmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlh
dGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBk
b1BhcmFsbGVsV29yaykiKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpOworICAgIH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxs
ZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENv
dW50ZXIodmlzaXRvcik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAg
ICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYg
KHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygi
KCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291
bnQoKSwgIiBpbiBmaW5pc2hQYXJhbGxlbFdvcmspIik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZp
c2l0b3ImKQoreworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0lt
cGwoU2xvdFZpc2l0b3ImKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNp
dG9yJikKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNv
bnN0cmFpbnRDb25jdXJyZW5jeS5oIgorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5o
IgogI2luY2x1ZGUgIkNvbnN0cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdU
aW1lb3V0LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00NCwxNyArNDQsMTEgQEAgY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5KTsKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENT
dHJpbmcgbmFtZSwgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25j
dXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKKyAgICAgICAgQ29u
c3RyYWludFBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsK
ICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAg
Q1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6
OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAg
ICAgCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAg
CkBAIC02NSwzMiArNTksMzkgQEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKLSAgICB2b2lk
IGV4ZWN1dGUoU2xvdFZpc2l0b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0KTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZShTbG90Vmlz
aXRvciYpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICBkb3VibGUgd29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKTsKICAgICAKLSAgICBkb3VibGUgcXVpY2tX
b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBpZiAoIW1f
cXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOwotICAgIH0KLSAg
ICAKLSAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGxhc3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNp
dG9yKTsKLSAgICB9CisgICAgdm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICB2
b2lkIGRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxl
bFdvcmsoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xh
dGlsaXR5KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisgICAgQ29uc3Ry
YWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9jb25jdXJyZW5j
eTsgfQorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyYWxsZWxpc207IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFj
dExvY2tlciYgY29uc3RyYWludFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdmly
dHVhbCB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNl
dCBtX2luZGV4LgogICAgIAogICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OwogICAg
IENTdHJpbmcgbV9hYmJyZXZpYXRlZE5hbWU7CiAgICAgQ1N0cmluZyBtX25hbWU7Ci0gICAgOjpG
dW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0aW1lb3V0
KT4gbV9leGVjdXRlRnVuY3Rpb247Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3Im
KT4gbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uOwogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IG1fdm9sYXRpbGl0eTsKKyAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgbV9jb25jdXJyZW5jeTsK
KyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gbV9wYXJhbGxlbGlzbTsKICAgICBzaXplX3QgbV9s
YXN0VmlzaXRDb3VudCB7IDAgfTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50U2V0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2MCArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29u
c3RyYWludFNldC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50U29sdmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6
OkV4ZWN1dGlvbkNvbnRleHQgewotcHVibGljOgotICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIHNldCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUg
dGltZW91dCkKLSAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICwgbV92aXNpdG9yKHZpc2l0
b3IpCi0gICAgICAgICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2RpZFZpc2l0U29tZXRoaW5nOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFz
RWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlm
IGl0IHRpbWVzIG91dC4KLSAgICBib29sIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKLSAg
ICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgewotICAgICAgICAg
ICAgZXhlY3V0ZShpbmRleCk7Ci0gICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsK
LSAgICAgICAgICAgIGlmIChzaG91bGRUaW1lT3V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGRpZEV4ZWN1dGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVk
LmdldChpbmRleCk7IH0KLQotICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCi0gICAgewot
ICAgICAgICBtX3NldC5tX3NldFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0
U29tZXRoaW5nLCBtX3RpbWVvdXQpOwotICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7Ci0g
ICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Ci0g
ICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsK
LSAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcg
eyBmYWxzZSB9OwotfTsKLQotTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50
U2V0KCkKK01hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldChIZWFwJiBo
ZWFwKQorICAgIDogbV9oZWFwKGhlYXApCiB7CiB9CiAKQEAgLTEwNywxOCArNjUsOSBAQCB2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAx
OwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0Jik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGls
aXR5KQotewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZN
b3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2
b2xhdGlsaXR5KSk7Ci19Ci0KLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKLSAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24s
Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZv
bGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQog
ewotICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFi
YnJldmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwg
V1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFk
ZChzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJl
dmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5
LCBjb25jdXJyZW5jeSkpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBA
IC0xMzEsOSArODAsOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgbV9z
ZXQuYXBwZW5kKFdURk1vdmUoY29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJn
ZW5jZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVD
b252ZXJnZW5jZUltcGwodmlzaXRvciwgdGltZW91dCk7CisgICAgYm9vbCByZXN1bHQgPSBleGVj
dXRlQ29udmVyZ2VuY2VJbXBsKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQog
ICAgICAgICBkYXRhTG9nKCIgIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0OCwyNyArOTcs
MjcgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdl
bmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRo
aXMsIHZpc2l0b3IsIHRpbWVvdXQpOworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRoaXMp
OwogICAgIAogICAgIHVuc2lnbmVkIGl0ZXJhdGlvbiA9IG1faXRlcmF0aW9uKys7CiAgICAgCiAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9u
LCAiOiIpOwogCi0gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdlIGhh
dmUgbm90IGV4ZWN1dGVkIGF0IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhlbgotICAgIC8vIHdl
IHNob3VsZCBleGVjdXRlIHRob3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJh
aW4obV91bmV4ZWN1dGVkUm9vdHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gRmlyc3QgaXRlcmF0aW9uIGlzIGJlZm9yZSBhbnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQn
cyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSBjb25zdHJhaW50cyBvdGhlcgotICAgIC8vIHRoYW4g
cm9vdHMuCi0gICAgaWYgKGl0ZXJhdGlvbiA9PSAxKQorICAgIGlmIChpdGVyYXRpb24gPT0gMSkg
eworICAgICAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWlu
aW5nLCBzbyBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzCisgICAgICAg
IC8vIG90aGVyIHRoYW4gcm9vdHMuCisgICAgICAgIHNvbHZlci5kcmFpbihtX3VuZXhlY3V0ZWRS
b290cyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCi0gICAgaWYgKCFleGVj
dXRpb25Db250ZXh0LmRyYWluKG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQorICAgIGlmIChpdGVy
YXRpb24gPT0gMikgeworICAgICAgICBzb2x2ZXIuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3Ro
cyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0
byBrZWVwIHByZWZlcnJpbmcgdGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRo
YXQgbmVlZCB0byBiZSBmaXhwb2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxk
IEdDIC0gdW50aWwgdGhleSBzdG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8g
Z28gdG90YWxseQpAQCAtMjE1LDMzICsxNjQsMTYgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNl
dDo6ZXhlY3V0ZUNvbnZlcgogICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGIt
PnZvbGF0aWxpdHkoKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3Ry
YWludCogY29uc3RyYWludCA6IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0
cmFpbnQtPmluZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5k
aWRFeGVjdXRlKGkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNv
bnRleHQuZXhlY3V0ZShpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29u
dmVyZ2VuY2UsIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFw
cGVuIGFueXRpbWUKLSAgICAgICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTog
TWF5YmUgdGhpcyBzaG91bGQgZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8g
Tm90IGNsZWFyIGlmIHRoYXQncwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2
ZW4gYmV0dGVyIGlzIHRoaXM6Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHks
IGtlZXAgcnVubmluZy4KLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVh
c3QgTiB0aGluZ3MsIHJldHVybi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
ODMyCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHNvbHZlci5jb252ZXJnZShtX29y
ZGVyZWQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIFJldHVybiB0cnVlIGlmIHdl
J3ZlIGNvbnZlcmdlZC4gVGhhdCBoYXBwZW5zIGlmIHdlIGRpZCBub3QgdmlzaXQgYW55dGhpbmcu
CisgICAgcmV0dXJuICFzb2x2ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAogdm9pZCBNYXJr
aW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBjb25zdHJh
aW50IDogbV9zZXQpCi0gICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlz
aXRTb21ldGhpbmcsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICBjb25zdHJh
aW50LT5leGVjdXRlKHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAg
ICBkYXRhTG9nKCIgIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDkgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOworY2xh
c3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CisKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0
IHsKIHB1YmxpYzoKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCgpOworICAgIE1hcmtpbmdDb25z
dHJhaW50U2V0KEhlYXAmKTsKICAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKICAgICAKICAg
ICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwpAQCAtNDEsMTUgKzQ0LDkgQEAgcHVibGljOgogICAg
IHZvaWQgYWRkKAogICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0
cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBW
aXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAK
LSAgICB2b2lkIGFkZCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCi0gICAgICAg
IENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90Vmlz
aXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0
aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAor
ICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNv
bmN1cnJlbnQpOwogICAgIAogICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29u
c3RyYWludD4pOwogICAgIApAQCAtNjAsMjEgKzU3LDE5IEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUg
b2YgdGhlbSBwcm9kdWNlZCBuZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3Un
dmUgYWxyYWVkeSB2aXNpdGVkIHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoCi0gICAgICAgIFNsb3RWaXNpdG9yJiwKLSAgICAgICAgTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgYm9v
bCBleGVjdXRlQ29udmVyZ2VuY2UoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBTaW1wbHkg
cnVucyBhbGwgY29uc3RyYWludHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAgICAgdm9pZCBl
eGVjdXRlQWxsKFNsb3RWaXNpdG9yJik7CiAgICAgCiBwcml2YXRlOgotICAgIGNsYXNzIEV4ZWN1
dGlvbkNvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgZnJp
ZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogICAgIAotICAgIGJvb2wgZXhlY3V0
ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7Cisg
ICAgYm9vbCBleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAg
Ym9vbCBkcmFpbihTbG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVj
dXRlZCwgQml0VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAg
IGJvb2wgZHJhaW4oU2xvdFZpc2l0b3ImLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3Rv
ciYgZXhlY3V0ZWQsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAKKyAgICBIZWFwJiBt
X2hlYXA7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRlZFJvb3RzOwogICAgIEJpdFZlY3RvciBt
X3VuZXhlY3V0ZWRPdXRncm93dGhzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2lu
Z0NvbnN0cmFpbnQ+PiBtX3NldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCisKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyAKKworTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQp
CisgICAgOiBtX2hlYXAoc2V0Lm1faGVhcCkKKyAgICAsIG1fbWFpblZpc2l0b3IobV9oZWFwLmNv
bGxlY3RvclNsb3RWaXNpdG9yKCkpCisgICAgLCBtX3NldChzZXQpCit7CisgICAgbV9oZWFwLmZv
ckVhY2hTbG90VmlzaXRvcigKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgewor
ICAgICAgICAgICAgbV92aXNpdENvdW50ZXJzLmFwcGVuZChWaXNpdENvdW50ZXIodmlzaXRvcikp
OworICAgICAgICB9KTsKK30KKworTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6On5NYXJraW5nQ29u
c3RyYWludFNvbHZlcigpCit7Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRp
ZFZpc2l0U29tZXRoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IFZpc2l0Q291bnRlciYg
dmlzaXRDb3VudGVyIDogbV92aXNpdENvdW50ZXJzKSB7CisgICAgICAgIGlmICh2aXNpdENvdW50
ZXIudmlzaXRDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShT
Y2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3sKKyAgICBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSA9
IHRydWU7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29y
ayk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnVzZVBhcmFsbGVsTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRh
dGFMb2cocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCA/ICJQIiA6ICJOIiwgIjwiKTsK
KyAgICAgICAgCisgICAgICAgIG1faGVhcC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAg
ICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7IHJ1bkV4ZWN1dGlvblRocmVhZCh2aXNp
dG9yLCBwcmVmZXJlbmNlLCBwaWNrTmV4dCk7IH0pOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCI+Iik7CisgICAgfSBlbHNlCisg
ICAgICAgIHJ1bkV4ZWN1dGlvblRocmVhZChtX21haW5WaXNpdG9yLCBwcmVmZXJlbmNlLCBwaWNr
TmV4dCk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGlja05leHRJc1N0aWxsQWN0aXZl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrKTsK
KyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV9kaWRFeGVjdXRlSW5Q
YXJhbGxlbCkKKyAgICAgICAgbV9zZXQubV9zZXRbaW5kZXhUb1J1bl0tPmZpbmlzaFBhcmFsbGVs
V29yayhtX21haW5WaXNpdG9yKTsKKyAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsLmNsZWFyKCk7
CisgICAgCisgICAgaWYgKCFtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkp
CisgICAgICAgICAgICBleGVjdXRlKCptX3NldC5tX3NldFtpbmRleFRvUnVuXSk7CisgICAgICAg
IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmNsZWFyKCk7CisgICAgfQorICAgICAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQp
Cit7CisgICAgYXV0byBpdGVyID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgIGF1dG8gZW5kID0g
dW5leGVjdXRlZC5lbmQoKTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVybjsK
KyAgICBhdXRvIHBpY2tOZXh0ID0gc2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
KCk+KAorICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgICAgICByZXR1cm4gKml0ZXIrKzsKKyAgICAgICAgfSk7CisgICAgZXhlY3V0
ZShOZXh0Q29uc3RyYWludEZpcnN0LCBwaWNrTmV4dCk7CisgICAgdW5leGVjdXRlZC5jbGVhckFs
bCgpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpjb252ZXJnZShjb25zdCBW
ZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpCit7CisgICAgaWYgKGRpZFZpc2l0U29t
ZXRoaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAob3JkZXIuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIHNpemVfdCBpbmRleCA9IDA7CisKKyAg
ICAvLyBXZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZpcnN0IGNvbnN0cmFpbnQgc2VxdWVudGlhbGx5
IGlmIHdlIHRoaW5rIGl0IHdpbGwgcXVpY2tseSBnaXZlIHVzIGEKKyAgICAvLyByZXN1bHQuIElm
IHdlIHJhbiBpdCBpbiBwYXJhbGxlbCB0byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3ZSBtaWdo
dCBlbmQgdXAgaGF2aW5nIHRvIHdhaXQgZm9yCisgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3RyYWlu
dHMgdG8gZmluaXNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVyaW5n
IGNvbnZlcmdlbmNlIGl0J3MKKyAgICAvLyBlbXBpcmljYWxseSBtb3N0IG9wdGltYWwgdG8gcmV0
dXJuIHRvIGRyYWluaW5nIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBN
b3N0CisgICAgLy8gY29uc3RyYWludHMgZG9uJ3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9zdCBvZiB0
aGUgdGltZSwgYW5kIHdoZW4gdGhleSBkbyBnZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQKKyAgICAv
LyB0byBnZW5lcmF0ZSBlbm91Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmluZyBjeWNs
ZS4gVGhlcmVmb3JlLCBwYXVzZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisgICAgLy8gd2UgZ2V0IHRo
ZSBoZWNrIG91dCBvZiBoZXJlIGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3Jr
LiBJIHRoaW5rIHRoYXQgcGFydCBvZiB3aGF0CisgICAgLy8gbWFrZXMgdGhpcyBvcHRpbWFsIGlz
IHRoYXQgd2UgYWxzbyBuZXZlciBhYm9ydCBydW5uaW5nIGEgY29uc3RyYWludCBlYXJseSwgc28g
d2hlbiB3ZSBkbyBydW4KKyAgICAvLyBvbmUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byBnZW5l
cmF0ZSBhcyBtdWNoIHdvcmsgYXMgaXQgcG9zc2libHkgY2FuLgorICAgIGlmIChvcmRlcltpbmRl
eF0tPnF1aWNrV29ya0VzdGltYXRlKG1fbWFpblZpc2l0b3IpKSB7CisgICAgICAgIGV4ZWN1dGUo
Km9yZGVyW2luZGV4KytdKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFy
YWxsZWwuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAob3JkZXIuaXNFbXB0eSgpIHx8IGRpZFZp
c2l0U29tZXRoaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBh
dXRvIHBpY2tOZXh0ID0gc2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+KAor
ICAgICAgICBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAg
aWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4ID49IG9yZGVyLnNpemUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgCisg
ICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICpvcmRlcltpbmRleCsr
XTsKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50LmluZGV4KCk7CisgICAgICAgIH0pOwor
ICAgIAorICAgIGV4ZWN1dGUoUGFyYWxsZWxXb3JrRmlyc3QsIHBpY2tOZXh0KTsKK30KKwordm9p
ZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYgY29u
c3RyYWludCkKK3sKKyAgICBpZiAobV9leGVjdXRlZC5nZXQoY29uc3RyYWludC5pbmRleCgpKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNvbnN0cmFpbnQucHJlcGFyZVRvRXhlY3V0ZShO
b0xvY2tpbmdOZWNlc3NhcnksIG1fbWFpblZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBwYXJhbGxlbGlzbSA9IGNvbnN0cmFpbnQuZXhlY3V0ZShtX21haW5WaXNpdG9yKTsKKyAg
ICBkaWRFeGVjdXRlKHBhcmFsbGVsaXNtLCBjb25zdHJhaW50LmluZGV4KCkpOworfQorCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIGZvciAoOzspIHsKKyAg
ICAgICAgYm9vbCBkb1BhcmFsbGVsV29ya01vZGU7CisgICAgICAgIHVuc2lnbmVkIGluZGV4VG9S
dW47CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgICAgIGF1dG8gdHJ5UGFyYWxsZWxXb3JrID0gWyZdICgpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwu
Zmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHRyeU5leHRD
b25zdHJhaW50ID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
cGlja05leHRJc1N0aWxsQWN0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcGlja1Jl
c3VsdCA9IHBpY2tOZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBpY2tSZXN1
bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KCpwaWNrUmVzdWx0KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQm
IGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRbKnBpY2tSZXN1bHRdOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PSBDb25zdHJhaW50Q29uY3Vy
cmVuY3k6OlNlcXVlbnRpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhl
Y3V0ZVNlcXVlbnRpYWxseS5hcHBlbmQoKnBpY2tSZXN1bHQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVt
VGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yaysrOworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhUb1J1biA9ICpwaWNrUmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxl
bFdvcmtNb2RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50LnBy
ZXBhcmVUb0V4ZWN1dGUobG9ja2VyLCB2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHJlZmVyZW5jZSA9PSBQYXJh
bGxlbFdvcmtGaXJzdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyYWxsZWxXb3Jr
KCkgfHwgdHJ5TmV4dENvbnN0cmFpbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlO
ZXh0Q29uc3RyYWludCgpIHx8IHRyeVBhcmFsbGVsV29yaygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIG5vdGhpbmcgbGVmdCB0byBydW4u
IFRoZSBvbmx5IHdheSBmb3IgdXMgdG8gaGF2ZSBtb3JlIHdvcmsgaXMKKyAgICAgICAgICAgICAg
ICAvLyBpZiBzb21lb25lIGlzIHJ1bm5pbmcgYSBjb25zdHJhaW50IHRoYXQgbWF5IHByb2R1Y2Ug
cGFyYWxsZWwgd29yay4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIW1f
bnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBbnkgd2FpdGlu
ZyBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGp1c3QgcnVubmluZyB0aGUgU2xvdFZpc2l0b3IuCisg
ICAgICAgICAgICAgICAgLy8gSSB3b25kZXIgaWYgdGhhdCB3b3VsZCBiZSBwcm9maXRhYmxlLgor
ICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgQ29uc3RyYWludFBhcmFs
bGVsaXNtIHBhcmFsbGVsaXNtID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFp
bnQgPSAqbV9zZXQubV9zZXRbaW5kZXhUb1J1bl07CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICBpZiAoZG9QYXJhbGxlbFdvcmtNb2RlKQorICAgICAgICAgICAgY29uc3RyYWludC5kb1Bh
cmFsbGVsV29yayh2aXNpdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyYWxsZWxp
c20gPSBjb25zdHJhaW50LmV4ZWN1dGUodmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01v
ZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmdldChp
bmRleFRvUnVuKSkgeworICAgICAgICAgICAgICAgICAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVs
LmFwcGVuZChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC50YWtlRmlyc3QoCisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9
PSBpbmRleFRvUnVuOyB9KTsKKyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFs
bGVsU2V0LmNsZWFyKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxpc20oKSA9
PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAgICBt
X251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmstLTsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1
dGVkLnNldChpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxpc20gPT0g
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAgICAgICAgICAgICBt
X3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAg
ICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1dGUoQ29uc3RyYWludFBhcmFsbGVs
aXNtIHBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBtX2V4ZWN1dGVkLnNldChp
bmRleCk7CisgICAgaWYgKHBhcmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwpIHsKKyAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleCk7Cisg
ICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXgpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50U29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlZpc2l0Q291bnRlci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnQ7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKKworY2xhc3MgTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdD
b25zdHJhaW50U29sdmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1
YmxpYzoKKyAgICBNYXJraW5nQ29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYp
OworICAgIH5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpOworICAgIAorICAgIGJvb2wgZGlkVmlz
aXRTb21ldGhpbmcoKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2Ug
eworICAgICAgICBQYXJhbGxlbFdvcmtGaXJzdCwKKyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJz
dAorICAgIH07CisKKyAgICB2b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVk
TGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICAKKyAgICB2
b2lkIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCk7CisgICAgCisgICAgdm9pZCBjb252ZXJn
ZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpOworICAgIAorICAgIHZv
aWQgZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lk
IHJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNj
b3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgCisg
ICAgdm9pZCBkaWRFeGVjdXRlKENvbnN0cmFpbnRQYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgp
OworCisgICAgSGVhcCYgbV9oZWFwOworICAgIFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOwor
ICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKKyAgICBCaXRWZWN0b3IgbV9leGVjdXRl
ZDsKKyAgICBEZXF1ZTx1bnNpZ25lZCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBC
aXRWZWN0b3IgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwg
MzI+IG1fZGlkRXhlY3V0ZUluUGFyYWxsZWw7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV90
b0V4ZWN1dGVTZXF1ZW50aWFsbHk7CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1f
Y29uZGl0aW9uOworICAgIHVuc2lnbmVkIG1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yayB7
IDAgfTsKKyAgICBib29sIG1fcGlja05leHRJc1N0aWxsQWN0aXZlIHsgdHJ1ZSB9OworICAgIFZl
Y3RvcjxWaXNpdENvdW50ZXIsIDE2PiBtX3Zpc2l0Q291bnRlcnM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RT
ZXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3Bh
cXVlUm9vdFNldC5oCShub25leGlzdGVudCkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotY2xhc3MgT3BhcXVlUm9vdFNldCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoT3BhcXVlUm9vdFNldCk7Ci1wdWJsaWM6Ci0gICAgT3BhcXVlUm9vdFNldCgpCi0gICAgICAg
IDogbV9sYXN0UXVlcmllZFJvb3QobnVsbHB0cikKLSAgICAgICAgLCBtX2NvbnRhaW5zTGFzdFF1
ZXJpZWRSb290KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRhaW5zKHZvaWQq
IHJvb3QpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAocm9vdCAhPSBtX2xhc3RRdWVyaWVkUm9v
dCkgewotICAgICAgICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSByb290OwotICAgICAgICAgICAg
bV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IG1fcm9vdHMuY29udGFpbnMocm9vdCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3Rz
LmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1f
cm9vdHMuY2xlYXIoKTsKLSAgICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSBudWxscHRyOwotICAg
ICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9v
bCBhZGQodm9pZCogcm9vdCkKLSAgICB7Ci0gICAgICAgIGlmIChyb290ID09IG1fbGFzdFF1ZXJp
ZWRSb290KQotICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IHRydWU7Ci0g
ICAgICAgIHJldHVybiBtX3Jvb3RzLmFkZChyb290KS5pc05ld0VudHJ5OwotICAgIH0KLQotICAg
IGludCBzaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLnNpemUoKTsK
LSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBI
YXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3Jvb3RzLmVuZCgpOwotICAgIH0KLQotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8
dm9pZCo+IG1fcm9vdHM7Ci0gICAgbXV0YWJsZSB2b2lkKiBtX2xhc3RRdWVyaWVkUm9vdDsKLSAg
ICBtdXRhYmxlIGJvb2wgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3Vy
Y2VBZGFwdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJl
ZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlw
ZSwgdHlwZW5hbWUgSW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorY2xhc3MgUGFyYWxs
ZWxTb3VyY2VBZGFwdGVyIDogcHVibGljIFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+IHsKK3B1Ymxp
YzoKKyAgICBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBl
KCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53cmFwRnVuYykKKyAgICAgICAg
OiBtX291dGVyU291cmNlKG91dGVyU291cmNlKQorICAgICAgICAsIG1fdW53cmFwRnVuYyh1bndy
YXBGdW5jKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5uZXJUeXBlIHJ1bigpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIGlmIChtX2lubmVyU291cmNlKSB7CisgICAgICAgICAgICAgICAg
aWYgKElubmVyVHlwZSByZXN1bHQgPSBtX2lubmVyU291cmNlLT5ydW4oKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBtX2lubmVyU291cmNlID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbm5l
clNvdXJjZSA9IG1fdW53cmFwRnVuYyhtX291dGVyU291cmNlLT5ydW4oKSk7CisgICAgICAgIH0g
d2hpbGUgKG1faW5uZXJTb3VyY2UpOworICAgICAgICByZXR1cm4gSW5uZXJUeXBlKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gbV9vdXRl
clNvdXJjZTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxJbm5lclR5cGUoKT4+IG1faW5uZXJTb3Vy
Y2U7CisgICAgVW53cmFwRnVuYyBtX3Vud3JhcEZ1bmM7CisgICAgTG9jayBtX2xvY2s7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5h
bWUgVW53cmFwRnVuYz4KK1JlZjxQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBlLCBJbm5l
clR5cGUsIFVud3JhcEZ1bmM+PiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNo
YXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53
cmFwRnVuYykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXJhbGxlbFNvdXJjZUFkYXB0
ZXI8T3V0ZXJUeXBlLCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+KG91dGVyU291cmNlLCB1bndyYXBG
dW5jKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBs
ZU1hcmtpbmdDb25zdHJhaW50KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5n
IG5hbWUsCisgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlv
biwKKyAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3Vy
cmVuY3kgY29uY3VycmVuY3kpCisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJl
dmlhdGVkTmFtZSksIFdURk1vdmUobmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBDb25z
dHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihX
VEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCit7Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKQoreworfQorCitDb25zdHJhaW50UGFyYWxsZWxp
c20gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIHJldHVybiBDb25z
dHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWlu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3Ry
YWludC5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhpcyBhbGxvd3MgZm9yIGFuIGluZm9ybWFsIHdheSB0byBkZWZpbmUgY29uc3RyYWludHMu
IEp1c3QgcGFzcyBhIGxhbWJkYSB0byB0aGUgY29uc3RydWN0b3IuIFRoZSBvbmx5CisvLyBkb3du
c2lkZSBpcyB0aGF0IHRoaXMgbWFrZXMgaXQgaGFyZCBmb3IgY29uc3RyYWludHMgdG8gYmUgc3Rh
dGVmdWwsIHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBiZQorLy8gcGFyYWxsZWwuIElu
IHRob3NlIGNhc2VzLCBpdCdzIGVhc2llciB0byBqdXN0IHN1YmNsYXNzIE1hcmtpbmdDb25zdHJh
aW50LgorY2xhc3MgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0
cmFpbnQgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50KAorICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAor
ICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFp
bnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50
Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5T
aW1wbGVNYXJraW5nQ29uc3RyYWludCgpOworICAgIAorcHJpdmF0ZToKKyAgICBDb25zdHJhaW50
UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDkgKzk4LDcgQEAgU2xv
dFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFy
a2luZygpCiB7Ci0gICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlv
blNjb3BlOjpGdWxsKQotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1w
dHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cuCi0gICAgZWxzZQorICAgIGlmICho
ZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbikKICAgICAg
ICAgcmVzZXQoKTsKIAogICAgIGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IHZtKCku
aGVhcFByb2ZpbGVyKCkpCkBAIC0xMTEsNyArMTA5LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlk
U3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogewotICAgIFJFTEVB
U0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAw
OwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyID0gbnVs
bHB0cjsKQEAgLTIyMyw3ICsyMjAsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxP
ckF1eGlsaWFyCiAgICAgfSB9CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlND
ZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCit2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeUZlbmNlIGRlcGVuZGVuY3kpCiB7CiAgICAg
aWYgKFVOTElLRUxZKG1faGVhcFNuYXBzaG90QnVpbGRlcikpCiAgICAgICAgIG1faGVhcFNuYXBz
aG90QnVpbGRlci0+YXBwZW5kRWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsKTsKQEAgLTIzMSwxMiAr
MjI4LDEyIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFNsb3coSlNDZWxsKiBjZWwKICAgICBh
cHBlbmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kSGlkZGVuU2xvdyhKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5j
eSkKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiBjZWxsLCBEZXBl
bmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsKICAgICBhcHBlbmRIaWRkZW5TbG93SW1wbChjZWxs
LCBkZXBlbmRlbmN5KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRIaWRkZW5TbG93SW1wbChKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKK0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuU2xvd0ltcGwoSlNDZWxs
KiBjZWxsLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsKICAgICBBU1NFUlQoIW1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKTsKIApAQCAtMjUxLDcgKzI0OCw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGFpbmVyVHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0
TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0Nl
bGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29u
dGFpbmVyLCBKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3lGZW5jZSBkZXBlbmRlbmN5KQogewogICAg
IGlmIChjb250YWluZXIudGVzdEFuZFNldE1hcmtlZChjZWxsLCBkZXBlbmRlbmN5KSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjc3LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRv
TWFya1N0YWNrKEpTQ2UKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUm
IGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAg
ICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFy
a2VkKCk7CkBAIC0zNDYsNyArMzQzLDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZChjZWxsKSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50
Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKQEAgLTQzNSw3ICs0MzIsNyBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6dXBk
YXRlTXV0YXRvcklzU3RvcHBlZChjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0gICAgbV9tdXRh
dG9ySXNTdG9wcGVkID0gKG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICBtX211dGF0b3JJ
c1N0b3BwZWQgPSAobV9oZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3Rv
cHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKCkKQEAgLTQ1Miw3ICs0NDksNyBAQCBib29sIFNsb3RWaXNpdG9yOjpoYXNBY2tub3dsZWRn
ZWRUaGF0VGhlCiAKIGJvb2wgU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAuY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JT
dG9wcGVkTXV0YXRvcik7CisgICAgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFw
LndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4
ICs0ODcsNiBAQCBORVZFUl9JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAg
ICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxl
bCgpOwogICAgIH0KLSAgICAKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBT
bG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVz
dGVkKQpAQCAtNTUwLDcgKzU0NSw2IEBAIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3Jl
bWVudE9mRHIKICAgICB9CiAKICAgICBkb25hdGVBbGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5
KCk7CiAKICAgICByZXR1cm4gYnl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1NSwxNiBA
QCBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlk
UmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFj
aFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRp
ZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBy
ZXR1cm4gaXNFbXB0eSgpCi0gICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFs
bGVsTWFya2VycwotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKQotICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFy
a2VycworICAgICAgICAmJiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9y
OjpoYXNXb3JrKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5t
X3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5
KCkKKyAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCk7CiB9CiAKQEAgLTU4MywxMiArNTc2LDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6
U2hhcmVkRHJhaW5SZXMKIAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBi
b251c1Rhc2s7CisgICAgICAgIAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZl
KQogICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
LS07CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMr
KzsKLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1h
c3RlckRyYWluKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYyNCw1MSBAQCBO
RVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAg
ICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5t
X2JvbnVzVmlzaXRvclRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3Bh
cmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFw
Lm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAm
JiBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rh
c2sgPSBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZd
IChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwog
ICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAo
Ym9udXNUYXNrKSB7CisgICAgICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGlsbCBiZSBydW5u
aW5nLCBhbmQgbWF5IHJ1biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRoZSB0YXNrCisg
ICAgICAgICAgICAvLyBvdXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFyb3VuZCB0cnlp
bmcgdG8gcnVuIHRoZSB0YXNrLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisgICAgICAgICAg
ICAgICAgICAgIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgIGJvbnVzVGFzayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFy
a2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHkoKSk7CisgICAg
ICAgICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaXNB
Y3RpdmUgPSB0cnVlOwogICAgIH0KIH0KQEAgLTY3MCwxNSArNjg4LDE5IEBAIFNsb3RWaXNpdG9y
OjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZH
Q01hcmtlcnMoKSA9PSAxCiAgICAgICAgIHx8IChtX2hlYXAubV93b3JsZFN0YXRlLmxvYWQoKSAm
IEhlYXA6Om11dGF0b3JXYWl0aW5nQml0KQogICAgICAgICB8fCAhbV9oZWFwLmhhc0hlYXBBY2Nl
c3MoKQotICAgICAgICB8fCBtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQoKSkgeworICAgICAgICB8fCBtX2hlYXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAg
ICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBvdmVyIGRyYWluSW5QYXJhbGxlbCgpIHdoZW4g
d2UgaGF2ZSBhIGNvbmN1cnJlbnQgbXV0YXRvciBidXQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0
IGlzIG5vdCBwcm9maXRhYmxlLgogICAgICAgICByZXR1cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVv
dXQpOwogICAgIH0KIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRl
eCk7Ci0gICAgZG9uYXRlQWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9uYXRlQWxsKGhvbGRMb2Nr
KG1faGVhcC5tX21hcmtpbmdNdXRleCkpOworICAgIHJldHVybiB3YWl0Rm9yVGVybWluYXRpb24o
dGltZW91dCk7Cit9CisKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRv
cjo6d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgZm9yICg7Oykg
ewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CkBAIC03MTEsNjEgKzczMyw2IEBAIHZvaWQgU2xv
dFZpc2l0b3I6OmRvbmF0ZUFsbChjb25zdCBBYnN0cmEKICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZE9w
YXF1ZVJvb3Qodm9pZCogcm9vdCkKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290cykKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKLSAgICAg
ICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX2hl
YXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUg
ZXZlcnkgb25jZSBpbgotICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2Fs
IHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0
YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotfQotCi1ib29sIFNsb3RWaXNp
dG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJv
b3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoIW1faXNJblBhcmFs
bGVsTW9kZSk7Ci0gICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3Qp
OwotfQotCi1UcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUo
dm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBGYWxz
ZVRyaVN0YXRlOwotICAgIAotICAgIGlmIChtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQot
ICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwotICAgIGlmIChtX2hlYXAubV9vcGFxdWVS
b290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vz
c2FyeSgpCi17Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJn
ZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVz
aG9sZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotICAg
IAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAgICBpZiAoIW1faXNJblBhcmFsbGVs
TW9kZSkgewpAQCAtNzg1LDE2ICs3NTIsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmRE
cmFpbihNb25vdG9uCiAgICAgZHJhaW4odGltZW91dCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6
Om1lcmdlT3BhcXVlUm9vdHMoKQotewotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgICAgIGZvciAoYXV0byog
cm9vdCA6IG1fb3BhcXVlUm9vdHMpCi0gICAgICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5h
ZGQocm9vdCk7Ci0gICAgfQotICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLX0KLQogdm9pZCBT
bG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVz
dGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1
ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUg
Ik9wYXF1ZVJvb3RTZXQuaCIKICNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3
dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk1
LDEwICs5NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpT
VmFsdWUpOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOworICAgIGJvb2wg
YWRkT3BhcXVlUm9vdCh2b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3
LgogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZv
aWQqKSBjb25zdDsKLSAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lk
KikgY29uc3Q7CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogCiAg
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYg
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKQEAgLTEyMSw2ICsxMTksOCBAQCBwdWJsaWM6
CiAKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0
aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1
bHQgZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIAorICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRG
b3JUZXJtaW5hdGlvbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKIAogICAgIC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRy
YWluaW5nIHRoYXQgaW52b2x2ZXMgb25seSB3YWxraW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4g
VGhpcwogICAgIC8vIGlzIGxpa2VseSB0byBhY2NpZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3Mg
dGhhbiB0aGF0LiBJdCB3aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpA
QCAtMTI4LDggKzEyOCw2IEBAIHB1YmxpYzoKICAgICAvLyByYXJlIGNhc2VzIGhhcHBlbiB0ZW1w
b3JhcmlseSBldmVuIGlmIHdlJ3JlIG5vdCByZWFjaGluZyB0ZXJtaW5hdGlvbikuCiAgICAgc2l6
ZV90IHBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKHNpemVfdCBieXRlcyk7CiAgICAgCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZUlmTmVjZXNzYXJ5KCk7Ci0KICAgICAvLyBUaGlz
IGluZm9ybXMgdGhlIEdDIGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUg
a2VlcGluZyBhbGl2ZS4gSWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFj
ZSB3aWxsIGJlIGZyZWVkIGF0IGVuZCBvZiBHQy4KICAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29u
c3Qgdm9pZCogYmFzZSk7CkBAIC0xNzgsMTIgKzE3NiwxMiBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgYXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkoSGVhcENlbGwqKTsKIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYXBwZW5kU2xvdyhKU0NlbGwqLCBEZXBlbmRlbmN5KTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiwgRGVwZW5kZW5jeSk7
Ci0gICAgdm9pZCBhcHBlbmRIaWRkZW5TbG93SW1wbChKU0NlbGwqLCBEZXBlbmRlbmN5KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFNsb3coSlNDZWxsKiwgRGVwZW5kZW5jeUZl
bmNlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZEhpZGRlblNsb3coSlNDZWxs
KiwgRGVwZW5kZW5jeUZlbmNlKTsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblNsb3dJbXBsKEpTQ2Vs
bCosIERlcGVuZGVuY3lGZW5jZSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFp
bmVyVHlwZT4KLSAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5l
clR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5KTsKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVu
ZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5RmVuY2UpOwog
ICAgIAogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CiAgICAgCkBAIC0xOTQs
MTAgKzE5Miw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNl
bGwoSGVhcENlbGwqKTsKICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLQotICAg
IHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9pZCB2aXNpdENo
aWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxl
bCgpOwpAQCAtMjE1LDcgKzIwOSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3RhY2tBcnJheSBt
X2NvbGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwotICAg
IE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVj
dHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIGJvb2wgbV9p
Z25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRlYnVnZ2luZyBt
b2RlLgogICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsOSArNDUsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFVuCiAgICAgaWYgKCFjZWxsKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OworICAgIERlcGVuZGVuY3lGZW5jZSBkZXBlbmRlbmN5
OwogICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKSkgewotICAgICAg
ICBkZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKTsKICAgICAgICAgaWYgKExJS0VMWShjZWxs
LT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkgewogICAgICAgICAgICAgaWYgKExJS0VM
WSghbV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC04
NCw5ICs4Myw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKICAg
ICBpZiAoIWNlbGwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3k7CisgICAgRGVwZW5kZW5jeUZlbmNlIGRlcGVuZGVuY3k7CiAgICAgaWYgKFVOTElLRUxZ
KGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpKSB7Ci0gICAgICAgIGRlcGVuZGVuY3kgPSBudWxs
RGVwZW5kZW5jeSgpOwogICAgICAgICBpZiAoTElLRUxZKGNlbGwtPmxhcmdlQWxsb2NhdGlvbigp
LmlzTWFya2VkKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7CkBAIC0xMzYs
NiArMTM0LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZp
c2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQocHRyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJldHVybiB0
cnVlOworfQorCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZv
aWQqIHB0cikgY29uc3QKK3sKKyAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRh
aW5zKHB0cik7Cit9CisKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKG1faXNGaXJzdFZpc2l0KSB7CkBAIC0x
NTksMTIgKzE3NCwxMiBAQCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAog
CiBpbmxpbmUgVk0mIFNsb3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92
bTsKKyAgICByZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RW
aXNpdG9yOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1
cm4gKm1faGVhcC52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtl
ZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNp
bmNsdWRlICJQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVj
dGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKQEAgLTg4LDUgKzg5
LDQyIEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4g
U3Vic3BhY2U6OnBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDog
cHVibGljIFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgcHVibGljOgorICAg
ICAgICBUYXNrKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2Fs
bG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBNYXJrZWRBbGxv
Y2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRvckluU3Vic3Bh
Y2UoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICAg
ICAgTG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRh
c2sobV9maXJzdEFsbG9jYXRvcikpOworfQorCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9j
azo6SGFuZGxlKigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJj
ZSgpCit7CisgICAgcmV0dXJuIGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxv
Y2F0b3IqLCBNYXJrZWRCbG9jazo6SGFuZGxlKj4oCisgICAgICAgIHBhcmFsbGVsQWxsb2NhdG9y
U291cmNlKCksCisgICAgICAgIFtdIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVm
UHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAgICAgICAgIGlm
ICghYWxsb2NhdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRvci0+cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAg
ICAgIH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNyArNjksMjQgQEAg
cHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQWxs
b2NhdG9yKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRB
bGxvY2F0b3IqKCk+PiBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpOworICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVu
YyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNo
Tm90RW1wdHlNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAgICAgCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVs
Tm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmMmKTsKICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENl
bGwoY29uc3QgRnVuYyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJ
blBhcmFsbGVsKGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAg
ICAgdm9pZCBmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw2ICs4NCw1MyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChj
b25zdCBGCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKFNsb3RWaXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhTdWJzcGFj
ZSYgc3Vic3BhY2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgICAgICA6IG1fc3Vic3BhY2Uo
c3Vic3BhY2UpCisgICAgICAgICAgICAsIG1fYmxvY2tTb3VyY2Uoc3Vic3BhY2UucGFyYWxsZWxO
b3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCkpCisgICAgICAgICAgICAsIG1fZnVuYyhmdW5jKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcnVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKKyAgICAg
ICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25T
dGF0dXMgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGNlbGwsIGtp
bmQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICAgICAgICAgIGlmICghbV9uZWVkVG9WaXNpdExhcmdlQWxsb2Nh
dGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBtX25l
ZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX3N1YnNwYWNlLmZvckVhY2hMYXJnZUFsbG9jYXRpb24oCisg
ICAgICAgICAgICAgICAgWyZdIChMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb24tPmlzTWFya2VkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgYWxsb2NhdGlvbi0+Y2VsbCgpLCBtX3N1YnNwYWNl
Lm1fYXR0cmlidXRlcy5jZWxsS2luZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vic3BhY2UmIG1fc3Vic3BhY2U7Cisg
ICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBtX2Jsb2Nr
U291cmNlOworICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAg
ICAgIGJvb2wgbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgeyB0cnVlIH07CisgICAgfTsK
KyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMsIGZ1bmMpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jJiBmdW5jKQogewogICAgIGZvckVhY2hNYXJrZWRCbG9jaygKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgewor
cHVibGljOgorICAgIFZpc2l0Q291bnRlcigpIHsgfQorICAgIAorICAgIFZpc2l0Q291bnRlcihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCisgICAg
ICAgICwgbV9pbml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1f
dmlzaXRvcjsgfQorICAgIAorICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3Zpc2l0b3ItPnZpc2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291
bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsg
bnVsbHB0ciB9OworICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zp
c2l0aW5nVGltZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgi
Ci0jaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoKLSAgICBWaXNpdGluZ1Rp
bWVvdXQoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCi0gICAgICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKLSAg
ICAgICAgLCBtX3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCi0gICAgICAg
ICwgbV90aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3Qgdmlz
aXRDb3VudChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2aXNpdG9yLnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKLSAgICB9Ci0KLSAg
ICBib29sIGRpZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNp
dG9yKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2
aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZp
c2l0b3IpICYmIGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgot
ICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6ZV90IG1fdmlz
aXRDb3VudEJlZm9yZSB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtCbG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lk
IFdlYWtCbG9jazo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAg
ICAgICBpZiAoY29udGFpbmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1hcmtpbmdWZXJzaW9uLCBq
c1ZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5n
VmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgCiAgICAgICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1Zh
bHVlKSksIHdlYWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zODIsNyArMzgyLDcgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNp
dAogICAgIHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAgICAgbGFz
dE9mZnNldCA9IHN0cnVjdHVyZS0+bGFzdE9mZnNldCgpOwogICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOwotICAgIERlcGVuZGVuY3kgaW5k
ZXhpbmdUeXBlRGVwZW5kZW5jeSA9IGRlcGVuZGVuY3koaW5kZXhpbmdUeXBlKTsKKyAgICBEZXBl
bmRlbmN5RmVuY2UgaW5kZXhpbmdUeXBlRGVwZW5kZW5jeShpbmRleGluZ1R5cGUpOwogICAgIExv
Y2tlcjxKU0NlbGw+IGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwogICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKSB7CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKQEAg
LTM5NiwxMyArMzk2LDEzIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlz
aXQKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgYnV0dGVyZmx5ID0g
Y29uc3VtZSh0aGlzLCBpbmRleGluZ1R5cGVEZXBlbmRlbmN5KS0+YnV0dGVyZmx5KCk7Ci0gICAg
RGVwZW5kZW5jeSBidXR0ZXJmbHlEZXBlbmRlbmN5ID0gZGVwZW5kZW5jeShidXR0ZXJmbHkpOwor
ICAgIGJ1dHRlcmZseSA9IGluZGV4aW5nVHlwZURlcGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+YnV0
dGVyZmx5KCk7CisgICAgRGVwZW5kZW5jeUZlbmNlIGJ1dHRlcmZseURlcGVuZGVuY3koYnV0dGVy
Zmx5KTsKICAgICBpZiAoIWJ1dHRlcmZseSkKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAg
ICBpZiAoY29uc3VtZSh0aGlzLCBidXR0ZXJmbHlEZXBlbmRlbmN5KS0+c3RydWN0dXJlSUQoKSAh
PSBzdHJ1Y3R1cmVJRCkKKyAgICBpZiAoYnV0dGVyZmx5RGVwZW5kZW5jeS5jb25zdW1lKHRoaXMp
LT5zdHJ1Y3R1cmVJRCgpICE9IHN0cnVjdHVyZUlEKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAoY29uc3VtZShzdHJ1Y3R1cmUsIGJ1dHRlcmZseURlcGVuZGVuY3kpLT5sYXN0T2Zm
c2V0KCkgIT0gbGFzdE9mZnNldCkKKyAgICBpZiAoYnV0dGVyZmx5RGVwZW5kZW5jeS5jb25zdW1l
KHN0cnVjdHVyZSktPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxpbmVQcm9wZXJ0
aWVzKHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLCBsYXN0T2Zmc2V0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzU0LDYgKzM1NCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZUFzeW5jSXRlcmF0aW9uID0g
ZmEKICAgICBcCiAgICAgdih1bnNpZ25lZCwgbWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmVi
YWxhbmNlLCAxMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9m
R0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoOCksIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoYm9vbCwgdXNlUGFyYWxsZWxNYXJraW5nQ29uc3RyYWludFNvbHZlciwgdHJ1ZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgb3BhcXVlUm9vdE1lcmdlVGhyZXNo
b2xkLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgbWluSGVhcFV0aWxp
emF0aW9uLCAwLjgsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBtaW5NYXJrZWRC
bG9ja1V0aWxpemF0aW9uLCAwLjksIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5n
R0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkgbmFtZXMuCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzMzNAogICAgIAotICAgIHJldHVy
biAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fZ2xvYmFs
T2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90
b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShzdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFy
a2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAgJiYgKGhhc1BvbHlQcm90bygpIHx8
ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZChzdG9yZWRQcm90b3R5
cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVyaW5nR0MoKSkKLSAgICAgICAgcmV0
dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpOworICAgICAgICByZXR1cm4gSGVh
cDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0
aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE3LTEy
LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3Ry
YWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGRvZXMgc29tZSBjaGFuZ2VzIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIGRvIHBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZzoKKyAgICAg
ICAgCisgICAgICAgIC0gSSBmaW5hbGx5IHJlbW92ZWQgZGVwZW5kZW5jeVdpdGguIFRoaXMgd2Fz
IGEgc2lsbHkgY29uc3RydWN0IHdob3NlIG9ubHkgcHVycG9zZSBpcyB0byBjb25mdXNlCisgICAg
ICAgICAgcGVvcGxlIGFib3V0IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIGRlcGVuZGVuY3kgY2hh
aW4uIEkgdG9vayB0aGF0IGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdyZWFseQorICAgICAgICAgIHNp
bXBsaWZ5IHRoZSBHQydzIHVzZSBvZiBkZXBlbmRlbmN5IGNoYWluaW5nLgorICAgICAgICAKKyAg
ICAgICAgLSBBZGRlZCBtb3JlIGxvZ2ljIHRvIERlcXVlPD4sIHNpbmNlIEkgdXNlIGl0IGZvciBw
YXJ0IG9mIHRoZSBsb2FkIGJhbGFuY2VyLgorICAgICAgICAKKyAgICAgICAgLSBNYWRlIGl0IHBv
c3NpYmxlIHRvIHByb2ZpbGUgbG9jayBjb250ZW50aW9uLiBTZWUKKyAgICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMjUwI2MwIGZvciBzb21lIHByZWxp
bWluYXJ5IG1lYXN1cmVtZW50cy4KKyAgICAgICAgCisgICAgICAgIC0gSW50cm9kdWNlZCBob2xk
TG9ja0lmLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBlcmZvcm0gcHJlZGljYXRlZCBsb2NrIGFj
cXVpc2l0aW9uLiBXZSB1c2UgdGhhdAorICAgICAgICAgIHRvIHBpY2sgYSBsb2NrIGluIFdlYkNv
cmUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpkZXBlbmRlbmN5KToKKyAgICAgICAgKFdU
Rjo6RGVwZW5kZW5jeVdpdGg6OkRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6ZGVwZW5kZW5jeVdpdGgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
ICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50UHRySGFzaFNl
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3Vy
cmVudFB0ckhhc2hTZXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6fkNv
bmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6
OmRlbGV0ZU9sZFRhYmxlcyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojpj
bGVhcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3cpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9Db25j
dXJyZW50UHRySGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhh
c2hTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFk
ZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpzaXplIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjptYXhMb2FkIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6Omhhc2gpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50UHRySGFzaFNldDo6Y2FzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQ
dHJIYXNoU2V0Ojpjb250YWluc0ltcGwgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
UHRySGFzaFNldDo6YWRkSW1wbCk6CisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIChX
VEY6OmlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KToKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxv
Yy5oOgorICAgICAgICAqIHd0Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6Omxv
Y2tTbG93KToKKyAgICAgICAgKiB3dGYvTG9ja2VyLmg6CisgICAgICAgIChXVEY6OmhvbGRMb2Nr
SWYpOgorICAgICAgICAqIHd0Zi9TY29wZWRMYW1iZGEuaDoKKyAgICAgICAgKiB3dGYvU2hhcmVk
VGFzay5oOgorICAgICAgICAoV1RGOjpTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUpOgorICAg
ICAgICAoV1RGOjpTaGFyZWRUYXNrPFJlc3VsdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0
Zi9TdGFja1Nob3QuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6U3RhY2tTaG90
KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpT
dGFja1Nob3Q6OmFycmF5IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6
U3RhY2tTaG90OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90Ojppc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0
b3I+IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpkZWxldGVkVmFsdWVBcnJheSk6
CisgICAgICAgIChXVEY6OlN0YWNrU2hvdEhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpTdGFj
a1Nob3RIYXNoOjplcXVhbCk6CisgICAgICAgICogd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6U3RhY2tTaG90UHJvZmlsZXIp
OgorICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cHJvZmlsZSk6CisgICAgICAgIChX
VEY6OlN0YWNrU2hvdFByb2ZpbGVyOjpydW4pOgorCiAyMDE3LTEyLTAxICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBm
b3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2luIFBC
WEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEY1MjZCMUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJp
bmdNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi87IH07CiAJ
CTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJD
QTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKKwkJMEYzMENCNUExRkNERjEzNDAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJy
ZW50UHRySGFzaFNldC5jcHAgKi87IH07CiAJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBB
dXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAg
Ki87IH07CiAJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3NDFGMjNENDlB
MDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovOyB9OwogCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZE
NkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50
U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4Myw2ICsxODQsOCBAQAogCQkwRjMwQkE4RDFFNzg3MDhF
MDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
MEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzBCQThGMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyog
Q29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJFQjRBIC8q
IExvY2tBbGdvcml0aG1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG1Jbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQwMDND
RkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBX
ZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNiw2ICsyMjksOCBAQAogCQkwRjlE
MzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcgLyogUHJp
bnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRTdHJlYW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDQxRkQxQzM3QjAwNzlDNUIy
IC8qIFN0YWNrU2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1No
b3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDUxRkQxQzM3QjAwNzlD
NUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgx
MEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNo
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdF
Mzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN5c3RlbVRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MCw2ICsy
NTUsNyBAQAogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRjRCNEM0MUU4ODkzOUMwMERCQkU4NiAvKiBMaXZlbmVzcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBh
cmlzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlz
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQkNCRkExRkQzN0UwRjAwNzJB
QUYwIC8qIFN0YW1wZWRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
YW1wZWRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkYxOURBMUJCMzM0
RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVy
UG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBv
b2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZG
MEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC03OTQsNiArODAwLDggQEAKIAkJCQkwRjhGMkI5
MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3
MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJBOUVBQjFGNENENjFF
MDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRjMwQ0I1ODFGQ0RGMTMz
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAorCQkJCTBGMzBDQjU5MUZD
REYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAogCQkJCTBGREI2OThE
MUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQlFMzhDNDEyNjFFQjRFMDY4
MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5NTdE
IC8qIENQVVRpbWUuaCAqLywKQEAgLTEwMDUsMTAgKzEwMTMsMTMgQEAKIAkJCQlBOEE0NzMwRDE1
MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0
MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdGFja0JvdW5kcy5oICovLAorCQkJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBT
dGFja1Nob3QuaCAqLywKKwkJCQkwRjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90
UHJvZmlsZXIuaCAqLywKIAkJCQlGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0
cy5jcHAgKi8sCiAJCQkJRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAq
LywKIAkJCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8sCiAJ
CQkJRUY3RDZDRDU5RDg2NDJBOEEwREE4NkFEIC8qIFN0YWNrVHJhY2UuaCAqLywKKwkJCQkwRkZC
Q0JGQTFGRDM3RTBGMDA3MkFBRjAgLyogU3RhbXBlZExvY2suaCAqLywKIAkJCQlBOEE0NzMxMTE1
MUE4MjVCMDA0MTIzRkYgLyogU3RkTGliRXh0cmFzLmggKi8sCiAJCQkJQzRGOEE5MzYxOUM2NUVC
NDAwQjJCMTVEIC8qIFN0b3B3YXRjaC5oICovLAogCQkJCTFBNkJCNzY4MTYyRjMwMDUwMEREMTZE
QiAvKiBTdHJlYW1CdWZmZXIuaCAqLywKQEAgLTE0MjYsNiArMTQzNyw3IEBACiAJCQkJMEY4MjRB
NjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFGMTc1MkIxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRDb2RlcnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGMTc1MkMxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnREZWNvZGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25j
dXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyRDFGM0Q0ODYw
MDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
RDMzNjIxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQXRv
bWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksMTEzICszMzksMTE3IEBAIGlubGluZSB2b2lk
IGNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCkgeyAKIAogI2VuZGlmCiAKLXR5cGVkZWYgdW5zaWdu
ZWQgRGVwZW5kZW5jeTsKK3R5cGVkZWYgdW5zaWduZWQgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZTsK
IAotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5KCkKK2lubGluZSBJbnRl
cm5hbERlcGVuZGVuY3lUeXBlIHByZXBhcmVPcGFxdWVEZXBlbmRlbmN5SW1wbCgpCiB7CiAgICAg
cmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHMsIHR5cGVuYW1lIFQ+CitpbmxpbmUgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBwcmVwYXJlT3Bh
cXVlRGVwZW5kZW5jeUltcGwoVCB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAg
ICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgLy8gQ3JlYXRlIGEgbWFnaWNh
bCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgot
ICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4g
dXNhYmxlIGFzIGFuIG9mZnNldCBpbgotICAgIC8vIGZ1cnRoZXIgYWRkcmVzcyBjb21wdXRhdGlv
bnM6IGFkZGluZyB6ZXJvIGRvZXMgbm90aGluZywgYnV0IHRoZSBjb21waWxlcgotICAgIC8vIGRv
ZXNuJ3Qga25vdyBpdC4gSXQncyBtYWdpY2FsIGJlY2F1c2UgaXQgY3JlYXRlcyBhbiBhZGRyZXNz
IGRlcGVuZGVuY3kKLSAgICAvLyBmcm9tIHRoZSBsb2FkIG9mIGBsb2NhdGlvbmAgdG8gdGhlIHVz
ZXMgb2YgdGhlIGRlcGVuZGVuY3ksIHdoaWNoIHRyaWdnZXJzCi0gICAgLy8gdGhlIEFSTSBJU0En
cyBhZGRyZXNzIGRlcGVuZGVuY3kgcnVsZSwgYS5rLmEuIHRoZSBteXRoaWNhbCBDKysgY29uc3Vt
ZQotICAgIC8vIG9yZGVyaW5nLiBUaGlzIGZvcmNlcyB3ZWFrIG1lbW9yeSBvcmRlciBDUFVzIHRv
IG9ic2VydmUgYGxvY2F0aW9uYCBhbmQKLSAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIg
c3RvcmUgb3JkZXIgd2l0aG91dCB0aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgotICAgIC8vIG9y
IGFuIGFjcXVpcmUgbG9hZC4KLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAl
d1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAg
OiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5k
ZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRl
bmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAgLy8gTm8gZGVwZW5k
ZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgotICAgIGxvYWRMb2FkRmVuY2Uo
KTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gZGVwZW5kZW5jeTsKKyAgICB1bmlvbiB7CisgICAgICAgIEludGVybmFsRGVw
ZW5kZW5jeVR5cGUgY29weTsKKyAgICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5
ID0gMDsKKyAgICB1LnZhbHVlID0gdmFsdWU7CisgICAgcmV0dXJuIHByZXBhcmVPcGFxdWVEZXBl
bmRlbmN5SW1wbChhcmd1bWVudHMuLi4pICsgdS5jb3B5OwogfQogCi0vLyBGSVhNRTogVGhpcyBj
b2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIGRlcGVuZGVuY3koKSBvdmVybG9h
ZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDUKLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0g
ND46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50MzJfdCBjb3B5
ID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSk7CitjbGFzcyBPcGFxdWVEZXBlbmRlbmN5
IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgT3Bh
cXVlRGVwZW5kZW5jeShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1fdmFsdWUo
cHJlcGFyZU9wYXF1ZURlcGVuZGVuY3lJbXBsKGFyZ3VtZW50cy4uLikpCisgICAgeworICAgICAg
ICBVTlVTRURfUEFSQU0obV92YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBJbnRl
cm5hbERlcGVuZGVuY3lUeXBlIG1fdmFsdWU7Cit9OworCisvLyBPbiBUU08gYXJjaGl0ZWN0dXJl
cywgY29uc3RydWN0aW5nIHRoaXMgaXMgYSBsb2FkLWxvYWQgZmVuY2UgYW5kIGNvbnN1bWluZyBp
dCBpcyBhbiBpZGVudGl0eS4gVGhlCisvLyBsb2FkLWxvYWQgZmVuY2UgaXMgdXN1YWxseSBqdXN0
IGEgY29tcGlsZXIgZmVuY2UuIE9uIEFSTSwgdGhpcyBlbmFibGVzIHlvdSB0byB0aHJlYWQgYW4g
aW52aXNpYmxlCisvLyBkZXBlbmRlbmN5IGZyb20gb25lIHNldCBvZiB2YWx1ZXMgdG8gc29tZSBw
b2ludGVyIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBwb2ludGVyJ3MgdmFsdWUuCitjbGFzcyBEZXBl
bmRlbmN5RmVuY2UgeworcHVibGljOgorICAgIERlcGVuZGVuY3lGZW5jZSgpCisgICAgICAgIDog
bV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIGV4cGxpY2l0IERlcGVuZGVuY3lGZW5jZShBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBpbnB1dCA9IHBy
ZXBhcmVPcGFxdWVEZXBlbmRlbmN5SW1wbChhcmd1bWVudHMuLi4pOworICAgICAgICBJbnRlcm5h
bERlcGVuZGVuY3lUeXBlIG91dHB1dDsKICNpZiBDUFUoQVJNNjQpCi0gICAgYXNtKCJlb3IgJXdb
ZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIi
KGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICAvLyBDcmVh
dGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNzZW1ibHksIHdob3NlIGNv
bXB1dGF0aW9uCisgICAgICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhp
cyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgorICAgICAgICAvLyBmdXJ0aGVy
IGFkZHJlc3MgY29tcHV0YXRpb25zOiBhZGRpbmcgemVybyBkb2VzIG5vdGhpbmcsIGJ1dCB0aGUg
Y29tcGlsZXIKKyAgICAgICAgLy8gZG9lc24ndCBrbm93IGl0LiBJdCdzIG1hZ2ljYWwgYmVjYXVz
ZSBpdCBjcmVhdGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeQorICAgICAgICAvLyBmcm9tIHRoZSBs
b2FkIG9mIGBsb2NhdGlvbmAgdG8gdGhlIHVzZXMgb2YgdGhlIGRlcGVuZGVuY3ksIHdoaWNoIHRy
aWdnZXJzCisgICAgICAgIC8vIHRoZSBBUk0gSVNBJ3MgYWRkcmVzcyBkZXBlbmRlbmN5IHJ1bGUs
IGEuay5hLiB0aGUgbXl0aGljYWwgQysrIGNvbnN1bWUKKyAgICAgICAgLy8gb3JkZXJpbmcuIFRo
aXMgZm9yY2VzIHdlYWsgbWVtb3J5IG9yZGVyIENQVXMgdG8gb2JzZXJ2ZSBgbG9jYXRpb25gIGFu
ZAorICAgICAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIgc3RvcmUgb3JkZXIgd2l0aG91
dCB0aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgorICAgICAgICAvLyBvciBhbiBhY3F1aXJlIGxv
YWQuCisgICAgICAgIGFzbSgiZW9yICV3W291dF0sICV3W2luXSwgJXdbaW5dIgorICAgICAgICAg
ICAgOiBbb3V0XSAiPXIiKG91dHB1dCkKKyAgICAgICAgICAgIDogW2luXSAiciIoaW5wdXQpKTsK
ICNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5d
IgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2lu
XSAiciIoY29weSkpOworICAgICAgICBhc20oImVvciAlW291dF0sICVbaW5dLCAlW2luXSIKKyAg
ICAgICAgICAgIDogW291dF0gIj1yIihvdXRwdXQpCisgICAgICAgICAgICA6IFtpbl0gInIiKGlu
cHV0KSk7CiAjZWxzZQotICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsK
LSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVl
ZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgbG9hZExvYWRGZW5jZSgpOworICAg
ICAgICBvdXRwdXQgPSAwOworICAgICAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwogI2VuZGlmCi0g
ICAgcmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRl
cGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUq
ID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5kZW5jeVdpdGggewotcHVi
bGljOgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBlbmRlbmN5KG51bGxEZXBl
bmRlbmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQorICAgICAgICBtX3ZhbHVlID0gb3V0cHV0Owor
ICAgIH0KKyAgICAKKyAgICBEZXBlbmRlbmN5RmVuY2UoY29uc3QgRGVwZW5kZW5jeUZlbmNlJiBv
dGhlcikKKyAgICAgICAgOiBtX3ZhbHVlKG90aGVyLm1fdmFsdWUpCiAgICAgewogICAgIH0KICAg
ICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZh
bHVlKQotICAgICAgICA6IGRlcGVuZGVuY3koZGVwZW5kZW5jeSkKLSAgICAgICAgLCB2YWx1ZSh2
YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSBUKiBjb25zdW1lKFQq
IHBvaW50ZXIpCiAgICAgeworI2lmIENQVShBUk02NCkgfHwgQ1BVKEFSTSkKKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPihwb2ludGVyKSArIG1fdmFs
dWUpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1fdmFsdWUpOworICAgICAgICByZXR1
cm4gcG9pbnRlcjsKKyNlbmRpZgogICAgIH0KICAgICAKLSAgICBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3k7Ci0gICAgVCB2YWx1ZTsKK3ByaXZhdGU6CisgICAgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBt
X3ZhbHVlOwogfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRUeXBlLCB0eXBlbmFtZSBWYWx1
ZVR5cGU+CitzdHJ1Y3QgSW5wdXRBbmRWYWx1ZSB7CisgICAgSW5wdXRBbmRWYWx1ZSgpIHsgfQog
ICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBl
bmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAg
IHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19CisgICAgSW5w
dXRBbmRWYWx1ZShJbnB1dFR5cGUgaW5wdXQsIFZhbHVlVHlwZSB2YWx1ZSkKKyAgICAgICAgOiBp
bnB1dChpbnB1dCkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIElucHV0VHlwZSBpbnB1dDsKKyAgICBWYWx1ZVR5cGUgdmFsdWU7Cit9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KQordGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5
cGU+CitJbnB1dEFuZFZhbHVlPElucHV0VHlwZSwgVmFsdWVUeXBlPiBpbnB1dEFuZFZhbHVlKElu
cHV0VHlwZSBpbnB1dCwgVmFsdWVUeXBlIHZhbHVlKQogewotI2lmIENQVShBUk02NCkgfHwgQ1BV
KEFSTSkKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBv
aW50ZXIpICsgZGVwZW5kZW5jeSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXBlbmRlbmN5
KTsKLSAgICByZXR1cm4gcG9pbnRlcjsKLSNlbmRpZgorICAgIHJldHVybiBJbnB1dEFuZFZhbHVl
PElucHV0VHlwZSwgVmFsdWVUeXBlPihpbnB1dCwgdmFsdWUpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBGdW5jPgpAQCAtNDY4LDEyICs0NzIsMTAgQEAgQUxXQVlTX0lOTElO
RSBUJiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKgogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5n
IFdURjo6QXRvbWljOwotdXNpbmcgV1RGOjpEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpEZXBlbmRl
bmN5V2l0aDsKLXVzaW5nIFdURjo6Y29uc3VtZTsKLXVzaW5nIFdURjo6ZGVwZW5kZW5jeTsKLXVz
aW5nIFdURjo6ZGVwZW5kZW5jeVdpdGg7Cit1c2luZyBXVEY6Ok9wYXF1ZURlcGVuZGVuY3k7Cit1
c2luZyBXVEY6OkRlcGVuZGVuY3lGZW5jZTsKK3VzaW5nIFdURjo6SW5wdXRBbmRWYWx1ZTsKK3Vz
aW5nIFdURjo6aW5wdXRBbmRWYWx1ZTsKIHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsKLXVzaW5n
IFdURjo6bnVsbERlcGVuZGVuY3k7CiAKICNlbmRpZiAvLyBBdG9taWNzX2gKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZl
Y3Rvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhp
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOworICAg
ICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDEzICs0MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXRtYXBTaXplOwog
ICAgIH0KIAotICAgIGJvb2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5
KCkpIGNvbnN0OworICAgIGJvb2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeUZlbmNlID0gRGVwZW5k
ZW5jeUZlbmNlKCkpIGNvbnN0OwogICAgIHZvaWQgc2V0KHNpemVfdCk7CiAgICAgdm9pZCBzZXQo
c2l6ZV90LCBib29sKTsKICAgICBib29sIHRlc3RBbmRTZXQoc2l6ZV90KTsKICAgICBib29sIHRl
c3RBbmRDbGVhcihzaXplX3QpOwotICAgIGJvb2wgY29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90
LCBEZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKSk7Ci0gICAgYm9vbCBjb25jdXJyZW50VGVz
dEFuZENsZWFyKHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5KCkpOworICAgIGJv
b2wgY29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90LCBEZXBlbmRlbmN5RmVuY2UgPSBEZXBlbmRl
bmN5RmVuY2UoKSk7CisgICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZENsZWFyKHNpemVfdCwgRGVw
ZW5kZW5jeUZlbmNlID0gRGVwZW5kZW5jeUZlbmNlKCkpOwogICAgIHNpemVfdCBuZXh0UG9zc2li
bHlVbnNldChzaXplX3QpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lk
IGNsZWFyQWxsKCk7CkBAIC0xMzYsOSArMTM2LDkgQEAgaW5saW5lIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OkJpdAogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5h
bWUgV29yZFR5cGU+Ci1pbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpn
ZXQoc2l6ZV90IG4sIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkgY29uc3QKK2lubGluZSBib29sIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmdldChzaXplX3QgbiwgRGVwZW5kZW5jeUZlbmNl
IGRlcGVuZGVuY3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplICsg
ZGVwZW5kZW5jeV0gJiAob25lIDw8IChuICUgd29yZFNpemUpKSk7CisgICAgcmV0dXJuICEhKGRl
cGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+Yml0c1tuIC8gd29yZFNpemVdICYgKG9uZSA8PCAobiAl
IHdvcmRTaXplKSkpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUg
V29yZFR5cGU+CkBAIC0xNzcsMTEgKzE3NywxMSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFw
U2l6ZSwgV29yZFR5cGU+CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFt
ZSBXb3JkVHlwZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5
cGU+Ojpjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KQorQUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1
cnJlbnRUZXN0QW5kU2V0KHNpemVfdCBuLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkKIHsK
ICAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwogICAgIHNpemVfdCBp
bmRleCA9IG4gLyB3b3JkU2l6ZTsKLSAgICBXb3JkVHlwZSogZGF0YSA9IGJpdHMuZGF0YSgpICsg
aW5kZXggKyBkZXBlbmRlbmN5OworICAgIFdvcmRUeXBlKiBkYXRhID0gZGVwZW5kZW5jeS5jb25z
dW1lKGJpdHMuZGF0YSgpKSArIGluZGV4OwogICAgIHJldHVybiAhYml0d2lzZV9jYXN0PEF0b21p
YzxXb3JkVHlwZT4qPihkYXRhKS0+dHJhbnNhY3Rpb25SZWxheGVkKAogICAgICAgICBbJl0gKFdv
cmRUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBpZiAodmFsdWUgJiBtYXNrKQpA
QCAtMTkzLDExICsxOTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXpl
LCBXbwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3Vy
cmVudFRlc3RBbmRDbGVhcihzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQorQUxXQVlT
X0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1cnJlbnRUZXN0
QW5kQ2xlYXIoc2l6ZV90IG4sIERlcGVuZGVuY3lGZW5jZSBkZXBlbmRlbmN5KQogewogICAgIFdv
cmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7CiAgICAgc2l6ZV90IGluZGV4ID0g
biAvIHdvcmRTaXplOwotICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5kYXRhKCkgKyBpbmRleCAr
IGRlcGVuZGVuY3k7CisgICAgV29yZFR5cGUqIGRhdGEgPSBkZXBlbmRlbmN5LmNvbnN1bWUoYml0
cy5kYXRhKCkpICsgaW5kZXg7CiAgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRU
eXBlPio+KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCiAgICAgICAgIFsmXSAoV29yZFR5cGUm
IHZhbHVlKSAtPiBib29sIHsKICAgICAgICAgICAgIGlmICghKHZhbHVlICYgbWFzaykpCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDcgQEAgc2V0KFdURl9I
RUFERVJTCiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29t
cGlsZXIuaAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKICAgICBDb25kaXRpb24uaAogICAg
IENyb3NzVGhyZWFkQ29waWVyLmgKICAgICBDcm9zc1RocmVhZFRhc2suaApAQCAtMTMyLDggKzEz
MywxMSBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxs
UHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCisgICAgU3RhY2tTaG90LmgKKyAgICBTdGFja1No
b3RQcm9maWxlci5oCiAgICAgU3RhY2tTdGF0cy5oCiAgICAgU3RhY2tUcmFjZS5oCisgICAgU3Rh
bXBlZExvY2suaAogICAgIFN0ZExpYkV4dHJhcy5oCiAgICAgU3RvcHdhdGNoLmgKICAgICBTdHJp
bmdFeHRyYXMuaApAQCAtMjE4LDYgKzIyMiw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIENQVVRp
bWUuY3BwCiAgICAgQ2xvY2tUeXBlLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAorICAg
IENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAg
IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29u
Y3VycmVudFB0ckhhc2hTZXQuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCitDb25jdXJyZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQo
KQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25j
dXJyZW50UHRySGFzaFNldCgpCit7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRl
bGV0ZU9sZFRhYmxlcygpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMg
bm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1p
Z2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQg
bWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAg
IG1fYWxsVGFibGVzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVl
X3B0cjxUYWJsZT4mIHRhYmxlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS5n
ZXQoKSAhPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAgICAgIH0pOworfQorCit2b2lkIENv
bmN1cnJlbnRQdHJIYXNoU2V0OjpjbGVhcigpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNh
c2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQo
KS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRp
ZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
IAorICAgIAorICAgIG1fYWxsVGFibGVzLmNsZWFyKCk7CisgICAgaW5pdGlhbGl6ZSgpOworfQor
Cit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0Ojppbml0aWFsaXplKCkKK3sKKyAgICBjb25zdGV4
cHIgdW5zaWduZWQgaW5pdGlhbFNpemUgPSAzMjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+
IHRhYmxlID0gVGFibGU6OmNyZWF0ZShpbml0aWFsU2l6ZSk7CisgICAgbV90YWJsZS5zdG9yZVJl
bGF4ZWQodGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKHRhYmxl
KSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZFNsb3coVGFibGUqIHRhYmxl
LCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9p
ZCogcHRyKQoreworICAgIGlmICh0YWJsZS0+bG9hZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJsZS0+
bWF4TG9hZCgpKQorICAgICAgICByZXR1cm4gcmVzaXplQW5kQWRkKHB0cik7CisgICAgCisgICAg
Zm9yICg7OykgeworICAgICAgICB2b2lkKiBvbGRFbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0u
Y29tcGFyZUV4Y2hhbmdlU3Ryb25nKG51bGxwdHIsIHB0cik7CisgICAgICAgIGlmICghb2xkRW50
cnkpIHsKKyAgICAgICAgICAgIGlmIChtX3RhYmxlLmxvYWQoKSAhPSB0YWJsZSkgeworICAgICAg
ICAgICAgICAgIC8vIFdlIGFkZGVkIGFuIGVudHJ5IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVlZCB0
byByZWV4ZWN1dGUgdGhlIGFkZCBvbiB0aGUgbmV3IHRhYmxlLgorICAgICAgICAgICAgICAgIHJl
dHVybiBhZGQocHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChvbGRFbnRyeSA9PSBwdHIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
Y3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVs
YXhlZCgpOworICAgIGlmICh0YWJsZS0+bG9hZC5sb2FkUmVsYXhlZCgpIDwgdGFibGUtPm1heExv
YWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4g
bmV3VGFibGUgPSBUYWJsZTo6Y3JlYXRlKHRhYmxlLT5zaXplICogMik7CisgICAgdW5zaWduZWQg
bWFzayA9IG5ld1RhYmxlLT5tYXNrOworICAgIHVuc2lnbmVkIGxvYWQgPSAwOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgKytpKSB7CisgICAgICAgIHZvaWQqIHB0
ciA9IHRhYmxlLT5hcnJheVtpXS5sb2FkUmVsYXhlZCgpOworICAgICAgICBpZiAoIXB0cikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRl
eCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRl
eDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgQXRvbWljPHZvaWQqPiYgZW50cnlS
ZWYgPSBuZXdUYWJsZS0+YXJyYXlbaW5kZXhdOworICAgICAgICAgICAgdm9pZCogZW50cnkgPSBl
bnRyeVJlZi5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAg
ICAgICAgICAgIGVudHJ5UmVmLnN0b3JlUmVsYXhlZChwdHIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkgIT0g
cHRyKTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGxvYWQrKzsKKyAgICB9CisgICAgCisgICAgbmV3VGFibGUtPmxvYWQuc3Rv
cmVSZWxheGVkKGxvYWQpOworICAgIAorICAgIG1fdGFibGUuc3RvcmUobmV3VGFibGUuZ2V0KCkp
OworICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKG5ld1RhYmxlKSk7Cit9CisKK2Jvb2wg
Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAgcmVz
aXplSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpU
YWJsZTo6Y3JlYXRlKHVuc2lnbmVkIHNpemUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbmN1
cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gcmVzdWx0KG5ldyAoZmFzdE1hbGxvYyhPQkpFQ1RfT0ZG
U0VUT0YoVGFibGUsIGFycmF5KSArIHNpemVvZihBdG9taWM8dm9pZCo+KSAqIHNpemUpKSBUYWJs
ZSgpKTsKKyAgICByZXN1bHQtPnNpemUgPSBzaXplOworICAgIHJlc3VsdC0+bWFzayA9IHNpemUg
LSAxOworICAgIHJlc3VsdC0+bG9hZC5zdG9yZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9yZVJl
bGF4ZWQobnVsbHB0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEg
Y29uY3VycmVudCBoYXNoLWJhc2VkIHNldCBmb3IgcG9pbnRlcnMuIEl0J3Mgb3B0aW1pemVkIGZv
cjoKKy8vCisvLyAtIEhpZ2ggcmF0ZSBvZiBjb250YWlucygpIGNhbGxzLgorLy8gLSBIaWdoIHJh
dGUgb2YgYWRkKCkgY2FsbHMgdGhhdCBkb24ndCBhZGQgYW55dGhpbmcgbmV3LiBhZGQoKSBjYWxs
cyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyAobm9wIGFkZHMpCisvLyAgIGRvbid0IG11dGF0ZSB0
aGUgdGFibGUgYXQgYWxsLgorLy8gLSBOb3QgdG9vIG1hbnkgdGhyZWFkcy4gSSBkb3VidCB0aGlz
IHNjYWxlcyBiZXlvbmQgfjQuIFRob3VnaCwgaXQgbWF5IGFjdHVhbGx5IHNjYWxlIGJldHRlciB0
aGFuIHRoYXQKKy8vICAgaWYgdGhlIHJhdGUgb2Ygbm9wIGFkZHMgaXMgYWJzdXJkbHkgaGlnaC4K
Ky8vCisvLyBJZiB3ZSB3YW50ZWQgdGhpcyB0byBzY2FsZSBiZXR0ZXIsIHRoZSBtYWluIGNoYW5n
ZSB3ZSdkIGhhdmUgdG8gbWFrZSBpcyBob3cgdGhpcyB0YWJsZSBkZXRlcm1pbmVzIHdoZW4KKy8v
IHRvIHJlc2l6ZS4gUmlnaHQgbm93IGl0J3MgYSBzaGFyZWQgY291bnRlci4gV2UgbG9jazt4YWRk
IHRoaXMgY291bnRlci4gT25lIGVhc3kgd2F5IHRvIG1ha2UgdGhhdAorLy8gc2NhbGFibGUgaXMg
dG8gcmVxdWlyZSBlYWNoIHRocmVhZCB0aGF0IHdvcmtzIHdpdGggdGhlIENvbmN1cnJlbnRQdHJI
YXNoU2V0IHRvIHJlZ2lzdGVyIGl0c2VsZiBmaXJzdC4KKy8vIFRoZW4gZWFjaCB0aHJlYWQgd291
bGQgaGF2ZSBzb21lIGRhdGEgc3RydWN0dXJlIHRoYXQgaGFzIGEgY291bnRlci4gV2UgY291bGQg
aW5zdGl0dXRlIHRoZSBwb2xpY3kgdGhhdAorLy8gZWFjaCB0aHJlYWQgc2ltcGx5IGluY3JlbWVu
dHMgaXRzIG93biBsb2FkIGNvdW50ZXIsIGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmUuIFRoZW4s
IGlmIGFueSBzZWFyY2ggdG8KKy8vIHJlc29sdmUgYSBjb2xsaXNpb24gZG9lcyBtb3JlIHRoYW4g
TiBpdGVyYXRpb25zLCB3ZSBjYW4gY29tcHV0ZSBhIGNvbWJpbmVkIGxvYWQgYnkgc3VtbWluZyB0
aGUgbG9hZAorLy8gY291bnRlcnMgb2YgYWxsIG9mIHRoZSB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVz
LgorLy8KKy8vIENvbmN1cnJlbnRQdHJIYXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNlZXMg
YSA5OCUgbm9wIGFkZCByYXRlIGluIFNwZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIGZv
Y3VzZXMgc28gbXVjaCBvbiBjYXNlcyB3aGVyZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdlLgor
Y2xhc3MgQ29uY3VycmVudFB0ckhhc2hTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENv
bmN1cnJlbnRQdHJIYXNoU2V0KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVi
bGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBDb25jdXJyZW50UHRySGFzaFNldCgpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB+Q29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb250YWluc0ltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRkSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHNpemVf
dCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RhYmxlLmxvYWRSZWxheGVk
KCktPmxvYWQubG9hZFJlbGF4ZWQoKTsKKyAgICB9CisgICAgCisgICAgLy8gT25seSBjYWxsIHdo
ZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJl
ZXMgdXAgbWVtb3J5IHdpdGhvdXQgY2hhbmdpbmcKKyAgICAvLyB0aGUgY29udGVudHMgb2YgdGhl
IHRhYmxlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygpOwor
ICAgIAorICAgIC8vIE9ubHkgY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFk
IGNhbiBjYWxsIGFkZCgpLiBUaGlzIGZyZWVzIHVwIGFsbCBtZW1vcnkgZXhjZXB0IGZvcgorICAg
IC8vIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBoYXNodGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgY2xlYXIoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RydWN0IFRhYmxlIHsKKyAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgbWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLyAy
OyB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0YWJs
ZS4KKyAgICAgICAgdW5zaWduZWQgbWFzazsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAg
IEF0b21pYzx1bnNpZ25lZD4gbG9hZDsKKyAgICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsxXTsK
KyAgICB9OworICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0cikKKyAgICB7
CisgICAgICAgIHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChwdHIpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHZvaWQqIGNhc3QoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFQpIDw9IHNpemVvZih2b2lkKiksICJ0eXBlIHRvbyBiaWciKTsKKyAgICAgICAgdW5pb24g
eworICAgICAgICAgICAgdm9pZCogcHRyOworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAg
fSB1OworICAgICAgICB1LnB0ciA9IG51bGxwdHI7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHUucHRyOworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zSW1w
bCh2b2lkKiBwdHIpIGNvbnN0CisgICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxl
LmxvYWRSZWxheGVkKCk7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAg
ICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAg
ICAgdm9pZCogZW50cnkgPSB0YWJsZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAg
ICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGlmIChlbnRyeSA9PSBwdHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQuCisgICAgYm9vbCBh
ZGRJbXBsKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUu
bG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAg
ICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAg
ICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3codGFibGUs
IG1hc2ssIHN0YXJ0SW5kZXgsIGluZGV4LCBwdHIpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09
IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbmRleCA9
IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9
IHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKTsKKworICAgIHZvaWQgcmVzaXpl
SWZOZWNlc3NhcnkoKTsKKyAgICBib29sIHJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpOworICAgIAor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+LCA0PiBtX2FsbFRhYmxlczsKKyAgICBB
dG9taWM8VGFibGUqPiBtX3RhYmxlOyAvLyBUaGlzIGlzIG5ldmVyIG51bGwuCisgICAgTG9jayBt
X2xvY2s7IC8vIFdlIGp1c3QgdXNlIHRoaXMgdG8gY29udHJvbCByZXNpemUgcmFjZXMuCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYs
IGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3Qg
ZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51
bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5z
IGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlRmlyc3QoY29u
c3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBm
b3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lv
biBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiArNTc2LDI1IEBAIGlubGluZSB2
b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBU
IERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXpl
KCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRh
a2VGaXJzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICB3
aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBwcmVwZW5kKHRha2VMYXN0KCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOwor
ICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6
dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9G
YXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsNyBAQCB1c2luZyBXVEY6
OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5FIGlubGluZQogI2Vu
ZGlmCiAKLSNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAotcHVibGljOiBcCisjZGVm
aW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogICAgIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIHZvaWQqIG9wZXJhdG9yIG5l
d1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAgICAgXApAQCAtMjYzLDcgKzI2
MiwxNSBAQCBwdWJsaWM6IFwKICAgICAgICAgQVNTRVJUKGxvY2F0aW9uKTsgXAogICAgICAgICBy
ZXR1cm4gbG9jYXRpb247IFwKICAgICB9IFwKKworI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRCBcCitwdWJsaWM6IFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKIHBy
aXZhdGU6IFwKIHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJU
aGlzTWFjcm8KIAorI2RlZmluZSBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQgXAorICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAordHlwZWRlZiBpbnQgX190aGlzSXNIZXJl
VG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybworCiAjZW5kaWYgLyogV1RGX0Zhc3RNYWxs
b2NfaCAqLwpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3Rm
L0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTYgQEAKICNpbmNsdWRlICJM
b2NrLmgiCiAKICNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaD4KKyNpbmNsdWRl
IDx3dGYvU3RhY2tTaG90UHJvZmlsZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKK3N0YXRpYyBj
b25zdGV4cHIgYm9vbCBwcm9maWxlTG9ja0NvbnRlbnRpb24gPSBmYWxzZTsKKwogdm9pZCBMb2Nr
QmFzZTo6bG9ja1Nsb3coKQogeworICAgIGlmIChwcm9maWxlTG9ja0NvbnRlbnRpb24pCisgICAg
ICAgIFNUQUNLX1NIT1RfUFJPRklMRSg0LCAyLCA1KTsKICAgICBEZWZhdWx0TG9ja0FsZ29yaXRo
bTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvTG9ja0FsZ29y
aXRobS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIGZpZWxkLiBUaGUg
bGltaXQgb2Ygb25lIGxvY2sgaXMgZHVlIHRvIHRoZSB1c2Ugb2YgdGhlIGZpZWxkJ3MgYWRkcmVz
cyBhcyBhIGtleSB0byBmaW5kIHRoZSBsb2NrJ3MKIC8vIHF1ZXVlLgogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQ+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK3N0cnVjdCBFbXB0eUxvY2tIb29rcyB7Cisg
ICAgc3RhdGljIExvY2tUeXBlIGxvY2tIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1
ZTsgfQorICAgIHN0YXRpYyBMb2NrVHlwZSB1bmxvY2tIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZTsgfQorICAgIHN0YXRpYyBMb2NrVHlwZSBwYXJrSG9vayhMb2NrVHlwZSB2YWx1
ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICBzdGF0aWMgTG9ja1R5cGUgaGFuZG9mZkhvb2soTG9j
a1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBM
b2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQsIHR5cGVu
YW1lIEhvb2tzID0gRW1wdHlMb2NrSG9va3M8TG9ja1R5cGU+PgogY2xhc3MgTG9ja0FsZ29yaXRo
bSB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIHN0YXRpYyBj
b25zdCBMb2NrVHlwZSBtYXNrID0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0OwpAQCAtNDMsNyAr
NTEsNyBAQCBjbGFzcyBMb2NrQWxnb3JpdGhtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBs
b2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVt
b3J5X29yZGVyX2FjcXVpcmUpOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKDAsIEhvb2tzOjpsb2NrSG9vayhpc0hlbGRCaXQpLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1
aXJlKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3QoQXRvbWljPExvY2tU
eXBlPiYgbG9jaykKQEAgLTUzLDYgKzYxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSAmIGlzSGVsZEJpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgIHZhbHVlIHw9IGlzSGVsZEJpdDsKKyAgICAgICAgICAgICAgICB2YWx1
ZSA9IEhvb2tzOjpsb2NrSG9vayh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7
CkBAIC02NywxNyArNzYsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRyeUxvY2soQXRv
bWljPExvY2tUeXBlPiYgbG9jaykKICAgICB7CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAg
ICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0
KQorICAgICAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmIGlzSGVs
ZEJpdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobG9j
ay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUg
fCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQorICAgICAgICAgICAgaWYg
KGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50VmFsdWUsIEhvb2tzOjpsb2NrSG9vayhj
dXJyZW50VmFsdWUgfCBpc0hlbGRCaXQpLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRp
YyBib29sIHVubG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRvbWljPExvY2tUeXBlPiYgbG9jaykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAw
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFy
ZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIEhvb2tzOjp1bmxvY2tIb29rKDApLCBzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxlYXNlKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFz
dChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQpAQCAtODcsNiArOTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIG1hc2spICE9IGlzSGVsZEJpdCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIHZhbHVlICY9IH5pc0hlbGRC
aXQ7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBIb29rczo6dW5sb2NrSG9vayh2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxn
b3JpdGhtSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0
aG1JbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdv
cml0aG1JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrQWxn
b3JpdGhtLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmtpbmdMb3QuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CkBAIC0zNSw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJr
ZWRCaXQ+Ci12b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgaGFzUGFya2Vk
Qml0Pjo6bG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaykKK3RlbXBsYXRlPHR5cGVuYW1l
IExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdCwgdHlw
ZW5hbWUgSG9va3M+Cit2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgaGFz
UGFya2VkQml0LCBIb29rcz46OmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCiB7CiAg
ICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24g
cGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3Bp
bkxpbWl0ID0gNDA7CkBAIC00NCwxNSArNDUsMTcgQEAgdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tU
eXBlLCBpc0hlbGRCaXQsIAogICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CiAgICAgCiAgICAg
Zm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQo
KTsKKyAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gbG9jay5sb2FkKCk7CiAgICAgICAg
IAogICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCi0gICAgICAgIGlm
ICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAmJiBsb2NrLmNv
bXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlz
SGVsZEJpdCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1
ZSAmIGlzSGVsZEJpdCkpIHsKKyAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoY3VycmVudFZhbHVlLCBIb29rczo6bG9ja0hvb2soY3VycmVudFZhbHVlIHwgaXNIZWxkQml0
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZl
bid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KLSAgICAg
ICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwg
c3BpbkxpbWl0KSB7CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJpdCkg
JiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CiAgICAgICAgICAgICBzcGluQ291bnQrKzsKICAg
ICAgICAgICAgIFRocmVhZDo6eWllbGQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjAs
MTMgKzYzLDI1IEBAIHZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKIAog
ICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgcGFya2Vk
IGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKICAgICAgICAgLy8g
aWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRpbmcgaXQu
Ci0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCi0gICAgICAg
ICAgICAmJiAhbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJl
bnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJpdCkpIHsKKyAgICAgICAgICAgIExv
Y2tUeXBlIG5ld1ZhbHVlID0gSG9va3M6OnBhcmtIb29rKGN1cnJlbnRWYWx1ZSB8IGhhc1Bhcmtl
ZEJpdCk7CisgICAgICAgICAgICBpZiAoIWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50
VmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGN1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoIShjdXJyZW50VmFsdWUgJiBpc0hlbGRCaXQpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJM
b2NrIG5vdCBoZWxkIVxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJp
dCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkxvY2sgbm90IHBhcmtlZCFcbiIpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogCiAgICAgICAg
IC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxv
bmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KICAgICAgICAgUGFya2luZ0xvdDo6
UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVB
bmRQYXJrKCZsb2NrLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0
KTsKKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZsb2NrLCBjdXJyZW50
VmFsdWUpOwogICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtlZCkgewogICAgICAgICAg
ICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUb2tlbj4ocGFya1Jlc3VsdC50b2tlbikpIHsKICAgICAg
ICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKQEAgLTg3LDggKzEwMiw4IEBAIHZvaWQgTG9ja0Fs
Z29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4K
LXZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCBoYXNQYXJrZWRCaXQ+Ojp1
bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNzKQordGVt
cGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUgaGFz
UGFya2VkQml0LCB0eXBlbmFtZSBIb29rcz4KK3ZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwg
aXNIZWxkQml0LCBoYXNQYXJrZWRCaXQsIEhvb2tzPjo6dW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5
cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVzcykKIHsKICAgICAvLyBXZSBjb3VsZCBnZXQgaGVy
ZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWlsZWQgc3B1cmlvdXNseSwgb3Ig
YmVjYXVzZSB0aGVyZSBpcwogICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENB
UyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxk
CkBAIC0xMDAsNyArMTE1LDcgQEAgdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRC
aXQsIAogICAgICAgICAgICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQg
fCBoYXNQYXJrZWRCaXQpKTsKICAgICAgICAgCiAgICAgICAgIGlmICgob2xkQnl0ZVZhbHVlICYg
bWFzaykgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFu
Z2VXZWFrKG9sZEJ5dGVWYWx1ZSwgb2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpCisgICAgICAg
ICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgSG9va3M6OnVu
bG9ja0hvb2sob2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xMjAsMTIgKzEzNSwy
MSBAQCB2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgCiAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZhaXIgfHwg
cmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
dW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRoZSB0aHJlYWQg
dGhhdCB3YXMKICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGluZy4KKyAgICAgICAgICAgICAg
ICAgICAgbG9jay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoTG9j
a1R5cGUmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2Nr
VHlwZSBuZXdWYWx1ZSA9IEhvb2tzOjpoYW5kb2ZmSG9vayh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09IHZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBuZXdWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRGlyZWN0SGFuZG9mZjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKICAgICAgICAgICAgICAgICAgICAgWyZd
IChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgJj0gfm1hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEhvb2tzOjp1bmxv
Y2tIb29rKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2
ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IGhhc1Bh
cmtlZEJpdDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291
cmNlL1dURi93dGYvTG9ja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja2Vy
LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgTG9ja2VyX2gKIAogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02NCw2ICs2NSw3
IEBAIHB1YmxpYzoKIAogICAgIH5Mb2NrZXIoKQogICAgIHsKKyAgICAgICAgY29tcGlsZXJGZW5j
ZSgpOwogICAgICAgICBpZiAobV9sb2NrYWJsZSkKICAgICAgICAgICAgIG1fbG9ja2FibGUtPnVu
bG9jaygpOwogICAgIH0KQEAgLTEwOCw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgaWYgKG1fbG9ja2FibGUpCiAgICAgICAgICAgICBtX2xvY2thYmxlLT5sb2NrKCk7CisgICAg
ICAgIGNvbXBpbGVyRmVuY2UoKTsKICAgICB9CiAgICAgCiAgICAgVCogbV9sb2NrYWJsZTsKQEAg
LTEyMiw2ICsxMjUsMTIgQEAgTG9ja2VyPExvY2tUeXBlPiBob2xkTG9jayhMb2NrVHlwZSYgbG9j
awogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK0xvY2tlcjxMb2NrVHlwZT4gaG9s
ZExvY2tJZihMb2NrVHlwZSYgbG9jaywgYm9vbCBwcmVkaWNhdGUpCit7CisgICAgcmV0dXJuIExv
Y2tlcjxMb2NrVHlwZT4ocHJlZGljYXRlID8gJmxvY2sgOiBudWxscHRyKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2NrZXI8TG9ja1R5cGU+IHRyeUhvbGRMb2NrKExvY2tU
eXBlJiBsb2NrKQogewogICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+Ojp0cnlMb2NrKGxvY2sp
OwpAQCAtMTM0LDUgKzE0Myw2IEBAIHVzaW5nIFdURjo6TG9ja2VyOwogdXNpbmcgV1RGOjpOb0xv
Y2tpbmdOZWNlc3NhcnlUYWc7CiB1c2luZyBXVEY6Ok5vTG9ja2luZ05lY2Vzc2FyeTsKIHVzaW5n
IFdURjo6aG9sZExvY2s7Cit1c2luZyBXVEY6OmhvbGRMb2NrSWY7CiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL1Nj
b3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDEzIEBAIHByaXZhdGU6
CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFscmVhZHkgcmVmZXIgdG8gYSBmdW5jdG9yIGJ5
IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBsaWZldGltZSBpcwogLy8gZ29vZC4gVGhpcyBq
dXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhhdCBwb2ludHMgdG8geW91ciBmdW5jdG9yLgor
Ly8KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGFsd2F5cyB3cm9uZzoKKy8vCisvLyBhdXRvIHJlZiA9
IHNjb3BlZExhbWJkYVJlZihbLi4uXSAoLi4uKSB7Li4ufSk7CisvLworLy8gQmVjYXVzZSB0aGUg
c2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIgdG8gdGhlIGxhbWJkYSBieSByZWZlcmVuY2UsIGFu
ZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVyIHRoZQorLy8gc2VtaWNvbG9uLiBVc2Ugc2NvcGVk
TGFtYmRhKCkgaW4gdGhhdCBjYXNlLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0
eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVkTGFtYmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1
bmN0b3I+IHNjb3BlZExhbWJkYVJlZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewpJbmRleDog
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvU2hhcmVk
VGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsK
IC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5
b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJl
ZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUg
KEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRU
YXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewordGVtcGxhdGU8dHlwZW5hbWUg
UGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJl
ZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRSZXN1bHRUeXBlIFJlc3VsdFR5
cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2so
KSB7IH0KIApJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3Rh
Y2tTaG90IHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3QoKSB7IH0KKyAgICAKKyAgICBBTFdBWVNf
SU5MSU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICB7CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgICBtX2FycmF5ID0gc3RkOjptYWtl
X3VuaXF1ZTx2b2lkKltdPihzaXplKTsKKyAgICAgICAgICAgIGludCBpbnRTaXplID0gc2l6ZTsK
KyAgICAgICAgICAgIFdURkdldEJhY2t0cmFjZShtX2FycmF5LmdldCgpLCAmaW50U2l6ZSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGludFNpemUpIDw9
IHNpemUpOworICAgICAgICAgICAgbV9zaXplID0gaW50U2l6ZTsKKyAgICAgICAgICAgIGlmICgh
bV9zaXplKQorICAgICAgICAgICAgICAgIG1fYXJyYXkgPSBudWxscHRyOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIFN0YWNrU2hvdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9hcnJheShkZWxldGVkVmFsdWVBcnJheSgpKQorICAgICAgICAsIG1fc2l6
ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90JiBvcGVyYXRvcj0oY29uc3Qg
U3RhY2tTaG90JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx2b2lkKltd
PiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4ob3RoZXIubV9zaXplKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG90aGVyLm1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIG5l
d0FycmF5W2ldID0gb3RoZXIubV9hcnJheVtpXTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIubV9z
aXplOworICAgICAgICBtX2FycmF5ID0gV1RGTW92ZShuZXdBcnJheSk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90KGNvbnN0IFN0YWNrU2hvdCYgb3Ro
ZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2b2lk
KiogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LmdldCgpOyB9CisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2FycmF5OyB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV9zaXplICE9IG90aGVyLm1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3NpemU7IGktLTspIHsKKyAgICAgICAgICAg
IGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1fYXJyYXlbaV0pCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBtX3NpemU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0g
bV9zaXplOyBpLS07KQorICAgICAgICAgICAgcmVzdWx0IF49IFB0ckhhc2g8dm9pZCo+OjpoYXNo
KG1fYXJyYXlbaV0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fc2l6ZSAmJiBtX2FycmF5LmdldCgpID09IGRlbGV0ZWRWYWx1ZUFycmF5
KCk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgU3BlY3RydW08PiBoYXBweS4KKyAgICBib29s
IG9wZXJhdG9yPihjb25zdCBTdGFja1Nob3QmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCoqIGRlbGV0ZWRWYWx1ZUFycmF5KCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KKyAg
ICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbV9hcnJheTsKKyAgICBzaXplX3QgbV9z
aXplIHsgMCB9OworfTsKKworc3RydWN0IFN0YWNrU2hvdEhhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYgc2hvdCkgeyByZXR1cm4gc2hvdC5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdGFja1Nob3QmIGEsIGNvbnN0IFN0YWNrU2hv
dCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0YWNr
U2hvdD4geworICAgIHR5cGVkZWYgU3RhY2tTaG90SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U3RhY2tTaG90PiB7IH07CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9m
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgor
I2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+Cisj
aW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFN0YWNr
U2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3RQcm9maWxlcih1bnNpZ25lZCBu
dW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCwgdW5zaWduZWQgc3RhY2tzVG9SZXBvcnQp
CisgICAgICAgIDogbV9udW1GcmFtZXMobnVtRnJhbWVzKQorICAgICAgICAsIG1fZnJhbWVzVG9T
a2lwKGZyYW1lc1RvU2tpcCkKKyAgICAgICAgLCBtX3N0YWNrc1RvUmVwb3J0KHN0YWNrc1RvUmVw
b3J0KQorICAgIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIlN0YWNrU2hvdFByb2ZpbGVyIiwg
W3RoaXNdICgpIHsgcnVuKCk7IH0pOworICAgIH0KKworICAgIC8vIE5FVkVSX0lOTElORSBzbyB0
aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0YWJsZS4KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBw
cm9maWxlKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAgICAgbV9wcm9maWxlLmFkZChTdGFja1Nob3QobV9udW1GcmFtZXMgKyBtX2ZyYW1lc1Rv
U2tpcCkpOworICAgICAgICBtX3RvdGFsQ291bnQrKzsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICBzbGVlcCgxX3MpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICAgICAgYXV0byBsaXN0ID0gbV9wcm9maWxlLmJ1aWxkTGlzdCgpOwor
ICAgICAgICAgICAgZGF0YUxvZygiXG5Ib3R0ZXN0IHN0YWNrcyBpbiAiLCBnZXRDdXJyZW50UHJv
Y2Vzc0lEKCksICI6XG4iKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUo
KSwgY291bnQgPSAwOyBpLS0gJiYgY291bnQgPCBtX3N0YWNrc1RvUmVwb3J0OyBjb3VudCsrKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBsaXN0W2ldOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIlxuVG9wICMiLCBjb3VudCArIDEsICIgc3RhY2s6ICIsIGVudHJ5LmNvdW50ICog
MTAwIC8gbV90b3RhbENvdW50LCAiJVxuIik7CisgICAgICAgICAgICAgICAgU3RhY2tUcmFjZSB0
cmFjZShlbnRyeS5rZXkuYXJyYXkoKSArIG1fZnJhbWVzVG9Ta2lwLCBlbnRyeS5rZXkuc2l6ZSgp
IC0gbV9mcmFtZXNUb1NraXApOworICAgICAgICAgICAgICAgIGRhdGFMb2codHJhY2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBXb3JkTG9jayBtX2xvY2s7CisgICAgU3BlY3RydW08U3RhY2tTaG90LCBkb3Vi
bGU+IG1fcHJvZmlsZTsKKyAgICBkb3VibGUgbV90b3RhbENvdW50IHsgMCB9OworICAgIHVuc2ln
bmVkIG1fbnVtRnJhbWVzOworICAgIHVuc2lnbmVkIG1fZnJhbWVzVG9Ta2lwOworICAgIHVuc2ln
bmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9OworCisjZGVmaW5lIFNUQUNLX1NIT1RfUFJPRklMRShu
dW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tzVG9SZXBvcnQpIGRvIHsgXAorICAgIHN0YXRp
YyBTdGFja1Nob3RQcm9maWxlciogc3RhY2tTaG90UHJvZmlsZXI7IFwKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJvZmlsZXJPbmNlRmxhZzsgXAorICAgIHN0ZDo6Y2FsbF9v
bmNlKHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWcsIFtdIHsgc3RhY2tTaG90UHJvZmlsZXIgPSBu
ZXcgU3RhY2tTaG90UHJvZmlsZXIobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVw
b3J0KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQcm9maWxlci0+cHJvZmlsZSgpOyBcCit9IHdoaWxl
IChmYWxzZSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0
YW1wZWRMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhbXBlZExvY2suaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFtcGVkTG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24g
b2YgYSBTdGFtcGVkTG9jaywgd2hpY2ggdXNlcyBqdXN0IGFuIGV4Y2x1c2l2ZSBsb2NrIGFzIGEg
ZmFsbGJhY2suIFRoaXMKKy8vIG1ha2VzIHRoZSBsb2NrIHZlcnkgY29tcGFjdC4KKworLy8gRklY
TUU6IEl0J3MgY3VycmVudGx5IG5lY2Vzc2FyeSBmb3IgY2FsbGVycyBvZiBsb2NrKCkvdW5sb2Nr
KCkgdG8gI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oPi4KKy8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMjIKKworY2xhc3MgU3RhbXBlZExv
Y2sgeworICAgIHR5cGVkZWYgdWludHB0cl90IExvY2tUeXBlOworICAgIAorICAgIHN0YXRpYyBj
b25zdGV4cHIgTG9ja1R5cGUgaXNIZWxkQml0ID0gMTsKKyAgICBzdGF0aWMgY29uc3RleHByIExv
Y2tUeXBlIGhhc1BhcmtlZEJpdCA9IDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBt
YXNrID0gMSAmIDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBzaGlmdCA9IDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBzdGFtcFVuaXQgPSA0OworICAgIAorICAgIHN0
cnVjdCBMb2NrSG9va3MgeworICAgICAgICBzdGF0aWMgTG9ja1R5cGUgbG9ja0hvb2soTG9ja1R5
cGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIHN0YW1wVW5p
dDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIExvY2tUeXBlIHVubG9ja0hv
b2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgICAgIHN0YXRpYyBMb2Nr
VHlwZSBwYXJrSG9vayhMb2NrVHlwZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICAgICAg
c3RhdGljIExvY2tUeXBlIGhhbmRvZmZIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1
ZTsgfQorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBp
c0hlbGRCaXQsIGhhc1BhcmtlZEJpdCwgTG9ja0hvb2tzPiBFeGNsdXNpdmVBbGdvcml0aG07Cisg
ICAgCitwdWJsaWM6CisgICAgU3RhbXBlZExvY2soKQorICAgIHsKKyAgICAgICAgbV93b3JkLnN0
b3JlUmVsYXhlZCgwKTsKKyAgICB9CisgICAgCisgICAgflN0YW1wZWRMb2NrKCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgdHJ5TG9jaygpCisgICAgeworICAgICAgICByZXR1cm4gRXhj
bHVzaXZlQWxnb3JpdGhtOjp0cnlMb2NrKG1fd29yZCk7CisgICAgfQorCisgICAgdm9pZCBsb2Nr
KCkKKyAgICB7CisgICAgICAgIEV4Y2x1c2l2ZUFsZ29yaXRobTo6bG9jayhtX3dvcmQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBFeGNsdXNpdmVBbGdv
cml0aG06OnVubG9jayhtX3dvcmQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGVsZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gRXhjbHVzaXZlQWxnb3JpdGhtOjppc0xvY2tlZCht
X3dvcmQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0hlbGQoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIG9ubHkgdGhp
bmcgeW91J3JlIGFsbG93ZWQgdG8gaW5mZXIgZnJvbSB0aGlzIHZhbHVlIGlzIHRoYXQgaWYgaXQn
cyB6ZXJvLCB0aGVuIHlvdSBkaWRuJ3QgZ2V0CisgICAgLy8gYSByZWFsIHN0YW1wLgorICAgIGNs
YXNzIFN0YW1wIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdGFtcCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gb3Ro
ZXIubV92YWx1ZTsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RhbXAmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7IH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFN0YW1wZWRMb2NrOworICAgICAgICAK
KyAgICAgICAgTG9ja1R5cGUgbV92YWx1ZSB7IDAgfTsKKyAgICB9OworICAgIAorICAgIFN0YW1w
IHRyeU9wdGltaXN0aWNSZWFkKCkKKyAgICB7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1
ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiBpc0hlbGRCaXQp
CisgICAgICAgICAgICByZXR1cm4gU3RhbXAoKTsKKyAgICAgICAgcmV0dXJuIGdldFN0YW1wKGN1
cnJlbnRWYWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgdmFsaWRhdGUoU3RhbXAgc3RhbXAp
CisgICAgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgTG9ja1R5cGUg
Y3VycmVudFZhbHVlID0gbV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHJldHVybiBnZXRT
dGFtcChjdXJyZW50VmFsdWUpID09IHN0YW1wOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIGF1dG8gZG9PcHRpbWl6ZWRSZWFkKGNvbnN0IEZ1bmMmIGZ1bmMp
CisgICAgeworICAgICAgICBTdGFtcCBzdGFtcCA9IHRyeU9wdGltaXN0aWNSZWFkKCk7CisgICAg
ICAgIGlmIChzdGFtcCkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jKCk7CisgICAg
ICAgICAgICBpZiAodmFsaWRhdGUoc3RhbXApKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICAgICAgbG9jaygpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGZ1
bmMoKTsKKyAgICAgICAgdW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIC8vIFVzZSB0aGlzIHRvIGNyZWF0ZSBhIHJlYWQgdHJhbnNhY3Rpb24gdXNpbmcg
ZGVwZW5kZW5jeSBjaGFpbnMgb25seS4KKyAgICBJbnB1dEFuZFZhbHVlPExvY2tUeXBlLCBTdGFt
cD4gdHJ5T3B0aW1pc3RpY0ZlbmNlbGVzc1JlYWQoKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUg
Y3VycmVudFZhbHVlID0gbV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlmIChjdXJyZW50
VmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICByZXR1cm4gaW5wdXRBbmRWYWx1ZShjdXJy
ZW50VmFsdWUsIFN0YW1wKCkpOworICAgICAgICByZXR1cm4gaW5wdXRBbmRWYWx1ZShjdXJyZW50
VmFsdWUsIGdldFN0YW1wKGN1cnJlbnRWYWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIGZl
bmNlbGVzc1ZhbGlkYXRlKFN0YW1wIHN0YW1wLCBEZXBlbmRlbmN5RmVuY2UgZGVwZW5kZW5jeSkK
KyAgICB7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IGRlcGVuZGVuY3kuY29uc3Vt
ZSh0aGlzKS0+bV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHJldHVybiBnZXRTdGFtcChj
dXJyZW50VmFsdWUpID09IHN0YW1wOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcHRpbWlzdGljRnVuYywgdHlwZW5hbWUgRnVuYz4KKyAgICBhdXRvIGRvT3B0aW1pemVkRmVu
Y2VsZXNzUmVhZChjb25zdCBPcHRpbWlzdGljRnVuYyYgb3B0aW1pc3RpY0Z1bmMsIGNvbnN0IEZ1
bmMmIGZ1bmMpCisgICAgeworICAgICAgICBhdXRvIHN0YW1wID0gdHJ5T3B0aW1pc3RpY0ZlbmNl
bGVzc1JlYWQoKTsKKyAgICAgICAgaWYgKHN0YW1wLnZhbHVlKSB7CisgICAgICAgICAgICBEZXBl
bmRlbmN5RmVuY2UgZGVwZW5kZW5jeShzdGFtcC5pbnB1dCk7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IG9wdGltaXN0aWNGdW5jKGRlcGVuZGVuY3ksIHN0YW1wLnZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChmZW5jZWxlc3NWYWxpZGF0ZShzdGFtcC52YWx1ZSwgZGVwZW5kZW5jeSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBsb2NrKCk7Cisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuYygpOworICAgICAgICB1bmxvY2soKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFN0YW1wIGdldFN0YW1w
KExvY2tUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgU3RhbXAgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9ICh2YWx1ZSAmIH5tYXNrKSB8IDE7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIEF0b21pYzxMb2NrVHlwZT4gbV93b3JkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RhbXBlZExvY2s7CisKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBw
YXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlzIGNoYW5nZSBp
cyBiZXN0IHRlc3RlZCB1c2luZyBET00tR0MtaW50ZW5zaXZlCisgICAgICAgIGJlbmNobWFya3Mg
bGlrZSBTcGVlZG9tZXRlciBhbmQgRHJvbWFlby4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGFy
YWxsZWxpemVzIHRoZSBET00ncyBvdXRwdXQgY29uc3RyYWludCwgYW5kIG1ha2VzIHNvbWUgc21h
bGwgY2hhbmdlcyB0byBtYWtlIHRoaXMgbW9yZQorICAgICAgICBzY2FsYWJsZS4KKworICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRk
ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NR0NPdXRwdXRD
b25zdHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0
cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpET01HQ091
dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgorICAgICAgICAqIGRvbS9O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJl
bnRseSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVFdmVudFRhcmdldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEpOgorCiAyMDE3LTEy
LTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSW50
ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN0YXJ0
IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRMb2Fk
ZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAogYmluZGluZ3MvanMv
Q2FsbFRyYWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmluZGluZ3MvanMvRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAog
YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5n
Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdtYSBvbmNl
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaD4KKwpJ
bmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVv
dXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFw
L1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAg
LTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WaXNp
dGluZ1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUx
LDYgKzM1MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzE2NkUx
Qzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAwNDQzQzNGIC8qIElu
dGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRlcnNlY3Rp
b25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFEQkEwMDQ0M0MzRiAv
KiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0lu
dGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFBMEYxRkQxQzY2QTAw
NzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIyIC8qIERPTUdD
T3V0cHV0Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5MDBBM0Y0QzAgLyog
R3JhcGhpY3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBk
YXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQjYyNTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1MkQxOERFMUIxNTAw
QTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9s
bGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJlZVN0aWNr
eU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNTQ0Niw2ICs1NDQ3LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpTRE9NUXVhZEN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWRDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1NzE1NURBODFFMDBGQURE
NEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9NR0NPdXRw
dXRDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERP
TUdDT3V0cHV0Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEwMDk3NUZERCAvKiBDU1NQ
cm9wZXJ0aWVzLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpzb247IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xh
eWVyVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFw
aGljc0xheWVyVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0
RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI5ODAsNiArMjI5ODMsOCBAQAogCQkJCTk1MjA3NjAyMUYy
Njc1RjkwMDdEMkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJCQkwRjYwRjMyOTFERkJC
MTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQx
NkQ2QyAvKiBDb21tb25WTS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2NjMwMDc5QzVCMiAvKiBE
T01HQ091dHB1dENvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVC
MiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUxNkFEMjFGMzUyNTIwMDAz
NEI2QkYgLyogRE9NUHJvbWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0RDAwMEQ4
MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIxRTAwMEQ4
MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5oICovLApAQCAtMjc1NDcsNiArMjc1NTIsNyBAQAogCQkJ
CTUxOEY1MDA0MTk0Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0b24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8qIERPTUdD
T3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQTdDMUYxODgzMjJGQzAw
Qzk1NEI1IC8qIEpTR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgyQjc1MjEx
OThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENv
bnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisKKyNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5o
PgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPGhl
YXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENv
bnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKKyAgICA6IE1hcmtp
bmdDb25zdHJhaW50KCJEb21vIiwgIkRPTSBPdXRwdXQiLCBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
U2VsZG9tR3JleWVkLCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpCisgICAgLCBtX3ZtKHZtKQorICAgICwgbV9jbGllbnRE
YXRhKGNsaWVudERhdGEpCisgICAgLCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKHZtLmhlYXAubXV0
YXRvckV4ZWN1dGlvblZlcnNpb24oKSkKK3sKK30KKworRE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+
RE9NR0NPdXRwdXRDb25zdHJhaW50KCkKK3sKK30KKworQ29uc3RyYWludFBhcmFsbGVsaXNtIERP
TUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKQoreworICAgIEhl
YXAmIGhlYXAgPSBtX3ZtLmhlYXA7CisgICAgCisgICAgaWYgKGhlYXAubXV0YXRvckV4ZWN1dGlv
blZlcnNpb24oKSA9PSBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKQorICAgICAgICByZXR1cm4gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworICAgIAorICAgIG1fbGFzdEV4ZWN1dGlv
blZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlQobV90YXNrcy5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50RGF0YS5mb3JFYWNo
T3V0cHV0Q29uc3RyYWludFNwYWNlKAorICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJzcGFjZSkg
eworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBIZWFw
Q2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAgSlNDZWxs
KiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAgICAgICAg
IGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMo
Y2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX3Rhc2tzLmFwcGVuZChzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxsZWwoZnVu
YykpOworICAgICAgICB9KTsKKyAgICAKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNt
OjpQYXJhbGxlbDsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZG9Q
YXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoYXV0byYg
dGFzayA6IG1fdGFza3MpCisgICAgICAgIHRhc2stPnJ1bih2aXNpdG9yKTsKK30KKyAgICAgICAg
Cit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1wbChTbG90
VmlzaXRvciYpCit7CisgICAgbV90YXNrcy5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+CisjaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSlNWTUNsaWVudERhdGE7CisKK2NsYXNzIERPTUdDT3V0cHV0
Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAg
ICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTVk1DbGllbnREYXRhJik7CisgICAg
fkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTQzo6Q29u
c3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworICAgIEpTVk1DbGllbnRE
YXRhJiBtX2NsaWVudERhdGE7CisgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbjsK
KyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4+IG1fdGFz
a3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAorI2luY2x1ZGUgIkRPTUdDT3V0
cHV0Q29uc3RyYWludC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhl
YXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxoZWFwL0hl
YXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgotI2luY2x1
ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvTWFya2Vk
QmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNs
dWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CkBA
IC03NCw0MyArNzIsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQoVk0q
CiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERhdGEoKnZt
KTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVzIHRoaXMg
cG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1h
cmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQgQ29uc3Ry
YWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJzaW9uID0g
dm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7Ci0gICAgICAg
ICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZlcnNpb24p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0
RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKLQotICAg
ICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNvdW50IGhlcmUgb3Vyc2Vs
dmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKLSAgICAgICAgICAgIC8vIG9w
YXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0aW9uIHlldC4gVGhlIHdh
eSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAgICAgIC8vIGNvbnN0cmFpbnQgc29sdmVy
IGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCi0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9vdHMoKTsK
LQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAgICAgICAgICAg
IHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnREYXRhLT5mb3JF
YWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAgICAgICAgICAgIFsmXSAoU3Vic3BhY2Um
IHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRD
ZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVhcENlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxs
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWludHMoY2Vs
bCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVJldmlzaXRl
ZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90
VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNs
b3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBudW1PcGFx
dWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdURk1v
dmUoY29uc3RyYWludCkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6
bWFrZV91bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRhKSk7CiAg
ICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6
OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRv
cHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNs
dWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rv
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNs
dWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIsNyArMjE2MywxNCBAQCBFdmVu
dFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAKIEV2ZW50VGFyZ2V0RGF0YSog
Tm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCkKIHsKLSAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CisgICAgLy8gTm90IGhvbGRpbmcg
dGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBlZCBhY2NlbGVyYXRlcyBwYXJhbGxlbCBj
b25zdHJhaW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8gY2FsbHMgdGhpcyBmdW5jdGlvbiBmcm9t
IG1hbnkgdGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nIGNhbiBoYXBwZW4gd2l0
aCB0aGUgd29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0b3BwZWQsIGJ1dCBpZiB3ZSBkbyBpdCB3
aXRoIGEgcnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5IG1peGluZyBjb25zdHJhaW50
CisgICAgLy8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJlZm9yZSwgdGhlIG1vc3QgbGlr
ZWx5IHRpbWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBsb2NrIGlzIHdoZW4gdGhlCisgICAgLy8g
d29ybGQgaXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHdoZW4gdGhl
IHdvcmxkIGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdvcmxkCisgICAgLy8gbWVhbnMg
dGhhdCB3ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFyZ2V0IGRhdGEgbWFwLgorICAg
IEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrSWYoc19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2bSAmJiB2bS0+aGVhcC53b3JsZElzUnVu
bmluZygpKTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRhKCkgPyBldmVudFRhcmdldERh
dGFNYXAoKS5nZXQodGhpcykgOiBudWxscHRyOwogfQogCkBAIC0yMTcxLDYgKzIxNzksOSBAQCBF
dmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAgICAgaWYgKGhhc0V2ZW50
VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmdldCh0
aGlzKTsKIAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CisKICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAgc2V0SGFzRXZl
bnRUYXJnZXREYXRhKHRydWUpOwogICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFwKCkuYWRk
KHRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJnZXREYXRhPigpKS5pdGVyYXRvci0+dmFs
dWU7CkBAIC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2
ZW50VGFyZ2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogeworICAgIEpT
Qzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0gfHwg
dm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhz
X2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2ZW50VGFyZ2V0RGF0YU1hcCgpLnJlbW92
ZSh0aGlzKTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJh
bGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICAqIFNjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzOiBBZGQgc3BsYXktbGF0ZW5jeSB0ZXN0
LCBzaW5jZSB0aGlzIGNoYW5nZSBuZWVkZWQgdG8gYmUgY2FyZWZ1bGx5IHZhbGlkYXRlZCB3aXRo
IHRoYXQgYmVuY2htYXJrLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0
ckhhc2hTZXQuY3BwOiBBZGRlZC4gVGhpcyBoYXMgdW5pdCB0ZXN0cyBvZiB0aGUgbmV3IGNvbmN1
cnJlbnQgZGF0YSBzdHJ1Y3R1cmUuIFRoZSB0ZXN0cyBmb2N1cyBvbiBjb3JyZWN0bmVzcyB1bmRl
ciBzZXJpYWwgZXhlY3V0aW9uLCB3aGljaCBhcHBlYXJzIHRvIGJlIGVub3VnaCBmb3Igbm93IChp
dCdzIHNvIGVhc3kgdG8gY2F0Y2ggYSBjb25jdXJyZW5jeSBidWcgYnkganVzdCBydW5uaW5nIHRo
ZSBHQykuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0xMi0wMSAgQWxp
Y2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRk
IFNhbXBsZU1hcC5jcHAgQVBJIHRlc3RzIHRvIENNYWtlCkluZGV4OiBUb29scy9TY3JpcHRzL3J1
bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2MtYmVu
Y2htYXJrcwkocmV2aXNpb24gMjI1NDAzKQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNo
bWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgTE9OR1NQSURFUl9QQVRIID0g
UEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAr
ICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2OC12NiIKIFRBSUxCRU5DSF9QQVRIID0gUEVSRk9S
TUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5jaDkwMDAiCiBNSUNST0JFTkNITUFSS1NfUEFUSCA9
IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3RzIiArICJtaWNyb2JlbmNobWFya3MiCi1PQ1RBTkVf
V1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIgKyAid3JhcHBl
cnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9j
dGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEggPSBPUEVOU09VUkNFX09DVEFORV9QQVRIICsgIndy
YXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIkpTQmVuY2gi
CiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVkIiArICJ0
ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJT
aXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04NDEsNiArODQyLDIwIEBAIGNsYXNzIFNpbmdsZUZp
bGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKICAgZW5kCiBlbmQKIAorIyBCZW5jaG1hcmsgdGhh
dCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0IGJlIGxvYWRlZCBpbiBpdHMgb3du
IGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1bigpKSwgYnV0IHJldHVybnMgaXRz
IHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitjbGFzcyBTaW5nbGVGaWxlQ3VzdG9tVGltZWRCZW5j
aG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5jaFBhdGgKKyAgCisgIGRlZiBpbml0
aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVuY2hQYXRoID0gYmVuY2hQYXRoCisgIGVuZAorICAK
KyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgIGVuZAor
ZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgZGF0YSBmaWxl
cyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZvbGxvd2VkCiAjIGJ5IGEgY29tbWFu
ZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNsYXNzIE11bHRpRmlsZVRpbWVkQmVuY2htYXJrUGFy
YW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1pdEJlbmNoUnVuQ29kZUZpbGUobmFt
ZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgaWYgKF9f
YmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0pIHByaW50KFwiI3tuYW1lfTogI3twbGFuLnZtfTog
I3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hlcl9pbmRleCAtICN7d2FybXVwfSkgKyBc
IjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1bnMpKTsiKQogICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxl
LCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29tbWFuZC5qc30iKQorICAgICAgZWxzaWYgYmVuY2hQ
YXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93
aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHZhciBfX2JlbmNo
ZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsiKQorICAgICAgICAkcmVydW4udGltZXMgeworICAg
ICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBydW4oX19iZW5jaGVyX3doYXQsIF9f
YmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAgIH0KKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJy
LGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVzdWx0LnZhbHVlID09IG51bGwpIikKKyAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICAgIHRocm93IG5ldyBFcnJvcihcIk51bGwgcmVz
dWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICByZXR1cm4gX19i
ZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
fSIpCisgICAgICAgICR3YXJtdXAudGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3BlY3R9KSIp
CisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4u
dm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KKyAgICAgICAgJGlubmVyLnRpbWVzIHsKKyAg
ICAgICAgICB8IGlubmVySW5kZXggfAorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxl
LCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiAje2lubmVy
SW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmlu
c3BlY3R9KSk7IikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2MoKTsiKSB1
bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQogICAgICAgZWxzZQogICAg
ICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZVRpbWVkQmVu
Y2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNo
ZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKQEAgLTE1OTQsNiArMTYyOCwxOSBAQCBjbGFzcyBP
Y3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQKIAorY2xhc3MgQ3VzdG9tVGltZWRCZW5jaG1hcmsK
KyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0aWFsaXplKG5hbWUsIGZ1bGxQYXRo
KQorICAgIEBuYW1lID0gbmFtZQorICAgIEBmdWxsUGF0aCA9IGZ1bGxQYXRoCisgIGVuZAorICAK
KyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisgICAgZW1pdEJlbmNoUnVuQ29kZShmdWxsbmFtZSwg
cGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycy5uZXcoZW5zdXJl
RmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0iLCBAZnVsbFBhdGgpKSkKKyAgZW5kCitlbmQKKwog
Y2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGluY2x1ZGUgQmVuY2htYXJrCiAgIApAQCAtMzAxMCw2
ICszMDU3LDcgQEAgYmVnaW4KICAgICB8IGFyZ3MgfAogICAgIE9DVEFORS5hZGQgT2N0YW5lQmVu
Y2htYXJrLm5ldygqYXJncykKICAgfQorICBPQ1RBTkUuYWRkIEN1c3RvbVRpbWVkQmVuY2htYXJr
Lm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVOU09VUkNFX09DVEFORV9QQVRIICsgInNwbGF5Lmpz
IikudG9fcykKIAogICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0ZS5uZXcoIktyYWtlbiIsIDphcml0
aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0YXIiLCAiYXVkaW8tYmVhdC1kZXRlY3Rpb24iLCAi
YXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcAorICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRoLmNwcApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0g
Ki87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0Nv
Y29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
MzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07
CiAJCTBGMkMyMEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAv
KiBUaW1lLmNwcCAqLzsgfTsKKwkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJl
bnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5j
cHAgKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0
ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2Ny
aXB0Lm1tICovOyB9OwogCQkwRjRGRkE5RTFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFS
ZW5kZXJJbkNvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNv
bnRleHQubW0gKi87IH07CiAJCTBGNTY1MUY3MUZDRTREREMwMDMxMEZCQyAvKiBOb0hpc3RvcnlJ
dGVtU2Nyb2xsVG9GcmFnbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNTY1MUY2MUZDRTREREIwMDMxMEZCQyAvKiBOb0hpc3RvcnlJdGVtU2Ny
b2xsVG9GcmFnbWVudC5tbSAqLzsgfTsKQEAgLTEwNzIsNiArMTA3Myw3IEBACiAJCTBGMTM5RTc1
MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2EvV2Vha09iakNQ
dHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVBRjZDNEQwMDdB
Qjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9j
ZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcxRENENTQ0ODAw
NTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVCMUZDRTE3OTIw
MDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFs
dWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRlckluQ29u
dGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNuYXBzaG90
VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRG
RkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFt
ZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9J
bWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0yNTkzLDYgKzI1
OTUsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNTdHJpbmcuY3Bw
ICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgKi8s
CiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0
aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQ
dHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0
aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRU
YXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAg
Ki8sCkBAIC0zMTc5LDYgKzMxODIsNyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMwMEZFQkNGMyAv
KiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUZFMUQwQTU5MEMw
MEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRGMzFGMzM4
QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYz
MENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVj
dFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25hbWVzcGFj
ZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlzIHRoaW5nIHdo
YXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisv
LyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6CisvLworLy8gK3gg
ICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBhbmQgYXNzZXJ0
cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgYW5kIGFzc2Vy
dHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRzIHRoYXQgJ3gn
IGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5vdCBpbiB0aGUg
c2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBDb25jdXJyZW50
UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0gY29tbWFuZHM7
IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAgICAgIHZvaWQq
IHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb21tYW5k
WzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZFswXSkgeworICAgICAgICBjYXNlICcrJzoK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5hZGQocHRyKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmFkZChw
dHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMocHRy
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoV1RGX0NvbmN1
cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAgICBkb1Rlc3QoIiIpOworfQorCitURVNUKFdU
Rl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudCkKK3sKKyAgICBkb1Rlc3QoIit4
PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVt
ZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4IXgheCF4IXg9
eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1l
bnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgteS0w
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgiKTsKK30KKworVEVTVChXVEZfQ29uY3Vy
cmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzKQoreworICAgIGRvVGVzdCgiKzErMisz
KzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6K3gr
Yyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitC
K04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9
aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1M
PVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwg
QWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYr
Nys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraytsK3oreCtjK3YrYitu
K20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitNPTE9
Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9bD16
PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1YPUM9
Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFm
IWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUgh
SiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFv
IXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEh
UyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFy
IXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkh
VSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5
ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEh
VyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0
ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMh
diFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFO
IU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWoh
ayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFa
IVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMh
ZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFH
IUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUh
aSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQ
IUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXch
ZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFU
IVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNIik7Cit9CisKK1RFU1Qo
V1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c0FuZFF1ZXJ5U29tZUJl
Zm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtx
K3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9
dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1S
LVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2Ir
bittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0x
PTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9
ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1D
PVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkU29t
ZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRUaGVSZXN0QW5kUXVlcnlTb21lQmVmb3JlQWRk
aW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3Ir
dCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFl
IXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEh
dyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02PTc9OD05PTA9
cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWItbi1tLVEtVy1F
LVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTStsK3oreCtjK3Yr
YituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0IrTitN
PTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWs9
bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9Wj1Y
PUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328298</attachid>
            <date>2017-12-03 11:55:19 -0800</date>
            <delta_ts>2017-12-03 18:49:07 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>312248</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIFRoaXMgbG9va3MgbGlrZSBhIDElIFNwZWVkb21ldGVy
CisgICAgICAgIHNwZWVkLXVwLgorICAgICAgICAKKyAgICAgICAgVGhlIGNvbnN0cmFpbnQgc29s
dmVyIHN1cHBvcnRzIHJ1bm5pbmcgY29uc3RyYWludHMgaW4gcGFyYWxsZWwgaW4gdHdvIGRpZmZl
cmVudCB3YXlzOgorICAgICAgICAKKyAgICAgICAgLSBSdW4gbXVsdGlwbGUgY29uc3RyYWludHMg
aW4gcGFyYWxsZWwgdG8gZWFjaCBvdGhlci4gVGhpcyBvbmx5IHdvcmtzIGZvciBjb25zdHJhaW50
cyB0aGF0IGNhbgorICAgICAgICAgIHRvbGVyYXRlIG90aGVyIGNvbnN0cmFpbnRzIHJ1bm5pbmcg
Y29uY3VycmVudGx5IHRvIHRoZW0gKGNvbnN0cmFpbnQuY29uY3VycmVuY3koKSA9PQorICAgICAg
ICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCkuIFRoaXMgaXMgdGhlIG1vc3Qg
YmFzaWMga2luZCBvZiBwYXJhbGxlbGlzbSB0aGF0IHRoZQorICAgICAgICAgIGNvbnN0cmFpbnQg
c29sdmVyIHN1cHBvcnRzLiBBbGwgY29uc3RyYWludHMgZXhjZXB0IHRoZSBKU0MgU1BJIGNvbnN0
cmFpbnRzIGFyZSBjb25jdXJyZW50LiBXZQorICAgICAgICAgIGNvdWxkIHByb2JhYmx5IG1ha2Ug
dGhlbSBjb25jdXJyZW50LCBidXQgSSdtIHBsYXlpbmcgaXQgc2FmZSBmb3Igbm93LgorICAgICAg
ICAKKyAgICAgICAgLSBBIGNvbnN0cmFpbnQgY2FuIGNyZWF0ZSBwYXJhbGxlbCB3b3JrIGZvciBp
dHNlbGYsIHdoaWNoIHRoZSBjb25zdHJhaW50IHNvbHZlciB3aWxsIGludGVybGVhdmUKKyAgICAg
ICAgICB3aXRoIG90aGVyIHN0dWZmLiBBIGNvbnN0cmFpbnQgY2FuIHJlcG9ydCB0aGF0IGl0IGhh
cyBwYXJhbGxlbCB3b3JrIGJ5IHJldHVybmluZworICAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbTo6UGFyYWxsZWwgZnJvbSBpdHMgZXhlY3V0ZUltcGwoKSBmdW5jdGlvbi4gVGhlbiB0aGUg
c29sdmVyIHdpbGwgYWxsb3cgdGhhdAorICAgICAgICAgIGNvbnN0cmFpbnQncyBkb1BhcmFsbGVs
V29ya0ltcGwoKSBmdW5jdGlvbiB0byBydW4gb24gYXMgbWFueSBHQyBtYXJrZXIgdGhyZWFkcyBh
cyBhcmUgYXZhaWxhYmxlLAorICAgICAgICAgIGZvciBhcyBsb25nIGFzIHRoYXQgZnVuY3Rpb24g
d2FudHMgdG8gcnVuLgorICAgICAgICAKKyAgICAgICAgSXQncyBub3QgcG9zc2libGUgdG8gaGF2
ZSBhIG5vbi1jb25jdXJyZW50IGNvbnN0cmFpbnQgdGhhdCBjcmVhdGVzIHBhcmFsbGVsIHdvcmsu
CisgICAgICAgIAorICAgICAgICBUaGUgcGFyYWxsZWxpc20gaXMgaW1wbGVtZW50ZWQgaW4gdGVy
bXMgb2YgdGhlIGV4aXN0aW5nIEdDIG1hcmtlciB0aHJlYWRzLiBUaGlzIHR1cm5zIG91dCB0byBi
ZQorICAgICAgICBtb3N0IG5hdHVyYWwgZm9yIHR3byByZWFzb25zOgorICAgICAgICAKKyAgICAg
ICAgLSBObyBuZWVkIHRvIHN0YXJ0IGFueSBvdGhlciB0aHJlYWRzLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgY29uc3RyYWludHMgYWxsIHdhbnQgdG8gYmUgcGFzc2VkIGEgU2xvdFZpc2l0b3Iu
IFJ1bm5pbmcgb24gdGhlIG1hcmtlciB0aHJlYWRzIG1lYW5zIGhhdmluZworICAgICAgICAgIGFj
Y2VzcyB0byB0aG9zZSB0aHJlYWRzJyBTbG90VmlzaXRvcnMuIEFsc28sIGl0IG1lYW5zIGxlc3Mg
bG9hZCBiYWxhbmNpbmcuIFRoZSBzb2x2ZXIgd2lsbAorICAgICAgICAgIGNyZWF0ZSB3b3JrIG9u
IGVhY2ggbWFya2luZyB0aHJlYWQncyBTbG90VmlzaXRvci4gV2hlbiB0aGUgc29sdmVyIGlzIGRv
bmUgInN0ZWFsaW5nIiBhIG1hcmtlcgorICAgICAgICAgIHRocmVhZCwgdGhhdCB0aHJlYWQgd2ls
bCBoYXZlIHdvcmsgaXQgY2FuIHN0YXJ0IGRvaW5nIGltbWVkaWF0ZWx5LiBCZWZvcmUgdGhpcyBj
aGFuZ2UsIHdlIGhhZCB0bworICAgICAgICAgIGNvbnRyaWJ1dGUgdGhlIHdvcmsgZm91bmQgYnkg
dGhlIGNvbnN0cmFpbnQgc29sdmVyIHRvIHRoZSBnbG9iYWwgd29ya2xpc3Qgc28gdGhhdCBpdCBj
b3VsZCBiZQorICAgICAgICAgIGRpc3RyaWJ1dGVkIHRvIHRoZSBtYXJrZXIgdGhyZWFkcyBieSBs
b2FkIGJhbGFuY2luZy4gVGhpcyBjaGFuZ2UgcHJvYmFibHkgaGVscHMgdG8gYXZvaWQgdGhhdAor
ICAgICAgICAgIGxvYWQgYmFsYW5jaW5nIHN0ZXAuCisgICAgICAgIAorICAgICAgICBBIGxvdCBv
ZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtYWtpbmcgaXQgZWFzeSB0byBpdGVyYXRlIEdDIGRhdGEg
c3RydWN0dXJlcyBpbiBwYXJhbGxlbC4gVGhpcworICAgICAgICBjaGFuZ2UgbWFrZXMgYWxtb3N0
IGFsbCBjb25zdHJhaW50cyBwYXJhbGxlbC1lbmFibGVkLCBidXQgb25seSB0aGUgRE9NJ3Mgb3V0
cHV0IGNvbnN0cmFpbnQgdXNlcworICAgICAgICB0aGUgcGFyYWxsZWwgd29yayBBUEkuIFRoYXQg
Y29uc3RyYWludCBpdGVyYXRlcyB0aGUgbWFya2VkIGNlbGxzIGluIHR3byBzdWJzcGFjZXMuIFRo
aXMgY2hhbmdlCisgICAgICAgIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBjb21wb3NlIHBhcmFsbGVs
IGl0ZXJhdG9ycyBvdmVyIHN1YnNwYWNlcywgYWxsb2NhdG9ycywgYmxvY2tzLCBhbmQgY2VsbHMu
CisgICAgICAgIFRoZSBtYXJrZWQgY2VsbCBwYXJhbGxlbCBpdGVyYXRvciBpcyBjb21wb3NlZCBv
dXQgb2YgcGFyYWxsZWwgaXRlcmF0b3JzIGZvciB0aGUgb3RoZXJzLiBBIHBhcmFsbGVsCisgICAg
ICAgIGl0ZXJhdG9yIGlzIGp1c3QgYW4gaXRlcmF0b3IgdGhhdCBjYW4gZG8gYW4gYXRvbWljIG5l
eHQoKSB2ZXJ5IHF1aWNrbHkuIFdlIGFic3RyYWN0IHRoZW0gdXNpbmcKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8Li4uKCk+Piwgd2hlcmUgLi4uIGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20g
dGhlIGl0ZXJhdG9yLiBXZSBrbm93IGl0J3MgZG9uZQorICAgICAgICB3aGVuIGl0IHJldHVybnMg
YSBmYWxzaXNoIHZlcnNpb24gb2YgLi4uIChpbiB0aGUgY3VycmVudCBjb2RlLCB0aGF0J3MgYWx3
YXlzIGEgcG9pbnRlciB0eXBlLCBzbworICAgICAgICBkb25lIGlzIGluZGljYXRlZCBieSBudWxs
KS4KKyAgICAgICAgCisgICAgICAgIERldGFpbGVkIGFuYWx5c2lzIG9mIHRoZSBwZXJmb3JtYW5j
ZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBpbmRpY2F0ZSBhIGRlZmluaXRlIDElIFNwZWVkb21l
dGVyCisgICAgICAgIHByb2dyZXNzaW9uIGFuZCBubyBjaGFuZ2Ugb24gSmV0U3RyZWFtLiBJIGhh
dmUgZG9uZSB0aGUgU3BlZWRvbWV0ZXIgY29tcGFyaXNvbiBtYW55IHRpbWVzIG5vdyBhbmQKKyAg
ICAgICAgdGhlIHByb2dyZXNzaW9uIGlzIG5vdyBlYXNpbHkgcmVwcm9kdWNpYmxlIG9uIG15IG1h
Y2hpbmUuIEl0IHN0YXJ0ZWQgaW5pdGlhbGx5IGFzIGFuIHVucmVsaWFibGUKKyAgICAgICAgfjAu
NSUgc3BlZWQtdXAgb24gU3BlZWRvbWV0ZXIgYW5kIGEgcmVsaWFibGUgfjAuNSUgcmVncmVzc2lv
biBvbiBKZXRTdHJlYW0uIEFmdGVyIGZpeGluZyBsb3RzIG9mCisgICAgICAgIGJ1Z3MgaW4gdGhl
IGxvYWQgYmFsYW5jZXIgYW5kIHNvbWUgcmVhbGx5IGZ1bm55IHBhdGhvbG9naWVzLCB0aGUgSmV0
U3RyZWFtIHNjb3JlIGJlY2FtZSBuZXV0cmFsCisgICAgICAgIGFuZCB0aGUgU3BlZWRvbWV0ZXIg
c2NvcmUgZ290IGV2ZW4gYmV0dGVyLiAoV2VpcmRlc3QgcGF0aG9sb2d5IHRoYXQgSSBmaXhlZDog
aWYgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBzY2FuIGNvbnN0cmFpbnQgaXMgcnVuIGJ5IHNv
bWUgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIGFuZCB0aGUgbXV0YXRvciBoYXMgdGhl
IGNvbm4gW3NvCisgICAgICAgIHRoZSBtYWluIHRocmVhZCdzIHRvcCBmcmFtZXMgYXJlIHRoZSBH
QyBpdHNlbGZdIHRoZW4gd2Ugd2lsbCBzY2FuIHRoZSBtYWluIHRocmVhZCB0d2ljZSAtIG9uY2UK
KyAgICAgICAgdXNpbmcgQ3VycmVudFRocmVhZFN0YXRlIFt3aGljaCBjYXJlZnVsbHkgYXZvaWRz
IHNjYW5uaW5nIHRoZSBHQydzIHN0YWNrIGZyYW1lc10gYW5kIG9uY2UgYXMgaWYgaXQKKyAgICAg
ICAgd2FzIGEgcmFuZG9tIG5hdGl2ZSB0aHJlYWQgW3doaWNoIHdpbGwgc2NhbiB0aGUgR0MncyBm
cmFtZXNdOyB0aGUgbGF0dGVyIHNjYW4gd291bGQgcGljayB1cAorICAgICAgICBvYmplY3RzIHRo
YXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGhhZCBjb25zaWRlcmVkIGJ1dCByZWplY3RlZCwgd2hp
Y2ggd291bGQgc29tZXRpbWVzIGxlYWQgdG8KKyAgICAgICAgcnVuYXdheSBHQ3MuIEkgZml4ZWQg
dGhpcyBieSB0ZWFjaGluZyB0aGUgY29uc2VydmF0aXZlIHNjYW4gbm90IHRvIHNjYW4gdGhlIHRo
cmVhZCBydW5uaW5nIEdDCisgICAgICAgIHVzaW5nIHRoZSByYW5kb20gbmF0aXZlIHRocmVhZCBz
Y2FubmluZyBhbGdvcml0aG0uKQorCisgICAgICAgICogQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQ
cml2YXRlLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQp
OgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoc2NhbkV4dGVy
bmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVl
VG9PbGRBZ2UpOgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3Qu
Y3BwOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlKToKKyAgICAgICAgKiBoZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVt
ZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkZpeHBvaW50UGhhc2UpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
cmVzdW1lVGhlUGVyaXBoZXJ5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNvbnN0cmFp
bnRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9y
RWFjaFNsb3RWaXNpdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6d29ybGRJc1J1bm5pbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpydW5GdW5jdGlvbkluUGFyYWxsZWwpOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6d29ybGRJc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmluY3JlbWVudERlZmVycmFs
RGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKToKKyAgICAgICAgKiBoZWFwL0xhcmdlQWxs
b2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkKToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oOgorICAgICAgICAoSlNDOjps
b2NrRHVyaW5nTWFya2luZyk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJj
ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFwL01h
cmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFyayk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAg
ICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2
ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWN0aXZlV2Vha1Nl
dHNFbmQpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNCZWdp
bik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpuZXdBY3RpdmVXZWFrU2V0c0VuZCk6Cisg
ICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtp
bmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1
aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OndvcmtF
c3RpbWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
ayk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsp
OgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmtJbXBsKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwp
OgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnQ6Omxhc3RFeGVjdXRlUGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAo
SlNDOjpNYXJraW5nQ29uc3RyYWludDo6cGFyYWxsZWxpc20gY29uc3QpOgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpleGVjdXRlQ29udmVyZ2VuY2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50U2V0OjpleGVjdXRlQWxsKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OkV4ZWN1dGlvbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkVmlzaXRT
b21ldGhpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dDo6c2hvdWxkVGltZU91dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpkcmFp
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpkaWRFeGVjdXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWN1dGUpOiBEZWxldGVkLgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
Lmg6CisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdD
b25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6
OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6Y29udmVy
Z2UpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9u
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZEV4ZWN1
dGUpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDogQWRkZWQuCisg
ICAgICAgICogaGVhcC9PcGFxdWVSb290U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9Q
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBhcmFsbGVsU291
cmNlQWRhcHRlcjo6UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UGFyYWxsZWxTb3VyY2VBZGFwdGVyKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50
OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCk6CisgICAgICAgIChKU0M6OlNpbXBsZU1hcmtpbmdD
b25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1w
bGVNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpT
aW1wbGVNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAqIGhlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9w
cGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9E
YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6aGFzV29yayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZy
b21TaGFyZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5JblBhcmFsbGVsUGFz
c2l2ZWx5KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbik6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZUlmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVl
Um9vdHNJZlByb2ZpdGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
bWVyZ2VPcGFxdWVSb290cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphZGRPcGFxdWVSb290KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUm9vdCBjb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2bSBjb25zdCk6CisgICAgICAgICogaGVhcC9T
dWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbEFsbG9jYXRvclNv
dXJjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxv
Y2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1N1
YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGxJblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL1Zpc2l0Q291bnRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjpWaXNpdENvdW50ZXIpOgorICAgICAgICAoSlNDOjpW
aXNpdENvdW50ZXI6OnZpc2l0Q291bnQgY29uc3QpOgorICAgICAgICAqIGhlYXAvVmlzaXRpbmdU
aW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9XZWFrQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXZWFrQmxvY2s6OnNwZWNpYWxpemVkVmlzaXQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hcmtJZkNoZWFwKToKKwogMjAxNy0xMS0zMCAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBV
c2UgSlNGaXhlZEFycmF5IGZvciBvcF9uZXdfYXJyYXlfYnVmZmVyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUwMCwxMyArNTAwLDE2IEBAIGhlYXAv
SklUU3R1YlJvdXRpbmVTZXQuY3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCitoZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCiBoZWFwL01hcmtl
ZEJsb2NrLmNwcAogaGVhcC9NYXJrZWRTcGFjZS5jcHAKIGhlYXAvTWFya2luZ0NvbnN0cmFpbnQu
Y3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAoraGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRl
LmNwcAoraGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3Ry
YWludFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCisjaW5jbHVkZSAi
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
NzIsMTEgKzcxLDExIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWludCgK
ICAgICAvLyBlbHNlIGdldHMgbWFya2VkLgogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0
aWxpdHkgPSBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nOwogICAgIAotICAg
IGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KAor
ICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQ+KAogICAgICAgICB0b0NTdHJpbmcoIkFtYyIsIGNvbnN0cmFpbnRJbmRleCwgIigiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENhbGxiYWNrKSksICIpIiks
CiAgICAgICAgIHRvQ1N0cmluZygiQVBJIE1hcmtpbmcgQ29uc3RyYWludCAjIiwgY29uc3RyYWlu
dEluZGV4LCAiICgiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4oY29uc3RyYWludENh
bGxiYWNrKSksICIsICIsIFJhd1BvaW50ZXIodXNlckRhdGEpLCAiKSIpLAogICAgICAgICBbY29u
c3RyYWludENhbGxiYWNrLCB1c2VyRGF0YV0KLSAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBNYXJrZXIgbWFya2VyOwogICAgICAgICAgICAgbWFy
a2VyLklzTWFya2VkID0gaXNNYXJrZWQ7CiAgICAgICAgICAgICBtYXJrZXIuTWFyayA9IG1hcms7
CkBAIC04NCw3ICs4Myw4IEBAIHZvaWQgSlNDb250ZXh0R3JvdXBBZGRNYXJraW5nQ29uc3RyYWlu
dCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3RyYWludENhbGxiYWNrKCZtYXJrZXIs
IHVzZXJEYXRhKTsKICAgICAgICAgfSwKLSAgICAgICAgdm9sYXRpbGl0eSk7CisgICAgICAgIHZv
bGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2VxdWVudGlhbCk7CiAg
ICAgCiAgICAgdm0uaGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGNvbnN0cmFpbnQp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzLDkgKzI4Myw4IEBAIHN0YXRp
YyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzoKICAgICAgICAgd2hpbGUgKCFzdGFj
ay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHZvaWQqIG5leHRSb290ID0gc3RhY2subGFzdCgp
OwogICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUobmV4dFJvb3QpID09IFRydWVUcmlTdGF0ZSkK
KyAgICAgICAgICAgIGlmICghdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChu
ZXh0Um9vdCk7CiAKICAgICAgICAgICAgIGF1dG8gYXBwZW5kT3duZWRPYmplY3RzID0gWyZdIHsK
ICAgICAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmpl
Y3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5leHRSb290KV07CkBAIC0zMjcs
OCArMzI2LDYgQEAgdm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mIAogICAg
ICAgICB9CiAgICAgICAgIFtleHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlQWxsT2JqZWN0c107
CiAgICAgfQotCi0gICAgdmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKICNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDYgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0
NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIx
REYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZC
MzhGMUUxNzNBNjcwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuaCAqLzsgfTsKLQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5n
VGltZW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUZCMzk2MUUxQUY3RTEw
MEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5Jbmxp
bmVzLmggKi87IH07CiAJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJ
MEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0yOTEsNiArMjkwLDcgQEAKIAkJ
MEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8q
IEFpck9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNDBFNEE4MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzM0MUM0
NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBOTFDNDk3Rjc0MDBBNTc3RkEg
LyogQWlyT3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDE1NDVC
MUZEMjBCMjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDE1NDVBMUZEMjBCMUYwMDFCNThG
NiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAx
MzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTMxMiw2ICszMTIsOSBAQAogCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyog
U3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYy
MDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07CisJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAq
LzsgfTsKKwkJMEY0RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlz
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhD
NzMxRkM3QTk3NDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEQ4Qzc4MUZDQTNDRkEw
MDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNp
bXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlv
dXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggKi87IH07
CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTQsNiArMzU3LDcgQEAKIAkJMEY2
Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8q
IEFycmF5UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
OyB9OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IH07CisJCTBGNjQ1MzE4MUZEMjQ2QTcwMDI0
MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NDUzMTUxRkQyNDZBMDAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggKi87IH07CiAJCTBGNjRCMjcyMUE3ODRCQUYwMDZF
NEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY0QjI3
QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIg
LyogQWlyQXJnSW5saW5lcy5oICovOyB9OwpAQCAtNDQ2LDYgKzQ1MCw4IEBACiAJCTBGOUQzNjk1
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBE
RkdDbGVhblVwUGhhc2UuaCAqLzsgfTsKIAkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovOyB9OwogCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuaCAqLzsgfTsKKwkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAq
LzsgfTsKKwkJMEY5REFBMEExRkQxQzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFB
MDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovOyB9OwogCQkw
RjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyB9
OwogCQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgfTsKIAkJMEY5RkM4QzUx
NEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0OTks
NyArMTUwNSw2IEBACiAJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEQkM1NEQ1
MURGOEVBMkIwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQkM1NEQzMURGOEVBMDAwMDVCRjcz
OCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLzsgfTsKIAkJQUREOEZBNDYxRUIzMDc5NzAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21O
YW1lU2VjdGlvblBhcnNlci5oICovOyB9OwotCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5OTFFMDhG
MURFMDA1OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8q
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQURFODAyOTUxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlu
a0Vycm9yQ29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBREU4MDI5QzFFMDhGMURFMDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclBy
b3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xOTgxLDcgKzE5ODYsNiBAQAogCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhCMUUxNzNBNjIw
MEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRh
dG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzhDMUUx
NzNBNjIwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0aW5nVGltZW91dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyog
REZHUGxhbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxh
bklubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdQbGFuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0SW5saW5l
cy5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjM0LDYgKzIyMzgsNyBAQAogCQkwRjNCRDFC
NjFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZH
SW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzFGMTgx
Qjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgcGF0aCA9
IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBw
YXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDE1NDVBMUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludENvbmN1cnJlbmN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
bHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI3MCw2ICsyMjc1LDEwIEBACiAJCTBGNEEzOEY4MUM4RTEzREYwMDE5MDMxOCAv
KiBTdXBlclNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VwZXJT
YW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5E
dW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzcyMUZDN0E5NzMwMDFE
MzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEQ4QzczMUZD
N0E5NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RyYWludFBhcmFsbGVsaXNtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5n
Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxQ0QxQzRDMUI1
NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0REUxRDAxQzRE
NzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDEsNiArMjM1MCw4IEBACiAJCTBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJyYXlNb2RlLmNw
cDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0Fy
cmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY0NTMxNTFGRDI0NkEw
MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NDUzMTYxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlTd2l0Y2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRj
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwMyw2ICsyNTE0
LDkgQEAKIAkJMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQuaDsg
cGF0aCA9IGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5jcHA7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBGMUMzRTJD
NzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgcGF0
aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURB
QTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFy
YWxsZWxTb3VyY2VBZGFwdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
cmFsbGVsU291cmNlQWRhcHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlF
MzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00MjY3LDcgKzQyODEsNiBAQAogCQlBREQwOUFGMzFGNjI0ODJF
MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAv
KiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5MzFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NDFFMDhGMUM5MDA1
OERFNzggLyogSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmg7IHBhdGggPSBqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk1MUUw
OEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0
b3IuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MTcsNiArNTUzMCw4IEBACiAJCQkJMEZEQ0UxMjgx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEy
RUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYy
MTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAorCQkJCTBGNDE1NDVB
MUZEMjBCMUYwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCAqLywKKwkJCQkwRjRE
OEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi8sCiAJCQkJ
MEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCiAJ
CQkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2
RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCkBAIC01NjExLDE3ICs1NjI2LDIz
IEBACiAJCQkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50Lmgg
Ki8sCiAJCQkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcCAqLywKIAkJCQkwRjY2MEUzNjFFMDUxN0I4MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnRTZXQuaCAqLywKKwkJCQkwRjlEQUEwNjFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwICovLAorCQkJCTBGOURBQTA3MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJr
aW5nQ29uc3RyYWludFNvbHZlci5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwICovLAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJr
U3RhY2suaCAqLywKKwkJCQkwRjY0NTMxNjFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAvKiBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovLAogCQkJCTBGMUZCMzhDMUUxNzNBNjIwMEE5
QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM5ODFFMUY2NUY5MDBB
OUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovLAogCQkJCTBGQTc2MjAyMURCOTI0MjMwMEI3
QTJGRCAvKiBNdXRhdG9yU3RhdGUuY3BwICovLAogCQkJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJG
RCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKLQkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyog
T3BhcXVlUm9vdFNldC5oICovLAorCQkJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLywKIAkJCQkwRkJCNzNCNjFERUYzQUFDMDAyQzAwOUUgLyog
UHJldmVudENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIw
OCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8q
IFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4
MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYw
MDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMy
QiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTU2NDMsNyArNTY2NCw3IEBACiAJCQkJ
MEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxv
b21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRp
b25hbEZpbmFsaXplci5oICovLAotCQkJCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNp
dGluZ1RpbWVvdXQuaCAqLywKKwkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRD
b3VudGVyLmggKi8sCiAJCQkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtl
eS5jcHAgKi8sCiAJCQkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovLAogCQkJCTFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLywKQEAgLTgw
MDAsNiArODAyMSw3IEBACiAJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNp
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUNGOTg5MUU5RUQ2NTIwMEMxODY5MiAvKiBBaXJT
dGFja0FsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDE1NDVCMUZEMjBC
MjIwMDFCNThGNiAvKiBDb25zdHJhaW50Q29uY3VycmVuY3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MjAwLDYgKzgyMjIsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcw
MDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEz
QkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIz
RUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
RDhDNzUxRkM3QTk3RDAwMUQzMkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJy
aWVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q2FsbERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODI5Myw2ICs4MzE2LDcgQEAKIAkJCQlBNzdB
NDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY0NTMxODFGRDI0
NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg3NjgsNiArODc5Miw3IEBACiAJCQkJMEYyQjY2RTUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMDkxRkQxQzNDRjAwNzlDNUIyIC8q
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtODkxNiw2ICs4OTQxLDcgQEAKIAkJCQlBNzQ4MkU5MzEx
NkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyog
SlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzQxRkM3QTk3QTAwMUQz
MkFDIC8qIFZpc2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVD
NjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4
NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVy
cyAqLywKQEAgLTkwMzUsOSArOTA2MSw5IEBACiAJCQkJRTNDMjk1REQxRUQyQ0JEQTAwRDMwMTZG
IC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQzRTQwQTFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDBDMUI2MThCNjYwMEM4MEUxRSAvKiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RDhDNzgxRkNB
M0NGQTAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAotCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVS
b290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyog
T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTI0Myw2ICs5MjY5LDcgQEAK
IAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEExRkQxQzNE
MzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjgzLDcgKzkzMTAsNiBAQAogCQkJCTBGNkM3MzUxMUFD
OUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGlt
ZW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYw
IC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyog
Vk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyMCw3ICszMjAsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KCkpKQorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Miw3ICs5NzIsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRX
ZWFrbHkoU2xvdFZpc2l0b3ImCiAgICAgCiAgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQg
PSB0cnVlOwogCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAg
IGlmIChIZWFwOjppc01hcmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNo
b3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGlj
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRvTAogCiBib29sIENvZGVCbG9jazo6c2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewotICAg
IGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNN
YXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkKQEAgLTExMzks
MTAgKzExMzksMTAgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZwog
I2lmIEVOQUJMRShERkdfSklUKQogc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZH
OjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbikKIHsKLSAgICBpZiAodHJhbnNp
dGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRp
b24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4g
JiYgIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQodHJh
bnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAg
IGlmIChIZWFwOjppc01hcmtlZChvbGRTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwpAQCAt
MTI0NiwxNCArMTI0NiwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoY29u
c3QgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5j
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNDZWxsKiByZWZlcmVuY2UgPSBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwogICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8
Q29kZUJsb2NrKj4oKnJlZmVyZW5jZS0+dm0oKSwgcmVmZXJlbmNlKSk7Ci0gICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkocmVmZXJlbmNlKSkgeworICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGFs
bEFyZUxpdmVTb0ZhcikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29t
bW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVS
ZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChk
ZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewogICAgICAgICAg
ICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3Bs
YW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93biBy
aWdodFRvUnVuLgotICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcGVk
IGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJlYWQo
Jm1fZGF0YSk7CiAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxlZCkg
ewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAu
d29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3Rv
cHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBs
YW5zLmFwcGVuZChtX3BsYW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFwLndv
cmxkSXNTdG9wcGVkKCkpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3BsYW5Db21waWxlZC5u
b3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAo
c2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5jb2xsZWN0b3JCZWxpZXZlc1Ro
YXRUaGVXb3JsZElzU3RvcHBlZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgu
bV92bS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwogICAgIAogICAgIGlmIChzdGF0ZS5hbGxvY2F0
aW9uRmFpbGVkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDEyICs2NiwxMiBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+Ci1pbmxpbmUgdm9pZCBDb25zZXJ2YXRp
dmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIodm9pZCogcCwgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKK2lubGlu
ZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgbWFy
a0hvb2subWFyayhwKTsKIAogICAgIEhlYXBVdGlsOjpmaW5kR0NPYmplY3RQb2ludGVyc0Zvck1h
cmtpbmcoCi0gICAgICAgIG1faGVhcCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwgcCwKKyAgICAg
ICAgbV9oZWFwLCBtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBmaWx0ZXIs
IHAsCiAgICAgICAgIFsmXSAodm9pZCogcCkgewogICAgICAgICAgICAgaWYgKG1fc2l6ZSA9PSBt
X2NhcGFjaXR5KQogICAgICAgICAgICAgICAgIGdyb3coKTsKQEAgLTk1LDggKzk1LDkgQEAgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogCiAgICAgVGlueUJsb29tRmls
dGVyIGZpbHRlciA9IG1faGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLmZpbHRlcigpOyAvLyBN
YWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8gc2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3Qg
YWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxsb2NhdGVkLgogICAgIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uID0gbV9oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKTsKKyAg
ICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBtX2hlYXAub2JqZWN0U3BhY2Uo
KS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICBmb3IgKGNoYXIqKiBpdCA9IHN0YXRpY19j
YXN0PGNoYXIqKj4oYmVnaW4pOyBpdCAhPSBzdGF0aWNfY2FzdDxjaGFyKio+KGVuZCk7ICsraXQp
Ci0gICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgbWFya2luZ1ZlcnNpb24sIGZpbHRlciwg
bWFya0hvb2spOworICAgICAgICBnZW5lcmljQWRkUG9pbnRlcigqaXQsIG1hcmtpbmdWZXJzaW9u
LCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGZpbHRlciwgbWFya0hvb2spOwogfQogCiBjbGFzcyBE
dW1teU1hcmtIb29rIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQ2FwYWNpdHkg
PSA4MTkyIC8gc2l6ZW9mKEhlYXBDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFya0hvb2s+Ci0gICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgSGVhcFZlcnNpb24s
IFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKKyAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVy
KHZvaWQqLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29rJik7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXJrSG9vaz4KICAgICB2b2lkIGdlbmVyaWNBZGRTcGFuKHZvaWQqLCB2b2lk
KiBlbmQsIE1hcmtIb29rJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
dHJhaW50Q29uY3VycmVuY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50Q29uY3VycmVuY3kuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ29uc3Ry
YWludENvbmN1cnJlbmN5IDogdWludDhfdCB7CisgICAgU2VxdWVudGlhbCwKKyAgICBDb25jdXJy
ZW50Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCitp
bmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6Q29uc3RyYWlu
dENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQoreworICAgIHN3aXRjaCAoY29uY3VycmVuY3kpIHsK
KyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsOgorICAgICAg
ICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlND
OjpDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQ6CisgICAgICAgIG91dC5wcmludCgi
Q29uY3VycmVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zdHJhaW50UGFyYWxs
ZWxpc20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2VudW0gY2xhc3MgQ29uc3RyYWludFBhcmFsbGVsaXNtIDogdWludDhfdCB7CisgICAg
U2VxdWVudGlhbCwKKyAgICBQYXJhbGxlbAorfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSkKK3sKKyAgICBz
d2l0Y2ggKHBhcmFsbGVsaXNtKSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbDoK
KyAgICAgICAgb3V0LnByaW50KCJQYXJhbGxlbCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVu
dGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSwxMiArMjA5LDExIEBAIGlubGluZSBjb25zdCBUIEdDU2VnbWVudGVkQXJyYXk8VD46OnJlbW8K
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogaW5saW5lIGJvb2wgR0NTZWdtZW50ZWRBcnJheTxUPjo6
aXNFbXB0eSgpCiB7CisgICAgLy8gVGhpcyBoYXBwZW5zIHRvIGJlIHNhZmUgdG8gY2FsbCBjb25j
dXJyZW50bHkuIEl0J3MgaW1wb3J0YW50IHRvIHByZXNlcnZlIHRoYXQgY2FwYWJpbGl0eS4KICAg
ICBpZiAobV90b3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9zZWdtZW50cy5o
ZWFkKCktPm5leHQoKSkgewotICAgICAgICBBU1NFUlQobV9zZWdtZW50cy5oZWFkKCktPm5leHQo
KS0+bV90b3AgPT0gc19zZWdtZW50Q2FwYWNpdHkpOworICAgIGlmIChtX3NlZ21lbnRzLmhlYWQo
KS0+bmV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTWFjaGlu
ZVN0YWNrTWFya2VyLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIK
ICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkU3Bh
Y2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTZXQuaCIKQEAgLTY2LDYg
KzY3LDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtl
ZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgi
CiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjgxLDcgKzI4Myw3IEBAIEhlYXA6OkhlYXAoVk0qIHZt
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFr
ZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQogICAgICwgbV9tdXRhdG9yTWFya1N0
YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX3JhY2VNYXJr
U3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKLSAgICAsIG1fY29uc3Ry
YWludFNldChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigpKQorICAgICwg
bV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCp0
aGlzKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFr
ZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjpt
YWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTU5NCw3ICs1OTYsNyBAQCB2b2lk
IEhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDCiAgICAgICAgIGZ1bmMoY29kZUJs
b2NrKTsKIH0KIAotdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQordm9p
ZCBIZWFwOjphc3NlcnRNYXJrU3RhY2tzRW1wdHkoKQogewogICAgIGJvb2wgb2sgPSB0cnVlOwog
ICAgIApAQCAtNjA4LDEyICs2MTAsMjEgQEAgdm9pZCBIZWFwOjphc3NlcnRTaGFyZWRNYXJrU3Rh
Y2tzRW1wdHkoKQogICAgICAgICBvayA9IGZhbHNlOwogICAgIH0KICAgICAKKyAgICBmb3JFYWNo
U2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBWaXNpdG9yICIsIFJhd1Bv
aW50ZXIoJnZpc2l0b3IpLCAiIGlzIG5vdCBlbXB0eSFcbiIpOworICAgICAgICAgICAgb2sgPSBm
YWxzZTsKKyAgICAgICAgfSk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQob2spOwogfQogCiB2
b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewot
ICAgIG1fbWFjaGluZVRocmVhZHMtPmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9q
aXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MsIG1fY3VycmVudFRocmVhZFN0YXRlKTsKKyAg
ICBtX21hY2hpbmVUaHJlYWRzLT5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0
U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzLCBtX2N1cnJlbnRUaHJlYWRTdGF0ZSwgbV9jdXJy
ZW50VGhyZWFkKTsKIH0KIAogdm9pZCBIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0
aXZlUm9vdHMmIHJvb3RzKQpAQCAtNzMwLDcgKzc0MSw3IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2lu
ZygpCiAgICAgICAgICAgICB2aXNpdG9yLnJlc2V0KCk7CiAgICAgICAgIH0pOwogCi0gICAgYXNz
ZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CisgICAgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7
CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKQEAgLTkxMSw3ICs5MjIsNyBA
QCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9iYXJyaWVy
c0V4ZWN1dGVkKys7CiAgICAgaWYgKG1fbXV0YXRvclNob3VsZEJlRmVuY2VkKSB7CiAgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBpZiAoIWlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKSB7CisgICAgICAgIGlmICghaXNNYXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgIC8v
IER1cmluZyBhIGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0
IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0CiAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxs
IG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgUG9zc2libHlCbGFjayBvYmplY3Qu
IElmIHRoZQogICAgICAgICAgICAgLy8gb2JqZWN0IGdldHMgbWFya2VkIGF0IHNvbWUgdGltZSBh
ZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZwpAQCAtOTI0
LDE1ICs5MzUsMTUgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQog
ICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyByYWNlOgogICAg
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gICAgIDEpIE9iamVjdCBzdGFydHMg
b3V0IGJsYWNrICsgdW5tYXJrZWQuCi0gICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBp
c01hcmtlZENvbmN1cnJlbnRseSBoZXJlLgorICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2Ug
ZG8gaXNNYXJrZWQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyAgICAgMikgT2JqZWN0IGlzIG1h
cmtlZCBhbmQgZ3JleWVkLgogICAgICAgICAgICAgICAgIC8vICAgICAzKSBPYmplY3QgaXMgc2Nh
bm5lZCBhbmQgYmxhY2tlZC4KICAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGF0b21p
Y0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyBoZXJlLgogICAgICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGhhdmUgbWFkZSB0aGUg
b2JqZWN0IHdoaXRlIGFnYWluLCBldmVuIHRob3VnaCBpdCBzaG91bGQKICAgICAgICAgICAgICAg
ICAvLyBiZSBibGFjay4gVGhpcyBjaGVjayBsZXRzIHVzIGNvcnJlY3Qgb3VyIG1pc3Rha2UuIFRo
aXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpc01hcmtlZENv
bmN1cnJlbnRseSBjb252ZXJnZXMgbW9ub3RvbmljYWxseSB0byB0cnVlLgotICAgICAgICAgICAg
ICAgIGlmIChpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAgICAgICAgIC8v
IGlzTWFya2VkIGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCisgICAgICAgICAgICAg
ICAgaWYgKGlzTWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgZGlm
ZmljdWx0IHRvIHdvcmsgb3V0IHdoZXRoZXIgdGhlIG9iamVjdCBzaG91bGQgYmUgZ3JleSBvciBi
bGFjayBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSBzYXkgYmxhY2sg
Y29uc2VydmF0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnNldENlbGxTdGF0ZShD
ZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spOwpAQCAtOTQ4LDcgKzk1OSw3IEBAIHZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpOworICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAgIC8v
IEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKICAgICAvLyBzdGF0ZSB0byBEZWZpbml0
ZWx5R3JleSBhbmQgdGhlbiB0byBQb3NzaWJseU9sZE9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3Mg
T0sgZm9yIHVzIHRvCiAgICAgLy8gcmFjZSB3aXRoIHRoZSBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ug
d2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfCkBAIC0x
MDkxLDYgKzExMDIsNyBAQCBhdXRvIEhlYXA6OnJ1bkN1cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciBj
CiB7CiAgICAgY2hlY2tDb25uKGNvbm4pOwogICAgIG1fY3VycmVudFRocmVhZFN0YXRlID0gY3Vy
cmVudFRocmVhZFN0YXRlOworICAgIG1fY3VycmVudFRocmVhZCA9ICZXVEY6OlRocmVhZDo6Y3Vy
cmVudCgpOwogICAgIAogICAgIGlmIChjb25uID09IEdDQ29uZHVjdG9yOjpNdXRhdG9yKQogICAg
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0oKSk7CkBAIC0xMjgzLDEzICsxMjk1LDExIEBAIE5F
VkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICB9CiAgICAgICAgIAog
ICAgIGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKKyAgICAgICAgbV9v
cGFxdWVSb290cy5kZWxldGVPbGRUYWJsZXMoKTsKKyAgICAgICAgCiAgICAgICAgIG1fc2NoZWR1
bGVyLT5kaWRSZWFjaFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgYXNzZXJ0
U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2xvdFZpc2l0
b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRv
ciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3It
Pm1lcmdlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgCisgICAgICAgIGFzc2VydE1hcmtTdGFja3NF
bXB0eSgpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUYWtlIG1fbXV0YXRvckRp
ZFJ1biBpbnRvIGFjY291bnQgd2hlbiBzY2hlZHVsaW5nIGNvbnN0cmFpbnRzLiBNb3N0IGxpa2Vs
eSwKICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIHJvb3QgY29uc3RyYWludHMg
YWdhaW4gdW5sZXNzIHRoZSBtdXRhdG9yIGRpZCBydW4uIEF0IGEKQEAgLTEyOTcsMTcgKzEzMDcs
MTQgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAv
LyBlc3RpbWF0ZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjgyOAogICAgICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZCB0aW1lb3V0LiBUaGlzIG9u
bHkgY29tZXMKLSAgICAgICAgLy8gaW50byBwbGF5IGlmIHdlJ3JlIGV4ZWN1dGluZyBjb25zdHJh
aW50cyBmb3IgdGhlIGZpcnN0IHRpbWUuIEJ1dCB0aGF0IHdpbGwgbWF0dGVyCi0gICAgICAgIC8v
IHdoZW4gd2UgaGF2ZSBkZWVwIHN0YWNrcyBvciBhIGxvdCBvZiBET00gc3R1ZmYuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzEKLSAgICAg
ICAgICAgIAogICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwogICAg
ICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCku
Ci0gICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+
ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKKyAgICAgICAgYm9vbCBjb252ZXJnZWQgPSBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252
ZXJnZW5jZShzbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlIHNs
b3RWaXNpdG9yLmlzRW1wdHkoKSBjaGVjayBpcyBtb3N0IGxpa2VseSBub3QgbmVlZGVkLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzEwCiAg
ICAgICAgIGlmIChjb252ZXJnZWQgJiYgc2xvdFZpc2l0b3IuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgIGFzc2VydE1h
cmtTdGFja3NFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpFbmQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzMjQsNiAr
MTMzMSwxNSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAg
ICAgIAogICAgIG1fc2NoZWR1bGVyLT5zeW5jaHJvbm91c0RyYWluaW5nRGlkU3RhbGwoKTsKIAor
ICAgIC8vIFRoaXMgaXMga2luZGEgdHJpY2t5LiBUaGUgdGVybWluYXRpb24gY2hlY2sgbG9va3Mg
YXQ6CisgICAgLy8KKyAgICAvLyAtIFdoZXRoZXIgdGhlIG1hcmtpbmcgdGhyZWFkcyBhcmUgYWN0
aXZlLiBJZiB0aGV5IGFyZSBub3QsIHRoaXMgbWVhbnMgdGhhdCB0aGUgbWFya2luZyB0aHJlYWRz
JworICAgIC8vICAgU2xvdFZpc2l0b3JzIGFyZSBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IGNvbGxlY3RvcidzIHNsb3QgdmlzaXRvciBpcyBlbXB0eS4KKyAgICAvLyAtIFdoZXRoZXIgdGhl
IHNoYXJlZCBtYXJrIHN0YWNrcyBhcmUgZW1wdHkuCisgICAgLy8KKyAgICAvLyBUaGlzIGRvZXNu
J3QgaGF2ZSB0byBjaGVjayB0aGUgbXV0YXRvciBTbG90VmlzaXRvciBiZWNhdXNlIHRoYXQgb25l
IGJlY29tZXMgZW1wdHkgYWZ0ZXIgZXZlcnkgR0MKKyAgICAvLyB3b3JrIGluY3JlbWVudCwgc28g
aXQgbXVzdCBiZSBlbXB0eSBub3cuCiAgICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWlu
YXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxvb3Bpbmcg
dG8gdGhlIHRvcCBpZiBydW5GaXhwb2ludFBoYXNlKCkuCiAgICAgICAgIApAQCAtMTQ4OSw2ICsx
NTA1LDggQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogICAgIGlm
IChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhjb25uLCAiOiBHb2luZyB0byBwaGFzZTogIiwgbV9u
ZXh0UGhhc2UsICIgKGZyb20gIiwgbV9jdXJyZW50UGhhc2UsICIpXG4iKTsKICAgICAKKyAgICBt
X3BoYXNlVmVyc2lvbisrOworICAgIAogICAgIGJvb2wgc3VzcGVuZGVkQmVmb3JlID0gd29ybGRT
aG91bGRCZVN1c3BlbmRlZChtX2N1cnJlbnRQaGFzZSk7CiAgICAgYm9vbCBzdXNwZW5kZWRBZnRl
ciA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQobV9uZXh0UGhhc2UpOwogICAgIApAQCAtMTUyNiw3
ICsxNTQ0LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6ZmluaXNoQ2hhbmdpbmdQaAogCiB2
b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgY29ubikKIHsKLSAgICBpZiAo
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmIChtX3dv
cmxkSXNTdG9wcGVkKSB7CiAgICAgICAgIGRhdGFMb2coIkZBVEFMOiB3b3JsZCBhbHJlYWR5IHN0
b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0xNTM3LDcgKzE1NTUsNyBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25k
dWN0b3IgCiAgICAgbV9tdXRhdG9yRGlkUnVuID0gZmFsc2U7CiAKICAgICBzdXNwZW5kQ29tcGls
ZXJUaHJlYWRzKCk7Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCA9IHRydWU7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IHRydWU7CiAKICAgICBmb3JFYWNoU2xv
dFZpc2l0b3IoCiAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CkBAIC0x
NTc0LDExICsxNTkyLDExIEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OnJlc3VtZVRoZVBlcmlw
aGUKICAgICAKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAwOwogICAgIAotICAgIGlmICghbV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCkgeworICAgIGlmICghbV93b3Js
ZElzU3RvcHBlZCkgewogICAgICAgICBkYXRhTG9nKCJGYXRhbDogY29sbGVjdG9yIGRvZXMgbm90
IGJlbGlldmUgdGhhdCB0aGUgd29ybGQgaXMgc3RvcHBlZC5cbiIpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhh
dFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CisgICAgbV93b3JsZElzU3RvcHBlZCA9IGZhbHNl
OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZDogd2Ug
d2FudCB0byBncmFiIHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQogICAgIC8v
IGJlY29tZSBhdmFpbGFibGUuIFdlIGJhc2ljYWxseSB3YW50IGEgbG9ja0FueSgpIG1ldGhvZCB0
aGF0IHdpbGwgbG9jayB3aGF0ZXZlciBsb2NrIGlzIGF2YWlsYWJsZQpAQCAtMjU3OCw3ICsyNTk2
LDExIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKIHsKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIkNzIiwgIkNvbnNlcnZhdGl2ZSBTY2FuIiwKLSAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKKyAgICAgICAgW3RoaXMsIGxhc3RWZXJzaW9uID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDAp
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkTm90UHJvZHVjZVdvcmsgPSBsYXN0VmVyc2lvbiA9PSBtX3BoYXNlVmVyc2lvbjsKKyAg
ICAgICAgICAgIGlmIChzaG91bGROb3RQcm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNl
VGltaW5nU2NvcGUoKnRoaXMsICJDb25zdHJhaW50OiBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpOwogICAg
ICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAt
MjU4NywxMiArMjYwOSwxNCBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAg
ICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbV9waGFzZVZlcnNpb247CiAgICAgICAgIH0sCiAg
ICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CiAgICAgCiAg
ICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJNc3IiLCAiTWlzYyBTbWFsbCBSb290
cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNp
dGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KSB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgICAgIHNjYW5FeHRlcm5hbFJl
bWVtYmVyZWRTZXQoKm1fdm0sIHNsb3RWaXNpdG9yKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsyNjM3
LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3Ry
YWludFNldC0+YWRkKAogICAgICAgICAiU2giLCAiU3Ryb25nIEhhbmRsZXMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAg
ICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAg
ICAgIG1faGFuZGxlU3RhY2sudmlzaXQoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjYy
MSw3ICsyNjQ1LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAogICAgICAgICAiRCIsICJEZWJ1Z2dlciIsCi0gICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQm
KSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAjaWYgRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwpA
QCAtMjY0MSwyMSArMjY2NSwyMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAg
ICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJKc3IiLCAiSklUIFN0dWIg
Um91dGluZXMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcikgewogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIldzIiwgIldlYWsgU2V0cyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0
aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX29iamVjdFNw
YWNlLnZpc2l0V2Vha1NldHMoc2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICAKICAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZCgKICAgICAgICAgIldyaCIsICJXZWFrIFJlZmVyZW5jZSBIYXJ2ZXN0ZXJzIiwK
LSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5n
VGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsK
ICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
bmV4dCgpKQogICAgICAgICAgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xv
dFZpc2l0b3IpOwogICAgICAgICB9LApAQCAtMjY2NCw3ICsyNjg4LDcgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAogICAgICAgICAiRHciLCAiREZHIFdvcmtsaXN0cyIsCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7Cisg
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCiAgICAgICAg
ICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJl
bmNlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICAKQEAgLTI2ODQsNyArMjcwOCw3IEBAIHZv
aWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQt
PmFkZCgKICAgICAgICAgIkNiIiwgIkNvZGVCbG9ja3MiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgaXRlcmF0ZUV4
ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xvY2tzKAogICAgICAg
ICAgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gVmlzaXQgdGhlIENvZGVCbG9jayBhcyBhIGNvbnN0cmFpbnQgb25seSBpZiBpdCdzIGJs
YWNrLgpAQCAtMjY5NSwyMyArMjcxOSw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRz
KCkKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNlbGRvbUdyZXll
ZCk7CiAgICAgCi0gICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCi0gICAgICAgICJNcm1zIiwgIk11
dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKLSAgICAgICAgICAgIC8vIEluZGlj
YXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJvZHVjZWQgd29yayEKLSAgICAgICAgICAg
IHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3Rh
Y2stPnNpemUoKTsKLSAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXpl
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiKCIsIHNpemUsICIpIik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOwotICAgICAgICAgICAgbV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHNs
b3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewotICAgICAgICAgICAgcmV0dXJuIG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlvbik7CisgICAg
bV9jb25zdHJhaW50U2V0LT5hZGQoc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludD4oKnRoaXMpKTsKIH0KIAogdm9pZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQpCkBAIC0yNzk0LDE2
ICsyODAyLDYgQEAgdm9pZCBIZWFwOjphbGxvd0NvbGxlY3Rpb24oKQogICAgIG1fY29sbGVjdENv
bnRpbnVvdXNseUxvY2sudW5sb2NrKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12
b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgZnVu
YygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0gICAgZnVuYygqbV9tdXRhdG9yU2xvdFZpc2l0
b3IpOwotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TXV0YXRv
clNob3VsZEJlRmVuY2VkKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5j
ZWQgPSB2YWx1ZTsKQEAgLTI4NDcsNCArMjg0NSwyNCBAQCB2b2lkIEhlYXA6OnJlbW92ZUhlYXBG
aW5hbGl6ZXJDYWxsYmFjayhjCiAgICAgbV9oZWFwRmluYWxpemVyQ2FsbGJhY2tzLnJlbW92ZUZp
cnN0KGNhbGxiYWNrKTsKIH0KIAordm9pZCBIZWFwOjpzZXRCb251c1Zpc2l0b3JUYXNrKFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IHRhc2spCit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgbV9ib251c1Zpc2l0b3JUYXNrID0g
dGFzazsKKyAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwor
dm9pZCBIZWFwOjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiB0YXNrKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxSZWZDb3VudCA9IHRhc2st
PnJlZkNvdW50KCk7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayh0YXNrKTsKKyAgICB0YXNrLT5y
dW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIHNldEJvbnVzVmlzaXRvclRhc2sobnVs
bHB0cik7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbWFya2luZ011
dGV4KTsKKyAgICAgICAgd2hpbGUgKHRhc2stPnJlZkNvdW50KCkgPiBpbml0aWFsUmVmQ291bnQp
CisgICAgICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KG1fbWFya2luZ011
dGV4KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi
V2Vha0hhbmRsZU93bmVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgog
I2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNzMsNiArNzQsNyBA
QCBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFj
aGluZVRocmVhZHM7CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKK2NsYXNzIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50OwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogY2xhc3MgTWFya2VkQXJndW1l
bnRCdWZmZXI7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKQEAgLTExNCw3ICsxMTYsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfdGltZUNoZWNrUmVzb2x1dGlvbiA9
IDE2OwogCiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRp
YyBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgCiAgICAg
c3RhdGljIHNpemVfdCBjZWxsU2l6ZShjb25zdCB2b2lkKik7CkBAIC0xNTQsNyArMTU1LDggQEAg
cHVibGljOgogICAgIE11dGF0b3JTdGF0ZSBtdXRhdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X211dGF0b3JTdGF0ZTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBjb2xs
ZWN0aW9uU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3Rpb25TY29wZTsgfQogICAgIGJv
b2wgaGFzSGVhcEFjY2VzcygpIGNvbnN0OwotICAgIGJvb2wgY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNTdG9wcGVkKCkgY29u
c3Q7CisgICAgYm9vbCB3b3JsZElzUnVubmluZygpIGNvbnN0IHsgcmV0dXJuICF3b3JsZElzU3Rv
cHBlZCgpOyB9CiAKICAgICAvLyBXZSdyZSBhbHdheXMgYnVzeSBvbiB0aGUgY29sbGVjdGlvbiB0
aHJlYWRzLiBPbiB0aGUgbWFpbiB0aHJlYWQsIHRoaXMgcmV0dXJucyB0cnVlIGlmIHdlJ3JlCiAg
ICAgLy8gaGVscGluZyBoZWFwLgpAQCAtMzQ5LDYgKzM1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFsbG93Q29sbGVjdGlvbigpOwogICAgIAogICAgIHVpbnQ2NF90IG11dGF0b3JFeGVjdXRpb25W
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbjsgfQorICAg
IHVpbnQ2NF90IHBoYXNlVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2VWZXJzaW9uOyB9
CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRNYXJraW5nQ29uc3RyYWludChz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+KTsKICAgICAKQEAgLTM1OCw2ICszNjEs
MTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkSGVhcEZpbmFsaXplckNhbGxiYWNrKGNv
bnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOwogICAgIHZvaWQgcmVtb3ZlSGVhcEZpbmFsaXpl
ckNhbGxiYWNrKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYpOworICAgIAorICAgIHZvaWQg
cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4p
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBydW5GdW5jdGlv
bkluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHJ1blRhc2tJblBh
cmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPihmdW5jKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hTbG90Vmlz
aXRvcihjb25zdCBGdW5jJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRp
bmdTY29wZTsKQEAgLTM3Myw2ICszODcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBI
ZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9j
azsKQEAgLTUyNSw4ICs1NDAsMTAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRo
b3V0SG9sZGluZ0xvY2tzKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICB2b2lkIGFzc2VydFNoYXJl
ZE1hcmtTdGFja3NFbXB0eSgpOworICAgIHZvaWQgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAK
KyAgICB2b2lkIHNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90
VmlzaXRvciYpPj4pOworICAgIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAg
Y29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAgICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5
Y2xlOwpAQCAtNTc5LDkgKzU5Niw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFNsb3RWaXNpdG9y
Kj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9yczsKICAgICBMb2NrIG1fcGFyYWxsZWxT
bG90VmlzaXRvckxvY2s7CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICB2
b2lkIGZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJik7Ci0KICAgICBIYW5kbGVTZXQgbV9o
YW5kbGVTZXQ7CiAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUJsb2NrU2V0PiBtX2NvZGVCbG9ja3M7CkBAIC02MzMsOCArNjQ3LDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAg
fTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CiAKLSAg
ICBMb2NrIG1fb3BhcXVlUm9vdHNNdXRleDsKLSAgICBIYXNoU2V0PGNvbnN0IHZvaWQqPiBtX29w
YXF1ZVJvb3RzOworICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0IG1fb3BhcXVlUm9vdHM7CiAKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCkBAIC02
NDIsNiArNjU1LDcgQEAgcHJpdmF0ZToKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25h
bEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKIAogICAgIFBhcmFs
bGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4+IG1fYm9udXNWaXNpdG9yVGFzazsKIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKICAgICBzaXplX3QgbV9ibG9ja0J5dGVzQWxsb2NhdGVkIHsgMCB9OwpAQCAt
NjU3LDcgKzY3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5lZWRG
aW5hbGl6ZUJpdCA9IDF1IDw8IDR1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9y
V2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMg
YXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3Rh
dGU7Ci0gICAgYm9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fd29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OwogICAgIE1vbm90
b25pY1RpbWUgbV9iZWZvcmVHQzsKICAgICBNb25vdG9uaWNUaW1lIG1fYWZ0ZXJHQzsKICAgICBN
b25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CkBAIC02NzIsNiArNjg2LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fdGhyZWFkSXNTdG9wcGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211dGF0b3JE
aWRSdW4geyB0cnVlIH07CiAgICAgdWludDY0X3QgbV9tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbiB7
IDAgfTsKKyAgICB1aW50NjRfdCBtX3BoYXNlVmVyc2lvbiB7IDAgfTsKICAgICBCb3g8TG9jaz4g
bV90aHJlYWRMb2NrOwogICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fdGhy
ZWFkQ29uZGl0aW9uOyAvLyBUaGUgbXV0YXRvciBtdXN0IG5vdCB3YWl0IG9uIHRoaXMuIEl0IHdv
dWxkIGNhdXNlIGEgZGVhZGxvY2suCiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJl
YWQ7CkBAIC02OTMsNiArNzA4LDcgQEAgcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9iYXJyaWVy
c0V4ZWN1dGVkIHsgMCB9OwogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50
VGhyZWFkU3RhdGUgeyBudWxscHRyIH07CisgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVh
ZCB7IG51bGxwdHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2lu
dGVyLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDMwICs2Mywy
MCBAQCBpbmxpbmUgYm9vbCBIZWFwOjpoYXNIZWFwQWNjZXNzKCkgY29uc3QKICAgICByZXR1cm4g
bV93b3JsZFN0YXRlLmxvYWQoKSAmIGhhc0FjY2Vzc0JpdDsKIH0KIAotaW5saW5lIGJvb2wgSGVh
cDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdAoraW5saW5l
IGJvb2wgSGVhcDo6d29ybGRJc1N0b3BwZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOworICAgIHJldHVybiBtX3dvcmxkSXNT
dG9wcGVkOwogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYW4gaW5zdGFuY2UgbWV0aG9k
LCBzbyB0aGF0IGl0IGNhbiBnZXQgdGhlIG1hcmtpbmdWZXJzaW9uKCkgcXVpY2tseS4KKy8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5ODgKIEFMV0FZU19JTkxJ
TkUgYm9vbCBIZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiByYXdDZWxsKQogewotICAgIEFTU0VS
VChtYXlCZUdDVGhyZWFkKCkgIT0gR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogICAgIEhlYXBDZWxs
KiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2VsbCk7CiAgICAgaWYgKGNlbGwt
PmlzTGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRp
b24oKS5pc01hcmtlZCgpOwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJs
b2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKAotICAgICAgICBibG9jay52bSgpLT5o
ZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSwgY2VsbCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgYm9vbCBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjb25zdCB2b2lkKiByYXdDZWxs
KQotewotICAgIEhlYXBDZWxsKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4ocmF3Q2Vs
bCk7Ci0gICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBj
ZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpOwotICAgIE1hcmtlZEJsb2NrJiBibG9j
ayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkQ29uY3Vy
cmVudGx5KAotICAgICAgICBibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1Zl
cnNpb24oKSwgY2VsbCk7CisgICAgcmV0dXJuIGJsb2NrLmlzTWFya2VkKGJsb2NrLnZtKCktPmhl
YXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKIH0KIAogQUxXQVlTX0lO
TElORSBib29sIEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIGNvbnN0IHZvaWQqIHJhd0NlbGwpCkBAIC0xNzksMTkgKzE2OSwxOSBAQCBpbmxpbmUgdm9p
ZCBIZWFwOjpyZWxlYXNlU29vbihSZXRhaW5QdHI8CiAKIGlubGluZSB2b2lkIEhlYXA6OmluY3Jl
bWVudERlZmVycmFsRGVwdGgoKQogewotICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1f
Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOworICAgIEFTU0VSVCghbWF5
QmVHQ1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwogICAgIG1fZGVmZXJyYWxEZXB0aCsr
OwogfQogCiBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKLSAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNT
dG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQogewotICAgIEFTU0VSVCghbWF5
QmVHQ1RocmVhZCgpIHx8IG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQp
OworICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwogICAg
IG1fZGVmZXJyYWxEZXB0aC0tOwogICAgIAogICAgIGlmIChVTkxJS0VMWShtX2RpZERlZmVyR0NX
b3JrKSkgewpAQCAtMjY5LDQgKzI1OSwxNCBAQCBpbmxpbmUgdm9pZCBIZWFwOjpzdG9wSWZOZWNl
c3NhcnkoKQogICAgICAgICBzdG9wSWZOZWNlc3NhcnlTbG93KCk7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Cit2b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jJiBm
dW5jKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9wYXJhbGxlbFNsb3RWaXNpdG9y
TG9jayk7CisgICAgZnVuYygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgZnVuYygqbV9t
dXRhdG9yU2xvdFZpc2l0b3IpOworICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFs
bGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBmdW5jKCpzbG90VmlzaXRvcik7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFNuYXBzaG90QnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgK
IHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Ci0g
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQo
SGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCiAgICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwo
Y2VsbCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBVdGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFV0aWwuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFV0aWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gYmVmb3JlIGxpdmVuZXNzIGRhdGEgaXMgY2xlYXJlZCB0byBiZSBhY2N1cmF0ZS4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHN0YXRpYyB2b2lkIGZpbmRHQ09iamVjdFBvaW50
ZXJzRm9yTWFya2luZygKLSAgICAgICAgSGVhcCYgaGVhcCwgSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIHZvaWQqIHBhc3NlZFBvaW50ZXIsCi0gICAg
ICAgIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgIEhlYXAmIGhlYXAsIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIFRpbnlCbG9v
bUZpbHRlciBmaWx0ZXIsCisgICAgICAgIHZvaWQqIHBhc3NlZFBvaW50ZXIsIGNvbnN0IEZ1bmMm
IGZ1bmMpCiAgICAgewogICAgICAgICBjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2NrKj4mIHNldCA9
IGhlYXAub2JqZWN0U3BhY2UoKS5ibG9ja3MoKS5zZXQoKTsKICAgICAgICAgCkBAIC04OCw3ICs4
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAmJiBzZXQuY29udGFpbnMocHJldmlvdXND
YW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNDYW5kaWRhdGUtPmhhbmRsZSgp
LmNlbGxLaW5kKCkgPT0gSGVhcENlbGw6OkF1eGlsaWFyeSkgewogICAgICAgICAgICAgICAgIHBy
ZXZpb3VzUG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihwcmV2aW91c0NhbmRpZGF0ZS0+aGFu
ZGxlKCkuY2VsbEFsaWduKHByZXZpb3VzUG9pbnRlcikpOwotICAgICAgICAgICAgICAgIGlmIChw
cmV2aW91c0NhbmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgaXNN
YXJraW5nLCBwcmV2aW91c1BvaW50ZXIpKQorICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0Nh
bmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0
ZWRWZXJzaW9uLCBpc01hcmtpbmcsIHByZXZpb3VzUG9pbnRlcikpCiAgICAgICAgICAgICAgICAg
ICAgIGZ1bmMocHJldmlvdXNQb2ludGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgICAgIGF1dG8gdHJ5UG9pbnRlciA9IFsmXSAodm9pZCogcG9pbnRlcikgewotICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgaXNN
YXJraW5nLCBwb2ludGVyKSkKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmhhbmRsZSgpLmlz
TGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgaXNNYXJraW5n
LCBwb2ludGVyKSkKICAgICAgICAgICAgICAgICBmdW5jKHBvaW50ZXIpOwogICAgICAgICB9Owog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9u
LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdl
QWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNN
YXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzTWFya2VkKEhlYXBDZWxsKiwgRGVwZW5kZW5jeSkgeyByZXR1cm4gaXNNYXJrZWQo
KTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVy
c2lvbiwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CisgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2Vk
KCk7IH0KICAgICBib29sIGlzTGl2ZSgpIHsgcmV0dXJuIGlzTWFya2VkKCkgfHwgaXNOZXdseUFs
bG9jYXRlZCgpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNWYWxpZENlbGwoKSBjb25zdCB7IHJldHVy
biBtX2hhc1ZhbGlkQ2VsbDsgfQpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGVzOyB9CiAgICAgCi0gICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVy
c2lvbikgeyByZXR1cm4gbnVsbERlcGVuZGVuY3koKTsgfQorICAgIERlcGVuZGVuY3kgYWJvdXRU
b01hcmsoSGVhcFZlcnNpb24pIHsgcmV0dXJuIERlcGVuZGVuY3koKTsgfQogICAgIAogICAgIEFM
V0FZU19JTkxJTkUgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJKHJldmlzaW9uIDIy
NTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJraW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsMTQgKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBVc2UgdGhp
cyBsb2NrIHNjb3BlIGxpa2Ugc286CiAvLyBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5n
KGhlYXAsIGxvY2spOwogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci1Mb2NrZXI8TG9ja1R5
cGU+IGxvY2tEdXJpbmdNYXJraW5nKEhlYXAmIGhlYXAsIExvY2tUeXBlJiBwYXNzZWRMb2NrKQor
YXV0byBsb2NrRHVyaW5nTWFya2luZyhIZWFwJiBoZWFwLCBMb2NrVHlwZSYgcGFzc2VkTG9jaykK
IHsKLSAgICBMb2NrVHlwZSogbG9jazsKLSAgICBpZiAoaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5j
ZWQoKSkKLSAgICAgICAgbG9jayA9ICZwYXNzZWRMb2NrOwotICAgIGVsc2UKLSAgICAgICAgbG9j
ayA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4obG9jayk7CisgICAgcmV0
dXJuIGhvbGRMb2NrSWYocGFzc2VkTG9jaywgaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90
aGVyVGhyZWFkUwogICAgICpzaXplICs9IHN0YWNrLnNlY29uZDsKIH0KIAotYm9vbCBNYWNoaW5l
VGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBs
b2NrZXIsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNpemUpCitib29s
IE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlciwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6
ZSwgVGhyZWFkJiBjdXJyZW50VGhyZWFkRm9yR0MpCiB7CiAgICAgLy8gUHJldmVudCB0d28gVk1z
IGZyb20gc3VzcGVuZGluZyBlYWNoIG90aGVyJ3MgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLAog
ICAgIC8vIHdoaWNoIGNhbiBjYXVzZSBkZWFkbG9jazogPHJkYXI6Ly9wcm9ibGVtLzIwMzAwODQy
Pi4KQEAgLTE0NSwxMyArMTQ1LDE0IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhl
clRocmVhZFMKICAgICAqc2l6ZSA9IDA7CiAKICAgICBUaHJlYWQmIGN1cnJlbnRUaHJlYWQgPSBU
aHJlYWQ6OmN1cnJlbnQoKTsKLSAgICBjb25zdCBhdXRvJiB0aHJlYWRzID0gbV90aHJlYWRHcm91
cC0+dGhyZWFkcyhsb2NrZXIpOworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZjxUaHJlYWQ+PiYg
dGhyZWFkcyA9IG1fdGhyZWFkR3JvdXAtPnRocmVhZHMobG9ja2VyKTsKICAgICBCaXRWZWN0b3Ig
aXNTdXNwZW5kZWQodGhyZWFkcy5zaXplKCkpOwogCiAgICAgewogICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IDA7Ci0gICAgICAgIGZvciAoYXV0byYgdGhyZWFkIDogdGhyZWFkcykgewotICAgICAg
ICAgICAgaWYgKHRocmVhZC5nZXQoKSAhPSBjdXJyZW50VGhyZWFkKSB7CisgICAgICAgIGZvciAo
Y29uc3QgUmVmPFRocmVhZD4mIHRocmVhZCA6IHRocmVhZHMpIHsKKyAgICAgICAgICAgIGlmICh0
aHJlYWQuZ2V0KCkgIT0gY3VycmVudFRocmVhZAorICAgICAgICAgICAgICAgICYmIHRocmVhZC5n
ZXQoKSAhPSBjdXJyZW50VGhyZWFkRm9yR0MpIHsKICAgICAgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHRocmVhZC0+c3VzcGVuZCgpOwogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCiAgICAg
ICAgICAgICAgICAgICAgIGlzU3VzcGVuZGVkLnNldChpbmRleCk7CkBAIC0xOTksNyArMjAwLDcg
QEAgc3RhdGljIHZvaWQgZ3Jvd0J1ZmZlcihzaXplX3Qgc2l6ZSwgdm9pZAogICAgICpidWZmZXIg
PSBmYXN0TWFsbG9jKCpjYXBhY2l0eSk7CiB9CiAKLXZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywg
SklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2NrU2V0JiBjb2RlQmxv
Y2tzLCBDdXJyZW50VGhyZWFkU3RhdGUqIGN1cnJlbnRUaHJlYWRTdGF0ZSkKK3ZvaWQgTWFjaGlu
ZVRocmVhZHM6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25z
ZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJs
b2NrU2V0JiBjb2RlQmxvY2tzLCBDdXJyZW50VGhyZWFkU3RhdGUqIGN1cnJlbnRUaHJlYWRTdGF0
ZSwgVGhyZWFkKiBjdXJyZW50VGhyZWFkKQogewogICAgIGlmIChjdXJyZW50VGhyZWFkU3RhdGUp
CiAgICAgICAgIGdhdGhlckZyb21DdXJyZW50VGhyZWFkKGNvbnNlcnZhdGl2ZVJvb3RzLCBqaXRT
dHViUm91dGluZXMsIGNvZGVCbG9ja3MsICpjdXJyZW50VGhyZWFkU3RhdGUpOwpAQCAtMjA4LDcg
KzIwOSw3IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckNvbnNlcnZhdGl2ZVIKICAgICBz
aXplX3QgY2FwYWNpdHkgPSAwOwogICAgIHZvaWQqIGJ1ZmZlciA9IG51bGxwdHI7CiAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3RocmVhZEdyb3VwLT5nZXRMb2NrKCkpOwotICAgIHdoaWxl
ICghdHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGxvY2tlciwgYnVmZmVyLCBjYXBhY2l0eSwgJnNp
emUpKQorICAgIHdoaWxlICghdHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGxvY2tlciwgYnVmZmVy
LCBjYXBhY2l0eSwgJnNpemUsICpjdXJyZW50VGhyZWFkKSkKICAgICAgICAgZ3Jvd0J1ZmZlcihz
aXplLCAmYnVmZmVyLCAmY2FwYWNpdHkpOwogCiAgICAgaWYgKCFidWZmZXIpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgTWFjaGluZVRocmVh
ZHMgewogcHVibGljOgogICAgIE1hY2hpbmVUaHJlYWRzKCk7CiAKLSAgICB2b2lkIGdhdGhlckNv
bnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBD
b2RlQmxvY2tTZXQmLCBDdXJyZW50VGhyZWFkU3RhdGUqKTsKKyAgICB2b2lkIGdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2Rl
QmxvY2tTZXQmLCBDdXJyZW50VGhyZWFkU3RhdGUqLCBUaHJlYWQqKTsKIAogICAgIC8vIE9ubHkg
bmVlZHMgdG8gYmUgY2FsbGVkIGJ5IGNsaWVudHMgdGhhdCBjYW4gdXNlIHRoZSBzYW1lIGhlYXAg
ZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgogICAgIHZvaWQgYWRkQ3VycmVudFRocmVhZCgpIHsgbV90
aHJlYWRHcm91cC0+YWRkQ3VycmVudFRocmVhZCgpOyB9CkBAIC01Niw3ICs1Niw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYs
IEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVhZFN0YXRlJik7
CiAKICAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCYsIHZvaWQqLCBzaXpl
X3QgY2FwYWNpdHksIHNpemVfdCopOwotICAgIGJvb2wgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2tz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7
CisgICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqLCBUaHJlYWQmKTsKIAogICAgIHN0ZDo6
c2hhcmVkX3B0cjxUaHJlYWRHcm91cD4gbV90aHJlYWRHcm91cDsKIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitNYXJrU3RhY2tNZXJn
aW5nQ29uc3RyYWludDo6TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYgaGVhcCkKKyAg
ICA6IE1hcmtpbmdDb25zdHJhaW50KCJNc20iLCAiTWFyayBTdGFjayBNZXJnaW5nIiwgQ29uc3Ry
YWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKQorICAgICwgbV9oZWFwKGhlYXApCit7
Cit9CisKK01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Ojp+TWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQoKQoreworfQorCitkb3VibGUgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6OnF1aWNr
V29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJikKK3sKKyAgICByZXR1cm4gbV9oZWFwLm1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOworfQor
Cit2b2lkIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlSW1wbChj
b25zdCBBYnN0cmFjdExvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIC8vIExv
Z2dpbmcgdGhlIHdvcmsgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGNvbnN0cmFpbnQgc29sdmVyIGtu
b3dzIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIHByb2R1Y2UKKyAgICAvLyBhbnltb3JlIHdvcmsu
CisgICAgc2l6ZV90IHNpemUgPSBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBt
X2hlYXAubV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CisgICAgdmlzaXRvci5hZGRUb1Zpc2l0Q291
bnQoc2l6ZSk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFM
b2coIigiLCBzaXplLCAiKSIpOworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlzaXRvci5tdXRhdG9y
TWFya1N0YWNrKCkpOworICAgIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8odmlz
aXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOworICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxsZWxp
c206OlNlcXVlbnRpYWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQg
OiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgeworcHVibGljOgorICAgIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50KEhlYXAmKTsKKyAgICB+TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoKTsK
KyAgICAKKyAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKKyAgICAKK3ByaXZhdGU6CisgICAgSGVhcCYgbV9oZWFwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEs
NyArNjEsNyBAQCBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dChkb3VibGUgCiAgICAg
dW5zaWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwogICAgIGZvciAoYXV0byogYmxv
Y2sgOiBtX2Jsb2NrcykgewogICAgICAgICBpZiAoYmxvY2spCi0gICAgICAgICAgICBibG9jay0+
YmxvY2soKS51cGRhdGVOZWVkc0Rlc3RydWN0aW9uKCk7CisgICAgICAgICAgICBob2xkTG9jayhi
bG9jay0+YmxvY2soKS5sb2NrKCkpOwogICAgICAgICArK2l0ZXJzU2luY2VMYXN0VGltZUNoZWNr
OwogICAgICAgICBpZiAoaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPj0gSGVhcDo6c190aW1lQ2hl
Y2tSZXNvbHV0aW9uKSB7CiAgICAgICAgICAgICBkb3VibGUgY3VycmVudFRpbWUgPSBXVEY6Om1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwpAQCAtNDQ0LDYgKzQ0NCwzMyBAQCB2b2lkIE1h
cmtlZEFsbG9jYXRvcjo6YXNzZXJ0Tm9VbnN3ZXB0KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IE1hcmtl
ZEFsbG9jYXRvcjo6cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCkKK3sKKyAgICBjbGFzcyBU
YXNrIDogcHVibGljIFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4geworICAgIHB1
YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikKKyAgICAgICAg
ICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHJ1bigpIG92ZXJyaWRlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAg
ICAgIG1faW5kZXggPSBtX2FsbG9jYXRvci5tX21hcmtpbmdOb3RFbXB0eS5maW5kQml0KG1faW5k
ZXgsIHRydWUpOworICAgICAgICAgICAgaWYgKG1faW5kZXggPj0gbV9hbGxvY2F0b3IubV9ibG9j
a3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
cmV0dXJuIG1fYWxsb2NhdG9yLm1fYmxvY2tzW21faW5kZXgrK107CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsK
KyAgICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07CisgICAgICAgIExvY2sgbV9sb2NrOworICAg
IH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzKSk7Cit9CisKIHZv
aWQgTWFya2VkQWxsb2NhdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAg
b3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6IiwgbV9jZWxsU2l6ZSwgIi8iLCBtX2F0dHJp
YnV0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0
Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTAzLDYgKzEwNCw4IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhj
b25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JF
YWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJl
ZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJj
ZSgpOworICAgIAogICAgIHZvaWQgYWRkQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAg
IHZvaWQgcmVtb3ZlQmxvY2soTWFya2VkQmxvY2s6OkhhbmRsZSopOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRl
ICJTd2VlcGluZ1Njb3BlLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1
ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
ODYsOSArODcsOSBAQCBNYXJrZWRCbG9jazo6SGFuZGxlOjp+SGFuZGxlKCkKIH0KIAogTWFya2Vk
QmxvY2s6Ok1hcmtlZEJsb2NrKFZNJiB2bSwgSGFuZGxlJiBoYW5kbGUpCi0gICAgOiBtX21hcmtp
bmdWZXJzaW9uKE1hcmtlZFNwYWNlOjpudWxsVmVyc2lvbikKLSAgICAsIG1faGFuZGxlKGhhbmRs
ZSkKKyAgICA6IG1faGFuZGxlKGhhbmRsZSkKICAgICAsIG1fdm0oJnZtKQorICAgICwgbV9tYXJr
aW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb24pCiB7CiAgICAgaWYgKGZhbHNlKQog
ICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IEFsbG9jYXRlZC5cbiIpOwpAQCAt
MjAwLDcgKzIwMSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6emFwKGNvbnN0IEZyZWUK
IHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbikKIHsKICAgICBBU1NFUlQodm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLmlzTWFya2luZygp
KTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKICAgICAKICAgICBpZiAoIWFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNp
b24pKQogICAgICAgICByZXR1cm47CkBAIC0yMjMsMTUgKzIyNCwxOSBAQCB2b2lkIE1hcmtlZEJs
b2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50
ZXIodGhpcyksICI6IERvaW5nIHRoaW5ncy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXds
eUFsbG9jYXRlZFZlcnNpb24gPSBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAg
ICAgICAgaWYgKGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2Nh
dGVkVmVyc2lvbikgewotICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtl
ZCBpbnRvIG5ld2x5QWxsb2NhdGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKLSAg
ICAgICAgICAgIC8vIHRoZW4gaW52YWxpZGF0ZSBuZXdseUFsbG9jYXRlZCBhbmQgc2V0IGFsbG9j
YXRlZC4KLSAgICAgICAgICAgIGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWQubWVyZ2VBbmRDbGVh
cihtX21hcmtzKTsKKyAgICAgICAgICAgIC8vIFdoZW4gZG8gd2UgZ2V0IGhlcmU/IFRoZSBibG9j
ayBjb3VsZCBub3QgaGF2ZSBiZWVuIGZpbGxlZCB1cC4gVGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMg
d291bGQKKyAgICAgICAgICAgIC8vIGhhdmUgaGFkIHRvIGJlIGNyZWF0ZWQgc2luY2UgdGhlIGVu
ZCBvZiB0aGUgbGFzdCBjb2xsZWN0aW9uLiBUaGUgb25seSB0aGluZ3MgdGhhdCBjcmVhdGUKKyAg
ICAgICAgICAgIC8vIHRoZW0gYXJlIGFib3V0VG9NYXJrU2xvdywgbGFzdENoYW5jZVRvRmluYWxp
emUsIGFuZCBzdG9wQWxsb2NhdGluZy4gSWYgaXQgaGFkIGJlZW4KKyAgICAgICAgICAgIC8vIGFi
b3V0VG9NYXJrU2xvdywgdGhlbiB3ZSBzaG91bGRuJ3QgYmUgaGVyZSBzaW5jZSB0aGUgbWFya3Mg
d291bGRuJ3QgYmUgc3RhbGUgYW55bW9yZS4gSXQKKyAgICAgICAgICAgIC8vIGNhbm5vdCBiZSBs
YXN0Q2hhbmNlVG9GaW5hbGl6ZS4gU28gaXQgbXVzdCBiZSBzdG9wQWxsb2NhdGluZy4gVGhhdCBt
ZWFucyB0aGF0IHdlIGp1c3QKKyAgICAgICAgICAgIC8vIGNvbXB1dGVkIHRoZSBuZXdseUFsbG9j
YXRlZCBiaXRzIGp1c3QgYmVmb3JlIHRoZSBzdGFydCBvZiBhbiBpbmNyZW1lbnQuIFdoZW4gd2Ug
YXJlIGluIHRoYXQKKyAgICAgICAgICAgIC8vIG1vZGUsIGl0IHNlZW1zIGFzIGlmIG5ld2x5QWxs
b2NhdGVkIHNob3VsZCBzdWJzdW1lIG1hcmtzLgorICAgICAgICAgICAgQVNTRVJUKGhhbmRsZSgp
Lm1fbmV3bHlBbGxvY2F0ZWQuc3Vic3VtZXMobV9tYXJrcykpOworICAgICAgICAgICAgbV9tYXJr
cy5jbGVhckFsbCgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVwbGFjZSB0
aGUgY29udGVudHMgb2YgbmV3bHlBbGxvY2F0ZWQgd2l0aCBtYXJrZWQuIElmIHdlIGdldCB0aGUg
ZnVsbCBzZXQgb2YKLSAgICAgICAgICAgIC8vIGJpdHMgdGhlbiBpbnZhbGlkYXRlIG5ld2x5QWxs
b2NhdGVkIGFuZCBzZXQgYWxsb2NhdGVkLgogICAgICAgICAgICAgaGFuZGxlKCkubV9uZXdseUFs
bG9jYXRlZC5zZXRBbmRDbGVhcihtX21hcmtzKTsKKyAgICAgICAgICAgIGhhbmRsZSgpLm1fbmV3
bHlBbGxvY2F0ZWRWZXJzaW9uID0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOwogICAgICAgICB9Ci0g
ICAgICAgIGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uOwogICAgIH0KICAgICBjbGVhckhhc0FueU1hcmtlZCgpOwogICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CkBAIC0zMjEsMTEgKzMyNiw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6cmVtb3ZlRnJvbUFsbG8KICAgICBtX2FsbG9jYXRvci0+cmVtb3ZlQmxvY2sodGhpcyk7CiB9
CiAKLXZvaWQgTWFya2VkQmxvY2s6OnVwZGF0ZU5lZWRzRGVzdHJ1Y3Rpb24oKQotewotICAgIG1f
bmVlZHNEZXN0cnVjdGlvbiA9IGhhbmRsZSgpLm5lZWRzRGVzdHJ1Y3Rpb24oKTsKLX0KLQogdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRBZGRUb0FsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciwgc2l6ZV90IGluZGV4KQogewogICAgIEFTU0VSVChtX2luZGV4ID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwpAQCAtMzQ1LDggKzM0NSw2IEBAIHZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQWRkVG9BbGxvY2EKICAgICBpZiAobV9hdHRyaWJ1dGVz
LmNlbGxLaW5kICE9IEhlYXBDZWxsOjpKU0NlbGwpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
YXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBEb2VzTm90TmVlZERlc3RydWN0aW9uKTsKICAgICAK
LSAgICBibG9jaygpLnVwZGF0ZU5lZWRzRGVzdHJ1Y3Rpb24oKTsKLSAgICAKICAgICBkb3VibGUg
bWFya0NvdW50QmlhcyA9IC0oT3B0aW9uczo6bWluTWFya2VkQmxvY2tVdGlsaXphdGlvbigpICog
Y2VsbHNQZXJCbG9jaygpKTsKICAgICAKICAgICAvLyBUaGUgbWFyayBjb3VudCBiaWFzIHNob3Vs
ZCBiZSBjb21mb3J0YWJseSB3aXRoaW4gdGhpcyByYW5nZS4KQEAgLTM2NiwxNiArMzY0LDYgQEAg
dm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRSZW1vdmVGcm9tQQogICAgIG1fYWxsb2NhdG9y
ID0gbnVsbHB0cjsKIH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoY29uc3Qg
SGVhcENlbGwqIGNlbGwpCi17Ci0gICAgcmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJraW5nVmVy
c2lvbigpLCBzcGFjZSgpLT5pc01hcmtpbmcoKSwgY2VsbCk7Ci19Ci0KLWJvb2wgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChjb25zdCB2b2lkKiBwKQotewotICAgIHJldHVybiBpc0xp
dmVDZWxsKHNwYWNlKCktPm1hcmtpbmdWZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2luZygpLCBw
KTsKLX0KLQogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgTWFya2VkQmxvY2s6OmFzc2VydFZh
bGlkQ2VsbChWTSYgdm0sIEhlYXBDZWxsKiBjZWxsKSBjb25zdAogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQml0
bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ291
bnRpbmdMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTE2MSw4ICsxNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBtYXJrQ291
bnQoKTsKICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAgICAgICAgCi0gICAgICAgIGlubGluZSBi
b29sIGlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNv
bnN0IEhlYXBDZWxsKik7Ci0gICAgICAgIGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCB2b2lkKik7CisgICAgICAg
IGJvb2wgaXNMaXZlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXds
eUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCopOworICAg
ICAgICBpbmxpbmUgYm9vbCBpc0xpdmVDZWxsKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBI
ZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCB2
b2lkKik7CiAKICAgICAgICAgYm9vbCBpc0xpdmUoY29uc3QgSGVhcENlbGwqKTsKICAgICAgICAg
Ym9vbCBpc0xpdmVDZWxsKGNvbnN0IHZvaWQqKTsKQEAgLTI1OCw3ICsyNTksNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBpc01hcmtl
ZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCopOwog
ICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCosIERlcGVuZGVuY3kpOwogICAgIGJvb2wgdGVz
dEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgICAgIApAQCAtMjgw
LDcgKzI4MCw2IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYXJlTWFy
a3NTdGFsZSgpOwogICAgIGJvb2wgYXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbik7Ci0gICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRl
bmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAKICAgICBEZXBlbmRlbmN5IGFi
b3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICAgICAgCkBAIC0yOTAs
MTUgKzI4OSwxMiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhc3NlcnRN
YXJrc05vdFN0YWxlKCk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0Rlc3RydWN0aW9uOyB9Ci0gICAgCi0gICAgLy8g
VGhpcyBpcyB1c3VhbGx5IGEgbm8tb3AsIGFuZCB3ZSB1c2UgaXQgYXMgYSBuby1vcCB0aGF0IHRv
dWNoZXMgdGhlIHBhZ2UgaW4gaXNQYWdlZE91dCgpLgotICAgIHZvaWQgdXBkYXRlTmVlZHNEZXN0
cnVjdGlvbigpOwotICAgIAogICAgIHZvaWQgcmVzZXRNYXJrcygpOwogICAgIAogICAgIGJvb2wg
aXNNYXJrZWRSYXcoY29uc3Qgdm9pZCogcCk7CiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CisgICAgCisgICAgQ291bnRp
bmdMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBhdG9tQWxpZ25tZW50TWFzayA9IGF0b21TaXplIC0gMTsKQEAgLTMxNCwx
MSArMzEwLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RlTWFya2VkU2xvdygpOwogICAgIAog
ICAgIGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJz
aW9uIG1hcmtpbmdWZXJzaW9uKTsKKyAgICBpbmxpbmUgYm9vbCBtYXJrc0NvbnZleUxpdmVuZXNz
RHVyaW5nTWFya2luZyhIZWFwVmVyc2lvbiBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbik7CiAgICAgICAgIAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+
IG1fbWFya3M7CisgICAgSGFuZGxlJiBtX2hhbmRsZTsKKyAgICBWTSogbV92bTsKIAotICAgIGJv
b2wgbV9uZWVkc0Rlc3RydWN0aW9uOwotICAgIExvY2sgbV9sb2NrOworICAgIENvdW50aW5nTG9j
ayBtX2xvY2s7CiAgICAgCiAgICAgLy8gVGhlIGFjdHVhbCBtYXJrIGNvdW50IGNhbiBiZSBjb21w
dXRlZCBieSBkb2luZzogbV9iaWFzZWRNYXJrQ291bnQgLSBtX21hcmtDb3VudEJpYXMuIE5vdGUK
ICAgICAvLyB0aGF0IHRoaXMgY291bnQgaXMgcmFjeS4gSXQgd2lsbCBhY2N1cmF0ZWx5IGRldGVj
dCB3aGV0aGVyIG9yIG5vdCBleGFjdGx5IHplcm8gdGhpbmdzIHdlcmUKQEAgLTM0OCw5ICszNDUs
OCBAQCBwcml2YXRlOgogICAgIGludDE2X3QgbV9tYXJrQ291bnRCaWFzOwogCiAgICAgSGVhcFZl
cnNpb24gbV9tYXJraW5nVmVyc2lvbjsKLSAgICAKLSAgICBIYW5kbGUmIG1faGFuZGxlOwotICAg
IFZNKiBtX3ZtOworCisgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKIH07
CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlJiBNYXJrZWRCbG9jazo6aGFuZGxlKCkKQEAg
LTQ5OCwxOCArNDk0LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxl
KEgKICAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAot
QUxXQVlTX0lOTElORSBEZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NT
dGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQotewotICAgIEhl
YXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOwotICAgIHJldHVybiBkZXBlbmRl
bmN5V2l0aChkZXBlbmRlbmN5KHZlcnNpb24pLCB2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKTsK
LX0KLQogaW5saW5lIERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBWZXJz
aW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdp
dGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkocmVzdWx0LnZh
bHVlKSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBp
ZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFib3V0VG9N
YXJrU2xvdyhtYXJraW5nVmVyc2lvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRlbmN5Owor
ICAgIHJldHVybiBEZXBlbmRlbmN5OjpmZW5jZSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6YXNzZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMTUgKzUx
NCwxMCBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwg
Y29uc3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lv
bikgPyBmYWxzZSA6IGlzTWFya2VkUmF3KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9j
azo6aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0
IHZvaWQqIHApCi17Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVu
Y3kobWFya2luZ1ZlcnNpb24pOwotICAgIGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNp
b24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24g
IT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1f
bWFya3MuZ2V0KGF0b21OdW1iZXIocCksIHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4g
bV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSwgRGVwZW5kZW5jeTo6ZmVuY2UodmVyc2lvbikpOwog
fQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlN1cGVyU2Ft
cGxlci5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG1Jbmxp
bmVzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC02Nyw2ICs2OCwxMSBAQCBpbmxpbmUgTWFy
a2VkU3BhY2UqIE1hcmtlZEJsb2NrOjpIYW5kbGU6CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2Nr
OjptYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbikKIHsKKyAgICByZXR1cm4gbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobV9t
YXJraW5nVmVyc2lvbiwgbWFya2luZ1ZlcnNpb24pOworfQorCitpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6bWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoSGVhcFZlcnNpb24gbXlNYXJr
aW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCit7CiAgICAgLy8gVGhpcyBy
ZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZXNlIGlzIHRydWU6CiAgICAgLy8gLSBXZSBqdXN0IGNy
ZWF0ZWQgdGhlIGJsb2NrIGFuZCBzbyB0aGUgYml0cyBhcmUgY2xlYXIgYWxyZWFkeS4KICAgICAv
LyAtIFRoaXMgYmxvY2sgaGFzIG9iamVjdHMgbWFya2VkIGR1cmluZyB0aGUgbGFzdCBHQywgYW5k
IHNvIGl0cyB2ZXJzaW9uIHdhcyB1cC10by1kYXRlIGp1c3QKQEAgLTgyLDM5ICs4OCwxMTQgQEAg
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAgIEFTU0VSVChzcGFj
ZSgpLT5pc01hcmtpbmcoKSk7CiAgICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgIT0g
Q29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IG1fbWFya2luZ1ZlcnNpb24gPT0gTWFya2VkU3BhY2U6Om51bGxWZXJzaW9uCi0gICAgICAgIHx8
IE1hcmtlZFNwYWNlOjpuZXh0VmVyc2lvbihtX21hcmtpbmdWZXJzaW9uKSA9PSBtYXJraW5nVmVy
c2lvbjsKKyAgICByZXR1cm4gbXlNYXJraW5nVmVyc2lvbiA9PSBNYXJrZWRTcGFjZTo6bnVsbFZl
cnNpb24KKyAgICAgICAgfHwgTWFya2VkU3BhY2U6Om5leHRWZXJzaW9uKG15TWFya2luZ1ZlcnNp
b24pID09IG1hcmtpbmdWZXJzaW9uOwogfQogCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBj
b25zdCBIZWFwQ2VsbCogY2VsbCkKK0FMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5
QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQog
ewotICAgIEFTU0VSVCghaXNGcmVlTGlzdGVkKCkpOwotICAgIAotICAgIGlmIChVTkxJS0VMWSho
YXNBbnlOZXdseUFsbG9jYXRlZCgpKSkgewotICAgICAgICBpZiAoaXNOZXdseUFsbG9jYXRlZChj
ZWxsKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKICAgICBpZiAoYWxs
b2NhdG9yKCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAorICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyB3aGlsZSBob2xk
aW5nIHRoZSBsb2NrIGJlY2F1c2UgbWFya3MgbWlnaHQgYmUgc3RhbGUuIEluIHRoYXQgY2FzZSwg
bmV3bHkKKyAgICAvLyBhbGxvY2F0ZWQgd2lsbCBub3QgeWV0IGJlIHZhbGlkLiBDb25zaWRlciB0
aGlzIGludGVybGVhdmluZy4KKyAgICAvLyAKKyAgICAvLyBPbmUgdGhyZWFkIGlzIGRvaW5nIHRo
aXM6CisgICAgLy8KKyAgICAvLyAxKSBJc0xpdmVDaGVja3NOZXdseUFsbG9jYXRlZDogV2UgY2hl
Y2sgaWYgbmV3bHkgYWxsb2NhdGVkIGlzIHZhbGlkLiBJZiBpdCBpcyB2YWxpZCwgYW5kIHRoZSBi
aXQgaXMKKyAgICAvLyAgICBzZXQsIHdlIHJldHVybiB0cnVlLiBMZXQncyBhc3N1bWUgdGhhdCB0
aGlzIGV4ZWN1dGVzIGF0b21pY2FsbHkuIEl0IGRvZXNuJ3QgaGF2ZSB0byBpbiBnZW5lcmFsLAor
ICAgIC8vICAgIGJ1dCB3ZSBjYW4gYXNzdW1lIHRoYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHNlZWlu
ZyB0aGlzIGJ1Zy4KKyAgICAvLworICAgIC8vIDIpIElzTGl2ZUNoZWNrc01hcmtzOiBIYXZpbmcg
ZmFpbGVkIHRoYXQsIHdlIGNoZWNrIHRoZSBtYXJrIGJpdHMuIFRoaXMgc3RlcCBpbXBsaWVzIHRo
ZSByZXN0IG9mCisgICAgLy8gICAgdGhpcyBmdW5jdGlvbi4gSXQgaGFwcGVucyB1bmRlciBhIGxv
Y2sgc28gaXQncyBhdG9taWMuCisgICAgLy8KKyAgICAvLyBBbm90aGVyIHRocmVhZCBpcyBkb2lu
ZzoKKyAgICAvLworICAgIC8vIDEpIEFib3V0VG9NYXJrU2xvdzogVGhpcyBpcyB0aGUgZW50aXJl
IGFib3V0VG9NYXJrU2xvdyBmdW5jdGlvbiwgYW5kIGxldCdzIHNheSBpdCdzIGF0b21pYy4gSXQK
KyAgICAvLyAgICBzb3J0YSBpcyBzaW5jZSBpdCBob2xkcyBhIGxvY2ssIGJ1dCB0aGF0IGRvZXNu
J3QgYWN0dWFsbHkgbWFrZSBpdCBhdG9taWMgd2l0aCByZXNwZWN0IHRvCisgICAgLy8gICAgSXNM
aXZlQ2hlY2tzTmV3bHlBbGxvY2F0ZWQsIHNpbmNlIHRoYXQgZG9lcyBub3QgaG9sZCBhIGxvY2sg
aW4gb3VyIHNjZW5hcmlvLgorICAgIC8vCisgICAgLy8gVGhlIGhhcm1mdWwgaW50ZXJsZWF2aW5n
IGhhcHBlbnMgaWYgd2Ugc3RhcnQgb3V0IHdpdGggYSBibG9jayB0aGF0IGhhcyBzdGFsZSBtYXJr
IGJpdHMgdGhhdAorICAgIC8vIG5vbmV0aGVsZXNzIGNvbnZleSBsaXZlbmVzcyBkdXJpbmcgbWFy
a2luZyAodGhlIG9mZi1ieS1vbmUgdmVyc2lvbiB0cmljaykuIFRoZSBpbnRlcmxlYXZpbmcgaXMK
KyAgICAvLyBqdXN0OgorICAgIC8vCisgICAgLy8gSXNMaXZlQ2hlY2tzTmV3bHlBbGxvY2F0ZWQg
QWJvdXRUb01hcmtTbG93IElzTGl2ZUNoZWNrc01hcmtzCisgICAgLy8KKyAgICAvLyBXZSBzdGFy
dGVkIHdpdGggdmFsaWQgbWFya3MgYnV0IGludmFsaWQgbmV3bHkgYWxsb2NhdGVkLiBTbywgdGhl
IGZpcnN0IHBhcnQgZG9lc24ndCB0aGluayB0aGF0CisgICAgLy8gYW55dGhpbmcgaXMgbGl2ZSwg
YnV0IGR1dGlmdWxseSBkcm9wcyBkb3duIHRvIHRoZSBtYXJrcyBzdGVwLiBCdXQgaW4gdGhlIG1l
YW50aW1lLCB3ZSBjbGVhciB0aGUKKyAgICAvLyBtYXJrIGJpdHMgYW5kIHRyYW5zZmVyIHRoZWly
IGNvbnRlbnRzIGludG8gbmV3bHlBbGxvY2F0ZWQuIFNvIElzTGl2ZUNoZWNrc01hcmtzIGFsc28g
c2VlcyBub3RoaW5nCisgICAgLy8gbGl2ZS4gT29vcHMhCisgICAgLy8KKyAgICAvLyBGb3J0dW5h
dGVseSwgc2luY2UgdGhpcyBpcyBqdXN0IGEgcmVhZCBjcml0aWNhbCBzZWN0aW9uLCB3ZSBjYW4g
dXNlIGEgQ291bnRpbmdMb2NrLgorICAgIC8vCisgICAgLy8gUHJvYmFibHkgbWFueSB1c2VycyBv
ZiBDb3VudGluZ0xvY2sgY291bGQgdXNlIGl0cyBsYW1iZGEtYmFzZWQgYW5kIGxvY2tlci1iYXNl
ZCBBUElzLiBCdXQgaGVyZSwgd2UKKyAgICAvLyBuZWVkIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhp
bmcgaXMgQUxXQVlTX0lOTElORS4gSXQncyBoYXJkIHRvIGRvIHRoYXQgd2hlbiB1c2luZyBsYW1i
ZGFzLiBJdCdzCisgICAgLy8gbW9yZSByZWxpYWJsZSB0byB3cml0ZSBpdCBpbmxpbmUgaW5zdGVh
ZC4gRW1waXJpY2FsbHksIGl0IHNlZW1zIGxpa2UgaG93IGlubGluZSB0aGlzIGlzIGhhcyBzb21l
CisgICAgLy8gaW1wYWN0IG9uIHBlcmYgLSBhcm91bmQgMiUgb24gc3BsYXkgaWYgeW91IGdldCBp
dCB3cm9uZy4KKwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CiAgICAg
Ci0gICAgaWYgKGJsb2NrLmFyZU1hcmtzU3RhbGUoKSkgeworICAgIGF1dG8gcmVzdWx0ID0gYmxv
Y2subV9sb2NrLnRyeU9wdGltaXN0aWNGZW5jZWxlc3NSZWFkKCk7CisgICAgaWYgKENvdW50aW5n
TG9jazo6U3RhbXAgc3RhbXAgPSByZXN1bHQudmFsdWUpIHsKKyAgICAgICAgRGVwZW5kZW5jeSBm
ZW5jZUJlZm9yZSA9IERlcGVuZGVuY3k6OmZlbmNlKHJlc3VsdC5pbnB1dCk7CisgICAgICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGZlbmNlZFRoaXMgPSBmZW5jZUJlZm9yZS5jb25zdW1lKHRoaXMp
OworICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFmZW5jZWRUaGlzLT5pc0ZyZWVMaXN0ZWQoKSk7
CisgICAgICAgIAorICAgICAgICBIZWFwVmVyc2lvbiBteU5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9
IGZlbmNlZFRoaXMtPm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOworICAgICAgICBpZiAobXlOZXds
eUFsbG9jYXRlZFZlcnNpb24gPT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7CisgICAgICAgICAg
ICBib29sIHJlc3VsdCA9IGZlbmNlZFRoaXMtPmlzTmV3bHlBbGxvY2F0ZWQoY2VsbCk7CisgICAg
ICAgICAgICBpZiAoYmxvY2subV9sb2NrLmZlbmNlbGVzc1ZhbGlkYXRlKHN0YW1wLCBEZXBlbmRl
bmN5OjpmZW5jZShyZXN1bHQpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgTWFya2VkQmxvY2smIGZlbmNlZEJsb2NrID0gKmZl
bmNlQmVmb3JlLmNvbnN1bWUoJmJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSGVh
cFZlcnNpb24gbXlNYXJraW5nVmVyc2lvbiA9IGZlbmNlZEJsb2NrLm1fbWFya2luZ1ZlcnNpb247
CisgICAgICAgICAgICBpZiAobXlNYXJraW5nVmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbgorICAg
ICAgICAgICAgICAgICYmICghaXNNYXJraW5nIHx8ICFmZW5jZWRCbG9jay5tYXJrc0NvbnZleUxp
dmVuZXNzRHVyaW5nTWFya2luZyhteU1hcmtpbmdWZXJzaW9uLCBtYXJraW5nVmVyc2lvbikpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLm1fbG9jay5mZW5jZWxlc3NWYWxpZGF0ZShzdGFt
cCwgRGVwZW5kZW5jeTo6ZmVuY2UobXlNYXJraW5nVmVyc2lvbikpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGJvb2wgcmVzdWx0ID0gZmVuY2VkQmxvY2subV9tYXJrcy5nZXQoYmxvY2suYXRvbU51bWJlcihj
ZWxsKSk7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLm1fbG9jay5mZW5jZWxlc3NWYWxpZGF0
ZShzdGFtcCwgRGVwZW5kZW5jeTo6ZmVuY2UocmVzdWx0KSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9jay5tX2xvY2spOworCisgICAgQVNTRVJUKCFp
c0ZyZWVMaXN0ZWQoKSk7CisgICAgCisgICAgSGVhcFZlcnNpb24gbXlOZXdseUFsbG9jYXRlZFZl
cnNpb24gPSBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbjsKKyAgICBpZiAobXlOZXdseUFsbG9jYXRl
ZFZlcnNpb24gPT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKQorICAgICAgICByZXR1cm4gaXNOZXds
eUFsbG9jYXRlZChjZWxsKTsKKyAgICAKKyAgICBpZiAoYmxvY2suYXJlTWFya3NTdGFsZShtYXJr
aW5nVmVyc2lvbikpIHsKICAgICAgICAgaWYgKCFpc01hcmtpbmcpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmICghYmxvY2subWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01h
cmtpbmcobWFya2luZ1ZlcnNpb24pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LQorICAgIAogICAgIHJldHVybiBibG9jay5tX21hcmtzLmdldChibG9jay5hdG9tTnVtYmVyKGNl
bGwpKTsKIH0KIAotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqIHAp
CitpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmVDZWxsKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGJvb2wg
aXNNYXJraW5nLCBjb25zdCB2b2lkKiBwKQogewogICAgIGlmICghbV9ibG9jay0+aXNBdG9tKHAp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzTGl2ZShtYXJraW5nVmVyc2lv
biwgaXNNYXJraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBIZWFwQ2VsbCo+KHApKTsKKyAgICByZXR1
cm4gaXNMaXZlKG1hcmtpbmdWZXJzaW9uLCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGlzTWFya2lu
Zywgc3RhdGljX2Nhc3Q8Y29uc3QgSGVhcENlbGwqPihwKSk7Cit9CisKK2lubGluZSBib29sIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZShjb25zdCBIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBy
ZXR1cm4gaXNMaXZlKHNwYWNlKCktPm1hcmtpbmdWZXJzaW9uKCksIHNwYWNlKCktPm5ld2x5QWxs
b2NhdGVkVmVyc2lvbigpLCBzcGFjZSgpLT5pc01hcmtpbmcoKSwgY2VsbCk7Cit9CisKK2lubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZUNlbGwoY29uc3Qgdm9pZCogcCkKK3sK
KyAgICByZXR1cm4gaXNMaXZlQ2VsbChzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFjZSgp
LT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKSwgc3BhY2UoKS0+aXNNYXJraW5nKCksIHApOwogfQog
CiAvLyBUaGUgZm9sbG93aW5nIGhhcyB0byBiZSB0cnVlIGZvciBzcGVjaWFsaXphdGlvbiB0byBr
aWNrIGluOgpAQCAtMzg2LDYgKzQ2NywxNSBAQCBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6
TWFya3NNb2RlIE1hCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KIGlubGluZSBJdGVyYXRp
b25TdGF0dXMgTWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGN1cnJlbnRseSBlZmZp
Y2llbnQgdG8gdXNlIGluIHRoZSBjb25zdHJhaW50IHNvbHZlciBiZWNhdXNlIGlzTGl2ZSgpIGdy
YWJzIGEKKyAgICAvLyBsb2NrIHRvIHByb3RlY3QgaXRzZWxmIGZyb20gY29uY3VycmVudCBjYWxs
cyB0byBhYm91dFRvTWFya1Nsb3coKS4gQnV0IHdlIGNvdWxkIGdldCBhcm91bmQgdGhpcyBieQor
ICAgIC8vIGhhdmluZyB0aGlzIGZ1bmN0aW9uIGdyYWIgdGhlIGxvY2sgYmVmb3JlIGFuZCBhZnRl
ciB0aGUgaXRlcmF0aW9uLCBhbmQgY2hlY2sgaWYgdGhlIG1hcmtpbmcgdmVyc2lvbgorICAgIC8v
IGNoYW5nZWQuIElmIGl0IGRpZCwganVzdCBydW4gYWdhaW4uIEluc2lkZSB0aGUgbG9vcCwgd2Ug
b25seSBuZWVkIHRvIGVuc3VyZSB0aGF0IGlmIGEgcmFjZSB3ZXJlIHRvCisgICAgLy8gaGFwcGVu
LCB3ZSB3aWxsIGp1c3Qgb3Zlcmxvb2sgb2JqZWN0cy4gSSB0aGluayB0aGF0IGJlY2F1c2Ugb2Yg
aG93IGFib3V0VG9NYXJrU2xvdygpIGRvZXMgdGhpbmdzLAorICAgIC8vIGEgcmFjZSBvdWdodCB0
byBtZWFuIHRoYXQgaXQganVzdCByZXR1cm5zIGZhbHNlIHdoZW4gaXQgc2hvdWxkIGhhdmUgcmV0
dXJuZWQgdHJ1ZSAtIGJ1dCB0aGlzIGlzCisgICAgLy8gc29tZXRoaW5nIHRoYXQgd291bGQgaGF2
ZSB0byBiZSB2ZXJpZmllZCBjYXJlZnVsbHkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4MDMxNQorICAgIAogICAgIEhlYXBDZWxsOjpLaW5kIGtpbmQg
PSBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7CiAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgp
OyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAgIEhlYXBDZWxs
KiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMo
KVtpXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIE1hcmtlZFNw
YWNlOjplbmRNYXJraW5nKCkKICAgICAgICAgICAgICAgICBoYW5kbGUtPnJlc2V0QWxsb2NhdGVk
KCk7CiAgICAgICAgICAgICB9KTsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIG1fbmV3bHlB
bGxvY2F0ZWRWZXJzaW9uID0gbmV4dFZlcnNpb24obV9uZXdseUFsbG9jYXRlZFZlcnNpb24pOwog
ICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGFyZ2VBbGxvY2F0aW9uc09mZnNldEZvclRo
aXNDb2xsZWN0aW9uOyBpIDwgbV9sYXJnZUFsbG9jYXRpb25zLnNpemUoKTsgKytpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjUsNiArMTY1LDExIEBAIHB1YmxpYzoKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1
ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0
IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lz
TWFya2luZzsgfQogICAgIAorICAgIFdlYWtTZXQqIGFjdGl2ZVdlYWtTZXRzQmVnaW4oKSB7IHJl
dHVybiBtX2FjdGl2ZVdlYWtTZXRzLmJlZ2luKCk7IH0KKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFr
U2V0c0VuZCgpIHsgcmV0dXJuIG1fYWN0aXZlV2Vha1NldHMuZW5kKCk7IH0KKyAgICBXZWFrU2V0
KiBuZXdBY3RpdmVXZWFrU2V0c0JlZ2luKCkgeyByZXR1cm4gbV9uZXdBY3RpdmVXZWFrU2V0cy5i
ZWdpbigpOyB9CisgICAgV2Vha1NldCogbmV3QWN0aXZlV2Vha1NldHNFbmQoKSB7IHJldHVybiBt
X25ld0FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9CisgICAgCiAgICAgdm9pZCBkdW1wQml0cyhQcmlu
dFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBzdGQ6OmFycmF5PHNpemVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9y
U2l6ZVN0ZXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3Ry
YWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMwICsy
NywxOCBAQAogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCiAKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiVmlzaXRDb3VudGVyLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1NYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0cmFpbnQoCi0gICAgQ1N0cmluZyBhYmJy
ZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZXhlY3V0ZUZ1bmN0aW9uLAotICAgIENvbnN0
cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCi0gICAgOiBtX2FiYnJldmlhdGVkTmFtZShhYmJy
ZXZpYXRlZE5hbWUpCi0gICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fZXhlY3V0
ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAgICAsIG1fdm9sYXRpbGl0eSh2
b2xhdGlsaXR5KQotewotfQorc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IAotTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1
bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAot
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCitNYXJraW5nQ29uc3RyYWludDo6
TWFya2luZ0NvbnN0cmFpbnQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwg
Q29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNv
bmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20pCiAgICAgOiBtX2Fi
YnJldmlhdGVkTmFtZShhYmJyZXZpYXRlZE5hbWUpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1l
KSkKLSAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSkKLSAg
ICAsIG1fcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbihXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRl
RnVuY3Rpb24pKQogICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCisgICAgLCBtX2NvbmN1
cnJlbmN5KGNvbmN1cnJlbmN5KQorICAgICwgbV9wYXJhbGxlbGlzbShwYXJhbGxlbGlzbSkKIHsK
IH0KIApAQCAtNjMsMTQgKzUxLDc0IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnJlc2V0U3Rh
dHMoKQogICAgIG1fbGFzdFZpc2l0Q291bnQgPSAwOwogfQogCi12b2lkIE1hcmtpbmdDb25zdHJh
aW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBib29sJiBkaWRWaXNpdFNvbWV0aGlu
ZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorQ29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtpbmdD
b25zdHJhaW50OjpleGVjdXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291
bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHJl
c3VsdCA9IGV4ZWN1dGVJbXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgKz0gdmlz
aXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50ZXIu
dmlzaXRDb3VudCgpKQorICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIg
dmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGV4ZWN1dGUpIik7Cisg
ICAgaWYgKHJlc3VsdCA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAg
ICAgIC8vIEl0J3MgaWxsZWdhbCB0byBwcm9kdWNlIHBhcmFsbGVsIHdvcmsgaWYgeW91IGhhdmVu
J3QgYWR2ZXJ0aXNlZCBpdCB1cGZyb250IGJlY2F1c2UgdGhlIHNvbHZlcgorICAgICAgICAvLyBo
YXMgb3B0aW1pemF0aW9ucyBmb3IgY29uc3RyYWludHMgdGhhdCBwcm9taXNlIHRvIG5ldmVyIHBy
b2R1Y2UgcGFyYWxsZWwgd29yay4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wYXJhbGxlbGlz
bSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0
ZShTbG90VmlzaXRvciYpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBNYXJraW5nQ29u
c3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHJldHVy
biBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1hdGUodmlzaXRvcik7Cit9CisKK3Zv
aWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZyhhYmJyZXZpYXRlZE5hbWUo
KSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGltZW91dCh2aXNpdG9yLCBkaWRWaXNp
dFNvbWV0aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvciwgdmlz
aXRpbmdUaW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50ID0gdmlzaXRpbmdUaW1lb3V0LnZp
c2l0Q291bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21ldGhpbmcgPSB2aXNpdGluZ1RpbWVv
dXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291
bnRlcih2aXNpdG9yKTsKKyAgICBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdHJhaW50U29sdmlu
Z0xvY2tlciwgdmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0Q291bnRlci52
aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQo
KSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQgIiwg
dmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBwcmVwYXJlVG9FeGVjdXRlKSIpOworfQor
Cit2b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29yayhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIGRv
UGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICBpZiAodmVyYm9zZSAmJiB2aXNpdENvdW50
ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCks
ICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGluIGRvUGFyYWxsZWxX
b3JrKSIpOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
ICAgICAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7Cisg
ICAgfQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmsoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNp
dG9yKTsKKyAgICBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKHZpc2l0b3IpOworICAgIG1fbGFzdFZp
c2l0Q291bnQgKz0gdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKTsKKyAgICBpZiAodmVyYm9zZSAm
JiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBkYXRhTG9nKCIoIiwgYWJicmV2
aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpLCAiIGlu
IGZpbmlzaFBhcmFsbGVsV29yaykiKTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6cHJl
cGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90VmlzaXRvciYpCit7
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbChTbG90Vmlz
aXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgTWFy
a2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQorewog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMTIgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29uc3RyYWludENv
bmN1cnJlbmN5LmgiCisjaW5jbHVkZSAiQ29uc3RyYWludFBhcmFsbGVsaXNtLmgiCiAjaW5jbHVk
ZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIKLSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIK
ICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQ0LDE3ICs0NCwxMSBAQCBjbGFzcyBNYXJraW5n
Q29uc3RyYWludCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAgICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZv
bGF0aWxpdHkpOworICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1l
LCBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0g
Q29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAorICAgICAgICBDb25zdHJhaW50UGFy
YWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWwpOwogICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFi
YnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xv
dFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248
ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7Ci0g
ICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1hcmtpbmdDb25zdHJhaW50KCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWFya2luZ0NvbnN0cmFpbnQoKTsKICAgICAKICAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKQEAgLTY1LDMy
ICs1OSwzOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RWaXNpdENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAgIHZvaWQgZXhlY3V0ZShT
bG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVv
dXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlKFNsb3RWaXNpdG9yJik7Cisg
ICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUgcXVpY2tXb3JrRXN0aW1h
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIAorICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIGRvdWJsZSBxdWlja1dvcmtFc3RpbWF0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9xdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBt
X3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAgfQotICAgIAotICAgIGRv
dWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOwotICAg
IH0KKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0
cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOworICAgIAorICAgIHZvaWQgZG9QYXJh
bGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGZpbmlzaFBhcmFsbGVsV29yayhTbG90
VmlzaXRvciYpOwogICAgIAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkoKSBj
b25zdCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KICAgICAKKyAgICBDb25zdHJhaW50Q29uY3Vy
cmVuY3kgY29uY3VycmVuY3koKSBjb25zdCB7IHJldHVybiBtX2NvbmN1cnJlbmN5OyB9CisgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29uc3QgeyByZXR1cm4gbV9wYXJh
bGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBDb25zdHJhaW50UGFyYWxsZWxp
c20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBj
b25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmlz
aFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBjYW4gc2V0IG1faW5kZXgu
CiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CiAgICAgQ1N0cmluZyBt
X2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAgICA6OkZ1bmN0aW9uPHZv
aWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRpbWVvdXQpPiBtX2V4ZWN1
dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBtX3F1aWNr
V29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgbV92b2xhdGls
aXR5OworICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSBtX2NvbmN1cnJlbmN5OworICAgIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVsaXNtOwogICAgIHNpemVfdCBtX2xhc3RWaXNpdENv
dW50IHsgMCB9OworICAgIExvY2sgbV9sb2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFp
bnRTZXQuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYwICsyNiwx
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U2V0
LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlIDx3dGYv
RnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9u
Q29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgRXhlY3V0aW9uQ29udGV4dChNYXJraW5nQ29uc3RyYWlu
dFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQot
ICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3IodmlzaXRvcikKLSAgICAg
ICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlk
VmlzaXRTb21ldGhpbmcoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkVmlzaXRT
b21ldGhpbmc7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkVGltZU91dCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAmJiBoYXNFbGFwc2VkKG1f
dGltZW91dCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgdGltZXMg
b3V0LgotICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVkKQotICAgIHsKLSAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7Ci0gICAgICAgICAgICBleGVjdXRl
KGluZGV4KTsKLSAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5kZXgpOwotICAgICAgICAg
ICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlk
RXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZWQuZ2V0KGluZGV4
KTsgfQotCi0gICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIG1f
c2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlkVmlzaXRTb21ldGhpbmcs
IG1fdGltZW91dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKLSAgICB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3NldDsKLSAgICBTbG90Vmlz
aXRvciYgbV92aXNpdG9yOwotICAgIE1vbm90b25pY1RpbWUgbV90aW1lb3V0OwotICAgIEJpdFZl
Y3RvciBtX2V4ZWN1dGVkOwotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07
Ci19OwotCi1NYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0cmFpbnRTZXQoKQorTWFy
a2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmIGhlYXApCisgICAg
OiBtX2hlYXAoaGVhcCkKIHsKIH0KIApAQCAtMTA3LDE4ICs2NSw5IEBAIHZvaWQgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlvbiA9IDE7CiB9CiAKLXZv
aWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0
cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCi17Ci0g
ICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2
aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHkp
KTsKLX0KLQotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAotICAgIENTdHJpbmcgYWJi
cmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNp
dG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICA6OkZ1
bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uLAot
ICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2
b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3kpCiB7Ci0gICAgYWRk
KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWRO
YW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pLCBXVEZNb3ZlKHF1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7CisgICAgYWRkKHN0ZDo6bWFr
ZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUoYWJicmV2aWF0ZWROYW1l
KSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0aWxpdHksIGNvbmN1cnJl
bmN5KSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKQEAgLTEzMSw5ICs4
MCw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAgICBtX3NldC5hcHBlbmQo
V1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4
ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1l
b3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgcmVzdWx0ID0gZXhlY3V0ZUNvbnZlcmdlbmNl
SW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJn
ZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRh
dGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDI3ICs5NywyNyBAQCBib29s
IE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIE1hcmtpbmdD
b25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewotICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dCgqdGhpcywgdmlzaXRv
ciwgdGltZW91dCk7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHNvbHZlcigqdGhpcyk7CiAgICAgCiAg
ICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRpb24rKzsKICAgICAKICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICI6Iik7CiAK
LSAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFpbnRzIHRoYXQgd2UgaGF2ZSBub3QgZXhl
Y3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIGV4
ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dC5kcmFpbihtX3VuZXhl
Y3V0ZWRSb290cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBGaXJzdCBp
dGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlrZWx5
IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzIG90aGVyCi0gICAgLy8gdGhhbiByb290cy4KLSAg
ICBpZiAoaXRlcmF0aW9uID09IDEpCisgICAgaWYgKGl0ZXJhdGlvbiA9PSAxKSB7CisgICAgICAg
IC8vIEZpcnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3IgZHJhaW5pbmcsIHNvIGl0
J3MgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMKKyAgICAgICAgLy8gb3RoZXIg
dGhhbiByb290cy4KKyAgICAgICAgc29sdmVyLmRyYWluKG1fdW5leGVjdXRlZFJvb3RzKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRl
eHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3RocykpCisgICAgaWYgKGl0ZXJhdGlvbiA9PSAy
KSB7CisgICAgICAgIHNvbHZlci5kcmFpbihtX3VuZXhlY3V0ZWRPdXRncm93dGhzKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKICAgICAvLyBXZSB3YW50IHRvIGtlZXAgcHJl
ZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9uZXMgdGhhdCBuZWVkIHRv
IGJlIGZpeHBvaW50ZWQKICAgICAvLyBldmVuIGluIGEgc3RvcC10aGUtd29ybGQgR0MgLSB1bnRp
bCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBnbyB0b3RhbGx5
CkBAIC0yMTUsMzMgKzE2NCwxNiBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRl
Q29udmVyCiAgICAgICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgpID4gYi0+dm9sYXRpbGl0
eSgpOwogICAgICAgICB9KTsKICAgICAKLSAgICBmb3IgKE1hcmtpbmdDb25zdHJhaW50KiBjb25z
dHJhaW50IDogbV9vcmRlcmVkKSB7Ci0gICAgICAgIHNpemVfdCBpID0gY29uc3RyYWludC0+aW5k
ZXgoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0LmRpZEV4ZWN1dGUo
aSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5leGVj
dXRlKGkpOwotICAgICAgICAKLSAgICAgICAgLy8gT25jZSB3ZSdyZSBpbiBjb252ZXJnZW5jZSwg
aXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFya2luZyBoYXBwZW4gYW55dGlt
ZQotICAgICAgICAvLyB3ZSBmaW5kIHdvcmsuCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlz
IHNob3VsZCBleGVjdXRlIGFsbCBjb25zdHJhaW50cyB1bnRpbCB0aW1lb3V0PyBOb3QgY2xlYXIg
aWYgdGhhdCdzCi0gICAgICAgIC8vIGJldHRlciBvciB3b3JzZS4gTWF5YmUgZXZlbiBiZXR0ZXIg
aXMgdGhpczoKLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBlbXB0eSwga2VlcCBydW5u
aW5nLgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGhhcyBhdCBsZWFzdCBOIHRoaW5n
cywgcmV0dXJuLgotICAgICAgICAvLyAtIEVsc2UgcnVuIHVudGlsIHRpbWVvdXQuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzIKLSAgICAg
ICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmcoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgc29sdmVyLmNvbnZlcmdlKG1fb3JkZXJlZCk7CiAg
ICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UndmUgY29udmVy
Z2VkLiBUaGF0IGhhcHBlbnMgaWYgd2UgZGlkIG5vdCB2aXNpdCBhbnl0aGluZy4KKyAgICByZXR1
cm4gIXNvbHZlci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCiB2b2lkIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgZGlk
VmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGNvbnN0cmFpbnQgOiBtX3Nl
dCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGlu
ZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgIGNvbnN0cmFpbnQtPmV4ZWN1
dGUodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2co
IiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSAr
MzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjsKKwogY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQgewogcHVibGlj
OgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KCk7CisgICAgTWFya2luZ0NvbnN0cmFpbnRTZXQo
SGVhcCYpOwogICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgpOwogICAgIAogICAgIHZvaWQgZGlk
U3RhcnRNYXJraW5nKCk7CkBAIC00MSwxNSArNDQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQo
CiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAgICBDU3RyaW5nIG5hbWUs
Ci0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGlt
ZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwotICAgIAotICAgIHZvaWQg
YWRkKAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKLSAgICAgICAgQ1N0cmluZyBu
YW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAot
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIDo6RnVuY3Rpb248dm9pZChT
bG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHksCisgICAgICAgIENv
bnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCk7
CiAgICAgCiAgICAgdm9pZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25zdHJhaW50Pik7
CiAgICAgCkBAIC02MCwyMSArNTcsMTkgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQgbm9uZSBvZiB0aGVtIHBy
b2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0IHlvdSd2ZSBhbHJhZWR5
IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAgICBib29sIGV4ZWN1dGVD
b252ZXJnZW5jZSgKLSAgICAgICAgU2xvdFZpc2l0b3ImLAotICAgICAgICBNb25vdG9uaWNUaW1l
IHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICBib29sIGV4ZWN1dGVD
b252ZXJnZW5jZShTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIFNpbXBseSBydW5zIGFsbCBj
b25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KICAgICB2b2lkIGV4ZWN1dGVBbGwo
U2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6Ci0gICAgY2xhc3MgRXhlY3V0aW9uQ29udGV4
dDsKLSAgICBmcmllbmQgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CiAgICAgCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2Vu
Y2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAgICBib29sIGV4
ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKICAgICAKLSAgICBib29sIGRyYWlu
KFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSwgQml0VmVjdG9yJiB1bmV4ZWN1dGVkLCBCaXRW
ZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7CisgICAgYm9vbCBkcmFp
bihTbG90VmlzaXRvciYsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBleGVjdXRl
ZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOwogICAgIAorICAgIEhlYXAmIG1faGVhcDsKICAg
ICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9vdHM7CiAgICAgQml0VmVjdG9yIG1fdW5leGVjdXRl
ZE91dGdyb3d0aHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWlu
dD4+IG1fc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKKworI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IAorCitNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6TWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNldCkKKyAgICA6IG1f
aGVhcChzZXQubV9oZWFwKQorICAgICwgbV9tYWluVmlzaXRvcihtX2hlYXAuY29sbGVjdG9yU2xv
dFZpc2l0b3IoKSkKKyAgICAsIG1fc2V0KHNldCkKK3sKKyAgICBtX2hlYXAuZm9yRWFjaFNsb3RW
aXNpdG9yKAorICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAg
ICBtX3Zpc2l0Q291bnRlcnMuYXBwZW5kKFZpc2l0Q291bnRlcih2aXNpdG9yKSk7CisgICAgICAg
IH0pOworfQorCitNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtpbmdDb25zdHJhaW50U29s
dmVyKCkKK3sKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZGlkVmlzaXRTb21l
dGhpbmcoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgVmlzaXRDb3VudGVyJiB2aXNpdENvdW50
ZXIgOiBtX3Zpc2l0Q291bnRlcnMpIHsKKyAgICAgICAgaWYgKHZpc2l0Q291bnRlci52aXNpdENv
dW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRlKFNjaGVkdWxlclBy
ZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
KCk+IHBpY2tOZXh0KQoreworICAgIG1fcGlja05leHRJc1N0aWxsQWN0aXZlID0gdHJ1ZTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrKTsKKyAgICAK
KyAgICBpZiAoT3B0aW9uczo6dXNlUGFyYWxsZWxNYXJraW5nQ29uc3RyYWludFNvbHZlcigpKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZyhwcmVm
ZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0ID8gIlAiIDogIk4iLCAiPCIpOworICAgICAgICAK
KyAgICAgICAgbV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAgICAgICAgICAgIFsmXSAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcnVuRXhlY3V0aW9uVGhyZWFkKHZpc2l0b3IsIHByZWZl
cmVuY2UsIHBpY2tOZXh0KTsgfSk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIj4iKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcnVu
RXhlY3V0aW9uVGhyZWFkKG1fbWFpblZpc2l0b3IsIHByZWZlcmVuY2UsIHBpY2tOZXh0KTsKKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9waWNrTmV4dElzU3RpbGxBY3RpdmUpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmspOworICAgICAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsKQor
ICAgICAgICBtX3NldC5tX3NldFtpbmRleFRvUnVuXS0+ZmluaXNoUGFyYWxsZWxXb3JrKG1fbWFp
blZpc2l0b3IpOworICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwuY2xlYXIoKTsKKyAgICAKKyAg
ICBpZiAoIW1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmlzRW1wdHkoKSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseSkKKyAgICAgICAg
ICAgIGV4ZWN1dGUoKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dKTsKKyAgICAgICAgbV90b0V4ZWN1
dGVTZXF1ZW50aWFsbHkuY2xlYXIoKTsKKyAgICB9CisgICAgICAgIAorICAgIFJFTEVBU0VfQVNT
RVJUKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuYml0Q291bnQoKSk7Cit9CisKK3ZvaWQgTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI6OmRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKK3sKKyAgICBh
dXRvIGl0ZXIgPSB1bmV4ZWN1dGVkLmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSB1bmV4ZWN1dGVk
LmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8g
cGlja05leHQgPSBzY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4oCisgICAg
ICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAgICBpZiAo
aXRlciA9PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgICAgIHJldHVybiAqaXRlcisrOworICAgICAgICB9KTsKKyAgICBleGVjdXRlKE5leHRDb25z
dHJhaW50Rmlyc3QsIHBpY2tOZXh0KTsKKyAgICB1bmV4ZWN1dGVkLmNsZWFyQWxsKCk7Cit9CisK
K3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmNvbnZlcmdlKGNvbnN0IFZlY3RvcjxNYXJr
aW5nQ29uc3RyYWludCo+JiBvcmRlcikKK3sKKyAgICBpZiAoZGlkVmlzaXRTb21ldGhpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChvcmRlci5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgc2l6ZV90IGluZGV4ID0gMDsKKworICAgIC8vIFdlIHdh
bnQgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgY29uc3RyYWludCBzZXF1ZW50aWFsbHkgaWYgd2UgdGhp
bmsgaXQgd2lsbCBxdWlja2x5IGdpdmUgdXMgYQorICAgIC8vIHJlc3VsdC4gSWYgd2UgcmFuIGl0
IGluIHBhcmFsbGVsIHRvIG90aGVyIGNvbnN0cmFpbnRzLCB0aGVuIHdlIG1pZ2h0IGVuZCB1cCBo
YXZpbmcgdG8gd2FpdCBmb3IKKyAgICAvLyB0aG9zZSBvdGhlciBjb25zdHJhaW50cyB0byBmaW5p
c2gsIHdoaWNoIHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSBzaW5jZSBkdXJpbmcgY29udmVyZ2Vu
Y2UgaXQncworICAgIC8vIGVtcGlyaWNhbGx5IG1vc3Qgb3B0aW1hbCB0byByZXR1cm4gdG8gZHJh
aW5pbmcgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsuIE1vc3QKKyAgICAv
LyBjb25zdHJhaW50cyBkb24ndCBnZW5lcmF0ZSBhbnkgd29yayBtb3N0IG9mIHRoZSB0aW1lLCBh
bmQgd2hlbiB0aGV5IGRvIGdlbmVyYXRlIHdvcmssIHRoZXkgdGVuZAorICAgIC8vIHRvIGdlbmVy
YXRlIGVub3VnaCBvZiBpdCB0byBmZWVkIGEgZGVjZW50IGRyYWluaW5nIGN5Y2xlLiBUaGVyZWZv
cmUsIHBhdXNlIHRpbWVzIGFyZSBsb3dlc3QgaWYKKyAgICAvLyB3ZSBnZXQgdGhlIGhlY2sgb3V0
IG9mIGhlcmUgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVzIHdvcmsuIEkgdGhpbmsg
dGhhdCBwYXJ0IG9mIHdoYXQKKyAgICAvLyBtYWtlcyB0aGlzIG9wdGltYWwgaXMgdGhhdCB3ZSBh
bHNvIG5ldmVyIGFib3J0IHJ1bm5pbmcgYSBjb25zdHJhaW50IGVhcmx5LCBzbyB3aGVuIHdlIGRv
IHJ1bgorICAgIC8vIG9uZSwgaXQgaGFzIGFuIG9wcG9ydHVuaXR5IHRvIGdlbmVyYXRlIGFzIG11
Y2ggd29yayBhcyBpdCBwb3NzaWJseSBjYW4uCisgICAgaWYgKG9yZGVyW2luZGV4XS0+cXVpY2tX
b3JrRXN0aW1hdGUobV9tYWluVmlzaXRvcikpIHsKKyAgICAgICAgZXhlY3V0ZSgqb3JkZXJbaW5k
ZXgrK10pOworICAgICAgICAKKyAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0Vt
cHR5KCkKKyAgICAgICAgICAgICYmIChvcmRlci5pc0VtcHR5KCkgfHwgZGlkVmlzaXRTb21ldGhp
bmcoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGF1dG8gcGlja05l
eHQgPSBzY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4oCisgICAgICAgIFsm
XSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgICAgICBpZiAoZGlkVmlz
aXRTb21ldGhpbmcoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXIuc2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50ID0gKm9yZGVyW2luZGV4KytdOworICAgICAg
ICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuaW5kZXgoKTsKKyAgICAgICAgfSk7CisgICAgCisgICAg
ZXhlY3V0ZShQYXJhbGxlbFdvcmtGaXJzdCwgcGlja05leHQpOworfQorCit2b2lkIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOjpleGVjdXRlKE1hcmtpbmdDb25zdHJhaW50JiBjb25zdHJhaW50KQor
eworICAgIGlmIChtX2V4ZWN1dGVkLmdldChjb25zdHJhaW50LmluZGV4KCkpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgY29uc3RyYWludC5wcmVwYXJlVG9FeGVjdXRlKE5vTG9ja2luZ05l
Y2Vzc2FyeSwgbV9tYWluVmlzaXRvcik7CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFs
bGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKG1fbWFpblZpc2l0b3IpOworICAgIGRpZEV4ZWN1
dGUocGFyYWxsZWxpc20sIGNvbnN0cmFpbnQuaW5kZXgoKSk7Cit9CisKK3ZvaWQgTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZChTbG90VmlzaXRvciYgdmlzaXRvciwg
U2NoZWR1bGVyUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4oKT4gcGlja05leHQpCit7CisgICAgZm9yICg7OykgeworICAgICAgICBib29s
IGRvUGFyYWxsZWxXb3JrTW9kZTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhUb1J1bjsKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAg
ICAgYXV0byB0cnlQYXJhbGxlbFdvcmsgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXhUb1J1biA9IG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5maXJzdCgpOwor
ICAgICAgICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF1dG8gdHJ5TmV4dENvbnN0cmFpbnQg
PSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9waWNrTmV4dElz
U3RpbGxBY3RpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwaWNrUmVzdWx0ID0gcGlj
a05leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGlja1Jlc3VsdCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGlja05leHRJc1N0aWxsQWN0aXZlID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobV9leGVjdXRlZC5nZXQoKnBpY2tSZXN1bHQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWlu
dCA9ICptX3NldC5tX3NldFsqcGlja1Jlc3VsdF07CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY29uc3RyYWludC5jb25jdXJyZW5jeSgpID09IENvbnN0cmFpbnRDb25jdXJyZW5jeTo6U2Vx
dWVudGlhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRlU2VxdWVu
dGlhbGx5LmFwcGVuZCgqcGlja1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29uc3RyYWludC5wYXJhbGxlbGlzbSgpID09IENvbnN0cmFpbnRQYXJhbGxlbGlz
bTo6UGFyYWxsZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1UaHJlYWRzVGhh
dE1heVByb2R1Y2VXb3JrKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0g
KnBpY2tSZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkb1BhcmFsbGVsV29ya01vZGUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQucHJlcGFyZVRvRXhl
Y3V0ZShsb2NrZXIsIHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0Zp
cnN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJhbGxlbFdvcmsoKSB8fCB0cnlO
ZXh0Q29uc3RyYWludCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyeU5leHRDb25zdHJh
aW50KCkgfHwgdHJ5UGFyYWxsZWxXb3JrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gVGhpcyBtZWFucyB0aGF0IHdlIGhhdmUgbm90aGluZyBsZWZ0IHRvIHJ1bi4gVGhlIG9ubHkg
d2F5IGZvciB1cyB0byBoYXZlIG1vcmUgd29yayBpcworICAgICAgICAgICAgICAgIC8vIGlmIHNv
bWVvbmUgaXMgcnVubmluZyBhIGNvbnN0cmFpbnQgdGhhdCBtYXkgcHJvZHVjZSBwYXJhbGxlbCB3
b3JrLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghbV9udW1UaHJlYWRz
VGhhdE1heVByb2R1Y2VXb3JrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFueSB3YWl0aW5nIGNvdWxkIGJl
IHJlcGxhY2VkIHdpdGgganVzdCBydW5uaW5nIHRoZSBTbG90VmlzaXRvci4KKyAgICAgICAgICAg
ICAgICAvLyBJIHdvbmRlciBpZiB0aGF0IHdvdWxkIGJlIHByb2ZpdGFibGUuCisgICAgICAgICAg
ICAgICAgbV9jb25kaXRpb24ud2FpdChtX2xvY2spOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gcGFy
YWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICBNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCA9ICptX3Nl
dC5tX3NldFtpbmRleFRvUnVuXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChk
b1BhcmFsbGVsV29ya01vZGUpCisgICAgICAgICAgICBjb25zdHJhaW50LmRvUGFyYWxsZWxXb3Jr
KHZpc2l0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJhbGxlbGlzbSA9IGNvbnN0
cmFpbnQuZXhlY3V0ZSh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkgeworICAg
ICAgICAgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuZ2V0KGluZGV4VG9SdW4p
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGlu
ZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLnRha2VGaXJzdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAodW5zaWduZWQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IGluZGV4VG9S
dW47IH0pOworICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuY2xl
YXIoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29uc3RyYWludC5wYXJhbGxlbGlzbSgpID09IENvbnN0cmFp
bnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpCisgICAgICAgICAgICAgICAgICAgIG1fbnVtVGhyZWFk
c1RoYXRNYXlQcm9kdWNlV29yay0tOworICAgICAgICAgICAgICAgIG1fZXhlY3V0ZWQuc2V0KGlu
ZGV4VG9SdW4pOworICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVjdXRl
SW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgIG1fdG9F
eGVjdXRlSW5QYXJhbGxlbFNldC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX2Nv
bmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNYXJraW5n
Q29uc3RyYWludFNvbHZlcjo6ZGlkRXhlY3V0ZShDb25zdHJhaW50UGFyYWxsZWxpc20gcGFyYWxs
ZWxpc20sIHVuc2lnbmVkIGluZGV4KQoreworICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4KTsKKyAg
ICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgewor
ICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgbV90
b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleCk7CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJraW5nQ29uc3RyYWludFNvbHZlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVmlz
aXRDb3VudGVyLmgiCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9D
b25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXA7CitjbGFzcyBNYXJraW5nQ29uc3Ry
YWludDsKK2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OworCitjbGFzcyBNYXJraW5nQ29uc3Ry
YWludFNvbHZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAg
IE1hcmtpbmdDb25zdHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0Jik7CisgICAgfk1h
cmtpbmdDb25zdHJhaW50U29sdmVyKCk7CisgICAgCisgICAgYm9vbCBkaWRWaXNpdFNvbWV0aGlu
ZygpIGNvbnN0OworICAgIAorICAgIGVudW0gU2NoZWR1bGVyUHJlZmVyZW5jZSB7CisgICAgICAg
IFBhcmFsbGVsV29ya0ZpcnN0LAorICAgICAgICBOZXh0Q29uc3RyYWludEZpcnN0CisgICAgfTsK
KworICAgIHZvaWQgZXhlY3V0ZShTY2hlZHVsZXJQcmVmZXJlbmNlLCBTY29wZWRMYW1iZGE8c3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQpOworICAgIAorICAgIHZvaWQgZHJhaW4o
Qml0VmVjdG9yJiB1bmV4ZWN1dGVkKTsKKyAgICAKKyAgICB2b2lkIGNvbnZlcmdlKGNvbnN0IFZl
Y3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBvcmRlcik7CisgICAgCisgICAgdm9pZCBleGVjdXRl
KE1hcmtpbmdDb25zdHJhaW50Jik7CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgcnVuRXhlY3V0
aW9uVGhyZWFkKFNsb3RWaXNpdG9yJiwgU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRh
PHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICAKKyAgICB2b2lkIGRp
ZEV4ZWN1dGUoQ29uc3RyYWludFBhcmFsbGVsaXNtLCB1bnNpZ25lZCBpbmRleCk7CisKKyAgICBI
ZWFwJiBtX2hlYXA7CisgICAgU2xvdFZpc2l0b3ImIG1fbWFpblZpc2l0b3I7CisgICAgTWFya2lu
Z0NvbnN0cmFpbnRTZXQmIG1fc2V0OworICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOworICAgIERl
cXVlPHVuc2lnbmVkLCAzMj4gbV90b0V4ZWN1dGVJblBhcmFsbGVsOworICAgIEJpdFZlY3RvciBt
X3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQ7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV9kaWRF
eGVjdXRlSW5QYXJhbGxlbDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBtX3RvRXhlY3V0ZVNl
cXVlbnRpYWxseTsKKyAgICBMb2NrIG1fbG9jazsKKyAgICBDb25kaXRpb24gbV9jb25kaXRpb247
CisgICAgdW5zaWduZWQgbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrIHsgMCB9OworICAg
IGJvb2wgbV9waWNrTmV4dElzU3RpbGxBY3RpdmUgeyB0cnVlIH07CisgICAgVmVjdG9yPFZpc2l0
Q291bnRlciwgMTY+IG1fdmlzaXRDb3VudGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PcGFxdWVSb290U2V0
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBPcGFxdWVSb290U2V0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVS
b290U2V0KTsKLXB1YmxpYzoKLSAgICBPcGFxdWVSb290U2V0KCkKLSAgICAgICAgOiBtX2xhc3RR
dWVyaWVkUm9vdChudWxscHRyKQotICAgICAgICAsIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Qo
ZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgY29udGFpbnModm9pZCogcm9vdCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChyb290ICE9IG1fbGFzdFF1ZXJpZWRSb290KSB7Ci0gICAg
ICAgICAgICBtX2xhc3RRdWVyaWVkUm9vdCA9IHJvb3Q7Ci0gICAgICAgICAgICBtX2NvbnRhaW5z
TGFzdFF1ZXJpZWRSb290ID0gbV9yb290cy5jb250YWlucyhyb290KTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdDsKLSAgICB9Ci0KLSAgICBib29s
IGlzRW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuaXNFbXB0eSgp
OwotICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9yb290cy5jbGVh
cigpOwotICAgICAgICBtX2xhc3RRdWVyaWVkUm9vdCA9IG51bGxwdHI7Ci0gICAgICAgIG1fY29u
dGFpbnNMYXN0UXVlcmllZFJvb3QgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGFkZCh2b2lk
KiByb290KQotICAgIHsKLSAgICAgICAgaWYgKHJvb3QgPT0gbV9sYXN0UXVlcmllZFJvb3QpCi0g
ICAgICAgICAgICBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290ID0gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIG1fcm9vdHMuYWRkKHJvb3QpLmlzTmV3RW50cnk7Ci0gICAgfQotCi0gICAgaW50IHNpemUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcm9vdHMuc2l6ZSgpOwotICAgIH0KLQot
ICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9yb290cy5iZWdpbigpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8dm9p
ZCo+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
cm9vdHMuZW5kKCk7Ci0gICAgfQotCi0KLXByaXZhdGU6Ci0gICAgSGFzaFNldDx2b2lkKj4gbV9y
b290czsKLSAgICBtdXRhYmxlIHZvaWQqIG1fbGFzdFF1ZXJpZWRSb290OwotICAgIG11dGFibGUg
Ym9vbCBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXJhbGxlbFNvdXJjZUFkYXB0ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXJhbGxlbFNvdXJj
ZUFkYXB0ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Q
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFt
ZSBJbm5lclR5cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitjbGFzcyBQYXJhbGxlbFNvdXJjZUFk
YXB0ZXIgOiBwdWJsaWMgU2hhcmVkVGFzazxJbm5lclR5cGUoKT4geworcHVibGljOgorICAgIFBh
cmFsbGVsU291cmNlQWRhcHRlcihSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUoKT4+IG91dGVy
U291cmNlLCBjb25zdCBVbndyYXBGdW5jJiB1bndyYXBGdW5jKQorICAgICAgICA6IG1fb3V0ZXJT
b3VyY2Uob3V0ZXJTb3VyY2UpCisgICAgICAgICwgbV91bndyYXBGdW5jKHVud3JhcEZ1bmMpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBJbm5lclR5cGUgcnVuKCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgZG8geworICAg
ICAgICAgICAgaWYgKG1faW5uZXJTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoSW5uZXJU
eXBlIHJlc3VsdCA9IG1faW5uZXJTb3VyY2UtPnJ1bigpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIG1faW5uZXJTb3VyY2UgPSBudWxscHRyOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2lubmVyU291cmNlID0g
bV91bndyYXBGdW5jKG1fb3V0ZXJTb3VyY2UtPnJ1bigpKTsKKyAgICAgICAgfSB3aGlsZSAobV9p
bm5lclNvdXJjZSk7CisgICAgICAgIHJldHVybiBJbm5lclR5cGUoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBtX291dGVyU291cmNlOwor
ICAgIFJlZlB0cjxTaGFyZWRUYXNrPElubmVyVHlwZSgpPj4gbV9pbm5lclNvdXJjZTsKKyAgICBV
bndyYXBGdW5jIG1fdW53cmFwRnVuYzsKKyAgICBMb2NrIG1fbG9jazsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5hbWUgSW5uZXJUeXBlLCB0eXBlbmFtZSBVbndyYXBG
dW5jPgorUmVmPFBhcmFsbGVsU291cmNlQWRhcHRlcjxPdXRlclR5cGUsIElubmVyVHlwZSwgVW53
cmFwRnVuYz4+IGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcihSZWZQdHI8U2hhcmVkVGFzazxP
dXRlclR5cGUoKT4+IG91dGVyU291cmNlLCBjb25zdCBVbndyYXBGdW5jJiB1bndyYXBGdW5jKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBhcmFsbGVsU291cmNlQWRhcHRlcjxPdXRlclR5
cGUsIElubmVyVHlwZSwgVW53cmFwRnVuYz4ob3V0ZXJTb3VyY2UsIHVud3JhcEZ1bmMpKTsKK30K
KyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQoCisgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwKKyAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gZXhlY3V0ZUZ1bmN0aW9uLAorICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25j
dXJyZW5jeSkKKyAgICA6IE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoYWJicmV2aWF0ZWROYW1l
KSwgV1RGTW92ZShuYW1lKSwgdm9sYXRpbGl0eSwgY29uY3VycmVuY3ksIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6U2VxdWVudGlhbCkKKyAgICAsIG1fZXhlY3V0ZUZ1bmN0aW9uKFdURk1vdmUoZXhl
Y3V0ZUZ1bmN0aW9uKSkKK3sKK30KKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6On5TaW1wbGVN
YXJraW5nQ29uc3RyYWludCgpCit7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBTaW1wbGVN
YXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgbV9leGVjdXRlRnVuY3Rpb24odmlzaXRvcik7CisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJh
bGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFp
bnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGFs
bG93cyBmb3IgYW4gaW5mb3JtYWwgd2F5IHRvIGRlZmluZSBjb25zdHJhaW50cy4gSnVzdCBwYXNz
IGEgbGFtYmRhIHRvIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIG9ubHkKKy8vIGRvd25zaWRlIGlzIHRo
YXQgdGhpcyBtYWtlcyBpdCBoYXJkIGZvciBjb25zdHJhaW50cyB0byBiZSBzdGF0ZWZ1bCwgd2hp
Y2ggaXMgbmVjZXNzYXJ5IGZvciB0aGVtIHRvIGJlCisvLyBwYXJhbGxlbC4gSW4gdGhvc2UgY2Fz
ZXMsIGl0J3MgZWFzaWVyIHRvIGp1c3Qgc3ViY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQuCitjbGFz
cyBTaW1wbGVNYXJraW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7Citw
dWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoCisg
ICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5j
eTo6Q29uY3VycmVudCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflNpbXBsZU1hcmtp
bmdDb25zdHJhaW50KCk7CisgICAgCitwcml2YXRlOgorICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworCisgICAgOjpGdW5jdGlvbjx2
b2lkKFNsb3RWaXNpdG9yJik+IG1fZXhlY3V0ZUZ1bmN0aW9uOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsOSArOTgsNyBAQCBTbG90VmlzaXRvcjo6
flNsb3RWaXNpdG9yKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIHsK
LSAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1
bGwpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8g
U2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KLSAgICBlbHNlCisgICAgaWYgKGhlYXAoKS0+Y29s
bGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKQogICAgICAgICByZXNldCgp
OwogCiAgICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gdm0oKS5oZWFwUHJvZmls
ZXIoKSkKQEAgLTExMSw3ICsxMDksNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtp
bmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
IW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7CiAgICAgbV92
aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBudWxscHRyOwpAQCAt
Mjc3LDcgKzI3NCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2UK
IHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgSlND
ZWxsKiBjZWxsKQogewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxs
KSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwt
PmlzWmFwcGVkKCkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CkBAIC0zNDYs
NyArMzQzLDcgQEAgcHJpdmF0ZToKIAogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2
aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNN
YXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxs
KSk7CiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlz
LCBjZWxsKTsKICAgICAKQEAgLTQzNSw3ICs0MzIsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25h
dGVLbm93blBhcmFsbGVsKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3Rv
cHBlZChjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7Ci0gICAgbV9tdXRhdG9ySXNTdG9wcGVkID0g
KG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpICYgbV9jYW5P
cHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICBtX211dGF0b3JJc1N0b3BwZWQgPSAobV9o
ZWFwLndvcmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwog
fQogCiB2b2lkIFNsb3RWaXNpdG9yOjp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKCkKQEAgLTQ1Miw3
ICs0NDksNyBAQCBib29sIFNsb3RWaXNpdG9yOjpoYXNBY2tub3dsZWRnZWRUaGF0VGhlCiAKIGJv
b2wgU2xvdFZpc2l0b3I6Om11dGF0b3JJc1N0b3BwZWRJc1VwVG9EYXRlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09IChtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7
CisgICAgcmV0dXJuIG1fbXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFwLndvcmxkSXNTdG9wcGVk
KCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOwogfQogCiB2b2lkIFNsb3RWaXNp
dG9yOjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCkKQEAgLTQ5MCw4ICs0ODcsNiBAQCBORVZF
Ul9JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9uCiAgICAgICAgIG1fcmlnaHRUb1J1
bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KLSAg
ICAKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKIHNpemVfdCBTbG90VmlzaXRvcjo6cGVy
Zm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVzdGVkKQpAQCAtNTUwLDcg
KzU0NSw2IEBAIHNpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHIKICAgICB9
CiAKICAgICBkb25hdGVBbGwoKTsKLSAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiAKICAgICByZXR1
cm4gYnl0ZXNWaXNpdGVkKCk7CiB9CkBAIC01NjEsMTcgKzU1NSwxNiBAQCBib29sIFNsb3RWaXNp
dG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKICAgICByZXR1cm4gZGlkUmVhY2hUZXJtaW5hdGlv
bihsb2NrZXIpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNv
bnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRp
b24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgp
Ci0gICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAg
ICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQotICAg
ICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAg
cmV0dXJuICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycworICAgICAgICAm
JiAhaGFzV29yayhsb2NrZXIpOwogfQogCiBib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0
IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rv
ck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgcmV0dXJuICFpc0VtcHR5KCkKKyAgICAgICAgfHwg
IW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgIHx8
ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiB9CiAKQEAgLTU4
MywxMiArNTc2LDE0IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMK
IAogICAgIGJvb2wgaXNBY3RpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBib251c1Rhc2s7CisgICAg
ICAgIAogICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9t
YXJraW5nTXV0ZXgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAu
bV9tYXJraW5nTXV0ZXgpOwogICAgICAgICAgICAgaWYgKGlzQWN0aXZlKQogICAgICAgICAgICAg
ICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgICAg
ICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMrKzsKLQorICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKSB7CiAg
ICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c0VsYXBzZWQodGltZW91dCkpCkBAIC02MjksMjggKzYyNCw1MSBAQCBORVZFUl9JTkxJTkUgU2xv
dFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkg
PSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxv
Y2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX2JvbnVzVmlzaXRvclRh
c2sKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIG1faGVhcC5t
X21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4
LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoIWhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9ib251
c1Zpc2l0b3JUYXNrKQorICAgICAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBtX2hlYXAubV9i
b251c1Zpc2l0b3JUYXNrOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICht
X2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGZvckVhY2hNYXJrU3RhY2soCi0gICAgICAgICAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJh
eSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNr
LnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRp
bmdHbG9iYWxTdGFjayhzdGFjayksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9u
dW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFib251c1Rhc2sgJiYgaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChN
YXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBt
X2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9o
ZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICBpZiAoYm9udXNUYXNrKSB7Cisg
ICAgICAgICAgICBib251c1Rhc2stPnJ1bigqdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFRoZSBtYWluIHRocmVhZCBjb3VsZCBzdGlsbCBiZSBydW5uaW5nLCBhbmQgbWF5IHJ1
biBmb3IgYSB3aGlsZS4gVW5sZXNzIHdlIGNsZWFyIHRoZSB0YXNrCisgICAgICAgICAgICAvLyBv
dXJzZWx2ZXMsIHdlIHdpbGwga2VlcCBsb29waW5nIGFyb3VuZCB0cnlpbmcgdG8gcnVuIHRoZSB0
YXNrLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1f
Ym9udXNWaXNpdG9yVGFzayA9PSBib251c1Rhc2spCisgICAgICAgICAgICAgICAgICAgIG1faGVh
cC5tX2JvbnVzVmlzaXRvclRhc2sgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJvbnVzVGFz
ayA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgICAgICBkcmFpbih0
aW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaXNBY3RpdmUgPSB0cnVlOwog
ICAgIH0KIH0KQEAgLTY3MCwxNSArNjg4LDE5IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJl
c3VsdCBTbG90VmlzaXQKICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAx
CiAgICAgICAgIHx8IChtX2hlYXAubV93b3JsZFN0YXRlLmxvYWQoKSAmIEhlYXA6Om11dGF0b3JX
YWl0aW5nQml0KQogICAgICAgICB8fCAhbV9oZWFwLmhhc0hlYXBBY2Nlc3MoKQotICAgICAgICB8
fCBtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgeworICAg
ICAgICB8fCBtX2hlYXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAvLyBUaGlzIGlzIGFu
IG9wdGltaXphdGlvbiBvdmVyIGRyYWluSW5QYXJhbGxlbCgpIHdoZW4gd2UgaGF2ZSBhIGNvbmN1
cnJlbnQgbXV0YXRvciBidXQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGlzIG5vdCBwcm9maXRh
YmxlLgogICAgICAgICByZXR1cm4gZHJhaW5JblBhcmFsbGVsKHRpbWVvdXQpOwogICAgIH0KIAot
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7Ci0gICAgZG9uYXRl
QWxsKGxvY2tlcik7Ci0gICAgCisgICAgZG9uYXRlQWxsKGhvbGRMb2NrKG1faGVhcC5tX21hcmtp
bmdNdXRleCkpOworICAgIHJldHVybiB3YWl0Rm9yVGVybWluYXRpb24odGltZW91dCk7Cit9CisK
K1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6d2FpdEZvclRlcm1p
bmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAo
aGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3Vs
dDo6VGltZWRPdXQ7CkBAIC03MTEsNjEgKzczMyw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZUFsbChjb25zdCBBYnN0cmEKICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
bm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCog
cm9vdCkKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAo
bV9pZ25vcmVOZXdPcGFxdWVSb290cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChP
cHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKLSAgICAgICAgLy8gUHV0IGRpcmVj
dGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290
cy5hZGQocm9vdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gUHV0IGludG8gdGhl
IGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgot
ICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3Jv
dyB0b28gbGFyZ2UuCi0gICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1f
b3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotfQotCi1ib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09w
YXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAg
cmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwotfQotCi1UcmlTdGF0
ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCogcm9vdCkgY29u
c3QKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotICAg
IAotICAgIGlmIChtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4g
VHJ1ZVRyaVN0YXRlOwotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29w
YXF1ZVJvb3RzTXV0ZXgpOwotICAgIGlmIChtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhy
b290KSkKLSAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAg
aWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VP
cGFxdWVSb290cygpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQ
cm9maXRhYmxlKCkKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9v
dHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygpOwotfQotICAgIAogdm9pZCBTbG90Vmlz
aXRvcjo6ZG9uYXRlKCkKIHsKICAgICBpZiAoIW1faXNJblBhcmFsbGVsTW9kZSkgewpAQCAtNzg1
LDE2ICs3NTIsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uCiAg
ICAgZHJhaW4odGltZW91dCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9v
dHMoKQotewotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFw
Lm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVl
Um9vdHMpCi0gICAgICAgICAgICBtX2hlYXAubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAg
fQotICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6YWRk
V2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJl
bmNlSGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFk
ZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDYgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0
YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQu
aCIKICNpbmNsdWRlICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTk1LDEwICs5NCw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwogICAgIHZv
aWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQoSlNDZWxsKik7CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOworICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2
b2lkKik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgogICAgIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKLSAg
ICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7CisgICAg
Ym9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogCiAgICAgYm9vbCBpc0VtcHR5
KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2su
aXNFbXB0eSgpOyB9CiAKQEAgLTEyMSw2ICsxMTksOCBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWRE
cmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWwoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3Rv
bmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5JblBhcmFs
bGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmlu
aXR5KCkpOworICAgIAorICAgIFNoYXJlZERyYWluUmVzdWx0IHdhaXRGb3JUZXJtaW5hdGlvbihN
b25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAg
IC8vIEF0dGVtcHRzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50IG9mIGRyYWluaW5nIHRoYXQgaW52
b2x2ZXMgb25seSB3YWxraW5nIGBieXRlc2Agd29ydGggb2YgZGF0YS4gVGhpcwogICAgIC8vIGlz
IGxpa2VseSB0byBhY2NpZGVudGFsbHkgd2FsayBtb3JlIG9yIGxlc3MgdGhhbiB0aGF0LiBJdCB3
aWxsIHVzdWFsbHkgbWFyayBtb3JlIHRoYW4gYnl0ZXMuIEl0IG1heQpAQCAtMTI4LDggKzEyOCw2
IEBAIHB1YmxpYzoKICAgICAvLyByYXJlIGNhc2VzIGhhcHBlbiB0ZW1wb3JhcmlseSBldmVuIGlm
IHdlJ3JlIG5vdCByZWFjaGluZyB0ZXJtaW5hdGlvbikuCiAgICAgc2l6ZV90IHBlcmZvcm1JbmNy
ZW1lbnRPZkRyYWluaW5nKHNpemVfdCBieXRlcyk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBtZXJnZUlmTmVjZXNzYXJ5KCk7Ci0KICAgICAvLyBUaGlzIGluZm9ybXMgdGhlIEdD
IGFib3V0IGF1eGlsaWFyeSBvZiBzb21lIHNpemUgdGhhdCB3ZSBhcmUga2VlcGluZyBhbGl2ZS4g
SWYgeW91IGRvbid0IGRvCiAgICAgLy8gdGhpcyB0aGVuIHRoZSBzcGFjZSB3aWxsIGJlIGZyZWVk
IGF0IGVuZCBvZiBHQy4KICAgICB2b2lkIG1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSk7
CkBAIC0xOTQsMTAgKzE5Miw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1
eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAgICAKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHMo
KTsKLQotICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotCiAgICAgdm9p
ZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25v
d25QYXJhbGxlbCgpOwpAQCAtMjE1LDcgKzIwOSw2IEBAIHByaXZhdGU6CiAKICAgICBNYXJrU3Rh
Y2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0
YWNrOwotICAgIE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBk
YXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAg
IGJvb2wgbV9pZ25vcmVOZXdPcGFxdWVSb290cyB7IGZhbHNlIH07IC8vIFVzZWZ1bCBhcyBhIGRl
YnVnZ2luZyBtb2RlLgogICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuCiAgICAgCiAgICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
OwogICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKSkgewotICAgICAg
ICBkZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKTsKICAgICAgICAgaWYgKExJS0VMWShjZWxs
LT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkgewogICAgICAgICAgICAgaWYgKExJS0VM
WSghbV9oZWFwU25hcHNob3RCdWlsZGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC04
Niw3ICs4NSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKICAg
ICAKICAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CiAgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlz
TGFyZ2VBbGxvY2F0aW9uKCkpKSB7Ci0gICAgICAgIGRlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5j
eSgpOwogICAgICAgICBpZiAoTElLRUxZKGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2Vk
KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7CkBAIC0xMzYsNiArMTM0LDIz
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmEKICAgICAgICAgYXBw
ZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmFk
ZE9wYXF1ZVJvb3Qodm9pZCogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1faWdub3JlTmV3T3BhcXVlUm9vdHMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWhlYXAoKS0+bV9vcGFxdWVSb290cy5hZGQocHRyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIG1fdmlzaXRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworfQor
CitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHB0cikg
Y29uc3QKK3sKKyAgICByZXR1cm4gaGVhcCgpLT5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHB0cik7
Cit9CisKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKG1faXNGaXJzdFZpc2l0KSB7CkBAIC0xNTksMTIgKzE3
NCwxMiBAQCBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdAogCiBpbmxpbmUg
Vk0mIFNsb3RWaXNpdG9yOjp2bSgpCiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICBy
ZXR1cm4gKm1faGVhcC52bSgpOwogfQogCiBpbmxpbmUgY29uc3QgVk0mIFNsb3RWaXNpdG9yOjp2
bSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICptX2hlYXAubV92bTsKKyAgICByZXR1cm4gKm1faGVh
cC52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJQ
YXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3Bl
LmgiCiAjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKQEAgLTg4LDUgKzg5LDQyIEBAIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHkKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAorUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gU3Vic3BhY2U6
OnBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCkKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFNo
YXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNr
KE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihh
bGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2Vk
QWxsb2NhdG9yKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJl
c3VsdCA9IG1fYWxsb2NhdG9yOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAg
ICAgICBtX2FsbG9jYXRvciA9IHJlc3VsdC0+bmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICAgICAgTG9jayBt
X2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sobV9maXJz
dEFsbG9jYXRvcikpOworfQorCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxl
KigpPj4gU3Vic3BhY2U6OnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9ja1NvdXJjZSgpCit7Cisg
ICAgcmV0dXJuIGNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcjxNYXJrZWRBbGxvY2F0b3IqLCBN
YXJrZWRCbG9jazo6SGFuZGxlKj4oCisgICAgICAgIHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCks
CisgICAgICAgIFtdIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgLT4gUmVmUHRyPFNoYXJl
ZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHsKKyAgICAgICAgICAgIGlmICghYWxsb2Nh
dG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJu
IGFsbG9jYXRvci0+cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAgICAgIH0pOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNyArNjksMjQgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKGNv
bnN0IEZ1bmMmKTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3Iq
KCk+PiBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTWFya2VkQmxvY2soY29uc3QgRnVuYyYpOwogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTm90RW1wdHlN
YXJrZWRCbG9jayhjb25zdCBGdW5jJik7CiAgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVm
UHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IHBhcmFsbGVsTm90RW1wdHlN
YXJrZWRCbG9ja1NvdXJjZSgpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAg
ICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3Qg
RnVuYyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUmVmUHRyPFNo
YXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVs
KGNvbnN0IEZ1bmMmKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBm
b3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NCw2ICs4NCw1MyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+PiBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGNvbnN0IEZ1
bmMmIGZ1bmMpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPHZvaWQoU2xv
dFZpc2l0b3ImKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhTdWJzcGFjZSYgc3Vic3Bh
Y2UsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgICAgICAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2Up
CisgICAgICAgICAgICAsIG1fYmxvY2tTb3VyY2Uoc3Vic3BhY2UucGFyYWxsZWxOb3RFbXB0eU1h
cmtlZEJsb2NrU291cmNlKCkpCisgICAgICAgICAgICAsIG1fZnVuYyhmdW5jKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcnVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoTWFya2VkQmxvY2s6
OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVuKCkpIHsKKyAgICAgICAgICAgICAg
ICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEhl
YXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jKHZpc2l0b3IsIGNlbGwsIGtpbmQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICAgICAgICAgIGlmICghbV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBtX25lZWRUb1Zpc2l0
TGFyZ2VBbGxvY2F0aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX3N1YnNwYWNlLmZvckVhY2hMYXJnZUFsbG9jYXRpb24oCisgICAgICAgICAg
ICAgICAgWyZdIChMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsbG9jYXRpb24tPmlzTWFya2VkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2Z1bmModmlzaXRvciwgYWxsb2NhdGlvbi0+Y2VsbCgpLCBtX3N1YnNwYWNlLm1fYXR0cmli
dXRlcy5jZWxsS2luZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgU3Vic3BhY2UmIG1fc3Vic3BhY2U7CisgICAgICAgIFJl
ZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBtX2Jsb2NrU291cmNlOwor
ICAgICAgICBGdW5jIG1fZnVuYzsKKyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgICAgIGJvb2wg
bV9uZWVkVG9WaXNpdExhcmdlQWxsb2NhdGlvbnMgeyB0cnVlIH07CisgICAgfTsKKyAgICAKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2soKnRoaXMsIGZ1bmMpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5j
JiBmdW5jKQogewogICAgIGZvckVhY2hNYXJrZWRCbG9jaygKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Zpc2l0Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWaXNpdENvdW50ZXIgeworcHVibGljOgor
ICAgIFZpc2l0Q291bnRlcigpIHsgfQorICAgIAorICAgIFZpc2l0Q291bnRlcihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKyAgICAgICAgOiBtX3Zpc2l0b3IoJnZpc2l0b3IpCisgICAgICAgICwgbV9p
bml0aWFsVmlzaXRDb3VudCh2aXNpdG9yLnZpc2l0Q291bnQoKSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fdmlzaXRvcjsg
fQorICAgIAorICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3Zpc2l0b3ItPnZpc2l0Q291bnQoKSAtIG1faW5pdGlhbFZpc2l0Q291bnQ7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBTbG90VmlzaXRvciogbV92aXNpdG9yIHsgbnVsbHB0ciB9
OworICAgIHNpemVfdCBtX2luaXRpYWxWaXNpdENvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGlt
ZW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5n
VGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVk
ZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
Y2xhc3MgVmlzaXRpbmdUaW1lb3V0IHsKLXB1YmxpYzoKLSAgICBWaXNpdGluZ1RpbWVvdXQoKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlzaXRpbmdUaW1lb3V0KFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBib29sIGRpZFZpc2l0U29tZXRoaW5nLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCi0gICAg
ICAgIDogbV9kaWRWaXNpdFNvbWV0aGluZyhkaWRWaXNpdFNvbWV0aGluZykKLSAgICAgICAgLCBt
X3Zpc2l0Q291bnRCZWZvcmUodmlzaXRvci52aXNpdENvdW50KCkpCi0gICAgICAgICwgbV90aW1l
b3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgdmlzaXRDb3VudChT
bG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB2aXNpdG9y
LnZpc2l0Q291bnQoKSAtIG1fdmlzaXRDb3VudEJlZm9yZTsKLSAgICB9Ci0KLSAgICBib29sIGRp
ZFZpc2l0U29tZXRoaW5nKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fZGlkVmlzaXRTb21ldGhpbmcgfHwgdmlzaXRDb3VudCh2aXNpdG9yKTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKHZpc2l0b3IpICYm
IGhhc0VsYXBzZWQobV90aW1lb3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIGJvb2wg
bV9kaWRWaXNpdFNvbWV0aGluZyB7IGZhbHNlIH07Ci0gICAgc2l6ZV90IG1fdmlzaXRDb3VudEJl
Zm9yZSB7IDAgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5j
cHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFdlYWtCbG9j
azo6c3BlY2lhbGl6ZWRWaXNpdChDb250YWluCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB3ZWFrSW1wbC0+anNWYWx1ZSgpOwotICAgICAgICBpZiAo
Y29udGFpbmVyLmlzTWFya2VkQ29uY3VycmVudGx5KG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFz
Q2VsbCgpKSkKKyAgICAgICAgaWYgKGNvbnRhaW5lci5pc01hcmtlZChtYXJraW5nVmVyc2lvbiwg
anNWYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAg
ICAgIGlmICghd2Vha0hhbmRsZU93bmVyLT5pc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5k
bGU8VW5rbm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPihqc1ZhbHVlKSksIHdl
YWtJbXBsLT5jb250ZXh0KCksIHZpc2l0b3IpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsNyAr
MzgyLDcgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAgIHN0
cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAgICAgbGFzdE9mZnNldCA9
IHN0cnVjdHVyZS0+bGFzdE9mZnNldCgpOwogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOwotICAgIERlcGVuZGVuY3kgaW5kZXhpbmdUeXBl
RGVwZW5kZW5jeSA9IGRlcGVuZGVuY3koaW5kZXhpbmdUeXBlKTsKKyAgICBEZXBlbmRlbmN5IGlu
ZGV4aW5nVHlwZURlcGVuZGVuY3kgPSBEZXBlbmRlbmN5OjpmZW5jZShpbmRleGluZ1R5cGUpOwog
ICAgIExvY2tlcjxKU0NlbGw+IGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwogICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKSB7CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKQEAgLTM5NiwxMyArMzk2LDEzIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVj
dDo6dmlzaXQKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgYnV0dGVy
Zmx5ID0gY29uc3VtZSh0aGlzLCBpbmRleGluZ1R5cGVEZXBlbmRlbmN5KS0+YnV0dGVyZmx5KCk7
Ci0gICAgRGVwZW5kZW5jeSBidXR0ZXJmbHlEZXBlbmRlbmN5ID0gZGVwZW5kZW5jeShidXR0ZXJm
bHkpOworICAgIGJ1dHRlcmZseSA9IGluZGV4aW5nVHlwZURlcGVuZGVuY3kuY29uc3VtZSh0aGlz
KS0+YnV0dGVyZmx5KCk7CisgICAgRGVwZW5kZW5jeSBidXR0ZXJmbHlEZXBlbmRlbmN5ID0gRGVw
ZW5kZW5jeTo6ZmVuY2UoYnV0dGVyZmx5KTsKICAgICBpZiAoIWJ1dHRlcmZseSkKICAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZTsKLSAgICBpZiAoY29uc3VtZSh0aGlzLCBidXR0ZXJmbHlEZXBlbmRl
bmN5KS0+c3RydWN0dXJlSUQoKSAhPSBzdHJ1Y3R1cmVJRCkKKyAgICBpZiAoYnV0dGVyZmx5RGVw
ZW5kZW5jeS5jb25zdW1lKHRoaXMpLT5zdHJ1Y3R1cmVJRCgpICE9IHN0cnVjdHVyZUlEKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoY29uc3VtZShzdHJ1Y3R1cmUsIGJ1dHRlcmZs
eURlcGVuZGVuY3kpLT5sYXN0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldCkKKyAgICBpZiAoYnV0dGVy
Zmx5RGVwZW5kZW5jeS5jb25zdW1lKHN0cnVjdHVyZSktPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zm
c2V0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBtYXJrQXV4aWxpYXJ5QW5k
VmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLCBs
YXN0T2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCw3IEBAIGNvbnN0ZXhwciBib29sIGVu
YWJsZUFzeW5jSXRlcmF0aW9uID0gZmEKICAgICBcCiAgICAgdih1bnNpZ25lZCwgbWluaW11bU51
bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlLCAxMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYodW5zaWduZWQsIG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMo
OCksIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgdXNlUGFyYWxsZWxNYXJraW5nQ29u
c3RyYWludFNvbHZlciwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwg
b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGRvdWJsZSwgbWluSGVhcFV0aWxpemF0aW9uLCAwLjgsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoZG91YmxlLCBtaW5NYXJrZWRCbG9ja1V0aWxpemF0aW9uLCAwLjksIE5vcm1hbCwgbnVsbHB0
cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAxLDE0ICsxMTAxLDE0IEBAIGJvb2wgU3Ry
dWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoKQogICAgIC8vIGhhcyBhbnkgbGFyZ2UgcHJvcGVydHkg
bmFtZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NzMzNAogICAgIAotICAgIHJldHVybiAoIW1fZ2xvYmFsT2JqZWN0IHx8IEhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKLSAgICAgICAgJiYgKGhhc1BvbHlQ
cm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjppc01hcmtlZENvbmN1
cnJlbnRseShzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworICAgIHJldHVybiAoIW1fZ2xvYmFs
T2JqZWN0IHx8IEhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0LmdldCgpKSkKKyAgICAgICAg
JiYgKGhhc1BvbHlQcm90bygpIHx8ICFzdG9yZWRQcm90b3R5cGVPYmplY3QoKSB8fCBIZWFwOjpp
c01hcmtlZChzdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCiBib29sIFN0cnVjdHVyZTo6
bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFpc0NoZWFwRHVy
aW5nR0MoKSkKLSAgICAgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMp
OworICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQodGhpcyk7CiAgICAgCiAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDgzIEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlz
IGRvZXMgc29tZSBjaGFuZ2VzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIHBhcmFsbGVsIGNvbnN0
cmFpbnQgc29sdmluZzoKKyAgICAgICAgCisgICAgICAgIC0gSSBmaW5hbGx5IHJlbW92ZWQgZGVw
ZW5kZW5jeVdpdGguIFRoaXMgd2FzIGEgc2lsbHkgY29uc3RydWN0IHdob3NlIG9ubHkgcHVycG9z
ZSBpcyB0byBjb25mdXNlCisgICAgICAgICAgcGVvcGxlIGFib3V0IHdoYXQgaXQgbWVhbnMgdG8g
aGF2ZSBhIGRlcGVuZGVuY3kgY2hhaW4uIEkgdG9vayB0aGF0IGFzIGFuIG9wcG9ydHVuaXR5IHRv
IGdyZWFseQorICAgICAgICAgIHNpbXBsaWZ5IHRoZSBHQydzIHVzZSBvZiBkZXBlbmRlbmN5IGNo
YWluaW5nLgorICAgICAgICAKKyAgICAgICAgLSBBZGRlZCBtb3JlIGxvZ2ljIHRvIERlcXVlPD4s
IHNpbmNlIEkgdXNlIGl0IGZvciBwYXJ0IG9mIHRoZSBsb2FkIGJhbGFuY2VyLgorICAgICAgICAK
KyAgICAgICAgLSBNYWRlIGl0IHBvc3NpYmxlIHRvIHByb2ZpbGUgbG9jayBjb250ZW50aW9uLiBT
ZWUKKyAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgw
MjUwI2MwIGZvciBzb21lIHByZWxpbWluYXJ5IG1lYXN1cmVtZW50cy4KKyAgICAgICAgCisgICAg
ICAgIC0gSW50cm9kdWNlZCBob2xkTG9ja0lmLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBlcmZv
cm0gcHJlZGljYXRlZCBsb2NrIGFjcXVpc2l0aW9uLiBXZSB1c2UgdGhhdAorICAgICAgICAgIHRv
IHBpY2sgYSBsb2NrIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICAtIEludHJvZHVjZWQg
Q291bnRpbmdMb2NrLiBJdCdzIGxpa2UgV1RGOjpMb2NrIGV4Y2VwdCBpdCBhbHNvIGVuYWJsZXMg
b3B0aW1pc3RpYyByZWFkIHRyYW5zYWN0aW9ucworICAgICAgICAgIHNvcnRhIGxpa2UgSmF2YSdz
IFN0YW1wZWRMb2NrLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdURjo6ZGVwZW5kZW5jeSk6Cisg
ICAgICAgIChXVEY6OkRlcGVuZGVuY3lXaXRoOjpEZXBlbmRlbmN5V2l0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OmRlcGVuZGVuY3lXaXRoKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvQml0
VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6aXRlcmF0b3I6Om9wZXJhdG9yKysp
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvQ29uY3VycmVu
dFB0ckhhc2hTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hT
ZXQ6OkNvbmN1cnJlbnRQdHJIYXNoU2V0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhh
c2hTZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQ
dHJIYXNoU2V0OjpkZWxldGVPbGRUYWJsZXMpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRy
SGFzaFNldDo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRTbG93KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUlmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OnJlc2l6ZUFuZEFkZCk6CisgICAg
ICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAg
KiB3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRQdHJIYXNoU2V0Ojpjb250YWlucyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJI
YXNoU2V0OjphZGQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6c2l6ZSBj
b25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6bWF4TG9h
ZCBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpoYXNoKToKKyAg
ICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmNhc3QpOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50UHRySGFzaFNldDo6Y29udGFpbnNJbXBsIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFB0ckhhc2hTZXQ6OmFkZEltcGwpOgorICAgICAgICAqIHd0Zi9EZXF1ZS5oOgor
ICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdCk6CisgICAgICAgICogd3Rm
L0Zhc3RNYWxsb2MuaDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6CisgICAgICAgIChXVEY6Okxv
Y2tCYXNlOjpsb2NrU2xvdyk6CisgICAgICAgICogd3RmL0xvY2tlci5oOgorICAgICAgICAoV1RG
Ojpob2xkTG9ja0lmKToKKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRhLmg6CisgICAgICAgICog
d3RmL1NoYXJlZFRhc2suaDoKKyAgICAgICAgKFdURjo6U2hhcmVkVGFzazxQYXNzZWRSZXN1bHRU
eXBlKToKKyAgICAgICAgKFdURjo6U2hhcmVkVGFzazxSZXN1bHRUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvU3RhY2tTaG90Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6
OlN0YWNrU2hvdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdURjo6U3RhY2tTaG90OjphcnJheSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hv
dDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3IgYm9vbCBj
b25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlN0YWNrU2hvdDo6aGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hv
dDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1No
b3Q6Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6ZGVsZXRlZFZh
bHVlQXJyYXkpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3RIYXNoOjpoYXNoKToKKyAgICAgICAg
KFdURjo6U3RhY2tTaG90SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHd0Zi9TdGFja1Nob3RQcm9m
aWxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OlN0YWNrU2hv
dFByb2ZpbGVyKToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OnByb2ZpbGUpOgor
ICAgICAgICAoV1RGOjpTdGFja1Nob3RQcm9maWxlcjo6cnVuKToKKwogMjAxNy0xMi0wMSAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEludGVybmFscy50
ZXJtaW5hdGVTZXJ2aWNlV29ya2VyLCBhbmQgdGhlIGFiaWxpdHkgdG8gcmVzdGFydCBzZXJ2aWNl
IHdvcmtlcnMgZm9yIHBvc3RNZXNzYWdlLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAv
KiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBGNTI2QjFGNDIxRkY4MDA0QTQ1
MkMgLyogU3RyaW5nTWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMEY1MjY5MUY0MjFGRjgwMDRBNDUyQyAvKiBTdHJpbmdNYWxsb2MuY3Bw
ICovOyB9OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFF
Nzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgKi87IH07CisJCTBGMzBDQjVBMUZD
REYxMzQwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMg
LyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjQzRDhGMTFEQjVBRERDMDAx
MDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDNEOEVGMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNU
aHJlYWQuY3BwICovOyB9OwogCQkwRjVCRjE3NjFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYx
NzQxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLzsgfTsKIAkJMEY2MEYzMkYxREZD
QkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBM
b2NrZWRQcmludFN0cmVhbS5jcHAgKi87IH07CkBAIC0zNCw2ICszNSw3IEBACiAJCTBGNzA3NUY1
MUZCRjUzQ0QwMDQ4OUFGMCAvKiBUaW1pbmdTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwNzVGNDFGQkY1MzdBMDA0ODlBRjAgLyogVGlt
aW5nU2NvcGUuY3BwICovOyB9OwogCQkwRjdDNUZCNjFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJp
dFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjdDNUZCNTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi87IH07CiAJ
CTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1
RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKKwkJMEY4RTg1REIxRkQ0ODVCMDAwNjkxODg5IC8q
IENvdW50aW5nTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjhFODVEQTFGRDQ4NUIwMDA2OTE4ODkgLyogQ291bnRpbmdMb2NrLmNwcCAqLzsg
fTsKIAkJMEY4RjJCOTIxNzJFMDEwMzAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjhGMTcy
RTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi87IH07CiAJCTBGOUQzMzYw
MTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8q
IEZpbGVQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGOUQzMzYyMTY1REJBNzMwMDVBRDM4NyAv
KiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICovOyB9
OwpAQCAtMTgzLDYgKzE4NSw4IEBACiAJCTBGMzBCQThEMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dn
aW5nSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFz
aE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwQkE4RTFFNzg3MDhFMDAy
Q0E4NDcgLyogTG9nZ2luZ0hhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTG9nZ2luZ0hhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMEJB
OEYxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoVHJhaXRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoVHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFz
aFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50
UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjU5MUZD
REYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjMxREQ3MDFGMTMwOEJDMDA3MkVCNEEgLyogTG9ja0FsZ29yaXRobUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobUlubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNDhDN0QxRjQ3QUE5RDAwM0NGRUYyIC8qIFN0cmluZ1Zl
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjE3LDYgKzIyMSw3IEBACiAJCTBGODI0QTY0MUI3NDQzQTAwMDJF
MzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhcmtpbmdMb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2
NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQYXJraW5nTG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
ODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJhd1BvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY4RTg1REExRkQ0ODVCMDAwNjkxODg5IC8qIENvdW50aW5nTG9jay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3VudGluZ0xvY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRp
b25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyog
Q29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOUIxNzJGMjU5NDAwN0RCREE1IC8q
IENvbnZlcnNpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnZlcnNpb25Nb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjYsNiArMjMxLDggQEAKIAkJMEY5RDMzNUMxNjVE
QkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWxlUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUUxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW50U3RyZWFtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFj
a1Nob3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tTaG90Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTA1MUZEMUMzN0IwMDc5QzVCMiAvKiBT
dGFja1Nob3RQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFj
a1Nob3RQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxODE4
MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5
QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyog
U3lzdGVtVHJhY2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1U
cmFjaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTAsNiArMjU3LDcgQEAK
IAkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkY0QjRDNDFFODg5MzlDMDBEQkJFODYgLyogTGl2ZW5lc3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkJDQkZBMUZEMzdFMEYwMDcyQUFGMCAvKiBD
b3VudGluZ0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ291bnRpbmdM
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkYxOURBMUJCMzM0RUIwMDg4
NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBvb2wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8q
IGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CkBAIC03OTQsNyArODAyLDExIEBACiAJCQkJMEY4RjJCOTAxNzJF
MDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCiAJCQkJQThBNDcyNzAxNTFB
ODI1QTAwNDEyM0ZGIC8qIENvbXBpbGVyLmggKi8sCiAJCQkJNDZCQTlFQUIxRjRDRDYxRTAwOUEy
QkJDIC8qIENvbXBsZXRpb25IYW5kbGVyLmggKi8sCisJCQkJMEYzMENCNTgxRkNERjEzMzAwNEI1
MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKKwkJCQkwRjMwQ0I1OTFGQ0RGMTMz
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLywKIAkJCQkwRkRCNjk4RDFCN0M2
NDNBMDAwQzEwNzggLyogQ29uZGl0aW9uLmggKi8sCisJCQkJMEZGQkNCRkExRkQzN0UwRjAwNzJB
QUYwIC8qIENvdW50aW5nTG9jay5oICovLAorCQkJCTBGOEU4NURBMUZENDg1QjAwMDY5MTg4OSAv
KiBDb3VudGluZ0xvY2suY3BwICovLAogCQkJCUUzOEM0MTI2MUVCNEUwNjgwMDQyOTU3RCAvKiBD
UFVUaW1lLmNwcCAqLywKIAkJCQlFMzhDNDEyNzFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5o
ICovLAogCQkJCTUxNUY3OTRCMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9zc1RocmVhZENvcGllci5j
cHAgKi8sCkBAIC0xMDA1LDYgKzEwMTcsOCBAQAogCQkJCUE4QTQ3MzBEMTUxQTgyNUIwMDQxMjNG
RiAvKiBTcGVjdHJ1bS5oICovLAogCQkJCUE4QTQ3MzBFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFj
a0JvdW5kcy5jcHAgKi8sCiAJCQkJQThBNDczMEYxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91
bmRzLmggKi8sCisJCQkJMEY5REFBMDQxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdC5oICov
LAorCQkJCTBGOURBQTA1MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3RQcm9maWxlci5oICov
LAogCQkJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLywKIAkJ
CQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oICovLAogCQkJCTMxM0VE
RUM5Nzc4RTQ5QzlCRUE5MUNGQyAvKiBTdGFja1RyYWNlLmNwcCAqLywKQEAgLTE0MjUsNyArMTQz
OSw5IEBACiAJCQkJMEZGRjE5REMxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9v
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFy
a2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyQjFGM0Q0ODYwMDBDNzQ5NTAg
LyogUGVyc2lzdGVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjhFODVEQjFGRDQ4
NUIwMDA2OTE4ODkgLyogQ291bnRpbmdMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3
NTJDMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjMwQ0I1QTFGQ0RGMTM0MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1MkQxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNp
c3RlbnRFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzYyMTY1REJBNzMwMDVB
RDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDNGNjExRjE1NjVG
MEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJ
KHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMzM5LDExMyArMzM5LDEwNCBAQCBpbmxpbmUgdm9pZCBjcm9zc01vZGlmeWluZ0Nv
ZGVGZW5jZSgpIHsgCiAKICNlbmRpZgogCi10eXBlZGVmIHVuc2lnbmVkIERlcGVuZGVuY3k7Cit0
eXBlZGVmIHVuc2lnbmVkIEludGVybmFsRGVwZW5kZW5jeVR5cGU7CiAKLUFMV0FZU19JTkxJTkUg
RGVwZW5kZW5jeSBudWxsRGVwZW5kZW5jeSgpCitpbmxpbmUgSW50ZXJuYWxEZXBlbmRlbmN5VHlw
ZSBvcGFxdWVNaXh0dXJlKCkKIHsKICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA4Pjo6dHlwZSogPSBu
dWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKK3Rl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cywgdHlwZW5hbWUgVD4KK2lubGluZSBJbnRlcm5h
bERlcGVuZGVuY3lUeXBlIG9wYXF1ZU1peHR1cmUoVCB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKIHsKLSAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQ2NF90IGNvcHkgPSBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgLy8gQ3Jl
YXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBj
b21wdXRhdGlvbgotICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhlIG9wdGltaXplci4gVGhpcyB6
ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgotICAgIC8vIGZ1cnRoZXIgYWRkcmVz
cyBjb21wdXRhdGlvbnM6IGFkZGluZyB6ZXJvIGRvZXMgbm90aGluZywgYnV0IHRoZSBjb21waWxl
cgotICAgIC8vIGRvZXNuJ3Qga25vdyBpdC4gSXQncyBtYWdpY2FsIGJlY2F1c2UgaXQgY3JlYXRl
cyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kKLSAgICAvLyBmcm9tIHRoZSBsb2FkIG9mIGBsb2NhdGlv
bmAgdG8gdGhlIHVzZXMgb2YgdGhlIGRlcGVuZGVuY3ksIHdoaWNoIHRyaWdnZXJzCi0gICAgLy8g
dGhlIEFSTSBJU0EncyBhZGRyZXNzIGRlcGVuZGVuY3kgcnVsZSwgYS5rLmEuIHRoZSBteXRoaWNh
bCBDKysgY29uc3VtZQotICAgIC8vIG9yZGVyaW5nLiBUaGlzIGZvcmNlcyB3ZWFrIG1lbW9yeSBv
cmRlciBDUFVzIHRvIG9ic2VydmUgYGxvY2F0aW9uYCBhbmQKLSAgICAvLyBkZXBlbmRlbnQgbG9h
ZHMgaW4gdGhlaXIgc3RvcmUgb3JkZXIgd2l0aG91dCB0aGUgcmVhZGVyIHVzaW5nIGEgYmFycmll
cgotICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4KLSAgICBhc20oImVvciAld1tkZXBlbmRlbmN5
XSwgJXdbaW5dLCAld1tpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5j
eSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxpZiBDUFUoQVJNKQotICAgIGFzbSgi
ZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0g
Ij1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKLSNlbHNlCi0gICAg
Ly8gTm8gZGVwZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgotICAgIGxv
YWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29w
eSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVwZW5kZW5jeTsKKyAgICB1bmlvbiB7CisgICAgICAg
IEludGVybmFsRGVwZW5kZW5jeVR5cGUgY29weTsKKyAgICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7
CisgICAgdS5jb3B5ID0gMDsKKyAgICB1LnZhbHVlID0gdmFsdWU7CisgICAgcmV0dXJuIG9wYXF1
ZU1peHR1cmUoYXJndW1lbnRzLi4uKSArIHUuY29weTsKIH0KIAotLy8gRklYTUU6IFRoaXMgY29k
ZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQu
Ci0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+
Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShU
IHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29weSA9
IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOworY2xhc3MgRGVwZW5kZW5jeSB7CitwdWJs
aWM6CisgICAgRGVwZW5kZW5jeSgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgLy8gT24gVFNPIGFyY2hpdGVjdHVyZXMsIHRoaXMgaXMgYSBsb2FkLWxvYWQg
ZmVuY2UgYW5kIHRoZSB2YWx1ZSBpdCByZXR1cm5zIGlzIG5vdCBtZWFuaW5nZnVsIChpdCdzCisg
ICAgLy8gemVybykuIFRoZSBsb2FkLWxvYWQgZmVuY2UgaXMgdXN1YWxseSBqdXN0IGEgY29tcGls
ZXIgZmVuY2UuIE9uIEFSTSwgdGhpcyBpcyBhIHNlbGYteG9yIHRoYXQKKyAgICAvLyBwcm9kdWNl
cyB6ZXJvLCBidXQgaXQncyBjb25jZWFsZWQgZnJvbSB0aGUgY29tcGlsZXIuIFRoZSBDUFUgdW5k
ZXJzdGFuZHMgdGhpcyBkdW1teSBvcCB0byBiZSBhCisgICAgLy8gcGhhbnRvbSBkZXBlbmVuZGVu
Y3kuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBEZXBl
bmRlbmN5IGZlbmNlKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBJbnRl
cm5hbERlcGVuZGVuY3lUeXBlIGlucHV0ID0gb3BhcXVlTWl4dHVyZShhcmd1bWVudHMuLi4pOwor
ICAgICAgICBJbnRlcm5hbERlcGVuZGVuY3lUeXBlIG91dHB1dDsKICNpZiBDUFUoQVJNNjQpCi0g
ICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtk
ZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29weSkpOwor
ICAgICAgICAvLyBDcmVhdGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3VnaCBpbmxpbmUgYXNz
ZW1ibHksIHdob3NlIGNvbXB1dGF0aW9uCisgICAgICAgIC8vIGlzbid0IHZpc2libGUgdG8gdGhl
IG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBpbgorICAg
ICAgICAvLyBmdXJ0aGVyIGFkZHJlc3MgY29tcHV0YXRpb25zOiBhZGRpbmcgemVybyBkb2VzIG5v
dGhpbmcsIGJ1dCB0aGUgY29tcGlsZXIKKyAgICAgICAgLy8gZG9lc24ndCBrbm93IGl0LiBJdCdz
IG1hZ2ljYWwgYmVjYXVzZSBpdCBjcmVhdGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeQorICAgICAg
ICAvLyBmcm9tIHRoZSBsb2FkIG9mIGBsb2NhdGlvbmAgdG8gdGhlIHVzZXMgb2YgdGhlIGRlcGVu
ZGVuY3ksIHdoaWNoIHRyaWdnZXJzCisgICAgICAgIC8vIHRoZSBBUk0gSVNBJ3MgYWRkcmVzcyBk
ZXBlbmRlbmN5IHJ1bGUsIGEuay5hLiB0aGUgbXl0aGljYWwgQysrIGNvbnN1bWUKKyAgICAgICAg
Ly8gb3JkZXJpbmcuIFRoaXMgZm9yY2VzIHdlYWsgbWVtb3J5IG9yZGVyIENQVXMgdG8gb2JzZXJ2
ZSBgbG9jYXRpb25gIGFuZAorICAgICAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIgc3Rv
cmUgb3JkZXIgd2l0aG91dCB0aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgorICAgICAgICAvLyBv
ciBhbiBhY3F1aXJlIGxvYWQuCisgICAgICAgIGFzbSgiZW9yICV3W291dF0sICV3W2luXSwgJXdb
aW5dIgorICAgICAgICAgICAgOiBbb3V0XSAiPXIiKG91dHB1dCkKKyAgICAgICAgICAgIDogW2lu
XSAiciIoaW5wdXQpKTsKICNlbGlmIENQVShBUk0pCi0gICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5
XSwgJVtpbl0sICVbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kp
Ci0gICAgICAgIDogW2luXSAiciIoY29weSkpOworICAgICAgICBhc20oImVvciAlW291dF0sICVb
aW5dLCAlW2luXSIKKyAgICAgICAgICAgIDogW291dF0gIj1yIihvdXRwdXQpCisgICAgICAgICAg
ICA6IFtpbl0gInIiKGlucHV0KSk7CiAjZWxzZQotICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBk
ZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7CisgICAgICAgIC8vIE5vIGRl
cGVuZGVuY3kgaXMgbmVlZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgbG9hZExv
YWRGZW5jZSgpOworICAgICAgICBvdXRwdXQgPSAwOworICAgICAgICBVTlVTRURfUEFSQU0oaW5w
dXQpOwogI2VuZGlmCi0gICAgcmV0dXJuIGRlcGVuZGVuY3k7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0g
bnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2Yo
VCkgPT0gMT46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRGVwZW5k
ZW5jeVdpdGggewotcHVibGljOgotICAgIERlcGVuZGVuY3lXaXRoKCkKLSAgICAgICAgOiBkZXBl
bmRlbmN5KG51bGxEZXBlbmRlbmN5KCkpCi0gICAgICAgICwgdmFsdWUoKQorICAgICAgICBEZXBl
bmRlbmN5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvdXRwdXQ7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8vIE9uIFRTTyBhcmNoaXRlY3R1cmVz
LCB0aGlzIGp1c3QgcmV0dXJucyB0aGUgcG9pbnRlciB5b3UgcGFzcyBpdC4gT24gQVJNLCB0aGlz
IHByb2R1Y2VzIGEgbmV3CisgICAgLy8gcG9pbnRlciB0aGF0IGlzIGRlcGVuZGVudCBvbiB0aGlz
IGRlcGVuZGVuY3kgYW5kIHRoZSBpbnB1dCBwb2ludGVyLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgVCogY29uc3VtZShUKiBwb2ludGVyKQogICAgIHsKKyNpZiBDUFUoQVJNNjQpIHx8
IENQVShBUk0pCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2VfY2FzdDxj
aGFyKj4ocG9pbnRlcikgKyBtX3ZhbHVlKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSht
X3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHBvaW50ZXI7CisjZW5kaWYKICAgICB9CiAgICAgCi0g
ICAgRGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkK
LSAgICAgICAgOiBkZXBlbmRlbmN5KGRlcGVuZGVuY3kpCitwcml2YXRlOgorICAgIEludGVybmFs
RGVwZW5kZW5jeVR5cGUgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIElucHV0VHlw
ZSwgdHlwZW5hbWUgVmFsdWVUeXBlPgorc3RydWN0IElucHV0QW5kVmFsdWUgeworICAgIElucHV0
QW5kVmFsdWUoKSB7IH0KKyAgICAKKyAgICBJbnB1dEFuZFZhbHVlKElucHV0VHlwZSBpbnB1dCwg
VmFsdWVUeXBlIHZhbHVlKQorICAgICAgICA6IGlucHV0KGlucHV0KQogICAgICAgICAsIHZhbHVl
KHZhbHVlKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5Owot
ICAgIFQgdmFsdWU7CisgICAgSW5wdXRUeXBlIGlucHV0OworICAgIFZhbHVlVHlwZSB2YWx1ZTsK
IH07Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIERlcGVuZGVuY3lXaXRoPFQ+
IGRlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsKLX0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUKiBjb25zdW1lKFQqIHBvaW50ZXIsIERlcGVu
ZGVuY3kgZGVwZW5kZW5jeSkKK3RlbXBsYXRlPHR5cGVuYW1lIElucHV0VHlwZSwgdHlwZW5hbWUg
VmFsdWVUeXBlPgorSW5wdXRBbmRWYWx1ZTxJbnB1dFR5cGUsIFZhbHVlVHlwZT4gaW5wdXRBbmRW
YWx1ZShJbnB1dFR5cGUgaW5wdXQsIFZhbHVlVHlwZSB2YWx1ZSkKIHsKLSNpZiBDUFUoQVJNNjQp
IHx8IENQVShBUk0pCi0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4oYml0d2lzZV9jYXN0PGNo
YXIqPihwb2ludGVyKSArIGRlcGVuZGVuY3kpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZGVw
ZW5kZW5jeSk7Ci0gICAgcmV0dXJuIHBvaW50ZXI7Ci0jZW5kaWYKKyAgICByZXR1cm4gSW5wdXRB
bmRWYWx1ZTxJbnB1dFR5cGUsIFZhbHVlVHlwZT4oaW5wdXQsIHZhbHVlKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuYz4KQEAgLTQ2OSwxMSArNDYwLDkgQEAgQUxXQVlT
X0lOTElORSBUJiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKgogCiB1c2luZyBXVEY6OkF0b21pYzsK
IHVzaW5nIFdURjo6RGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7Ci11c2lu
ZyBXVEY6OmNvbnN1bWU7Ci11c2luZyBXVEY6OmRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OmRlcGVu
ZGVuY3lXaXRoOwordXNpbmcgV1RGOjpJbnB1dEFuZFZhbHVlOwordXNpbmcgV1RGOjppbnB1dEFu
ZFZhbHVlOwogdXNpbmcgV1RGOjplbnN1cmVQb2ludGVyOwotdXNpbmcgV1RGOjpudWxsRGVwZW5k
ZW5jeTsKK3VzaW5nIFdURjo6b3BhcXVlTWl4dHVyZTsKIAogI2VuZGlmIC8vIEF0b21pY3NfaApJ
bmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0Jp
dFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDEzIEBAIHB1YmxpYzogCiAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICBpdGVyYXRvciBv
cGVyYXRvcisrKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0ID0g
KnRoaXM7CisgICAgICAgICAgICArKygqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisKICAgICAgICAgYm9vbCBpc0F0RW5kKCkgY29uc3QKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPj0gbV9iaXRWZWN0b3ItPnNpemUoKTsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jp
dG1hcC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJp
dG1hcFNpemU7CiAgICAgfQogCi0gICAgYm9vbCBnZXQoc2l6ZV90LCBEZXBlbmRlbmN5ID0gbnVs
bERlcGVuZGVuY3koKSkgY29uc3Q7CisgICAgYm9vbCBnZXQoc2l6ZV90LCBEZXBlbmRlbmN5ID0g
RGVwZW5kZW5jeSgpKSBjb25zdDsKICAgICB2b2lkIHNldChzaXplX3QpOwogICAgIHZvaWQgc2V0
KHNpemVfdCwgYm9vbCk7CiAgICAgYm9vbCB0ZXN0QW5kU2V0KHNpemVfdCk7CiAgICAgYm9vbCB0
ZXN0QW5kQ2xlYXIoc2l6ZV90KTsKLSAgICBib29sIGNvbmN1cnJlbnRUZXN0QW5kU2V0KHNpemVf
dCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5KCkpOwotICAgIGJvb2wgY29uY3VycmVudFRl
c3RBbmRDbGVhcihzaXplX3QsIERlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpKTsKKyAgICBi
b29sIGNvbmN1cnJlbnRUZXN0QW5kU2V0KHNpemVfdCwgRGVwZW5kZW5jeSA9IERlcGVuZGVuY3ko
KSk7CisgICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZENsZWFyKHNpemVfdCwgRGVwZW5kZW5jeSA9
IERlcGVuZGVuY3koKSk7CiAgICAgc2l6ZV90IG5leHRQb3NzaWJseVVuc2V0KHNpemVfdCkgY29u
c3Q7CiAgICAgdm9pZCBjbGVhcihzaXplX3QpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKQEAgLTEz
OCw3ICsxMzgsNyBAQCBpbmxpbmUgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Qml0CiB0
ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgYm9v
bCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpnZXQoc2l6ZV90IG4sIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeSkgY29uc3QKIHsKLSAgICByZXR1cm4gISEoYml0c1tuIC8gd29yZFNpemUgKyBk
ZXBlbmRlbmN5XSAmIChvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpKTsKKyAgICByZXR1cm4gISEoZGVw
ZW5kZW5jeS5jb25zdW1lKHRoaXMpLT5iaXRzW24gLyB3b3JkU2l6ZV0gJiAob25lIDw8IChuICUg
d29yZFNpemUpKSk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBX
b3JkVHlwZT4KQEAgLTE4MSw3ICsxODEsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgQml0bWFwPGJp
dG1hcFNpemUsIFdvCiB7CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8PCAobiAlIHdvcmRTaXpl
KTsKICAgICBzaXplX3QgaW5kZXggPSBuIC8gd29yZFNpemU7Ci0gICAgV29yZFR5cGUqIGRhdGEg
PSBiaXRzLmRhdGEoKSArIGluZGV4ICsgZGVwZW5kZW5jeTsKKyAgICBXb3JkVHlwZSogZGF0YSA9
IGRlcGVuZGVuY3kuY29uc3VtZShiaXRzLmRhdGEoKSkgKyBpbmRleDsKICAgICByZXR1cm4gIWJp
dHdpc2VfY2FzdDxBdG9taWM8V29yZFR5cGU+Kj4oZGF0YSktPnRyYW5zYWN0aW9uUmVsYXhlZCgK
ICAgICAgICAgWyZdIChXb3JkVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAgICAgICAgaWYg
KHZhbHVlICYgbWFzaykKQEAgLTE5Nyw3ICsxOTcsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgQml0
bWFwPGJpdG1hcFNpemUsIFdvCiB7CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8PCAobiAlIHdv
cmRTaXplKTsKICAgICBzaXplX3QgaW5kZXggPSBuIC8gd29yZFNpemU7Ci0gICAgV29yZFR5cGUq
IGRhdGEgPSBiaXRzLmRhdGEoKSArIGluZGV4ICsgZGVwZW5kZW5jeTsKKyAgICBXb3JkVHlwZSog
ZGF0YSA9IGRlcGVuZGVuY3kuY29uc3VtZShiaXRzLmRhdGEoKSkgKyBpbmRleDsKICAgICByZXR1
cm4gIWJpdHdpc2VfY2FzdDxBdG9taWM8V29yZFR5cGU+Kj4oZGF0YSktPnRyYW5zYWN0aW9uUmVs
YXhlZCgKICAgICAgICAgWyZdIChXb3JkVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAgICAg
ICAgaWYgKCEodmFsdWUgJiBtYXNrKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTgsNyArMTgsOSBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBDbG9ja1R5cGUuaAogICAg
IENvbXBpbGF0aW9uVGhyZWFkLmgKICAgICBDb21waWxlci5oCisgICAgQ29uY3VycmVudFB0ckhh
c2hTZXQuaAogICAgIENvbmRpdGlvbi5oCisgICAgQ291bnRpbmdMb2NrLmgKICAgICBDcm9zc1Ro
cmVhZENvcGllci5oCiAgICAgQ3Jvc3NUaHJlYWRUYXNrLmgKICAgICBDcnlwdG9ncmFwaGljVXRp
bGl0aWVzLmgKQEAgLTEzMiw2ICsxMzQsOCBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTZWdtZW50
ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCisgICAgU3Rh
Y2tTaG90LmgKKyAgICBTdGFja1Nob3RQcm9maWxlci5oCiAgICAgU3RhY2tTdGF0cy5oCiAgICAg
U3RhY2tUcmFjZS5oCiAgICAgU3RkTGliRXh0cmFzLmgKQEAgLTIxOCw2ICsyMjIsOCBAQCBzZXQo
V1RGX1NPVVJDRVMKICAgICBDUFVUaW1lLmNwcAogICAgIENsb2NrVHlwZS5jcHAKICAgICBDb21w
aWxhdGlvblRocmVhZC5jcHAKKyAgICBDb25jdXJyZW50UHRySGFzaFNldC5jcHAKKyAgICBDb3Vu
dGluZ0xvY2suY3BwCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCiAgICAgQ3J5cHRvZ3JhcGhp
Y1V0aWxpdGllcy5jcHAKICAgICBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25jdXJyZW50UHRySGFz
aFNldC5oIgorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K0NvbmN1cnJlbnRQdHJIYXNoU2V0OjpDb25jdXJyZW50UHRySGFzaFNldCgpCit7CisgICAgaW5p
dGlhbGl6ZSgpOworfQorCitDb25jdXJyZW50UHRySGFzaFNldDo6fkNvbmN1cnJlbnRQdHJIYXNo
U2V0KCkKK3sKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6ZGVsZXRlT2xkVGFibGVz
KCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4gY2FzZS4gSXQgZG9lcyBub3QgbWFrZSBpdCBP
SyBmb3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFkZCgpLiBCdXQgaXQgbWlnaHQgcHJldmVudAor
ICAgIC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2UgZGlkIG1ha2UgdGhhdCBtaXN0YWtlLgorICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsgCisgICAgCisgICAgbV9hbGxUYWJsZXMu
cmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiYg
dGFibGUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHRhYmxlLmdldCgpICE9IG1fdGFi
bGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhh
c2hTZXQ6OmNsZWFyKCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4gY2FzZS4gSXQgZG9lcyBu
b3QgbWFrZSBpdCBPSyBmb3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFkZCgpLiBCdXQgaXQgbWln
aHQgcHJldmVudAorICAgIC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2UgZGlkIG1ha2UgdGhhdCBt
aXN0YWtlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsgCisgICAgCisgICAg
bV9hbGxUYWJsZXMuY2xlYXIoKTsKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgQ29uY3Vy
cmVudFB0ckhhc2hTZXQ6OmluaXRpYWxpemUoKQoreworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBp
bml0aWFsU2l6ZSA9IDMyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gdGFibGUgPSBUYWJs
ZTo6Y3JlYXRlKGluaXRpYWxTaXplKTsKKyAgICBtX3RhYmxlLnN0b3JlUmVsYXhlZCh0YWJsZS5n
ZXQoKSk7CisgICAgbV9hbGxUYWJsZXMuYXBwZW5kKFdURk1vdmUodGFibGUpKTsKK30KKworYm9v
bCBDb25jdXJyZW50UHRySGFzaFNldDo6YWRkU2xvdyhUYWJsZSogdGFibGUsIHVuc2lnbmVkIG1h
c2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4LCB2b2lkKiBwdHIpCit7Cisg
ICAgaWYgKHRhYmxlLT5sb2FkLmV4Y2hhbmdlQWRkKDEpID49IHRhYmxlLT5tYXhMb2FkKCkpCisg
ICAgICAgIHJldHVybiByZXNpemVBbmRBZGQocHRyKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIHZvaWQqIG9sZEVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5jb21wYXJlRXhjaGFu
Z2VTdHJvbmcobnVsbHB0ciwgcHRyKTsKKyAgICAgICAgaWYgKCFvbGRFbnRyeSkgeworICAgICAg
ICAgICAgaWYgKG1fdGFibGUubG9hZCgpICE9IHRhYmxlKSB7CisgICAgICAgICAgICAgICAgLy8g
V2UgYWRkZWQgYW4gZW50cnkgdG8gYW4gb2xkIHRhYmxlISBXZSBuZWVkIHRvIHJlZXhlY3V0ZSB0
aGUgYWRkIG9uIHRoZSBuZXcgdGFibGUuCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZChwdHIp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG9sZEVudHJ5ID09IHB0cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgIH0KK30KKwordm9pZCBDb25jdXJyZW50UHRySGFz
aFNldDo6cmVzaXplSWZOZWNlc3NhcnkoKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAg
aWYgKHRhYmxlLT5sb2FkLmxvYWRSZWxheGVkKCkgPCB0YWJsZS0+bWF4TG9hZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBuZXdUYWJsZSA9IFRh
YmxlOjpjcmVhdGUodGFibGUtPnNpemUgKiAyKTsKKyAgICB1bnNpZ25lZCBtYXNrID0gbmV3VGFi
bGUtPm1hc2s7CisgICAgdW5zaWduZWQgbG9hZCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRhYmxlLT5zaXplOyArK2kpIHsKKyAgICAgICAgdm9pZCogcHRyID0gdGFibGUtPmFy
cmF5W2ldLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlmICghcHRyKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIp
ICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBm
b3IgKDs7KSB7CisgICAgICAgICAgICBBdG9taWM8dm9pZCo+JiBlbnRyeVJlZiA9IG5ld1RhYmxl
LT5hcnJheVtpbmRleF07CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IGVudHJ5UmVmLmxvYWRS
ZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgICAgICAgICAgZW50
cnlSZWYuc3RvcmVSZWxheGVkKHB0cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeSAhPSBwdHIpOworICAgICAg
ICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bG9hZCsrOworICAgIH0KKyAgICAKKyAgICBuZXdUYWJsZS0+bG9hZC5zdG9yZVJlbGF4ZWQobG9h
ZCk7CisgICAgCisgICAgbV90YWJsZS5zdG9yZShuZXdUYWJsZS5nZXQoKSk7CisgICAgbV9hbGxU
YWJsZXMuYXBwZW5kKFdURk1vdmUobmV3VGFibGUpKTsKK30KKworYm9vbCBDb25jdXJyZW50UHRy
SGFzaFNldDo6cmVzaXplQW5kQWRkKHZvaWQqIHB0cikKK3sKKyAgICByZXNpemVJZk5lY2Vzc2Fy
eSgpOworICAgIHJldHVybiBhZGQocHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENvbmN1cnJl
bnRQdHJIYXNoU2V0OjpUYWJsZT4gQ29uY3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlOjpjcmVhdGUo
dW5zaWduZWQgc2l6ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29uY3VycmVudFB0ckhhc2hT
ZXQ6OlRhYmxlPiByZXN1bHQobmV3IChmYXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihUYWJsZSwg
YXJyYXkpICsgc2l6ZW9mKEF0b21pYzx2b2lkKj4pICogc2l6ZSkpIFRhYmxlKCkpOworICAgIHJl
c3VsdC0+c2l6ZSA9IHNpemU7CisgICAgcmVzdWx0LT5tYXNrID0gc2l6ZSAtIDE7CisgICAgcmVz
dWx0LT5sb2FkLnN0b3JlUmVsYXhlZCgwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICByZXN1bHQtPmFycmF5W2ldLnN0b3JlUmVsYXhlZChudWxscHRy
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDog
U291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgYSBjb25jdXJyZW50IGhh
c2gtYmFzZWQgc2V0IGZvciBwb2ludGVycy4gSXQncyBvcHRpbWl6ZWQgZm9yOgorLy8KKy8vIC0g
SGlnaCByYXRlIG9mIGNvbnRhaW5zKCkgY2FsbHMuCisvLyAtIEhpZ2ggcmF0ZSBvZiBhZGQoKSBj
YWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyBuZXcuIGFkZCgpIGNhbGxzIHRoYXQgZG9uJ3Qg
YWRkIGFueXRoaW5nIChub3AgYWRkcykKKy8vICAgZG9uJ3QgbXV0YXRlIHRoZSB0YWJsZSBhdCBh
bGwuCisvLyAtIE5vdCB0b28gbWFueSB0aHJlYWRzLiBJIGRvdWJ0IHRoaXMgc2NhbGVzIGJleW9u
ZCB+NC4gVGhvdWdoLCBpdCBtYXkgYWN0dWFsbHkgc2NhbGUgYmV0dGVyIHRoYW4gdGhhdAorLy8g
ICBpZiB0aGUgcmF0ZSBvZiBub3AgYWRkcyBpcyBhYnN1cmRseSBoaWdoLgorLy8KKy8vIElmIHdl
IHdhbnRlZCB0aGlzIHRvIHNjYWxlIGJldHRlciwgdGhlIG1haW4gY2hhbmdlIHdlJ2QgaGF2ZSB0
byBtYWtlIGlzIGhvdyB0aGlzIHRhYmxlIGRldGVybWluZXMgd2hlbgorLy8gdG8gcmVzaXplLiBS
aWdodCBub3cgaXQncyBhIHNoYXJlZCBjb3VudGVyLiBXZSBsb2NrO3hhZGQgdGhpcyBjb3VudGVy
LiBPbmUgZWFzeSB3YXkgdG8gbWFrZSB0aGF0CisvLyBzY2FsYWJsZSBpcyB0byByZXF1aXJlIGVh
Y2ggdGhyZWFkIHRoYXQgd29ya3Mgd2l0aCB0aGUgQ29uY3VycmVudFB0ckhhc2hTZXQgdG8gcmVn
aXN0ZXIgaXRzZWxmIGZpcnN0LgorLy8gVGhlbiBlYWNoIHRocmVhZCB3b3VsZCBoYXZlIHNvbWUg
ZGF0YSBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSBjb3VudGVyLiBXZSBjb3VsZCBpbnN0aXR1dGUgdGhl
IHBvbGljeSB0aGF0CisvLyBlYWNoIHRocmVhZCBzaW1wbHkgaW5jcmVtZW50cyBpdHMgb3duIGxv
YWQgY291bnRlciwgaW4gaXRzIG93biBkYXRhIHN0cnVjdHVyZS4gVGhlbiwgaWYgYW55IHNlYXJj
aCB0bworLy8gcmVzb2x2ZSBhIGNvbGxpc2lvbiBkb2VzIG1vcmUgdGhhbiBOIGl0ZXJhdGlvbnMs
IHdlIGNhbiBjb21wdXRlIGEgY29tYmluZWQgbG9hZCBieSBzdW1taW5nIHRoZSBsb2FkCisvLyBj
b3VudGVycyBvZiBhbGwgb2YgdGhlIHRocmVhZCBkYXRhIHN0cnVjdHVyZXMuCisvLworLy8gQ29u
Y3VycmVudFB0ckhhc2hTZXQncyBtYWluIHVzZXIsIHRoZSBHQywgc2VlcyBhIDk4JSBub3AgYWRk
IHJhdGUgaW4gU3BlZWRvbWV0ZXIuIFRoYXQncyB3aHkgdGhpcworLy8gZm9jdXNlcyBzbyBtdWNo
IG9uIGNhc2VzIHdoZXJlIHRoZSB0YWJsZSBkb2VzIG5vdCBjaGFuZ2UuCitjbGFzcyBDb25jdXJy
ZW50UHRySGFzaFNldCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudFB0ckhh
c2hTZXQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIENvbmN1cnJlbnRQdHJIYXNoU2V0KCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIH5Db25jdXJyZW50UHRySGFzaFNldCgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgYm9vbCBjb250YWlucyhUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbnRhaW5zSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgYm9vbCBhZGQoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZGRJbXBsKGNhc3QodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUubG9hZFJlbGF4ZWQoKS0+bG9hZC5sb2Fk
UmVsYXhlZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBPbmx5IGNhbGwgd2hlbiB5b3Uga25vdyB0
aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQoKS4gVGhpcyBmcmVlcyB1cCBtZW1vcnkg
d2l0aG91dCBjaGFuZ2luZworICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUuCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlT2xkVGFibGVzKCk7CisgICAgCisgICAgLy8g
T25seSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGNhbGwgYWRk
KCkuIFRoaXMgZnJlZXMgdXAgYWxsIG1lbW9yeSBleGNlcHQgZm9yCisgICAgLy8gdGhlIHNtYWxs
ZXN0IHBvc3NpYmxlIGhhc2h0YWJsZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVh
cigpOworICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVGFibGUgeworICAgICAgICBXVEZfTUFL
RV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFRhYmxlPiBjcmVhdGUodW5zaWduZWQgc2l6ZSk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBtYXhMb2FkKCkgY29uc3QgeyByZXR1cm4gc2l6ZSAvIDI7IH0KKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIHNpemU7IC8vIFRoaXMgaXMgaW1tdXRhYmxlLgorICAgICAgICB1
bnNpZ25lZCBtYXNrOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4KKyAgICAgICAgQXRvbWljPHVuc2ln
bmVkPiBsb2FkOworICAgICAgICBBdG9taWM8dm9pZCo+IGFycmF5WzFdOworICAgIH07CisgICAg
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2godm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKHB0cik7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5p
dGlhbGl6ZSgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCogY2Fz
dChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gc2l6
ZW9mKHZvaWQqKSwgInR5cGUgdG9vIGJpZyIpOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICB2b2lkKiBwdHI7CisgICAgICAgICAgICBUIHZhbHVlOworICAgICAgICB9IHU7CisgICAgICAg
IHUucHRyID0gbnVsbHB0cjsKKyAgICAgICAgdS52YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1
cm4gdS5wdHI7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnNJbXBsKHZvaWQqIHB0cikg
Y29uc3QKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQo
KTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAgICAgICB1bnNpZ25l
ZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB2b2lkKiBlbnRy
eSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICgh
ZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGVu
dHJ5ID09IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5k
ZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIGEgbmV3IGVudHJ5IHdhcyBhZGRlZC4KKyAgICBib29sIGFkZEltcGwodm9pZCog
cHRyKQorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgp
OworICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUtPm1hc2s7CisgICAgICAgIHVuc2lnbmVk
IHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHZvaWQqIGVudHJ5
ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhlZCgpOworICAgICAgICAgICAgaWYgKCFl
bnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkU2xvdyh0YWJsZSwgbWFzaywgc3RhcnRJ
bmRleCwgaW5kZXgsIHB0cik7CisgICAgICAgICAgICBpZiAoZW50cnkgPT0gcHRyKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkg
JiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYWRk
U2xvdyhUYWJsZSogdGFibGUsIHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVu
c2lnbmVkIGluZGV4LCB2b2lkKiBwdHIpOworCisgICAgdm9pZCByZXNpemVJZk5lY2Vzc2FyeSgp
OworICAgIGJvb2wgcmVzaXplQW5kQWRkKHZvaWQqIHB0cik7CisgICAgCisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxUYWJsZT4sIDQ+IG1fYWxsVGFibGVzOworICAgIEF0b21pYzxUYWJsZSo+
IG1fdGFibGU7IC8vIFRoaXMgaXMgbmV2ZXIgbnVsbC4KKyAgICBMb2NrIG1fbG9jazsgLy8gV2Ug
anVzdCB1c2UgdGhpcyB0byBjb250cm9sIHJlc2l6ZSByYWNlcy4KK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OwpJbmRleDogU291cmNl
L1dURi93dGYvQ291bnRpbmdMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9D
b3VudGluZ0xvY2suY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvdW50aW5n
TG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ291bnRpbmdMb2NrLmgiCisKKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobUlubGlu
ZXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgQ291bnRpbmdMb2NrOjpsb2NrU2xvdygp
Cit7CisgICAgRXhjbHVzaXZlQWxnb3JpdGhtOjpsb2NrU2xvdyhtX3dvcmQpOworfQorCit2b2lk
IENvdW50aW5nTG9jazo6dW5sb2NrU2xvdygpCit7CisgICAgRXhjbHVzaXZlQWxnb3JpdGhtOjp1
bmxvY2tTbG93KG1fd29yZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9Db3VudGluZ0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9D
b3VudGluZ0xvY2suaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db3VudGluZ0xv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG0uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIFRoaXMgaXMgbW9zdGx5IGp1c3QgYSB3b3JkLXNpemVkIFdURjo6TG9jay4g
SXQgc3VwcG9ydHMgYmFzaWNhbGx5IGV2ZXJ5dGhpbmcgdGhhdCBsb2NrIHN1cHBvcnRzLiBCdXQg
YXMKKy8vIGEgYm9udXMsIGl0IGF0b21pY2FsbHkgY291bnRzIGxvY2soKSBjYWxscyBhbmQgYWxs
b3dzIHlvdSB0byBwZXJmb3JtIGFuIG9wdGltaXN0aWMgcmVhZCB0cmFuc2FjdGlvbiBieQorLy8g
Y29tcGFyaW5nIHRoZSBjb3VudCBiZWZvcmUgYW5kIGFmdGVyIHRoZSB0cmFuc2FjdGlvbi4gSWYg
YXQgdGhlIHN0YXJ0IG9mIHRoZSB0cmFuc2FjdGlvbiB0aGUgbG9jayBpcworLy8gbm90IGhlbGQg
YW5kIHRoZSBjb3VudCByZW1haW5zIHRoZSBzYW1lIHRocm91Z2hvdXQgdGhlIHRyYW5zYWN0aW9u
LCB0aGVuIHlvdSBrbm93IHRoYXQgbm9ib2R5IGNvdWxkCisvLyBoYXZlIG1vZGlmaWVkIHlvdXIg
ZGF0YSBzdHJ1Y3R1cmUgd2hpbGUgeW91IHJhbi4gWW91IGNhbiBldmVuIHVzZSB0aGlzIHRvIG9w
dGltaXN0aWNhbGx5IHJlYWQgcG9pbnRlcnMKKy8vIHRoYXQgY291bGQgYmVjb21lIGRhbmdsaW5n
IHVuZGVyIGNvbmN1cnJlbnQgd3JpdGVzLCBpZiB5b3UganVzdCByZXZhbGlkYXRlIHRoZSBjb3Vu
dCBldmVyeSB0aW1lIHlvdSdyZQorLy8gYWJvdXQgdG8gZG8gc29tZXRoaW5nIGRhbmdlcm91cy4K
Ky8vCisvLyBUaGlzIGlzIGxhcmdlbHkgaW5zcGlyZWQgYnkgU3RhbXBlZExvY2sgZnJvbSBKYXZh
OgorLy8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzgvZG9jcy9hcGkvamF2YS91dGls
L2NvbmN1cnJlbnQvbG9ja3MvQ291bnRpbmdMb2NrLmh0bWwKKy8vCisvLyBUaGlzIGlzIHNpbXBs
aWZpZWQgYSBsb3QgY29tcGFyZWQgdG8gU3RhbXBlZExvY2suIFVubGlrZSBTdGFtcGVkTG9jaywg
aXQgdXNlcyBhbiBleGNsdXNpdmUgbG9jayBhcyBhCisvLyBmYWxsYmFjay4gVGhlcmUgaXMgbm8g
d2F5IHRvIGFjcXVpcmUgYSBDb3VudGluZ0xvY2sgZm9yIHJlYWQuIFRoZSBvbmx5IHJlYWQgYWNj
ZXNzIGlzIHZpYSBvcHRpbWlzdGljCisvLyByZWFkIHRyYW5zYWN0aW9ucy4KKy8vCisvLyBDb3Vu
dGluZ0xvY2sgcHJvdmlkZXMgdHdvIHdheXMgb2YgZG9pbmcgb3B0aW1pc3RpYyByZWFkczoKKy8v
CisvLyAtIFRoZSBlYXN5IHdheSwgd2hlcmUgQ291bnRpbmdMb2NrIGRvZXMgYWxsIG9mIHRoZSBm
ZW5jaW5nIGZvciB5b3UuIFRoYXQgZmVuY2luZyBpcyBmcmVlIG9uIHg4NiBidXQKKy8vICAgc29t
ZXdoYXQgZXhwZW5zaXZlIG9uIEFSTS4KKy8vIC0gVGhlIGhhcmQgd2F5LCB3aGVyZSB5b3UgZG8g
ZmVuY2luZyB5b3Vyc2VsZiB1c2luZyBEZXBlbmRlbmN5LiBUaGlzIGFsbG93cyB5b3UgdG8gYmUg
ZmVuY2VsZXNzIG9uIGJvdGgKKy8vICAgeDg2IGFuZCBBUk0uCisvLworLy8gVGhlIGxhdHRlciBp
cyBpbXBvcnRhbnQgZm9yIHVzIGJlY2F1c2Ugc29tZSBHQyBwYXRocyBhcmUga25vd24gdG8gYmUg
c2Vuc2l0aXZlIHRvIGZlbmNlcyBvbiBBUk0uCisKK2NsYXNzIENvdW50aW5nTG9jayB7CisgICAg
dHlwZWRlZiB1bnNpZ25lZCBMb2NrVHlwZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIExv
Y2tUeXBlIGlzSGVsZEJpdCA9IDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBoYXNQ
YXJrZWRCaXQgPSAyOworICAgIHN0YXRpYyBjb25zdGV4cHIgTG9ja1R5cGUgbWFzayA9IGlzSGVs
ZEJpdCB8IGhhc1BhcmtlZEJpdDsKKyAgICBzdGF0aWMgY29uc3RleHByIExvY2tUeXBlIHNoaWZ0
ID0gMjsKKyAgICBzdGF0aWMgY29uc3RleHByIExvY2tUeXBlIHN0YW1wVW5pdCA9IDQ7CisgICAg
CisgICAgc3RydWN0IExvY2tIb29rcyB7CisgICAgICAgIHN0YXRpYyBMb2NrVHlwZSBsb2NrSG9v
ayhMb2NrVHlwZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsg
c3RhbXBVbml0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgTG9ja1R5cGUg
dW5sb2NrSG9vayhMb2NrVHlwZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICAgICAgc3Rh
dGljIExvY2tUeXBlIHBhcmtIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfQor
ICAgICAgICBzdGF0aWMgTG9ja1R5cGUgaGFuZG9mZkhvb2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlOyB9CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIExvY2tBbGdvcml0aG08TG9j
a1R5cGUsIGlzSGVsZEJpdCwgaGFzUGFya2VkQml0LCBMb2NrSG9va3M+IEV4Y2x1c2l2ZUFsZ29y
aXRobTsKKyAgICAKK3B1YmxpYzoKKyAgICBDb3VudGluZ0xvY2soKQorICAgIHsKKyAgICAgICAg
bV93b3JkLnN0b3JlUmVsYXhlZCgwKTsKKyAgICB9CisgICAgCisgICAgfkNvdW50aW5nTG9jaygp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHRyeUxvY2soKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEV4Y2x1c2l2ZUFsZ29yaXRobTo6dHJ5TG9jayhtX3dvcmQpOworICAgIH0KKworICAg
IHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIUV4Y2x1c2l2ZUFsZ29y
aXRobTo6bG9ja0Zhc3QobV93b3JkKSkpCisgICAgICAgICAgICBsb2NrU2xvdygpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIUV4
Y2x1c2l2ZUFsZ29yaXRobTo6dW5sb2NrRmFzdChtX3dvcmQpKSkKKyAgICAgICAgICAgIHVubG9j
a1Nsb3coKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hlbGQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEV4Y2x1c2l2ZUFsZ29yaXRobTo6aXNMb2NrZWQobV93b3JkKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNIZWxkKCk7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBvbmx5IHRoaW5nIHlvdSdyZSBhbGxv
d2VkIHRvIGluZmVyIGZyb20gdGhpcyB2YWx1ZSBpcyB0aGF0IGlmIGl0J3MgemVybywgdGhlbiB5
b3UgZGlkbid0IGdldAorICAgIC8vIGEgcmVhbCBzdGFtcC4KKyAgICBjbGFzcyBTdGFtcCB7Cisg
ICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX3ZhbHVlOyB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
U3RhbXAmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0K
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0YW1wJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOyB9CisgICAgICAgIAorICAgIHByaXZhdGU6Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBDb3VudGluZ0xvY2s7CisgICAgICAgIAorICAgICAgICBMb2Nr
VHlwZSBtX3ZhbHVlIHsgMCB9OworICAgIH07CisgICAgCisgICAgLy8gRXhhbXBsZSBvZiBob3cg
dG8gdXNlIHRoaXM6CisgICAgLy8KKyAgICAvLyAgICAgaW50IHJlYWQoKQorICAgIC8vICAgICB7
CisgICAgLy8gICAgICAgICBpZiAoQ291bnRpbmdMb2NrOjpTdGFtcCBzdGFtcCA9IG1fbG9jay50
cnlPcHRpbWlzdGljUmVhZCgpKSB7CisgICAgLy8gICAgICAgICAgICAgaW50IHZhbHVlID0gbV90
aGluZ3M7CisgICAgLy8gICAgICAgICAgICAgaWYgKG1fbG9jay52YWxpZGF0ZShzdGFtcCkpCisg
ICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsgLy8gc3VjY2VzcyEKKyAgICAvLyAg
ICAgICAgIH0KKyAgICAvLyAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KyAgICAvLyAgICAgICAgIGludCB2YWx1ZSA9IG1fdGhpbmdzOworICAgIC8vICAgICAgICAgcmV0
dXJuIHZhbHVlOworICAgIC8vICAgICB9CisgICAgLy8KKyAgICAvLyBJZiB0cnlPcHRpbWlzaXRj
UmVhZCgpIHJ1bnMgd2hlbiB0aGUgbG9jayBpcyBub3QgaGVsZCwgdGhpcyB0aHJlYWQgd2lsbCBy
dW4gYSBjcml0aWNhbCBzZWN0aW9uCisgICAgLy8gd2l0aG91dCBldmVyIHdyaXRpbmcgdG8gbWVt
b3J5LiBIb3dldmVyLCBvbiBBUk0sIHRoaXMgcmVxdWlyZXMgZmVuY2luZy4gV2UgdXNlIGEgbG9h
ZC1hY3F1aXJlIGZvcgorICAgIC8vIHRyeU9wdGltaXN0aWNSZWFkKCkuIFdlIGhhdmUgbm8gY2hv
aWNlIGJ1dCB0byB1c2UgdGhlIG1vcmUgZXhwZW5zaXZlIGBkbWIgaXNoYCBpbiB2YWxpZGF0ZSgp
LiBJZgorICAgIC8vIHlvdSB3YW50IHRvIGF2b2lkIHRoYXQsIHlvdSBjb3VsZCB0cnkgdG8gdXNl
IHRyeU9wdGltaXN0aWNGZW5jZWxlc3NSZWFkKCkuCisgICAgU3RhbXAgdHJ5T3B0aW1pc3RpY1Jl
YWQoKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gbV93b3JkLmxvYWQo
KTsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgIHJl
dHVybiBTdGFtcCgpOworICAgICAgICByZXR1cm4gZ2V0U3RhbXAoY3VycmVudFZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCB2YWxpZGF0ZShTdGFtcCBzdGFtcCkKKyAgICB7CisgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICBMb2NrVHlwZSBjdXJyZW50VmFsdWUgPSBt
X3dvcmQubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgcmV0dXJuIGdldFN0YW1wKGN1cnJlbnRWYWx1
ZSkgPT0gc3RhbXA7CisgICAgfQorICAgIAorICAgIC8vIEV4YW1wbGUgb2YgaG93IHRvIHVzZSB0
aGlzOgorICAgIC8vCisgICAgLy8gICAgIGludCByZWFkKCkKKyAgICAvLyAgICAgeworICAgIC8v
ICAgICAgICAgcmV0dXJuIG1fbG9jay5kb09wdGltaXplZFJlYWQoCisgICAgLy8gICAgICAgICAg
ICAgWyZdICgpIC0+IGludCB7CisgICAgLy8gICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IG1f
dGhpbmdzOworICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgLy8gICAg
ICAgICAgICAgfSk7CisgICAgLy8gICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIGF1dG8gZG9PcHRpbWl6ZWRSZWFkKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAg
ICBTdGFtcCBzdGFtcCA9IHRyeU9wdGltaXN0aWNSZWFkKCk7CisgICAgICAgIGlmIChzdGFtcCkg
eworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jKCk7CisgICAgICAgICAgICBpZiAodmFs
aWRhdGUoc3RhbXApKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICAgICAgbG9jaygpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGZ1bmMoKTsKKyAgICAgICAg
dW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8vIEV4
YW1wbGUgb2YgaG93IHRvIHVzZSB0aGlzOgorICAgIC8vCisgICAgLy8gICAgIGludCByZWFkKCkK
KyAgICAvLyAgICAgeworICAgIC8vICAgICAgICAgYXV0byByZXN1bHQgPSBtX2xvY2sudHJ5T3B0
aW1pc3RpY0ZlbmNlbGVzc1JlYWQoKTsKKyAgICAvLyAgICAgICAgIGlmIChDb3VudGluZ0xvY2s6
OlN0YW1wIHN0YW1wID0gcmVzdWx0LnZhbHVlKSB7CisgICAgLy8gICAgICAgICAgICAgRGVwZW5k
ZW5jeSBmZW5jZUJlZm9yZSA9IERlcGVuZGVuY3k6OmZlbmNlKHJlc3VsdC5pbnB1dCk7CisgICAg
Ly8gICAgICAgICAgICAgYXV0byogZmVuY2VkVGhpcyA9IGZlbmNlQmVmb3JlLmNvbnN1bWUodGhp
cyk7CisgICAgLy8gICAgICAgICAgICAgaW50IHZhbHVlID0gZmVuY2VkVGhpcy0+bV90aGluZ3M7
CisgICAgLy8gICAgICAgICAgICAgaWYgKG1fbG9jay5mZW5jZWxlc3NWYWxpZGF0ZShzdGFtcCwg
RGVwZW5kZW5jeTo6ZmVuY2UodmFsdWUpKSkKKyAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlOyAvLyBzdWNjZXNzIQorICAgIC8vICAgICAgICAgfQorICAgIC8vICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIC8vICAgICAgICAgaW50IHZhbHVlID0g
bV90aGluZ3M7CisgICAgLy8gICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgLy8gICAgIH0KKyAg
ICAvLworICAgIC8vIFVzZSB0aGlzIHRvIGNyZWF0ZSBhIHJlYWQgdHJhbnNhY3Rpb24gdXNpbmcg
ZGVwZW5kZW5jeSBjaGFpbnMgb25seS4gWW91IGhhdmUgdG8gYmUgY2FyZWZ1bCB0bworICAgIC8v
IHRocmVhZCB0aGUgZGVwZW5kZW5jeSBpbnB1dCAodGhlIGBpbnB1dGAgZmllbGQgdGhhdCB0aGUg
cmV0dXJucykgdGhyb3VnaCBhIERlcGVuZGVuY3ksIGFuZCB0aGVuCisgICAgLy8gdGhyZWFkIHRo
YXQgRGVwZW5kZW5jeSBpbnRvIGV2ZXJ5IGxvYWQgKGV4Y2VwdCBmb3IgbG9hZHMgdGhhdCBhcmUg
Y2hhc2luZyBwb2ludGVycyBsb2FkZWQgZnJvbQorICAgIC8vIGxvYWRzIHRoYXQgYWxyZWFkeSB1
c2VzIHRoYXQgZGVwZW5kZW5jeSkuIFRoZW4sIHRvIHZhbGlkYXRlIHRoZSByZWFkIHRyYW5zYWN0
aW9uLCB5b3UgaGF2ZSB0byBwYXNzCisgICAgLy8gYm90aCB0aGUgc3RhbXAgYW5kIGFub3RoZXIg
RGVwZW5kZW5jeSB0aGF0IGlzIGJhc2VkIG9uIHdoYXRldmVyIGxvYWRzIHlvdSB1c2VkIHRvIHBy
b2R1Y2UgdGhlCisgICAgLy8gb3V0cHV0LgorICAgIC8vCisgICAgLy8gT24gbm9uLUFSTSBwbGF0
Zm9ybXMsIHRoZSBEZXBlbmRlbmN5IG9iamVjdHMgZG9uJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGZv
ciBEZXBlbmRlbmN5OjpmZW5jZSwgd2hpY2gKKyAgICAvLyBpcyBhIGxvYWQtbG9hZCBmZW5jZS4g
VGhlIGlkaW9tIGFib3ZlIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIG9uIGJvdGggQVJNIGFuZCBUU08u
CisgICAgLy8KKyAgICAvLyBXQVJOSU5HOiBUaGlzIGNhbiBiZSBoYXJkIHRvIGdldCByaWdodC4g
UGxlYXNlIG9ubHkgdXNlIHRoaXMgZm9yIHZlcnkgc2hvcnQgY3JpdGljYWwgc2VjdGlvbnMgdGhh
dAorICAgIC8vIGFyZSBrbm93biB0byBiZSBzdWZmaWNpZW50bHkgcGVyZi1jcml0aWNhbCB0byBq
dXN0aWZ5IHRoZSByaXNrLgorICAgIElucHV0QW5kVmFsdWU8TG9ja1R5cGUsIFN0YW1wPiB0cnlP
cHRpbWlzdGljRmVuY2VsZXNzUmVhZCgpCisgICAgeworICAgICAgICBMb2NrVHlwZSBjdXJyZW50
VmFsdWUgPSBtX3dvcmQubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAm
IGlzSGVsZEJpdCkKKyAgICAgICAgICAgIHJldHVybiBpbnB1dEFuZFZhbHVlKGN1cnJlbnRWYWx1
ZSwgU3RhbXAoKSk7CisgICAgICAgIHJldHVybiBpbnB1dEFuZFZhbHVlKGN1cnJlbnRWYWx1ZSwg
Z2V0U3RhbXAoY3VycmVudFZhbHVlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZmVuY2VsZXNz
VmFsaWRhdGUoU3RhbXAgc3RhbXAsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKKyAgICB7CisgICAg
ICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IGRlcGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+bV93
b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIHJldHVybiBnZXRTdGFtcChjdXJyZW50VmFsdWUp
ID09IHN0YW1wOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcHRpbWlzdGlj
RnVuYywgdHlwZW5hbWUgRnVuYz4KKyAgICBhdXRvIGRvT3B0aW1pemVkRmVuY2VsZXNzUmVhZChj
b25zdCBPcHRpbWlzdGljRnVuYyYgb3B0aW1pc3RpY0Z1bmMsIGNvbnN0IEZ1bmMmIGZ1bmMpCisg
ICAgeworICAgICAgICBhdXRvIHN0YW1wID0gdHJ5T3B0aW1pc3RpY0ZlbmNlbGVzc1JlYWQoKTsK
KyAgICAgICAgaWYgKHN0YW1wLnZhbHVlKSB7CisgICAgICAgICAgICBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3kgPSBEZXBlbmRlbmN5OjpmZW5jZShzdGFtcC5pbnB1dCk7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IG9wdGltaXN0aWNGdW5jKGRlcGVuZGVuY3ksIHN0YW1wLnZhbHVlKTsKKyAgICAg
ICAgICAgIGlmIChmZW5jZWxlc3NWYWxpZGF0ZShzdGFtcC52YWx1ZSwgZGVwZW5kZW5jeSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBsb2NrKCk7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuYygpOworICAgICAgICB1bmxvY2soKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGxvY2tTbG93KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5s
b2NrU2xvdygpOworICAgIAorICAgIFN0YW1wIGdldFN0YW1wKExvY2tUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgU3RhbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVl
IHwgbWFzazsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgQXRvbWlj
PExvY2tUeXBlPiBtX3dvcmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpDb3VudGluZ0xvY2s7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNl
L1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGFw
cGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICAvLyBSZW1vdmUgYW5k
IHJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMg
dHJ1ZS4gUmV0dXJucyBhIG51bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxi
YWNrIGFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cisg
ICAgVCB0YWtlRmlyc3QoY29uc3QgRnVuYyYpOworCiAgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4g
dGhlIGxhc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0
dXJucyBhIG51bGwgdmVyc2lvbiBvZgogICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5
cyByZXR1cm5zIGZhbHNlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01NzEsNiAr
NTc2LDI1IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXAKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUZpcnN0KGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVk
IHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAg
ICBUIGNhbmRpZGF0ZSA9IHRha2VGaXJzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUp
KSB7CisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBwcmVwZW5k
KHRha2VMYXN0KCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQor
ICAgICAgICBjb3VudCsrOworICAgICAgICBhcHBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAg
ICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSBUIERlcXVlPFQs
IGlubGluZUNhcGFjaXR5Pjo6dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICB1bnNp
Z25lZCBjb3VudCA9IDA7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsy
MzQsNyBAQCB1c2luZyBXVEY6OmZhc3RBbGlnbmVkRnJlZTsKICNkZWZpbmUgV1RGX1BSSVZBVEVf
SU5MSU5FIGlubGluZQogI2VuZGlmCiAKLSNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQg
XAotcHVibGljOiBcCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogICAg
IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAg
IHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSBcCiAg
ICAgXApAQCAtMjYzLDcgKzI2MiwxNSBAQCBwdWJsaWM6IFwKICAgICAgICAgQVNTRVJUKGxvY2F0
aW9uKTsgXAogICAgICAgICByZXR1cm4gbG9jYXRpb247IFwKICAgICB9IFwKKworI2RlZmluZSBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBcCitwdWJsaWM6IFwKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRF9JTVBMIFwKIHByaXZhdGU6IFwKIHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9y
Y2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KIAorI2RlZmluZSBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQgXAorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAordHlwZWRl
ZiBpbnQgX190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybworCiAjZW5k
aWYgLyogV1RGX0Zhc3RNYWxsb2NfaCAqLwpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykK
KysrIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcs
MTYgQEAKICNpbmNsdWRlICJMb2NrLmgiCiAKICNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobUlu
bGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTaG90UHJvZmlsZXIuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBwcm9maWxlTG9ja0NvbnRlbnRpb24gPSBm
YWxzZTsKKwogdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogeworICAgIGlmIChwcm9maWxlTG9j
a0NvbnRlbnRpb24pCisgICAgICAgIFNUQUNLX1NIT1RfUFJPRklMRSg0LCAyLCA1KTsKICAgICBE
ZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0KIApJbmRleDogU291cmNl
L1dURi93dGYvTG9ja0FsZ29yaXRobS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xv
Y2tBbGdvcml0aG0uaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvTG9ja0Fs
Z29yaXRobS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxNSBAQCBuYW1lc3BhY2UgV1RG
IHsKIC8vIGZpZWxkLiBUaGUgbGltaXQgb2Ygb25lIGxvY2sgaXMgZHVlIHRvIHRoZSB1c2Ugb2Yg
dGhlIGZpZWxkJ3MgYWRkcmVzcyBhcyBhIGtleSB0byBmaW5kIHRoZSBsb2NrJ3MKIC8vIHF1ZXVl
LgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2Nr
VHlwZSBoYXNQYXJrZWRCaXQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK3N0cnVjdCBF
bXB0eUxvY2tIb29rcyB7CisgICAgc3RhdGljIExvY2tUeXBlIGxvY2tIb29rKExvY2tUeXBlIHZh
bHVlKSB7IHJldHVybiB2YWx1ZTsgfQorICAgIHN0YXRpYyBMb2NrVHlwZSB1bmxvY2tIb29rKExv
Y2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfQorICAgIHN0YXRpYyBMb2NrVHlwZSBwYXJr
SG9vayhMb2NrVHlwZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICBzdGF0aWMgTG9ja1R5
cGUgaGFuZG9mZkhvb2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBo
YXNQYXJrZWRCaXQsIHR5cGVuYW1lIEhvb2tzID0gRW1wdHlMb2NrSG9va3M8TG9ja1R5cGU+Pgog
Y2xhc3MgTG9ja0FsZ29yaXRobSB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogICAgIHN0YXRpYyBjb25zdCBMb2NrVHlwZSBtYXNrID0gaXNIZWxkQml0IHwgaGFzUGFy
a2VkQml0OwpAQCAtNDMsNyArNTEsNyBAQCBjbGFzcyBMb2NrQWxnb3JpdGhtIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBs
b2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBp
c0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAgICAgICByZXR1cm4gbG9j
ay5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIEhvb2tzOjpsb2NrSG9vayhpc0hlbGRCaXQpLCBzdGQ6
Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbG9j
a0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKQEAgLTUzLDYgKzYxLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIGlzSGVsZEJpdCkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIHZhbHVlIHw9IGlzSGVsZEJpdDsKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IEhvb2tzOjpsb2NrSG9vayh2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSk7CkBAIC02NywxNyArNzYsMTcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBib29sIHRyeUxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKICAgICB7CiAgICAgICAgIGZv
ciAoOzspIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0
ZVZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0g
bG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICAgICAgaWYgKGN1
cnJlbnRWYWx1ZSAmIGlzSGVsZEJpdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUs
IGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUp
KQorICAgICAgICAgICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50VmFsdWUs
IEhvb2tzOjpsb2NrSG9vayhjdXJyZW50VmFsdWUgfCBpc0hlbGRCaXQpLCBzdGQ6Om1lbW9yeV9v
cmRlcl9hY3F1aXJlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIHN0YXRpYyBib29sIHVubG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRvbWljPExv
Y2tUeXBlPiYgbG9jaykKICAgICB7Ci0gICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgICAg
cmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIEhvb2tzOjp1bmxvY2tI
b29rKDApLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKICAgICB9CiAgICAgCiAgICAgc3Rh
dGljIGJvb2wgdW5sb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQpAQCAtODcsNiArOTYs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIG1hc2spICE9IGlzSGVs
ZEJpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
IHZhbHVlICY9IH5pc0hlbGRCaXQ7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBIb29rczo6dW5s
b2NrSG9vayh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0xvY2tBbGdvcml0aG1JbmxpbmVzLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJj
ZS9XVEYvd3RmL0xvY2tBbGdvcml0aG1JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmtpbmdMb3QuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0zNSw4ICszNiw4IEBACiAKIG5hbWVzcGFj
ZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0
LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQ+Ci12b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlz
SGVsZEJpdCwgaGFzUGFya2VkQml0Pjo6bG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaykK
K3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBl
IGhhc1BhcmtlZEJpdCwgdHlwZW5hbWUgSG9va3M+Cit2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5
cGUsIGlzSGVsZEJpdCwgaGFzUGFya2VkQml0LCBIb29rcz46OmxvY2tTbG93KEF0b21pYzxMb2Nr
VHlwZT4mIGxvY2spCiB7CiAgICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJl
IG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CkBAIC00NCwxNSArNDUsMTcgQEAgdm9pZCBM
b2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRCaXQsIAogICAgIHVuc2lnbmVkIHNwaW5Db3Vu
dCA9IDA7CiAgICAgCiAgICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRl
VmFsdWUgPSBsb2NrLmxvYWQoKTsKKyAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gbG9j
ay5sb2FkKCk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFy
Z2UgaW4uCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAg
ICAgICAgICAmJiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3Vy
cmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmICghKGN1cnJlbnRWYWx1ZSAmIGlzSGVsZEJpdCkpIHsKKyAgICAgICAgICAgIGlmIChsb2Nr
LmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFZhbHVlLCBIb29rczo6bG9ja0hvb2soY3VycmVu
dFZhbHVlIHwgaXNIZWxkQml0KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkg
cGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBz
cGluIGFyb3VuZC4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJp
dCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1
ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CiAgICAgICAgICAg
ICBzcGluQ291bnQrKzsKICAgICAgICAgICAgIFRocmVhZDo6eWllbGQoKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtNjAsMTMgKzYzLDI1IEBAIHZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlw
ZSwgaXNIZWxkQml0LCAKIAogICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkg
c2V0dGluZyB0aGUgcGFya2VkIGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBh
cm91bmQKICAgICAgICAgLy8gaWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFp
bGVkIGF0IHNldHRpbmcgaXQuCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQ
YXJrZWRCaXQpCi0gICAgICAgICAgICAmJiAhbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJl
bnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGhhc1BhcmtlZEJpdCkp
IHsKKyAgICAgICAgICAgIExvY2tUeXBlIG5ld1ZhbHVlID0gSG9va3M6OnBhcmtIb29rKGN1cnJl
bnRWYWx1ZSB8IGhhc1BhcmtlZEJpdCk7CisgICAgICAgICAgICBpZiAoIWxvY2suY29tcGFyZUV4
Y2hhbmdlV2VhayhjdXJyZW50VmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoIShjdXJyZW50VmFsdWUgJiBpc0hlbGRCaXQpKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJMb2NrIG5vdCBoZWxkIVxuIik7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGlmICghKGN1cnJlbnRW
YWx1ZSAmIGhhc1BhcmtlZEJpdCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkxvY2sgbm90IHBh
cmtlZCFcbiIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVs
ZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KICAg
ICAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAgIFBh
cmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZsb2NrLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxk
Qml0IHwgaGFzUGFya2VkQml0KTsKKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQ
YXJrKCZsb2NrLCBjdXJyZW50VmFsdWUpOwogICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBh
cmtlZCkgewogICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUb2tlbj4ocGFya1Jlc3Vs
dC50b2tlbikpIHsKICAgICAgICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKQEAgLTg3LDggKzEw
Miw4IEBAIHZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKICAgICB9CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tU
eXBlIGhhc1BhcmtlZEJpdD4KLXZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0
LCBoYXNQYXJrZWRCaXQ+Ojp1bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJu
ZXNzIGZhaXJuZXNzKQordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVs
ZEJpdCwgTG9ja1R5cGUgaGFzUGFya2VkQml0LCB0eXBlbmFtZSBIb29rcz4KK3ZvaWQgTG9ja0Fs
Z29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCBoYXNQYXJrZWRCaXQsIEhvb2tzPjo6dW5sb2Nr
U2xvdyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVzcykKIHsKICAgICAv
LyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWls
ZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVyZSBpcwogICAgIC8vIHNvbWVvbmUgcGFya2Vk
LiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBq
dXN0IGhlbGQsIGl0IGNvdWxkCkBAIC0xMDAsNyArMTE1LDcgQEAgdm9pZCBMb2NrQWxnb3JpdGht
PExvY2tUeXBlLCBpc0hlbGRCaXQsIAogICAgICAgICAgICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1h
c2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKICAgICAgICAgCiAgICAgICAgIGlm
ICgob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAo
bG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgb2xkQnl0ZVZhbHVlICYgfmlz
SGVsZEJpdCkpCisgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZEJ5
dGVWYWx1ZSwgSG9va3M6OnVubG9ja0hvb2sob2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CkBAIC0xMjAsMTIgKzEzNSwyMSBAQCB2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVs
ZEJpdCwgCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZh
aXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBs
b2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGlu
Zy4KKyAgICAgICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoTG9ja1R5cGUmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMb2NrVHlwZSBuZXdWYWx1ZSA9IEhvb2tzOjpoYW5kb2ZmSG9vayh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09IHZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0SGFuZG9mZjsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKICAgICAg
ICAgICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgJj0gfm1hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IEhvb2tzOjp1bmxvY2tIb29rKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlIHw9IGhhc1BhcmtlZEJpdDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpJbmRleDogU291cmNlL1dURi93dGYvTG9ja2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9ja2VyLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3Rm
L0xvY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZp
bmUgTG9ja2VyX2gKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC02NCw2ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIH5Mb2NrZXIoKQogICAgIHsKKyAg
ICAgICAgY29tcGlsZXJGZW5jZSgpOwogICAgICAgICBpZiAobV9sb2NrYWJsZSkKICAgICAgICAg
ICAgIG1fbG9ja2FibGUtPnVubG9jaygpOwogICAgIH0KQEAgLTEwOCw2ICsxMTAsNyBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgaWYgKG1fbG9ja2FibGUpCiAgICAgICAgICAgICBtX2xvY2th
YmxlLT5sb2NrKCk7CisgICAgICAgIGNvbXBpbGVyRmVuY2UoKTsKICAgICB9CiAgICAgCiAgICAg
VCogbV9sb2NrYWJsZTsKQEAgLTEyMiw2ICsxMjUsMTIgQEAgTG9ja2VyPExvY2tUeXBlPiBob2xk
TG9jayhMb2NrVHlwZSYgbG9jawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK0xv
Y2tlcjxMb2NrVHlwZT4gaG9sZExvY2tJZihMb2NrVHlwZSYgbG9jaywgYm9vbCBwcmVkaWNhdGUp
Cit7CisgICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT4ocHJlZGljYXRlID8gJmxvY2sgOiBudWxs
cHRyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CiBMb2NrZXI8TG9ja1R5cGU+
IHRyeUhvbGRMb2NrKExvY2tUeXBlJiBsb2NrKQogewogICAgIHJldHVybiBMb2NrZXI8TG9ja1R5
cGU+Ojp0cnlMb2NrKGxvY2spOwpAQCAtMTM0LDUgKzE0Myw2IEBAIHVzaW5nIFdURjo6TG9ja2Vy
OwogdXNpbmcgV1RGOjpOb0xvY2tpbmdOZWNlc3NhcnlUYWc7CiB1c2luZyBXVEY6Ok5vTG9ja2lu
Z05lY2Vzc2FyeTsKIHVzaW5nIFdURjo6aG9sZExvY2s7Cit1c2luZyBXVEY6OmhvbGRMb2NrSWY7
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDIyNTQwMykKKysr
IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiAr
MTc0LDEzIEBAIHByaXZhdGU6CiAKIC8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFscmVhZHkgcmVm
ZXIgdG8gYSBmdW5jdG9yIGJ5IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBsaWZldGltZSBp
cwogLy8gZ29vZC4gVGhpcyBqdXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhhdCBwb2ludHMg
dG8geW91ciBmdW5jdG9yLgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGFsd2F5cyB3cm9uZzoK
Ky8vCisvLyBhdXRvIHJlZiA9IHNjb3BlZExhbWJkYVJlZihbLi4uXSAoLi4uKSB7Li4ufSk7Cisv
LworLy8gQmVjYXVzZSB0aGUgc2NvcGVkTGFtYmRhUmVmIHdpbGwgcmVmZXIgdG8gdGhlIGxhbWJk
YSBieSByZWZlcmVuY2UsIGFuZCB0aGUgbGFtYmRhIHdpbGwgZGllIGFmdGVyIHRoZQorLy8gc2Vt
aWNvbG9uLiBVc2Ugc2NvcGVkTGFtYmRhKCkgaW4gdGhhdCBjYXNlLgogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgogU2NvcGVkTGFtYmRhUmVmRnVuY3Rv
cjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYVJlZihjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQogewpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBA
QCBuYW1lc3BhY2UgV1RGIHsKIC8vIHN0YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJl
IG1vcmUgbmF0dXJhbCBpZiB5b3Ugd2FudCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQK
IC8vIHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2hhcmVkVGFzazsKLXRlbXBsYXRlPHR5
cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTaGFy
ZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxTaGFyZWRUYXNrPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPj4gewor
dGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRU
eXBlcz4KK2NsYXNzIFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4u
Lik+IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0
VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRS
ZXN1bHRUeXBlIFJlc3VsdFR5cGU7CisgICAgCiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZp
cnR1YWwgflNoYXJlZFRhc2soKSB7IH0KIApJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tTaG90
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTaG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgU3RhY2tTaG90IHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3QoKSB7IH0K
KyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFN0YWNrU2hvdChzaXplX3Qgc2l6ZSkKKyAgICAgICAg
OiBtX3NpemUoc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgICBt
X2FycmF5ID0gc3RkOjptYWtlX3VuaXF1ZTx2b2lkKltdPihzaXplKTsKKyAgICAgICAgICAgIGlu
dCBpbnRTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIFdURkdldEJhY2t0cmFjZShtX2FycmF5Lmdl
dCgpLCAmaW50U2l6ZSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxz
aXplX3Q+KGludFNpemUpIDw9IHNpemUpOworICAgICAgICAgICAgbV9zaXplID0gaW50U2l6ZTsK
KyAgICAgICAgICAgIGlmICghbV9zaXplKQorICAgICAgICAgICAgICAgIG1fYXJyYXkgPSBudWxs
cHRyOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9hcnJheShkZWxldGVkVmFsdWVBcnJheSgp
KQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90
JiBvcGVyYXRvcj0oY29uc3QgU3RhY2tTaG90JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjx2b2lkKltdPiBuZXdBcnJheSA9IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4o
b3RoZXIubV9zaXplKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG90aGVyLm1fc2l6ZTsgaS0t
OykKKyAgICAgICAgICAgIG5ld0FycmF5W2ldID0gb3RoZXIubV9hcnJheVtpXTsKKyAgICAgICAg
bV9zaXplID0gb3RoZXIubV9zaXplOworICAgICAgICBtX2FycmF5ID0gV1RGTW92ZShuZXdBcnJh
eSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgU3RhY2tTaG90KGNv
bnN0IFN0YWNrU2hvdCYgb3RoZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAg
IH0KKyAgICAKKyAgICB2b2lkKiogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LmdldCgp
OyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2FycmF5OyB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9zaXplICE9IG90aGVyLm1fc2l6ZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3NpemU7IGkt
LTspIHsKKyAgICAgICAgICAgIGlmIChtX2FycmF5W2ldICE9IG90aGVyLm1fYXJyYXlbaV0pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Cisg
ICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3NpemU7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gbV9zaXplOyBpLS07KQorICAgICAgICAgICAgcmVzdWx0IF49IFB0
ckhhc2g8dm9pZCo+OjpoYXNoKG1fYXJyYXlbaV0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc2l6ZSAmJiBtX2FycmF5LmdldCgpID09
IGRlbGV0ZWRWYWx1ZUFycmF5KCk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgU3BlY3RydW08
PiBoYXBweS4KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBTdGFja1Nob3QmKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCoqIGRlbGV0ZWRW
YWx1ZUFycmF5KCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqKj4oc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PigxKSk7IH0KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCpbXT4gbV9hcnJh
eTsKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworfTsKKworc3RydWN0IFN0YWNrU2hvdEhhc2gg
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0YWNrU2hvdCYgc2hvdCkgeyByZXR1
cm4gc2hvdC5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdGFja1Nob3Qm
IGEsIGNvbnN0IFN0YWNrU2hvdCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0
IERlZmF1bHRIYXNoPFN0YWNrU2hvdD4geworICAgIHR5cGVkZWYgU3RhY2tTaG90SGFzaCBIYXNo
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFN0YWNrU2hvdD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
U3RhY2tTaG90PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9TdGFja1Nob3RQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0
YWNrU2hvdFByb2ZpbGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU3RhY2tT
aG90UHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8
d3RmL1Byb2Nlc3NJRC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorI2luY2x1ZGUgPHd0
Zi9TdGFja1RyYWNlLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdC5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKK2NsYXNzIFN0YWNrU2hvdFByb2ZpbGVyIHsKK3B1YmxpYzoKKyAgICBTdGFja1Nob3RQ
cm9maWxlcih1bnNpZ25lZCBudW1GcmFtZXMsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCwgdW5zaWdu
ZWQgc3RhY2tzVG9SZXBvcnQpCisgICAgICAgIDogbV9udW1GcmFtZXMobnVtRnJhbWVzKQorICAg
ICAgICAsIG1fZnJhbWVzVG9Ta2lwKGZyYW1lc1RvU2tpcCkKKyAgICAgICAgLCBtX3N0YWNrc1Rv
UmVwb3J0KHN0YWNrc1RvUmVwb3J0KQorICAgIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIlN0
YWNrU2hvdFByb2ZpbGVyIiwgW3RoaXNdICgpIHsgcnVuKCk7IH0pOworICAgIH0KKworICAgIC8v
IE5FVkVSX0lOTElORSBzbyB0aGF0IGZyYW1lc1RvU2tpcCBpcyBwcmVkaWN0YWJsZS4KKyAgICBO
RVZFUl9JTkxJTkUgdm9pZCBwcm9maWxlKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgbV9wcm9maWxlLmFkZChTdGFja1Nob3QobV9udW1G
cmFtZXMgKyBtX2ZyYW1lc1RvU2tpcCkpOworICAgICAgICBtX3RvdGFsQ291bnQrKzsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIE5PX1JFVFVSTiB2b2lkIHJ1bigpCisgICAgeworICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBzbGVlcCgxX3MpOworICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgYXV0byBsaXN0ID0gbV9wcm9m
aWxlLmJ1aWxkTGlzdCgpOworICAgICAgICAgICAgZGF0YUxvZygiXG5Ib3R0ZXN0IHN0YWNrcyBp
biAiLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCksICI6XG4iKTsKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBsaXN0LnNpemUoKSwgY291bnQgPSAwOyBpLS0gJiYgY291bnQgPCBtX3N0YWNrc1Rv
UmVwb3J0OyBjb3VudCsrKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZW50cnkgPSBsaXN0W2ld
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuVG9wICMiLCBjb3VudCArIDEsICIgc3RhY2s6
ICIsIGVudHJ5LmNvdW50ICogMTAwIC8gbV90b3RhbENvdW50LCAiJVxuIik7CisgICAgICAgICAg
ICAgICAgU3RhY2tUcmFjZSB0cmFjZShlbnRyeS5rZXkuYXJyYXkoKSArIG1fZnJhbWVzVG9Ta2lw
LCBlbnRyeS5rZXkuc2l6ZSgpIC0gbV9mcmFtZXNUb1NraXApOworICAgICAgICAgICAgICAgIGRh
dGFMb2codHJhY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBXb3JkTG9jayBtX2xvY2s7CisgICAgU3BlY3Ry
dW08U3RhY2tTaG90LCBkb3VibGU+IG1fcHJvZmlsZTsKKyAgICBkb3VibGUgbV90b3RhbENvdW50
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRnJhbWVzOworICAgIHVuc2lnbmVkIG1fZnJhbWVz
VG9Ta2lwOworICAgIHVuc2lnbmVkIG1fc3RhY2tzVG9SZXBvcnQ7Cit9OworCisjZGVmaW5lIFNU
QUNLX1NIT1RfUFJPRklMRShudW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tzVG9SZXBvcnQp
IGRvIHsgXAorICAgIHN0YXRpYyBTdGFja1Nob3RQcm9maWxlciogc3RhY2tTaG90UHJvZmlsZXI7
IFwKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhY2tTaG90UHJvZmlsZXJPbmNlRmxhZzsg
XAorICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWcsIFtdIHsgc3Rh
Y2tTaG90UHJvZmlsZXIgPSBuZXcgU3RhY2tTaG90UHJvZmlsZXIobnVtRnJhbWVzLCBmcmFtZXNU
b1NraXAsIHN0YWNrc1RvUmVwb3J0KTsgfSk7IFwKKyAgICBzdGFja1Nob3RQcm9maWxlci0+cHJv
ZmlsZSgpOyBcCit9IHdoaWxlIChmYWxzZSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3Vs
ZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlzIGNo
YW5nZSBpcyBiZXN0IHRlc3RlZCB1c2luZyBET00tR0MtaW50ZW5zaXZlCisgICAgICAgIGJlbmNo
bWFya3MgbGlrZSBTcGVlZG9tZXRlciBhbmQgRHJvbWFlby4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgcGFyYWxsZWxpemVzIHRoZSBET00ncyBvdXRwdXQgY29uc3RyYWludCwgYW5kIG1ha2VzIHNv
bWUgc21hbGwgY2hhbmdlcyB0byBtYWtlIHRoaXMgbW9yZQorICAgICAgICBzY2FsYWJsZS4KKwor
ICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
aDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVv
dXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NR0NP
dXRwdXRDb25zdHJhaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01HQ091dHB1
dENvbnN0cmFpbnQ6OkRPTUdDT3V0cHV0Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01HQ091dHB1dENvbnN0cmFpbnQ6On5ET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0lt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmV2ZW50VGFyZ2V0RGF0YUNv
bmN1cnJlbnRseSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVFdmVudFRhcmdldERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEpOgorCiAy
MDE3LTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgSW50ZXJuYWxzLnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXIsIGFuZCB0aGUgYWJpbGl0eSB0byBy
ZXN0YXJ0IHNlcnZpY2Ugd29ya2VycyBmb3IgcG9zdE1lc3NhZ2UuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTMyMSw2ICszMjEsNyBAQCBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3Jp
cHRMb2FkZXIuY3BwCiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAogYmluZGlu
Z3MvanMvQ2FsbFRyYWNlci5jcHAKIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorYmluZGluZ3Mv
anMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxk
LmNwcAogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hl
YXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVN
YXJraW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorI3ByYWdt
YSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
aD4KKwpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGlu
Z1RpbWVvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVu
dCkKQEAgLTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9WaXNpdGluZ1RpbWVvdXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzUxLDYgKzM1MSw3IEBACiAJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQ
b2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
NzE2NkUxQzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4QjQ1NzIxREMzRkJBMzAwNDQzQzNG
IC8qIEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTcxMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CiAJCTBGOEI0NTc2MURDNDFEQkEwMDQ0
M0MzRiAvKiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAv
KiBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKKwkJMEY5REFBMEYxRkQx
QzY2QTAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIyIC8q
IERPTUdDT3V0cHV0Q29uc3RyYWludC5oICovOyB9OwogCQkwRkEyNEQ3QTE2MkRGOTE5MDBBM0Y0
QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xh
eWVyVXBkYXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQjYyNTJGMThERTFCMTUwMEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjI1MkQxOERF
MUIxNTAwQTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8q
IFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI4ODkwODE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNTQ0Niw2ICs1NDQ3LDggQEAKIAkJMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8q
IEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEEzOTUxRUYxQjEwNTAwRkJBRkZCIC8qIEpTRE9NUXVhZEN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWRD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3QTY1NzE1NURBODFF
MDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERPTUdDT3V0cHV0Q29uc3RyYWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NR0NPdXRwdXRDb25zdHJhaW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTA4NTJCMUU2RkI1NUEwMDk3NUZERCAv
KiBDU1NQcm9wZXJ0aWVzLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGggPSBDU1NQcm9wZXJ0aWVzLmpzb247IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFw
aGljc0xheWVyVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmFwaGljc0xheWVyVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5ODAsNiArMjI5ODMsOCBAQAogCQkJCTk1MjA3
NjAyMUYyNjc1RjkwMDdEMkFBQiAvKiBDYWxsVHJhY2VyVHlwZXMuaCAqLywKIAkJCQkwRjYwRjMy
OTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURGQkIx
MDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICovLAorCQkJCTBGOURBQTBDMUZEMUM2NjMwMDc5QzVC
MiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGOURBQTBFMUZEMUM2NjQw
MDc5QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCAqLywKIAkJCQk3QzUxNkFEMjFGMzUy
NTIwMDAzNEI2QkYgLyogRE9NUHJvbWlzZVByb3h5LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0
RDAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5jcHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIx
RTAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5oICovLApAQCAtMjc1NDcsNiArMjc1NTIsNyBA
QAogCQkJCTUxOEY1MDA0MTk0Q0FDM0EwMDgxQkFBRSAvKiBKU0dhbWVwYWRCdXR0b24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9w
b3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5REFBMEYxRkQxQzY2QTAwNzlDNUIyIC8q
IERPTUdDT3V0cHV0Q29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQTdDMUYxODgz
MjJGQzAwQzk1NEI1IC8qIEpTR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgy
Qjc1MjExOThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJh
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCisK
KyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFwSW5s
aW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgorI2luY2x1
ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlu
bGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworRE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091
dHB1dENvbnN0cmFpbnQoVk0mIHZtLCBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSkKKyAgICA6
IE1hcmtpbmdDb25zdHJhaW50KCJEb21vIiwgIkRPTSBPdXRwdXQiLCBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6U2VsZG9tR3JleWVkLCBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQsIENv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpCisgICAgLCBtX3ZtKHZtKQorICAgICwgbV9j
bGllbnREYXRhKGNsaWVudERhdGEpCisgICAgLCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKHZtLmhl
YXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSkKK3sKK30KKworRE9NR0NPdXRwdXRDb25zdHJh
aW50Ojp+RE9NR0NPdXRwdXRDb25zdHJhaW50KCkKK3sKK30KKworQ29uc3RyYWludFBhcmFsbGVs
aXNtIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKQorewor
ICAgIEhlYXAmIGhlYXAgPSBtX3ZtLmhlYXA7CisgICAgCisgICAgaWYgKGhlYXAubXV0YXRvckV4
ZWN1dGlvblZlcnNpb24oKSA9PSBtX2xhc3RFeGVjdXRpb25WZXJzaW9uKQorICAgICAgICByZXR1
cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworICAgIAorICAgIG1fbGFzdEV4
ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlQobV90YXNrcy5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50RGF0YS5m
b3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAorICAgICAgICBbJl0gKFN1YnNwYWNlJiBzdWJz
cGFjZSkgeworICAgICAgICAgICAgYXV0byBmdW5jID0gW10gKFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBIZWFwQ2VsbCogaGVhcENlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CisgICAgICAgICAgICAgICAg
SlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOworICAgICAgICAg
ICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKHZpc2l0b3Iudm0oKSktPnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMoY2VsbCwgdmlzaXRvcik7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX3Rhc2tzLmFwcGVuZChzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbEluUGFyYWxs
ZWwoZnVuYykpOworICAgICAgICB9KTsKKyAgICAKKyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFs
bGVsaXNtOjpQYXJhbGxlbDsKK30KKyAgICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWlu
dDo6ZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAo
YXV0byYgdGFzayA6IG1fdGFza3MpCisgICAgICAgIHRhc2stPnJ1bih2aXNpdG9yKTsKK30KKyAg
ICAgICAgCit2b2lkIERPTUdDT3V0cHV0Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrSW1w
bChTbG90VmlzaXRvciYpCit7CisgICAgbV90YXNrcy5jbGVhcigpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0
cHV0Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+Cisj
aW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNWTUNsaWVudERhdGE7CisKK2NsYXNzIERPTUdD
T3V0cHV0Q29uc3RyYWludCA6IHB1YmxpYyBKU0M6Ok1hcmtpbmdDb25zdHJhaW50IHsKK3B1Ymxp
YzoKKyAgICBET01HQ091dHB1dENvbnN0cmFpbnQoSlNDOjpWTSYsIEpTVk1DbGllbnREYXRhJik7
CisgICAgfkRPTUdDT3V0cHV0Q29uc3RyYWludCgpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpT
Qzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9yJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKEpTQzo6U2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworICAgIEpTVk1D
bGllbnREYXRhJiBtX2NsaWVudERhdGE7CisgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0aW9uVmVy
c2lvbjsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4+
IG1fdGFza3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxMiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAorI2luY2x1ZGUgIkRP
TUdDT3V0cHV0Q29uc3RyYWludC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgPGhlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxo
ZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgot
I2luY2x1ZGUgPGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAv
TWFya2VkQmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4K
LSNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZN
Lmg+CkBAIC03NCw0MyArNzIsNyBAQCB2b2lkIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29y
bGQoVk0qCiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBuZXcgSlNWTUNsaWVudERh
dGEoKnZtKTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IGNsaWVudERhdGE7IC8vIH5WTSBkZWxldGVz
IHRoaXMgcG9pbnRlci4KICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtpbmdDb25zdHJhaW50PigKLSAgICAgICAgIldjb2MiLCAiV2ViQ29yZSBPdXRwdXQg
Q29uc3RyYWludHMiLAotICAgICAgICBbdm0sIGNsaWVudERhdGEsIGxhc3RFeGVjdXRpb25WZXJz
aW9uID0gdm0tPmhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKV0KLSAgICAgICAgKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0tPmhlYXA7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCkgPT0gbGFzdEV4ZWN1dGlvblZl
cnNpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsK
LQotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2UgdGhlIHZpc2l0IGNvdW50IGhlcmUg
b3Vyc2VsdmVzLiBXZSBuZWVkIHRvIGtub3cgdGhhdCBpZiB0aGlzIGFkZHMKLSAgICAgICAgICAg
IC8vIG9wYXF1ZSByb290cyB0aGVuIHdlIGNhbm5vdCBkZWNsYXJlIHRlcm1pbmF0aW9uIHlldC4g
VGhlIHdheSB3ZSBzaWduYWwgdGhpcyB0byB0aGUKLSAgICAgICAgICAgIC8vIGNvbnN0cmFpbnQg
c29sdmVyIGlzIGJ5IGFkZGluZyB0byB0aGUgdmlzaXQgY291bnQuCi0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHNpemVfdCBudW1PcGFxdWVSb290c0JlZm9yZSA9IGhlYXAubnVtT3BhcXVlUm9v
dHMoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXJhbGxlbCEKLSAgICAg
ICAgICAgIHVuc2lnbmVkIG51bVJldmlzaXRlZCA9IDA7Ci0gICAgICAgICAgICBjbGllbnREYXRh
LT5mb3JFYWNoT3V0cHV0Q29uc3RyYWludFNwYWNlKAotICAgICAgICAgICAgICAgIFsmXSAoU3Vi
c3BhY2UmIHN1YnNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNwYWNlLmZvckVhY2hN
YXJrZWRDZWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogaGVhcENl
bGwsIEhlYXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxs
KiBjZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCp2bSktPnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHMoY2VsbCwgc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVJl
dmlzaXRlZCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKCIoIiwgbnVtUmV2aXNpdGVkLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzbG90VmlzaXRvci5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLmFkZFRvVmlzaXRDb3VudChoZWFwLm51bU9wYXF1ZVJvb3RzKCkgLSBu
dW1PcGFxdWVSb290c0JlZm9yZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpTZWxkb21HcmV5ZWQpOwotICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50
KFdURk1vdmUoY29uc3RyYWludCkpOworICAgIHZtLT5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50
KHN0ZDo6bWFrZV91bmlxdWU8RE9NR0NPdXRwdXRDb25zdHJhaW50Pigqdm0sICpjbGllbnREYXRh
KSk7CiAgICAgICAgIAogICAgIGNsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVy
V29ybGQ6OmNyZWF0ZSgqdm0sIHRydWUpOwogICAgIHZtLT5tX3R5cGVkQXJyYXlDb250cm9sbGVy
ID0gYWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlv
blNjb3BlLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVB
bmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIK
ICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTIxNjIsNyArMjE2MywxNCBA
QCBFdmVudFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiAKIEV2ZW50VGFyZ2V0
RGF0YSogTm9kZTo6ZXZlbnRUYXJnZXREYXRhQ29uY3VycmVudGx5KCkKIHsKLSAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CisgICAgLy8gTm90IGhv
bGRpbmcgdGhlIGxvY2sgd2hlbiB0aGUgd29ybGQgaXMgc3RvcHBlZCBhY2NlbGVyYXRlcyBwYXJh
bGxlbCBjb25zdHJhaW50IHNvbHZpbmcsIHdoaWNoCisgICAgLy8gY2FsbHMgdGhpcyBmdW5jdGlv
biBmcm9tIG1hbnkgdGhyZWFkcy4gUGFyYWxsZWwgY29uc3RyYWludCBzb2x2aW5nIGNhbiBoYXBw
ZW4gd2l0aCB0aGUgd29ybGQKKyAgICAvLyBydW5uaW5nIG9yIHN0b3BwZWQsIGJ1dCBpZiB3ZSBk
byBpdCB3aXRoIGEgcnVubmluZyB3b3JsZCwgdGhlbiB3ZSdyZSB1c3VhbGx5IG1peGluZyBjb25z
dHJhaW50CisgICAgLy8gc29sdmluZyB3aXRoIG90aGVyIHdvcmsuIFRoZXJlZm9yZSwgdGhlIG1v
c3QgbGlrZWx5IHRpbWUgZm9yIGNvbnRlbnRpb24gb24gdGhpcyBsb2NrIGlzIHdoZW4gdGhlCisg
ICAgLy8gd29ybGQgaXMgc3RvcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIHRoZSBsb2NrIHdo
ZW4gdGhlIHdvcmxkIGlzIHN0b3BwZWQsIGJlY2F1c2UgYSBzdG9wcGVkIHdvcmxkCisgICAgLy8g
bWVhbnMgdGhhdCB3ZSB3aWxsIG5ldmVyIG11dGF0ZSB0aGUgZXZlbnQgdGFyZ2V0IGRhdGEgbWFw
LgorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrSWYoc19ldmVudFRhcmdldERhdGFNYXBMb2NrLCB2bSAmJiB2bS0+aGVhcC53b3Js
ZElzUnVubmluZygpKTsKICAgICByZXR1cm4gaGFzRXZlbnRUYXJnZXREYXRhKCkgPyBldmVudFRh
cmdldERhdGFNYXAoKS5nZXQodGhpcykgOiBudWxscHRyOwogfQogCkBAIC0yMTcxLDYgKzIxNzks
OSBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0CiAgICAgaWYgKGhh
c0V2ZW50VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgp
LmdldCh0aGlzKTsKIAorICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghdm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CisKICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAgc2V0
SGFzRXZlbnRUYXJnZXREYXRhKHRydWUpOwogICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFw
KCkuYWRkKHRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRUYXJnZXREYXRhPigpKS5pdGVyYXRv
ci0+dmFsdWU7CkBAIC0yMTc4LDYgKzIxODksOCBAQCBFdmVudFRhcmdldERhdGEmIE5vZGU6OmVu
c3VyZUV2ZW50VGFyZ2V0CiAKIHZvaWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogewor
ICAgIEpTQzo6Vk0qIHZtID0gY29tbW9uVk1Pck51bGwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
dm0gfHwgdm0tPmhlYXAud29ybGRJc1J1bm5pbmcoKSk7CiAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIGV2ZW50VGFyZ2V0RGF0YU1hcCgp
LnJlbW92ZSh0aGlzKTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEyLTAxICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBzb2x2aW5nIHNob3VsZCBi
ZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzOiBBZGQgc3BsYXktbGF0ZW5j
eSB0ZXN0LCBzaW5jZSB0aGlzIGNoYW5nZSBuZWVkZWQgdG8gYmUgY2FyZWZ1bGx5IHZhbGlkYXRl
ZCB3aXRoIHRoYXQgYmVuY2htYXJrLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3Vy
cmVudFB0ckhhc2hTZXQuY3BwOiBBZGRlZC4gVGhpcyBoYXMgdW5pdCB0ZXN0cyBvZiB0aGUgbmV3
IGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmUuIFRoZSB0ZXN0cyBmb2N1cyBvbiBjb3JyZWN0bmVz
cyB1bmRlciBzZXJpYWwgZXhlY3V0aW9uLCB3aGljaCBhcHBlYXJzIHRvIGJlIGVub3VnaCBmb3Ig
bm93IChpdCdzIHNvIGVhc3kgdG8gY2F0Y2ggYSBjb25jdXJyZW5jeSBidWcgYnkganVzdCBydW5u
aW5nIHRoZSBHQykuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0xMi0w
MSAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gQWRkIFNhbXBsZU1hcC5jcHAgQVBJIHRlc3RzIHRvIENNYWtlCkluZGV4OiBUb29scy9TY3Jp
cHRzL3J1bi1qc2MtYmVuY2htYXJrcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1q
c2MtYmVuY2htYXJrcwkocmV2aXNpb24gMjI1NDAzKQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNj
LWJlbmNobWFya3MJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDggQEAgTE9OR1NQSURFUl9Q
QVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIIAogVjhfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNf
UEFUSCArICJTdW5TcGlkZXIiICsgInRlc3RzIiArICJ2OC12NiIKIFRBSUxCRU5DSF9QQVRIID0g
UEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlRhaWxCZW5jaDkwMDAiCiBNSUNST0JFTkNITUFSS1Nf
UEFUSCA9IE9QRU5TT1VSQ0VfUEFUSCArICJKU1Rlc3RzIiArICJtaWNyb2JlbmNobWFya3MiCi1P
Q1RBTkVfV1JBUFBFUl9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIk9jdGFuZSIgKyAi
d3JhcHBlcnMiCitPUEVOU09VUkNFX09DVEFORV9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRI
ICsgIk9jdGFuZSIKK09DVEFORV9XUkFQUEVSX1BBVEggPSBPUEVOU09VUkNFX09DVEFORV9QQVRI
ICsgIndyYXBwZXJzIgogSlNCRU5DSF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIkpT
QmVuY2giCiBTSVhTUEVFRF9QQVRIID0gUEVSRk9STUFOQ0VURVNUU19QQVRIICsgIlNpeFNwZWVk
IiArICJ0ZXN0cyIKIFNJWFNQRUVEX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFU
SCArICJTaXhTcGVlZCIgKyAid3JhcHBlcnMiCkBAIC04NDEsNiArODQyLDIwIEBAIGNsYXNzIFNp
bmdsZUZpbGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKICAgZW5kCiBlbmQKIAorIyBCZW5jaG1h
cmsgdGhhdCBjb25zaXN0cyBvZiBhIHNpbmdsZSBmaWxlIGFuZCBtdXN0IGJlIGxvYWRlZCBpbiBp
dHMgb3duIGdsb2JhbCBvYmplY3QgZWFjaAorIyB0aW1lIChpLmUuIHJ1bigpKSwgYnV0IHJldHVy
bnMgaXRzIHJlc3VsdCBpbiBhIGN1c3RvbSB3YXkuCitjbGFzcyBTaW5nbGVGaWxlQ3VzdG9tVGlt
ZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCisgIGF0dHJfcmVhZGVyIDpiZW5jaFBhdGgKKyAgCisgIGRl
ZiBpbml0aWFsaXplKGJlbmNoUGF0aCkKKyAgICBAYmVuY2hQYXRoID0gYmVuY2hQYXRoCisgIGVu
ZAorICAKKyAgZGVmIGtpbmQKKyAgICA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisg
IGVuZAorZW5kCisKICMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgZGF0
YSBmaWxlcyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgZ2xvYmFsbHksIGZvbGxvd2VkCiAjIGJ5IGEg
Y29tbWFuZCB0byBydW4gdGhlIGJlbmNobWFyay4KIGNsYXNzIE11bHRpRmlsZVRpbWVkQmVuY2ht
YXJrUGFyYW1ldGVycwpAQCAtOTY1LDYgKzk4MCwyNSBAQCBkZWYgZW1pdEJlbmNoUnVuQ29kZUZp
bGUobmFtZSwgcGxhbiwgYmVuCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAg
aWYgKF9fYmVuY2hlcl9pbmRleCA+PSAje3dhcm11cH0pIHByaW50KFwiI3tuYW1lfTogI3twbGFu
LnZtfTogI3twbGFuLml0ZXJhdGlvbn06IFwiICsgKF9fYmVuY2hlcl9pbmRleCAtICN7d2FybXVw
fSkgKyBcIjogVGltZTogXCIrKChfX2FmdGVyLV9fYmVmb3JlKS9fX3J1bnMpKTsiKQogICAgICAg
ICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwifSIpCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCIje2JlbmNoUGFyYW1zLnRlYXJEb3duQ29tbWFuZC5qc30iKQorICAgICAgZWxzaWYg
YmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrCisgICAg
ICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBfX2JlbmNoZXJfcnVuKF9fYmVu
Y2hlcl93aGF0KSB7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgIHZhciBf
X2JlbmNoZXJfcmVzdWx0ID0ge3ZhbHVlOiBudWxsfTsiKQorICAgICAgICAkcmVydW4udGltZXMg
eworICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBydW4oX19iZW5jaGVyX3do
YXQsIF9fYmVuY2hlcl9yZXN1bHQpOyIpCisgICAgICAgIH0KKyAgICAgICAgZG91YmxlUHV0cygk
c3RkZXJyLGZpbGUsIiAgIGlmIChfX2JlbmNoZXJfcmVzdWx0LnZhbHVlID09IG51bGwpIikKKyAg
ICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIiAgICAgIHRocm93IG5ldyBFcnJvcihcIk51
bGwgcmVzdWx0XCIpOyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICByZXR1
cm4gX19iZW5jaGVyX3Jlc3VsdC52YWx1ZTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIs
ZmlsZSwifSIpCisgICAgICAgICR3YXJtdXAudGltZXMgeworICAgICAgICAgIGRvdWJsZVB1dHMo
JHN0ZGVycixmaWxlLCJfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQYXRoLmluc3Bl
Y3R9KSIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5sZXNz
IHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KKyAgICAgICAgJGlubmVyLnRpbWVz
IHsKKyAgICAgICAgICB8IGlubmVySW5kZXggfAorICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVy
cixmaWxlLCJwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiAj
e2lubmVySW5kZXh9OiBUaW1lOiBcIitfX2JlbmNoZXJfcnVuKCN7YmVuY2hQYXJhbXMuYmVuY2hQ
YXRoLmluc3BlY3R9KSk7IikKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZ2Mo
KTsiKSB1bmxlc3MgcGxhbi52bS5zaG91bGRNZWFzdXJlR0MKKyAgICAgICAgfQogICAgICAgZWxz
ZQogICAgICAgICByYWlzZSB1bmxlc3MgYmVuY2hQYXJhbXMua2luZCA9PSA6c2luZ2xlRmlsZVRp
bWVkQmVuY2htYXJrCiAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJmdW5jdGlvbiBf
X2JlbmNoZXJfcnVuKF9fYmVuY2hlcl93aGF0KSB7IikKQEAgLTE1OTQsNiArMTYyOCwxOSBAQCBj
bGFzcyBPY3RhbmVCZW5jaG1hcmsKICAgZW5kCiBlbmQKIAorY2xhc3MgQ3VzdG9tVGltZWRCZW5j
aG1hcmsKKyAgaW5jbHVkZSBCZW5jaG1hcmsKKyAgCisgIGRlZiBpbml0aWFsaXplKG5hbWUsIGZ1
bGxQYXRoKQorICAgIEBuYW1lID0gbmFtZQorICAgIEBmdWxsUGF0aCA9IGZ1bGxQYXRoCisgIGVu
ZAorICAKKyAgZGVmIGVtaXRSdW5Db2RlKHBsYW4pCisgICAgZW1pdEJlbmNoUnVuQ29kZShmdWxs
bmFtZSwgcGxhbiwgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycy5uZXco
ZW5zdXJlRmlsZSgiQ3VzdG9tVGltZWQtI3tAbmFtZX0iLCBAZnVsbFBhdGgpKSkKKyAgZW5kCitl
bmQKKwogY2xhc3MgS3Jha2VuQmVuY2htYXJrCiAgIGluY2x1ZGUgQmVuY2htYXJrCiAgIApAQCAt
MzAxMCw2ICszMDU3LDcgQEAgYmVnaW4KICAgICB8IGFyZ3MgfAogICAgIE9DVEFORS5hZGQgT2N0
YW5lQmVuY2htYXJrLm5ldygqYXJncykKICAgfQorICBPQ1RBTkUuYWRkIEN1c3RvbVRpbWVkQmVu
Y2htYXJrLm5ldygic3BsYXktbGF0ZW5jeSIsIChPUEVOU09VUkNFX09DVEFORV9QQVRIICsgInNw
bGF5LmpzIikudG9fcykKIAogICBLUkFLRU4gPSBCZW5jaG1hcmtTdWl0ZS5uZXcoIktyYWtlbiIs
IDphcml0aG1ldGljTWVhbiwgLTEpCiAgIFsiYWktYXN0YXIiLCAiYXVkaW8tYmVhdC1kZXRlY3Rp
b24iLCAiYXVkaW8tZGZ0IiwgImF1ZGlvLWZmdCIsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgc2V0KFRlc3RXVEZfU09V
UkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNw
cAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNl
dC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRoLmNwcApJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9y
bVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29j
b2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0g
Ki87IH07CiAJCTBGMkMyMEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3MURDRDU0NDgwMDU0
MkQ5RSAvKiBUaW1lLmNwcCAqLzsgfTsKKwkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENv
bmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFz
aFNldC5jcHAgKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdF
dmFsdWF0ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVK
YXZhU2NyaXB0Lm1tICovOyB9OwogCQkwRjRGRkE5RTFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNo
b3RWaWFSZW5kZXJJbkNvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5k
ZXJJbkNvbnRleHQubW0gKi87IH07CiAJCTBGNTY1MUY3MUZDRTREREMwMDMxMEZCQyAvKiBOb0hp
c3RvcnlJdGVtU2Nyb2xsVG9GcmFnbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTY1MUY2MUZDRTREREIwMDMxMEZCQyAvKiBOb0hpc3RvcnlJ
dGVtU2Nyb2xsVG9GcmFnbWVudC5tbSAqLzsgfTsKQEAgLTEwNzIsNiArMTA3Myw3IEBACiAJCTBG
MTM5RTc1MUE0MjNBNTMwMEY1OTBGNSAvKiBXZWFrT2JqQ1B0ci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYWtPYmpDUHRyLm1tOyBwYXRoID0gY29jb2EvV2Vh
a09iakNQdHIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTdCQkQ0MTVBRjZD
NEQwMDdBQjc1MyAvKiBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlByb2Nlc3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9X
ZWJQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzIwQjcxRENE
NTQ0ODAwNTQyRDlFIC8qIFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjVCMUZD
RTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZp
ZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNEZGQTlEMUVEM0FBODUwMEY3MTExRiAvKiBTbmFwc2hvdFZpYVJlbmRl
ckluQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNu
YXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRGRkFBMDFFRDNEMERFMDBGNzExMUYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgbmFtZSA9IEltYWdlSU8uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9JbWFnZUlPLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0yNTkz
LDYgKzI1OTUsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9taWNTdHJp
bmcuY3BwICovLAogCQkJCUU0MDAxOTMwMUFDRTlCNUMwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5j
cHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGlj
T3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJMEYzMENCNUIxRkNFMTc5MjAwNEI1MzIzIC8qIENvbmN1
cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyog
Q29uZGl0aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NU
aHJlYWRUYXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmlu
Zy5jcHAgKi8sCkBAIC0zMTc5LDYgKzMxODIsNyBAQAogCQkJCTdDODNERUY2MUQwQTU5MEMwMEZF
QkNGMyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUZFMUQw
QTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdENTRG
MzFGMzM4QzM2MDBBOTdBQTcgLyogTmV2ZXJEZXN0cm95ZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYzMENCNUMxRkNFMTc5NjAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBPcHRpb25hbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9u
U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBP
U09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK25h
bWVzcGFjZSB7CisKKy8vIGBjb21tYW5kc2AgaXMgYSBzdHJpbmcgdGhhdCB0ZWxscyB0aGlzIHRo
aW5nIHdoYXQgdG8gZG8uIEl0IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3Rl
cnMuCisvLyBUaGUgY2hhcmFjdGVyIHBhaXJzIGFyZSBjb21tYW5kcy4gQ29tbWFuZHM6CisvLwor
Ly8gK3ggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgKGNhc3RzICd4JyB0byBhIHZvaWQqKSBhbmQg
YXNzZXJ0cyB0aGF0IGl0J3MgbmV3LgorLy8gIXggICAgIEFkZHMgJ3gnIHRvIHRoZSBzZXQgYW5k
IGFzc2VydHMgdGhhdCBpdCB3YXMgdGhlcmUgYWxyZWFkeS4KKy8vID14ICAgICBBc3NlcnRzIHRo
YXQgJ3gnIGlzIGluIHRoZSBzZXQKKy8vIC14ICAgICBBc3NlcnRzIHRoYXQgJ3gnIGlzIG5vdCBp
biB0aGUgc2V0Cit2b2lkIGRvVGVzdChjb25zdCBjaGFyKiBjb21tYW5kcykKK3sKKyAgICBDb25j
dXJyZW50UHRySGFzaFNldCBzZXQ7CisgICAgZm9yIChjb25zdCBjaGFyKiBjb21tYW5kID0gY29t
bWFuZHM7IGNvbW1hbmRbMF0gJiYgY29tbWFuZFsxXTsgY29tbWFuZCArPSAyKSB7CisgICAgICAg
IHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihj
b21tYW5kWzFdKSk7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZFswXSkgeworICAgICAgICBjYXNl
ICcrJzoKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5hZGQocHRyKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0
LmFkZChwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAg
ICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFp
bnMocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoV1RG
X0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBFbXB0eSkKK3sKKyAgICBkb1Rlc3QoIiIpOworfQorCitU
RVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudCkKK3sKKyAgICBkb1Rl
c3QoIit4PXgteS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRP
bmVFbGVtZW50TXVsdGlwbGVUaW1lcykKK3sKKyAgICBkb1Rlc3QoIit4IXgheCF4IXgheCF4IXgh
eCF4IXg9eC15LTAiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9u
ZUVsZW1lbnRNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4
PXgteS0wIXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgiKTsKK30KKworVEVTVChXVEZf
Q29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzKQoreworICAgIGRvVGVzdCgi
KzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2sr
bCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitY
K0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9
Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1I
PUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFz
aFNldCwgQWRkTG90c09mRWxlbWVudHNNYW55VGltZXMpCit7CisgICAgZG9UZXN0KCIrMSsyKzMr
NCs1KzYrNys4KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraytsK3oreCtj
K3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytWK0Ir
TitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1q
PWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1LPUw9
Wj1YPUM9Vj1CPU49TS0uITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFh
IXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQh
RiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5
IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkh
TyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFx
IXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUh
UiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2
ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIh
biFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSEx
ITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwh
eiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFD
IVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYh
ZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFK
IUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8h
cCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFT
IUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIh
dCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFV
IUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkh
MCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFX
IUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNIik7Cit9CisK
K1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50c0FuZFF1ZXJ5
U29tZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4
KzkrMCtxK3crZStyK3QreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9
OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1R
LVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3gr
Yyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitC
K04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9
aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1M
PVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwg
QWRkU29tZUVsZW1lbnRzTXVsdGlwbGVUaW1lc1RoZW5BZGRUaGVSZXN0QW5kUXVlcnlTb21lQmVm
b3JlQWRkaW5nVGhlUmVzdCkKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3Er
dytlK3IrdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITgh
OSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCExITIhMyE0ITUhNiE3
ITghOSEwIXEhdyFlIXIhdCt5K3UraStvK3ArYStzK2QrZitnK2graitrPTE9Mj0zPTQ9NT02PTc9
OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9aD1qPWstbC16LXgtYy12LWItbi1t
LVEtVy1FLVItVC1ZLVUtSS1PLVAtQS1TLUQtRi1HLUgtSi1LLUwtWi1YLUMtVi1CLU4tTStsK3or
eCtjK3YrYituK20rUStXK0UrUitUK1krVStJK08rUCtBK1MrRCtGK0crSCtKK0srTCtaK1grQytW
K0IrTitNPTE9Mj0zPTQ9NT02PTc9OD05PTA9cT13PWU9cj10PXk9dT1pPW89cD1hPXM9ZD1mPWc9
aD1qPWs9bD16PXg9Yz12PWI9bj1tPVE9Vz1FPVI9VD1ZPVU9ST1PPVA9QT1TPUQ9Rj1HPUg9Sj1L
PUw9Wj1YPUM9Vj1CPU49TS0uIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
Kwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328317</attachid>
            <date>2017-12-03 18:49:07 -0800</date>
            <delta_ts>2017-12-04 21:49:56 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>310644</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHZlcnNpb24gb2Ygc3BsYXkgdGhhdCBt
ZWFzdXJlcyBsYXRlbmN5IGluIGEgd2F5IHRoYXQgcnVuLWpzYy1iZW5jaG1hcmtzIGdyb2tzLgor
CisgICAgICAgICogT2N0YW5lL3NwbGF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMuU2V0dXAu
c2V0dXAuc2V0dXApOgorICAgICAgICAodGhpcy5UZWFyRG93bi50ZWFyRG93bi50ZWFyRG93bik6
CisgICAgICAgIChCZW5jaG1hcmspOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0KToKKyAgICAg
ICAgKEJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZik6CisgICAgICAgIChCZW5jaG1h
cmtTdWl0ZSk6CisgICAgICAgIChhbGVydCk6CisgICAgICAgIChNYXRoLnJhbmRvbSk6CisgICAg
ICAgIChCZW5jaG1hcmtTdWl0ZS5SZXNldFJORyk6CisgICAgICAgIChSdW5TdGVwKToKKyAgICAg
ICAgKEJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5D
b3VudEJlbmNobWFya3MpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbik6
CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSk6CisgICAgICAgIChC
ZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKToKKyAgICAgICAgKEJlbmNobWFy
a1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkZv
cm1hdFNjb3JlKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVw
KToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQpOgorICAg
ICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeUVycm9yKToKKyAgICAgICAgKEJl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TaW5nbGVCZW5jaG1hcmspOgorICAgICAgICAoUnVu
TmV4dFNldHVwKToKKyAgICAgICAgKFJ1bk5leHRCZW5jaG1hcmspOgorICAgICAgICAoUnVuTmV4
dFRlYXJEb3duKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5TdGVwKToK
KyAgICAgICAgKEdlbmVyYXRlUGF5bG9hZFRyZWUpOgorICAgICAgICAoR2VuZXJhdGVLZXkpOgor
ICAgICAgICAoU3BsYXlVcGRhdGVTdGF0cyk6CisgICAgICAgIChJbnNlcnROZXdOb2RlKToKKyAg
ICAgICAgKFNwbGF5U2V0dXApOgorICAgICAgICAoU3BsYXlUZWFyRG93bik6CisgICAgICAgIChT
cGxheVJ1bik6CisgICAgICAgIChTcGxheVRyZWUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5pc0VtcHR5KToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0KToKKyAg
ICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFNwbGF5VHJlZS5w
cm90b3R5cGUuZmluZCk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXgpOgor
ICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbik6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMpOgorICAgICAgICAoU3BsYXlUcmVl
LnByb3RvdHlwZS5zcGxheV8pOgorICAgICAgICAoU3BsYXlUcmVlLk5vZGUpOgorICAgICAgICAo
U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNlXyk6CisgICAgICAgIChyZXBvcnQpOgor
ICAgICAgICAoc3RhcnQpOgorCiAyMDE3LTEyLTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgU3R5bGVCZW5jaApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9PY3RhbmUvc3BsYXkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUv
c3BsYXkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9PY3RhbmUvc3BsYXku
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTAgQEAKKy8vIENvcHlyaWdodCAyMDEzIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisvLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJlbmNo
bWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KK3ZhciBwZXJmb3JtYW5jZSA9IHBlcmZv
cm1hbmNlIHx8IHt9OworcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gcHJlY2lzZVRpbWUoKSAqIDEw
MDA7CisKKy8vIFNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0
ZXMgYW5kCisvLyBjb21wdXRpbmcgYSBzY29yZSBiYXNlZCBvbiB0aGUgdGltaW5nIG1lYXN1cmVt
ZW50cy4KKworCisvLyBBIGJlbmNobWFyayBoYXMgYSBuYW1lIChzdHJpbmcpIGFuZCBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBiZSBydW4gdG8KKy8vIGRvIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dC4gVGhlIG9wdGlvbmFsIHNldHVwIGFuZCB0ZWFyRG93bgorLy8gYXJndW1lbnRzIGFyZSBmdW5j
dGlvbnMgdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGFuZCBhZnRlcgorLy8gcnVubmluZyB0
aGUgYmVuY2htYXJrLCBidXQgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2ls
bAorLy8gbm90IGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIGJlbmNobWFyayBzY29yZS4KK2Z1bmN0
aW9uIEJlbmNobWFyayhuYW1lLCBkb1dhcm11cCwgZG9EZXRlcm1pbmlzdGljLCBydW4sIHNldHVw
LCB0ZWFyRG93biwgbGF0ZW5jeVJlc3VsdCwgbWluSXRlcmF0aW9ucykgeworICB0aGlzLm5hbWUg
PSBuYW1lOworICB0aGlzLmRvV2FybXVwID0gZG9XYXJtdXA7CisgIHRoaXMuZG9EZXRlcm1pbmlz
dGljID0gZG9EZXRlcm1pbmlzdGljOworICB0aGlzLnJ1biA9IHJ1bjsKKyAgdGhpcy5TZXR1cCA9
IHNldHVwID8gc2V0dXAgOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5UZWFyRG93biA9IHRlYXJE
b3duID8gdGVhckRvd24gOiBmdW5jdGlvbigpIHsgfTsKKyAgdGhpcy5sYXRlbmN5UmVzdWx0ID0g
bGF0ZW5jeVJlc3VsdCA/IGxhdGVuY3lSZXN1bHQgOiBudWxsOyAKKyAgdGhpcy5taW5JdGVyYXRp
b25zID0gbWluSXRlcmF0aW9ucyA/IG1pbkl0ZXJhdGlvbnMgOiAzMjsKK30KKworCisvLyBCZW5j
aG1hcmsgcmVzdWx0cyBob2xkIHRoZSBiZW5jaG1hcmsgYW5kIHRoZSBtZWFzdXJlZCB0aW1lIHVz
ZWQgdG8KKy8vIHJ1biB0aGUgYmVuY2htYXJrLiBUaGUgYmVuY2htYXJrIHNjb3JlIGlzIGNvbXB1
dGVkIGxhdGVyIG9uY2UgYQorLy8gZnVsbCBiZW5jaG1hcmsgc3VpdGUgaGFzIHJ1biB0byBjb21w
bGV0aW9uLiBJZiBsYXRlbmN5IGlzIHNldCB0byAwCisvLyB0aGVuIHRoZXJlIGlzIG5vIGxhdGVu
Y3kgc2NvcmUgZm9yIHRoaXMgYmVuY2htYXJrLgorZnVuY3Rpb24gQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdGltZSwgbGF0ZW5jeSkgeworICB0aGlzLmJlbmNobWFyayA9IGJlbmNobWFyazsK
KyAgdGhpcy50aW1lID0gdGltZTsKKyAgdGhpcy5sYXRlbmN5ID0gbGF0ZW5jeTsKK30KKworCisv
LyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcmVzdWx0cyB0byBudW1iZXJzLiBVc2VkIGJ5IHRoZSBn
ZW9tZXRyaWMKKy8vIG1lYW4gY29tcHV0YXRpb24uCitCZW5jaG1hcmtSZXN1bHQucHJvdG90eXBl
LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMudGltZTsKK30KKworCisvLyBT
dWl0ZXMgb2YgYmVuY2htYXJrcyBjb25zaXN0IG9mIGEgbmFtZSBhbmQgdGhlIHNldCBvZiBiZW5j
aG1hcmtzIGluCisvLyBhZGRpdGlvbiB0byB0aGUgcmVmZXJlbmNlIHRpbWluZyB0aGF0IHRoZSBm
aW5hbCBzY29yZSB3aWxsIGJlIGJhc2VkCisvLyBvbi4gVGhpcyB3YXksIGFsbCBzY29yZXMgYXJl
IHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHJ1biBhbmQgaGlnaGVyCisvLyBzY29yZXMgaW1wbGll
cyBiZXR0ZXIgcGVyZm9ybWFuY2UuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShuYW1lLCByZWZl
cmVuY2UsIGJlbmNobWFya3MpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5yZWZlcmVu
Y2UgPSByZWZlcmVuY2U7CisgIHRoaXMuYmVuY2htYXJrcyA9IGJlbmNobWFya3M7CisgIEJlbmNo
bWFya1N1aXRlLnN1aXRlcy5wdXNoKHRoaXMpOworfQorCisKKy8vIEtlZXAgdHJhY2sgb2YgYWxs
IGRlY2xhcmVkIGJlbmNobWFyayBzdWl0ZXMuCitCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMgPSBbXTsK
KworLy8gU2NvcmVzIGFyZSBub3QgY29tcGFyYWJsZSBhY3Jvc3MgdmVyc2lvbnMuIEJ1bXAgdGhl
IHZlcnNpb24gaWYKKy8vIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHdpbGwgYWZmZWN0IHRo
YXQgc2NvcmVzLCBlLmcuIGlmIHlvdSBhZGQKKy8vIGEgbmV3IGJlbmNobWFyayBvciBjaGFuZ2Ug
YW4gZXhpc3Rpbmcgb25lLgorQmVuY2htYXJrU3VpdGUudmVyc2lvbiA9ICc5JzsKKworLy8gT3Zl
cnJpZGUgdGhlIGFsZXJ0IGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgor
YWxlcnQgPSBmdW5jdGlvbihzKSB7CisgIHRocm93ICJBbGVydCBjYWxsZWQgd2l0aCBhcmd1bWVu
dDogIiArIHM7Cit9OworCisKKy8vIFRvIG1ha2UgdGhlIGJlbmNobWFyayByZXN1bHRzIHByZWRp
Y3RhYmxlLCB3ZSByZXBsYWNlIE1hdGgucmFuZG9tCisvLyB3aXRoIGEgMTAwJSBkZXRlcm1pbmlz
dGljIGFsdGVybmF0aXZlLgorQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcgPSBmdW5jdGlvbigpIHsK
KyAgTWF0aC5yYW5kb20gPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlZWQgPSA0OTczNDMyMTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0
IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdlZDU1ZDE2
KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAw
eGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAo
KHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAg
IHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAgICYgMHhmZmZmZmZm
ZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1KSArIChzZWVkIDw8IDMpKSAgICYg
MHhmZmZmZmZmZjsKKyAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+
PiAxNikpICYgMHhmZmZmZmZmZjsKKyAgICAgIHJldHVybiAoc2VlZCAmIDB4ZmZmZmZmZikgLyAw
eDEwMDAwMDAwOworICAgIH07CisgIH0pKCk7Cit9CisKKworLy8gUnVucyBhbGwgcmVnaXN0ZXJl
ZCBiZW5jaG1hcmsgc3VpdGVzIGFuZCBvcHRpb25hbGx5IHlpZWxkcyBiZXR3ZWVuCisvLyBlYWNo
IGluZGl2aWR1YWwgYmVuY2htYXJrIHRvIGF2b2lkIHJ1bm5pbmcgZm9yIHRvbyBsb25nIGluIHRo
ZQorLy8gY29udGV4dCBvZiBicm93c2Vycy4gT25jZSBkb25lLCB0aGUgZmluYWwgc2NvcmUgaXMg
cmVwb3J0ZWQgdG8gdGhlCisvLyBydW5uZXIuCitCZW5jaG1hcmtTdWl0ZS5SdW5TdWl0ZXMgPSBm
dW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIGNvbnRpbnVhdGlvbiA9IG51bGw7CisgIHZhciBzdWl0
ZXMgPSBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIHZhciBsZW5ndGggPSBzdWl0ZXMubGVuZ3Ro
OworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMgPSBbXTsKKyAgdmFyIGluZGV4ID0gMDsKKyAgZnVu
Y3Rpb24gUnVuU3RlcCgpIHsKKyAgICB3aGlsZSAoY29udGludWF0aW9uIHx8IGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHN1aXRlID0gc3Vp
dGVzW2luZGV4KytdOworICAgICAgICBpZiAocnVubmVyLk5vdGlmeVN0YXJ0KSBydW5uZXIuTm90
aWZ5U3RhcnQoc3VpdGUubmFtZSk7CisgICAgICAgIGNvbnRpbnVhdGlvbiA9IHN1aXRlLlJ1blN0
ZXAocnVubmVyKTsKKyAgICAgIH0KKyAgICAgIGlmIChjb250aW51YXRpb24gJiYgdHlwZW9mIHdp
bmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2V0VGltZW91dCkgeworICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChSdW5TdGVwLCAyNSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBzaG93IGZpbmFsIHJlc3VsdAorICAgIGlmIChydW5uZXIuTm90aWZ5U2Nv
cmUpIHsKKyAgICAgIHZhciBzY29yZSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4oQmVu
Y2htYXJrU3VpdGUuc2NvcmVzKTsKKyAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0
ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CisgICAgICBydW5uZXIuTm90aWZ5U2NvcmUoZm9y
bWF0dGVkKTsKKyAgICB9CisgIH0KKyAgUnVuU3RlcCgpOworfQorCisKKy8vIENvdW50cyB0aGUg
dG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYmVuY2htYXJrcy4gVXNlZnVsIGZvcgorLy8gc2hv
d2luZyBwcm9ncmVzcyBhcyBhIHBlcmNlbnRhZ2UuCitCZW5jaG1hcmtTdWl0ZS5Db3VudEJlbmNo
bWFya3MgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3VsdCA9IDA7CisgIHZhciBzdWl0ZXMgPSBC
ZW5jaG1hcmtTdWl0ZS5zdWl0ZXM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0
aDsgaSsrKSB7CisgICAgcmVzdWx0ICs9IHN1aXRlc1tpXS5iZW5jaG1hcmtzLmxlbmd0aDsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVh
biBvZiBhIHNldCBvZiBudW1iZXJzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbiA9IGZ1
bmN0aW9uKG51bWJlcnMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVycy5sZW5ndGg7IGkrKykgeworICAgIGxvZyArPSBNYXRoLmxvZyhudW1iZXJzW2ldKTsK
KyAgfQorICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBudW1iZXJzLmxlbmd0aCk7Cit9
CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIHRocm91Z2hw
dXQgdGltZSBtZWFzdXJlbWVudHMuCitCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSA9
IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgeworICB2YXIgbG9nID0gMDsKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0aC5sb2co
bWVhc3VyZW1lbnRzW2ldLnRpbWUpOworICB9CisgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxv
ZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBhdmVyYWdl
IG9mIHRoZSB3b3JzdCBzYW1wbGVzLiBGb3IgZXhhbXBsZSwgaWYgcGVyY2VudGlsZSBpcyA5OSwg
dGhpcyB3aWxsIHJlcG9ydCB0aGUKKy8vIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IDElIG9mIHRoZSBz
YW1wbGVzLgorQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZSA9IGZ1bmN0aW9u
KG51bWJlcnMsIHBlcmNlbnRpbGUpIHsKKyAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KKyAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKKyAgCisgIC8vIFNvcnQgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAt
IGI7IH0pOworICAKKyAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFyZSBhdCB0aGUgZW5k
LiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hyaW5rcyB0b28gbXVj
aC4KKyAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgorICAvLworICAvLyAt
IG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdv
cnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwKKyAgLy8gICBzaW5jZSB0aGVu
IG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAwLjk5LgorICAvLworICAvLyAtIG51
bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0
LgorICAvLworICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDogd2Ugd2lsbCByZW1v
dmUganVzdCB0aGUgd29yc3QuCisgIHZhciBudW1iZXJzV2VXYW50ID0gW107CisgIHZhciBvcmln
aW5hbExlbmd0aCA9IG51bWJlcnMubGVuZ3RoOworICB3aGlsZSAobnVtYmVycy5sZW5ndGggLyBv
cmlnaW5hbExlbmd0aCA+IHBlcmNlbnRpbGUgLyAxMDApCisgICAgbnVtYmVyc1dlV2FudC5wdXNo
KG51bWJlcnMucG9wKCkpOworICAKKyAgdmFyIHN1bSA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtYmVyc1dlV2FudC5sZW5ndGg7ICsraSkKKyAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtp
XTsKKyAgCisgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0aDsKKyAgCisg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgorICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwg
bnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdKSB7CisgICAgdGhyb3cgIlNhbml0eSBjaGVjayBm
YWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCisgICAgICAiIGJ1dCB3
ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7CisgIH0KKyAgCisgIHJldHVy
biByZXN1bHQ7Cit9CisKKworLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0
IG9mIGxhdGVuY3kgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxh
dGVuY3kgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9IDA7CisgIHZhciBo
YXNMYXRlbmN5UmVzdWx0ID0gZmFsc2U7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1l
bnRzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5ICE9IDAp
IHsKKyAgICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSk7CisgICAg
ICBoYXNMYXRlbmN5UmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaWYgKGhhc0xhdGVuY3lS
ZXN1bHQpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMu
bGVuZ3RoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisKKy8vIENvbnZl
cnRzIGEgc2NvcmUgdmFsdWUgdG8gYSBzdHJpbmcgd2l0aCBhdCBsZWFzdCB0aHJlZSBzaWduaWZp
Y2FudAorLy8gZGlnaXRzLgorQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICBpZiAodmFsdWUgPiAxMDApIHsKKyAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgw
KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gdmFsdWUudG9QcmVjaXNpb24oMyk7CisgIH0KK30K
KworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgcnVubmluZyBhIHNpbmds
ZSBiZW5jaG1hcmsgaW4KKy8vIHRoZSBiZW5jaG1hcmsgc3VpdGUuIFRoaXMgY2FuIGJlIHVzZWZ1
bCB0byByZXBvcnQgcHJvZ3Jlc3MuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5U3Rl
cCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICBp
ZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcChyZXN1bHQu
YmVuY2htYXJrLm5hbWUpOworfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdy
ZSBkb25lIHdpdGggcnVubmluZyBhIHN1aXRlIGFuZCB0aGF0CisvLyB3ZSBoYXZlIGEgcmVzdWx0
IHdoaWNoIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBuZWVkZWQuCitCZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuTm90aWZ5UmVzdWx0ID0gZnVuY3Rpb24oKSB7CisgIHZhciBtZWFuID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUodGhpcy5yZXN1bHRzKTsKKyAgdmFyIHNj
b3JlID0gdGhpcy5yZWZlcmVuY2VbMF0gLyBtZWFuOworICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMu
cHVzaChzY29yZSk7CisgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsKKyAgICB2YXIg
Zm9ybWF0dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAg
IHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUsIGZvcm1hdHRlZCk7CisgIH0KKyAg
aWYgKHRoaXMucmVmZXJlbmNlLmxlbmd0aCA9PSAyKSB7CisgICAgdmFyIG1lYW5MYXRlbmN5ID0g
QmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKKyAgICBp
ZiAobWVhbkxhdGVuY3kgIT0gMCkgeworICAgICAgdmFyIHNjb3JlTGF0ZW5jeSA9IHRoaXMucmVm
ZXJlbmNlWzFdIC8gbWVhbkxhdGVuY3k7CisgICAgICBCZW5jaG1hcmtTdWl0ZS5zY29yZXMucHVz
aChzY29yZUxhdGVuY3kpOworICAgICAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlTGF0ZW5jeSkKKyAgICAgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRo
aXMubmFtZSArICJMYXRlbmN5IiwgZm9ybWF0dGVkTGF0ZW5jeSk7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHJ1bm5pbmcgYSBiZW5jaG1h
cmsgcmVzdWx0ZWQgaW4gYW4gZXJyb3IuCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5RXJyb3Ip
IHsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcih0aGlzLm5hbWUsIGVycm9yKTsKKyAgfQor
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5U3RlcCkgeworICAgIHRoaXMucnVubmVyLk5vdGlmeVN0
ZXAodGhpcy5uYW1lKTsKKyAgfQorfQorCisKKy8vIFJ1bnMgYSBzaW5nbGUgYmVuY2htYXJrIGZv
ciBhdCBsZWFzdCBhIHNlY29uZCBhbmQgY29tcHV0ZXMgdGhlCisvLyBhdmVyYWdlIHRpbWUgaXQg
dGFrZXMgdG8gcnVuIGEgc2luZ2xlIGl0ZXJhdGlvbi4KK0JlbmNobWFya1N1aXRlLnByb3RvdHlw
ZS5SdW5TaW5nbGVCZW5jaG1hcmsgPSBmdW5jdGlvbihiZW5jaG1hcmssIGRhdGEpIHsKKyAgZnVu
Y3Rpb24gTWVhc3VyZShkYXRhKSB7CisgICAgdmFyIGVsYXBzZWQgPSAwOworICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7CisgIAorICAvLyBSdW4gZWl0aGVyIGZvciAxIHNlY29uZCBvciBmb3Ig
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZAorICAvLyBieSBtaW5JdGVyYXRpb25z
LCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBmbGFnIGRvRGV0ZXJtaW5pc3RpYy4KKyAgICBmb3Ig
KHZhciBpID0gMDsgKGJlbmNobWFyay5kb0RldGVybWluaXN0aWMgPyAKKyAgICAgIGk8YmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMgOiBlbGFwc2VkIDwgMTAwMCk7IGkrKykgeworICAgICAgYmVuY2ht
YXJrLnJ1bigpOworICAgICAgZWxhcHNlZCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9Cisg
ICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAgZGF0YS5ydW5zICs9IGk7CisgICAgICBkYXRh
LmVsYXBzZWQgKz0gZWxhcHNlZDsKKyAgICB9CisgIH0KKworICAvLyBTZXRzIHVwIGRhdGEgaW4g
b3JkZXIgdG8gc2tpcCBvciBub3QgdGhlIHdhcm11cCBwaGFzZS4KKyAgaWYgKCFiZW5jaG1hcmsu
ZG9XYXJtdXAgJiYgZGF0YSA9PSBudWxsKSB7CisgICAgZGF0YSA9IHsgcnVuczogMCwgZWxhcHNl
ZDogMCB9OworICB9CisKKyAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgIE1lYXN1cmUobnVsbCk7
CisgICAgcmV0dXJuIHsgcnVuczogMCwgZWxhcHNlZDogMCB9OworICB9IGVsc2UgeworICAgIE1l
YXN1cmUoZGF0YSk7CisgICAgLy8gSWYgd2UndmUgcnVuIHRvbyBmZXcgaXRlcmF0aW9ucywgd2Ug
Y29udGludWUgZm9yIGFub3RoZXIgc2Vjb25kLgorICAgIGlmIChkYXRhLnJ1bnMgPCBiZW5jaG1h
cmsubWluSXRlcmF0aW9ucykgcmV0dXJuIGRhdGE7CisgICAgdmFyIHVzZWMgPSAoZGF0YS5lbGFw
c2VkICogMTAwMCkgLyBkYXRhLnJ1bnM7CisgICAgdmFyIGxhdGVuY3lTYW1wbGVzID0gKGJlbmNo
bWFyay5sYXRlbmN5UmVzdWx0ICE9IG51bGwpID8gYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQoKSA6
IFswXTsKKyAgICB2YXIgcGVyY2VudGlsZSA9IDk5LjU7CisgICAgdmFyIGxhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlKGxhdGVuY3lTYW1wbGVzLCBwZXJjZW50
aWxlKSAqIDEwMDA7CisgICAgdGhpcy5Ob3RpZnlTdGVwKG5ldyBCZW5jaG1hcmtSZXN1bHQoYmVu
Y2htYXJrLCB1c2VjLCBsYXRlbmN5KSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK30KKworCisv
LyBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBydW5uaW5nIGEgc3VpdGUsIGJ1dCBzdG9wcyBiZXR3ZWVu
IGVhY2gKKy8vIGluZGl2aWR1YWwgYmVuY2htYXJrIGluIHRoZSBzdWl0ZSBhbmQgcmV0dXJucyBh
IGNvbnRpbnVhdGlvbgorLy8gZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGludm9rZWQgdG8gcnVuIHRo
ZSBuZXh0IGJlbmNobWFyay4gT25jZSB0aGUKKy8vIGxhc3QgYmVuY2htYXJrIGhhcyBiZWVuIGV4
ZWN1dGVkLCBudWxsIGlzIHJldHVybmVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0
ZXAgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgQmVuY2htYXJrU3VpdGUuUmVzZXRSTkcoKTsKKyAg
dGhpcy5yZXN1bHRzID0gW107CisgIHRoaXMucnVubmVyID0gcnVubmVyOworICB2YXIgbGVuZ3Ro
ID0gdGhpcy5iZW5jaG1hcmtzLmxlbmd0aDsKKyAgdmFyIGluZGV4ID0gMDsKKyAgdmFyIHN1aXRl
ID0gdGhpczsKKyAgdmFyIGRhdGE7CisKKyAgLy8gUnVuIHRoZSBzZXR1cCwgdGhlIGFjdHVhbCBi
ZW5jaG1hcmssIGFuZCB0aGUgdGVhciBkb3duIGluIHRocmVlCisgIC8vIHNlcGFyYXRlIHN0ZXBz
IHRvIGFsbG93IHRoZSBmcmFtZXdvcmsgdG8geWllbGQgYmV0d2VlbiBhbnkgb2YgdGhlCisgIC8v
IHN0ZXBzLgorCisgIGZ1bmN0aW9uIFJ1bk5leHRTZXR1cCgpIHsKKyAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHN1aXRlLmJlbmNobWFya3NbaW5kZXhdLlNl
dHVwKCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBSdW5OZXh0QmVu
Y2htYXJrOworICAgIH0KKyAgICBzdWl0ZS5Ob3RpZnlSZXN1bHQoKTsKKyAgICByZXR1cm4gbnVs
bDsKKyAgfQorCisgIGZ1bmN0aW9uIFJ1bk5leHRCZW5jaG1hcmsoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGRhdGEgPSBzdWl0ZS5SdW5TaW5nbGVCZW5jaG1hcmsoc3VpdGUuYmVuY2htYXJrc1tpbmRl
eF0sIGRhdGEpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlmeUVycm9yKGUp
OworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIC8vIElmIGRhdGEgaXMgbnVsbCwgd2Un
cmUgZG9uZSB3aXRoIHRoaXMgYmVuY2htYXJrLgorICAgIHJldHVybiAoZGF0YSA9PSBudWxsKSA/
IFJ1bk5leHRUZWFyRG93biA6IFJ1bk5leHRCZW5jaG1hcmsoKTsKKyAgfQorCisgIGZ1bmN0aW9u
IFJ1bk5leHRUZWFyRG93bigpIHsKKyAgICB0cnkgeworICAgICAgc3VpdGUuYmVuY2htYXJrc1tp
bmRleCsrXS5UZWFyRG93bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHN1aXRlLk5vdGlm
eUVycm9yKGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBSdW5OZXh0
U2V0dXA7CisgIH0KKworICAvLyBTdGFydCBvdXQgcnVubmluZyB0aGUgc2V0dXAuCisgIHJldHVy
biBSdW5OZXh0U2V0dXAoKTsKK30KKworLy8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3Qg
YXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gVGhp
cyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVs
ZSB1c2VkCisvLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUg
cHJvZmlsZXMgZm9yIHJ1bnMgb2YKKy8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQg
ZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBp
cyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKKy8vIHVzZWQg
Zm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBl
bmdpbmUKKy8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBs
YXJnZSB0cmVlIG9iamVjdAorLy8gZ3JhcGguCisKK3ZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtT
dWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCisgIG5ldyBCZW5jaG1hcmsoIlNwbGF5
IiwgdHJ1ZSwgZmFsc2UsIAorICAgIFNwbGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3du
LCBTcGxheUxhdGVuY3kpCitdKTsKKworCisvLyBDb25maWd1cmF0aW9uLgordmFyIGtTcGxheVRy
ZWVTaXplID0gODAwMDsKK3ZhciBrU3BsYXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwordmFyIGtT
cGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OworCit2YXIgc3BsYXlUcmVlID0gbnVsbDsKK3ZhciBz
cGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKKworZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJl
ZShkZXB0aCwgdGFnKSB7CisgIGlmIChkZXB0aCA9PSAwKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBdLAorICAgICAgc3RyaW5n
IDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYgbm9kZScKKyAgICB9OworICB9
IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShk
ZXB0aCAtIDEsIHRhZyksCisgICAgICByaWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAt
IDEsIHRhZykKKyAgICB9OworICB9Cit9CisKKworZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Cisg
IC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBp
cworICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KKyAgcmV0dXJuIE1hdGgucmFuZG9t
KCk7Cit9CisKK3ZhciBzcGxheVNhbXBsZXMgPSBbXTsKKworZnVuY3Rpb24gU3BsYXlMYXRlbmN5
KCkgeworICByZXR1cm4gc3BsYXlTYW1wbGVzOworfQorCitmdW5jdGlvbiBTcGxheVVwZGF0ZVN0
YXRzKHRpbWUpIHsKKyAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0Owor
ICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7CisgIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNl
KTsKK30KKworZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKKyAgLy8gSW5zZXJ0IG5ldyBub2Rl
IHdpdGggYSB1bmlxdWUga2V5LgorICB2YXIga2V5OworICBkbyB7CisgICAga2V5ID0gR2VuZXJh
dGVLZXkoKTsKKyAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKKyAgdmFy
IHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0
cmluZyhrZXkpKTsKKyAgc3BsYXlUcmVlLmluc2VydChrZXksIHBheWxvYWQpOworICByZXR1cm4g
a2V5OworfQorCisKK2Z1bmN0aW9uIFNwbGF5U2V0dXAoKSB7CisgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCisg
IC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0LgorICBpZiAoIXBlcmZvcm1hbmNl
Lm5vdykgeworICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKKyAgfQorCisg
IHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBw
ZXJmb3JtYW5jZS5ub3coKQorICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBp
KyspIHsKKyAgICBJbnNlcnROZXdOb2RlKCk7CisgICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsK
KyAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOworICAgIH0KKyAgfQor
fQorCisKK2Z1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7CisgIC8vIEFsbG93IHRoZSBnYXJiYWdl
IGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKKyAgLy8gdXNlZCBieSB0aGUgc3BsYXkg
dHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCisgIC8vIHRlYXIgZG93biBmdW5jdGlvbi4K
KyAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOworICBzcGxheVRyZWUgPSBudWxs
OworCisgIHNwbGF5U2FtcGxlcyA9IFtdOworCisgIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0
cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KKyAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICBp
ZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIGhhcyB3cm9uZyBzaXplIik7CisgIH0KKworICAvLyBWZXJpZnkgdGhhdCB0aGUgc3Bs
YXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGggLSAxOyBpKyspIHsKKyAgICBpZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0ZWQiKTsKKyAgICB9CisgIH0K
K30KKworCitmdW5jdGlvbiBTcGxheVJ1bigpIHsKKyAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBp
biB0aGUgc3BsYXkgdHJlZS4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZp
Y2F0aW9uczsgaSsrKSB7CisgICAgdmFyIGtleSA9IEluc2VydE5ld05vZGUoKTsKKyAgICB2YXIg
Z3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKKyAgICBpZiAo
Z3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkpOworICAgIGVsc2Ugc3BsYXlU
cmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOworICB9CisgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9y
bWFuY2Uubm93KCkpOworfQorCisKKy8qKgorICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBB
IHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkKKyAqIHNlYXJjaCB0cmVlIHdp
dGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAorICogZWxl
bWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0
aW9ucworICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2co
bikpIGFtb3J0aXplZCB0aW1lLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBT
cGxheVRyZWUoKSB7Cit9OworCisKKy8qKgorICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9m
IHRoZSB0cmVlLgorICoKKyAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KKyAqIEBwcml2YXRlCisg
Ki8KK1NwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOworCisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4KKyAqLworU3BsYXlUcmVlLnBy
b3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAhdGhpcy5yb290XzsKK307
CisKKworLyoqCisgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkgYW5kIHZhbHVlIGlmCisgKiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRh
aW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCisgKiB0aGUgdmFsdWUgaXMgaW5z
ZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgKgorICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCisgKiBAcGFyYW0geyp9IHZh
bHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgp
KSB7CisgICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5v
ZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgorICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRo
ZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5
KSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtl
eSwgdmFsdWUpOworICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkpIHsKKyAgICBub2RlLmxlZnQg
PSB0aGlzLnJvb3RfOworICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OworICAgIHRo
aXMucm9vdF8ucmlnaHQgPSBudWxsOworICB9IGVsc2UgeworICAgIG5vZGUucmlnaHQgPSB0aGlz
LnJvb3RfOworICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICB0aGlzLnJvb3Rf
LmxlZnQgPSBudWxsOworICB9CisgIHRoaXMucm9vdF8gPSBub2RlOworfTsKKworCisvKioKKyAq
IFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0
aGUgdHJlZQorICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5v
ZGUgaXMgcmV0dXJuZWQuIElmIHRoZQorICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9u
IGlzIHRocm93bi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCBy
ZW1vdmUgZnJvbSB0aGUgdHJlZS4KKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVt
b3ZlZCBub2RlLgorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtl
eSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBm
b3VuZDogJyArIGtleSk7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRoaXMucm9v
dF8ua2V5ICE9IGtleSkgeworICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5
KTsKKyAgfQorICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87CisgIGlmICghdGhpcy5yb290Xy5s
ZWZ0KSB7CisgICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmlnaHQ7CisgIH0gZWxzZSB7Cisg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfID0gdGhpcy5y
b290Xy5sZWZ0OworICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBo
YXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCisgICAgdGhpcy5zcGxheV8oa2V5KTsKKyAgICAvLyBJ
bnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUg
bmV3CisgICAgLy8gcm9vdC4KKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7CisgIH0KKyAg
cmV0dXJuIHJlbW92ZWQ7Cit9OworCisKKy8qKgorICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcg
dGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KKyAq
IGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBr
ZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0g
Tm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB0aGlzLnNwbGF5XyhrZXkpOworICByZXR1cm4gdGhpcy5yb290Xy5r
ZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewor
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgY3Vy
cmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKKyAgd2hpbGUgKGN1cnJlbnQucmln
aHQpIHsKKyAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgfQorICByZXR1cm4gY3VycmVu
dDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcg
dGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKKyAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNp
ZmllZCBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVz
c1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdp
dGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAorICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgorICB0aGlzLnNwbGF5XyhrZXkpOworICAvLyBOb3cg
dGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBp
bgorICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgorICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsK
KyAgICByZXR1cm4gdGhpcy5yb290XzsKKyAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsK
KyAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7CisgIH0gZWxzZSB7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtBcnJheTwqPn0g
QW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJlc3Vs
dCA9IFtdOworICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhpcy5yb290Xy50cmF2ZXJz
ZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtleSk7IH0pOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9OworCisKKy8qKgorICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9u
IGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRoCisgKiB0aGUgZ2l2ZW4ga2V5
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KKyAqIGtl
eSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBv
ZiB0aGUKKyAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcg
YWxnb3JpdGhtIGZyb206CisgKiAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIg
YnkgU2xlYXRvciBhbmQgVGFyamFuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8g
c3BsYXkgdGhlIHRyZWUgb24uCisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBl
LnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgeworICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1
bW15IG5vZGUgaXMgYSBiaXQKKyAgLy8gY291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGls
ZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKKyAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxn
b3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKKyAgLy8gd2lsbCBob2xk
IHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAor
ICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwg
Y2FzZXMuCisgIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7CisgIGR1bW15ID0gbGVmdCA9IHJpZ2h0
ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOworICB2YXIgY3VycmVudCA9IHRoaXMu
cm9vdF87CisgIHdoaWxlICh0cnVlKSB7CisgICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Cisg
ICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7CisgICAgICAgIC8vIFJvdGF0ZSByaWdodC4K
KyAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKKyAgICAgICAgY3VycmVudC5sZWZ0ID0g
dG1wLnJpZ2h0OworICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdG1wOworICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgeworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBMaW5rIHJpZ2h0LgorICAgICAgcmlnaHQubGVm
dCA9IGN1cnJlbnQ7CisgICAgICByaWdodCA9IGN1cnJlbnQ7CisgICAgICBjdXJyZW50ID0gY3Vy
cmVudC5sZWZ0OworICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKKyAgICAgIGlm
ICghY3VycmVudC5yaWdodCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChr
ZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgeworICAgICAgICAvLyBSb3RhdGUgbGVmdC4KKyAgICAg
ICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7CisgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAu
bGVmdDsKKyAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdG1w
OworICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgLy8gTGluayBsZWZ0LgorICAgICAgbGVmdC5yaWdodCA9IGN1
cnJlbnQ7CisgICAgICBsZWZ0ID0gY3VycmVudDsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLy8gQXNzZW1i
bGUuCisgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CisgIHJpZ2h0LmxlZnQgPSBjdXJyZW50
LnJpZ2h0OworICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsKKyAgY3VycmVudC5yaWdodCA9
IGR1bW15LmxlZnQ7CisgIHRoaXMucm9vdF8gPSBjdXJyZW50OworfTsKKworCisvKioKKyAqIENv
bnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtleSBL
ZXkuCisgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgorICovCitTcGxheVRyZWUuTm9kZSA9IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgdGhpcy5rZXkgPSBrZXk7CisgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKK307CisKKworLyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5
VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKKworCisvKioKKyAqIEB0eXBlIHtTcGxh
eVRyZWUuTm9kZX0KKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsK
KworCisvKioKKyAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0CisgKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgorICoKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rpb24uCisgKiBAcHJpdmF0ZQor
ICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewor
ICB2YXIgY3VycmVudCA9IHRoaXM7CisgIHdoaWxlIChjdXJyZW50KSB7CisgICAgdmFyIGxlZnQg
PSBjdXJyZW50LmxlZnQ7CisgICAgaWYgKGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOworICAgIGYo
Y3VycmVudCk7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7CisgIH0KK307CisKK2Z1bmN0
aW9uIHJlcG9ydChtc2cpCit7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KHJlc3VsdE9iamVjdCkKK3sK
KyAgICBTcGxheVNldHVwKCk7CisgICAgdmFyIHNhbXBsZXMgPSBbXTsKKyAgICB2YXIgYmVmb3Jl
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIFNwbGF5UnVuKCk7CisgICAgICAgIHZhciBhZnRlciA9IHBlcmZvcm1hbmNl
Lm5vdygpOworICAgICAgICBzYW1wbGVzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgICAgICBi
ZWZvcmUgPSBhZnRlcjsKKyAgICB9CisgICAgU3BsYXlUZWFyRG93bigpOworICAgIAorICAgIHZh
ciBzY2F0dGVyRGF0YSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2NhdHRlckRhdGEucHVzaCh7eDogaSArIDEsIHk6IHNhbXBsZXNb
aV19KTsKKyAgICAKKyAgICByZXBvcnQoIkpldFN0cmVhbS1saWtlIExhdGVuY3kgU2NvcmU6ICIg
KyBNYXRoLnJvdW5kKDQwMDAgLyBCZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxl
KHNhbXBsZXMsIDk5LjUpKSk7CisgICAgCisgICAgdmFyIHN1bU9mU3F1YXJlcyA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVzLmxlbmd0aDsgKytpKQorICAgICAgICBzdW1PZlNx
dWFyZXMgKz0gc2FtcGxlc1tpXSAqIHNhbXBsZXNbaV07CisgICAgcmVwb3J0KCJPY3RhbmUtbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCgyNzM5NS4xNCAvIE1hdGguc3FydChzdW1P
ZlNxdWFyZXMgLyBzYW1wbGVzLmxlbmd0aCkpKTsKKyAgICAKKyAgICBmb3IgKHZhciBwZXJjZW50
aWxlIG9mIFs5OS41LCA5NSwgODcsIDc1LCA1MCwgMF0pCisgICAgICAgIHJlcG9ydCgiQXZlcmFn
ZSBhYm92ZSAiICsgcGVyY2VudGlsZSArICIlOiAiICsgQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFi
b3ZlUGVyY2VudGlsZShzYW1wbGVzLCBwZXJjZW50aWxlKSk7CisgICAgCisgICAgcmVzdWx0T2Jq
ZWN0LnZhbHVlID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVz
LCA5OS41KTsKK30KKworc3RhcnQoYXJndW1lbnRzWzBdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNCBAQAorMjAxNy0xMi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmlu
ZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyBjb25zdHJh
aW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIFRoaXMgbG9va3MgbGlrZSBhIDElIFNwZWVkb21ldGVy
CisgICAgICAgIHNwZWVkLXVwLiBJdCdzIG1vcmUgdGhhbiAxJSBvbiB0cnVuay1TcGVlZG9tZXRl
ci4KKyAgICAgICAgCisgICAgICAgIFRoZSBjb25zdHJhaW50IHNvbHZlciBzdXBwb3J0cyBydW5u
aW5nIGNvbnN0cmFpbnRzIGluIHBhcmFsbGVsIGluIHR3byBkaWZmZXJlbnQgd2F5czoKKyAgICAg
ICAgCisgICAgICAgIC0gUnVuIG11bHRpcGxlIGNvbnN0cmFpbnRzIGluIHBhcmFsbGVsIHRvIGVh
Y2ggb3RoZXIuIFRoaXMgb25seSB3b3JrcyBmb3IgY29uc3RyYWludHMgdGhhdCBjYW4KKyAgICAg
ICAgICB0b2xlcmF0ZSBvdGhlciBjb25zdHJhaW50cyBydW5uaW5nIGNvbmN1cnJlbnRseSB0byB0
aGVtIChjb25zdHJhaW50LmNvbmN1cnJlbmN5KCkgPT0KKyAgICAgICAgICBDb25zdHJhaW50Q29u
Y3VycmVuY3k6OkNvbmN1cnJlbnQpLiBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIGtpbmQgb2YgcGFy
YWxsZWxpc20gdGhhdCB0aGUKKyAgICAgICAgICBjb25zdHJhaW50IHNvbHZlciBzdXBwb3J0cy4g
QWxsIGNvbnN0cmFpbnRzIGV4Y2VwdCB0aGUgSlNDIFNQSSBjb25zdHJhaW50cyBhcmUgY29uY3Vy
cmVudC4gV2UKKyAgICAgICAgICBjb3VsZCBwcm9iYWJseSBtYWtlIHRoZW0gY29uY3VycmVudCwg
YnV0IEknbSBwbGF5aW5nIGl0IHNhZmUgZm9yIG5vdy4KKyAgICAgICAgCisgICAgICAgIC0gQSBj
b25zdHJhaW50IGNhbiBjcmVhdGUgcGFyYWxsZWwgd29yayBmb3IgaXRzZWxmLCB3aGljaCB0aGUg
Y29uc3RyYWludCBzb2x2ZXIgd2lsbCBpbnRlcmxlYXZlCisgICAgICAgICAgd2l0aCBvdGhlciBz
dHVmZi4gQSBjb25zdHJhaW50IGNhbiByZXBvcnQgdGhhdCBpdCBoYXMgcGFyYWxsZWwgd29yayBi
eSByZXR1cm5pbmcKKyAgICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsIGZy
b20gaXRzIGV4ZWN1dGVJbXBsKCkgZnVuY3Rpb24uIFRoZW4gdGhlIHNvbHZlciB3aWxsIGFsbG93
IHRoYXQKKyAgICAgICAgICBjb25zdHJhaW50J3MgZG9QYXJhbGxlbFdvcmtJbXBsKCkgZnVuY3Rp
b24gdG8gcnVuIG9uIGFzIG1hbnkgR0MgbWFya2VyIHRocmVhZHMgYXMgYXJlIGF2YWlsYWJsZSwK
KyAgICAgICAgICBmb3IgYXMgbG9uZyBhcyB0aGF0IGZ1bmN0aW9uIHdhbnRzIHRvIHJ1bi4KKyAg
ICAgICAgCisgICAgICAgIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGhhdmUgYSBub24tY29uY3VycmVu
dCBjb25zdHJhaW50IHRoYXQgY3JlYXRlcyBwYXJhbGxlbCB3b3JrLgorICAgICAgICAKKyAgICAg
ICAgVGhlIHBhcmFsbGVsaXNtIGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIHRoZSBleGlzdGlu
ZyBHQyBtYXJrZXIgdGhyZWFkcy4gVGhpcyB0dXJucyBvdXQgdG8gYmUKKyAgICAgICAgbW9zdCBu
YXR1cmFsIGZvciB0d28gcmVhc29uczoKKyAgICAgICAgCisgICAgICAgIC0gTm8gbmVlZCB0byBz
dGFydCBhbnkgb3RoZXIgdGhyZWFkcy4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIGNvbnN0cmFp
bnRzIGFsbCB3YW50IHRvIGJlIHBhc3NlZCBhIFNsb3RWaXNpdG9yLiBSdW5uaW5nIG9uIHRoZSBt
YXJrZXIgdGhyZWFkcyBtZWFucyBoYXZpbmcKKyAgICAgICAgICBhY2Nlc3MgdG8gdGhvc2UgdGhy
ZWFkcycgU2xvdFZpc2l0b3JzLiBBbHNvLCBpdCBtZWFucyBsZXNzIGxvYWQgYmFsYW5jaW5nLiBU
aGUgc29sdmVyIHdpbGwKKyAgICAgICAgICBjcmVhdGUgd29yayBvbiBlYWNoIG1hcmtpbmcgdGhy
ZWFkJ3MgU2xvdFZpc2l0b3IuIFdoZW4gdGhlIHNvbHZlciBpcyBkb25lICJzdGVhbGluZyIgYSBt
YXJrZXIKKyAgICAgICAgICB0aHJlYWQsIHRoYXQgdGhyZWFkIHdpbGwgaGF2ZSB3b3JrIGl0IGNh
biBzdGFydCBkb2luZyBpbW1lZGlhdGVseS4gQmVmb3JlIHRoaXMgY2hhbmdlLCB3ZSBoYWQgdG8K
KyAgICAgICAgICBjb250cmlidXRlIHRoZSB3b3JrIGZvdW5kIGJ5IHRoZSBjb25zdHJhaW50IHNv
bHZlciB0byB0aGUgZ2xvYmFsIHdvcmtsaXN0IHNvIHRoYXQgaXQgY291bGQgYmUKKyAgICAgICAg
ICBkaXN0cmlidXRlZCB0byB0aGUgbWFya2VyIHRocmVhZHMgYnkgbG9hZCBiYWxhbmNpbmcuIFRo
aXMgY2hhbmdlIHByb2JhYmx5IGhlbHBzIHRvIGF2b2lkIHRoYXQKKyAgICAgICAgICBsb2FkIGJh
bGFuY2luZyBzdGVwLgorICAgICAgICAKKyAgICAgICAgQSBsb3Qgb2YgdGhpcyBjaGFuZ2UgaXMg
YWJvdXQgbWFraW5nIGl0IGVhc3kgdG8gaXRlcmF0ZSBHQyBkYXRhIHN0cnVjdHVyZXMgaW4gcGFy
YWxsZWwuIFRoaXMKKyAgICAgICAgY2hhbmdlIG1ha2VzIGFsbW9zdCBhbGwgY29uc3RyYWludHMg
cGFyYWxsZWwtZW5hYmxlZCwgYnV0IG9ubHkgdGhlIERPTSdzIG91dHB1dCBjb25zdHJhaW50IHVz
ZXMKKyAgICAgICAgdGhlIHBhcmFsbGVsIHdvcmsgQVBJLiBUaGF0IGNvbnN0cmFpbnQgaXRlcmF0
ZXMgdGhlIG1hcmtlZCBjZWxscyBpbiB0d28gc3Vic3BhY2VzLiBUaGlzIGNoYW5nZQorICAgICAg
ICBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8gY29tcG9zZSBwYXJhbGxlbCBpdGVyYXRvcnMgb3ZlciBz
dWJzcGFjZXMsIGFsbG9jYXRvcnMsIGJsb2NrcywgYW5kIGNlbGxzLgorICAgICAgICBUaGUgbWFy
a2VkIGNlbGwgcGFyYWxsZWwgaXRlcmF0b3IgaXMgY29tcG9zZWQgb3V0IG9mIHBhcmFsbGVsIGl0
ZXJhdG9ycyBmb3IgdGhlIG90aGVycy4gQSBwYXJhbGxlbAorICAgICAgICBpdGVyYXRvciBpcyBq
dXN0IGFuIGl0ZXJhdG9yIHRoYXQgY2FuIGRvIGFuIGF0b21pYyBuZXh0KCkgdmVyeSBxdWlja2x5
LiBXZSBhYnN0cmFjdCB0aGVtIHVzaW5nCisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPC4uLigp
Pj4sIHdoZXJlIC4uLiBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBpdGVyYXRvci4gV2Ug
a25vdyBpdCdzIGRvbmUKKyAgICAgICAgd2hlbiBpdCByZXR1cm5zIGEgZmFsc2lzaCB2ZXJzaW9u
IG9mIC4uLiAoaW4gdGhlIGN1cnJlbnQgY29kZSwgdGhhdCdzIGFsd2F5cyBhIHBvaW50ZXIgdHlw
ZSwgc28KKyAgICAgICAgZG9uZSBpcyBpbmRpY2F0ZWQgYnkgbnVsbCkuCisgICAgICAgIAorICAg
ICAgICAqIEFQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHA6CisgICAgICAgIChKU0Nv
bnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbToKKyAgICAgICAgKHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKToKKyAgICAgICAg
KHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnBy
b3BhZ2F0ZVRyYW5zaXRpb25zIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKToKKyAgICAgICAgKEpTQzo6
c2hvdWxkTWFya1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVz
cyk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ29t
cGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9D
b25zdHJhaW50UGFyYWxsZWxpc20uaDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJu
YWwpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXAp
OgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlND
OjpIZWFwOjpydW5GaXhwb2ludFBoYXNlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcFRoZVBl
cmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlc3VtZVRoZVBlcmlwaGVyeSk6CisgICAg
ICAgIChKU0M6OkhlYXA6OmFkZENvcmVDb25zdHJhaW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6
OnNldEJvbnVzVmlzaXRvclRhc2spOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5UYXNrSW5QYXJh
bGxlbCk6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hTbG90VmlzaXRvcik6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OndvcmxkSXNSdW5u
aW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRnVuY3Rpb25JblBhcmFsbGVsKToK
KyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Ondvcmxk
SXNTdG9wcGVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAg
ICAoSlNDOjpIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVu
dERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFj
aFNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwU25hcHNo
b3RCdWlsZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5k
Tm9kZSk6CisgICAgICAgICogaGVhcC9MYXJnZUFsbG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6
TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlv
bjo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTG9ja0R1
cmluZ01hcmtpbmcuaDoKKyAgICAgICAgKEpTQzo6bG9ja0R1cmluZ01hcmtpbmcpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UpOgorICAgICAgICAqIGhlYXAvTWFya2Vk
QWxsb2NhdG9yLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmspOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2Vk
Q29uY3VycmVudGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphY3RpdmVXZWFrU2V0c0JlZ2luKToKKyAgICAgICAg
KEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2ZVdlYWtTZXRzRW5kKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6Om5ld0FjdGl2ZVdlYWtTZXRzQmVnaW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRT
cGFjZTo6bmV3QWN0aXZlV2Vha1NldHNFbmQpOgorICAgICAgICAqIGhlYXAvTWFya2luZ0NvbnN0
cmFpbnQuY3BwOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6TWFya2luZ0NvbnN0
cmFpbnQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZXhlY3V0ZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZSk6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUpOgorICAgICAgICAoSlNDOjpN
YXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmspOgorICAgICAgICAoSlNDOjpNYXJraW5n
Q29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0Nv
bnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25z
dHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKToKKyAgICAgICAgKiBoZWFwL01hcmtpbmdD
b25zdHJhaW50Lmg6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpsYXN0RXhlY3V0
ZVBhcmFsbGVsaXNtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnBh
cmFsbGVsaXNtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNr
V29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6
OndvcmtFc3RpbWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpNYXJraW5nQ29u
c3RyYWludFNldCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQpOgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZUlt
cGwpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUFsbCk6Cisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpFeGVj
dXRpb25Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRT
ZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmRpZFZpc2l0U29tZXRoaW5nIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OnNo
b3VsZFRpbWVPdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3Ry
YWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZHJhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZGlkRXhlY3V0ZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpleGVjdXRlKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oOgorICAgICAgICAqIGhlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0
cmFpbnRTb2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKToKKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXI6On5NYXJraW5nQ29uc3RyYWludFNvbHZlcik6CisgICAgICAg
IChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRWaXNpdFNvbWV0aGluZyBjb25zdCk6
CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpleGVjdXRlKToKKyAgICAg
ICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRyYWluKToKKyAgICAgICAgKEpTQzo6
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmNvbnZlcmdlKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZCk6CisgICAgICAgIChKU0M6Ok1h
cmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRFeGVjdXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtp
bmdDb25zdHJhaW50U29sdmVyLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvT3BhcXVlUm9vdFNl
dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpQYXJhbGxlbFNvdXJjZUFkYXB0ZXI6OlBhcmFsbGVsU291cmNl
QWRhcHRlcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVBhcmFsbGVsU291cmNlQWRhcHRlcik6Cisg
ICAgICAgICogaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQp
OgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdD
b25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OnF1aWNr
V29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OmV4
ZWN1dGVJbXBsKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg6IEFk
ZGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJl
c2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZCk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkSXNVcFRvRGF0ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpwZXJmb3Jt
SW5jcmVtZW50T2ZEcmFpbmluZyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWRSZWFj
aFRlcm1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Omhhc1dvcmspOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmRyYWluSW5QYXJhbGxlbFBhc3NpdmVseSk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6YWRkT3BhcXVlUm9vdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpj
b250YWluc09wYXF1ZVJvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMpOiBEZWxldGVk
LgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29uc3QpOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlND
OjpTdWJzcGFjZTo6cGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UpOgorICAgICAgICAoSlNDOjpTdWJz
cGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKToKKyAgICAgICAgKiBoZWFw
L1N1YnNwYWNlLmg6CisgICAgICAgICogaGVhcC9TdWJzcGFjZUlubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbCk6CisgICAgICAgICog
aGVhcC9WaXNpdENvdW50ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlZpc2l0Q291bnRlcjo6
VmlzaXRDb3VudGVyKToKKyAgICAgICAgKEpTQzo6VmlzaXRDb3VudGVyOjp2aXNpdENvdW50IGNv
bnN0KToKKyAgICAgICAgKiBoZWFwL1Zpc2l0aW5nVGltZW91dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vha0Jsb2NrOjpzcGVjaWFs
aXplZFZpc2l0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjptYXJrSWZDaGVhcCk6CisKIDIwMTctMTEtMzAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gVXNlIEpTRml4ZWRBcnJheSBmb3Igb3BfbmV3
X2FycmF5X2J1ZmZlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24g
MjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC01MDAsMTMgKzUwMCwxNiBAQCBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAogaGVh
cC9MYXJnZUFsbG9jYXRpb24uY3BwCiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKIGhlYXAv
TWFya1N0YWNrLmNwcAoraGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKIGhlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcAogaGVhcC9NYXJrZWRCbG9jay5jcHAKIGhlYXAvTWFya2VkU3Bh
Y2UuY3BwCiBoZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWlu
dFNldC5jcHAKK2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JT
Y2hlZHVsZXIuY3BwCiBoZWFwL011dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuY3BwCiBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmNwcAogaGVhcC9TdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJraW5nQ29uc3RyYWludFBy
aXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYXJr
aW5nQ29uc3RyYWludFByaXZhdGUuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgotI2luY2x1ZGUg
IlZpc2l0aW5nVGltZW91dC5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTcyLDExICs3MSwxMSBAQCB2b2lkIEpTQ29u
dGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgLy8gZWxzZSBnZXRzIG1hcmtlZC4K
ICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5ID0gQ29uc3RyYWludFZvbGF0aWxp
dHk6OkdyZXllZEJ5TWFya2luZzsKICAgICAKLSAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6Om1h
a2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PigKKyAgICBhdXRvIGNvbnN0cmFpbnQgPSBzdGQ6
Om1ha2VfdW5pcXVlPFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PigKICAgICAgICAgdG9DU3RyaW5n
KCJBbWMiLCBjb25zdHJhaW50SW5kZXgsICIoIiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiKSIpLAogICAgICAgICB0b0NTdHJpbmcoIkFQSSBN
YXJraW5nIENvbnN0cmFpbnQgIyIsIGNvbnN0cmFpbnRJbmRleCwgIiAoIiwgUmF3UG9pbnRlcihi
aXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnN0cmFpbnRDYWxsYmFjaykpLCAiLCAiLCBSYXdQb2ludGVy
KHVzZXJEYXRhKSwgIikiKSwKICAgICAgICAgW2NvbnN0cmFpbnRDYWxsYmFjaywgdXNlckRhdGFd
Ci0gICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpIHsKKyAgICAgICAgKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAg
TWFya2VyIG1hcmtlcjsKICAgICAgICAgICAgIG1hcmtlci5Jc01hcmtlZCA9IGlzTWFya2VkOwog
ICAgICAgICAgICAgbWFya2VyLk1hcmsgPSBtYXJrOwpAQCAtODQsNyArODMsOCBAQCB2b2lkIEpT
Q29udGV4dEdyb3VwQWRkTWFya2luZ0NvbnN0cmFpbnQoCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNvbnN0cmFpbnRDYWxsYmFjaygmbWFya2VyLCB1c2VyRGF0YSk7CiAgICAgICAgIH0sCi0g
ICAgICAgIHZvbGF0aWxpdHkpOworICAgICAgICB2b2xhdGlsaXR5LAorICAgICAgICBDb25zdHJh
aW50Q29uY3VycmVuY3k6OlNlcXVlbnRpYWwpOwogICAgIAogICAgIHZtLmhlYXAuYWRkTWFya2lu
Z0NvbnN0cmFpbnQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI4Myw5ICsyODMsOCBAQCBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RH
cmFwaChKU0M6CiAgICAgICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICB2b2lkKiBuZXh0Um9vdCA9IHN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHN0YWNrLnJlbW92
ZUxhc3QoKTsKLSAgICAgICAgICAgIGlmICh2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0
YXRlKG5leHRSb290KSA9PSBUcnVlVHJpU3RhdGUpCisgICAgICAgICAgICBpZiAoIXZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChuZXh0Um9vdCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4dFJvb3QpOwogCiAgICAgICAgICAgICBh
dXRvIGFwcGVuZE93bmVkT2JqZWN0cyA9IFsmXSB7CiAgICAgICAgICAgICAgICAgTlNNYXBUYWJs
ZSAqb3duZWRPYmplY3RzID0gW2V4dGVybmFsT2JqZWN0R3JhcGggb2JqZWN0Rm9yS2V5OnN0YXRp
Y19jYXN0PGlkPihuZXh0Um9vdCldOwpAQCAtMzI3LDggKzMyNiw2IEBAIHZvaWQgc2NhbkV4dGVy
bmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiAKICAgICAgICAgfQogICAgICAgICBbZXh0ZXJuYWxS
ZW1lbWJlcmVkU2V0IHJlbW92ZUFsbE9iamVjdHNdOwogICAgIH0KLQotICAgIHZpc2l0b3IubWVy
Z2VJZk5lY2Vzc2FyeSgpOwogfQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBACiAJCTBGMUUzQTQ3MTUzNENCQjkw
MDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0Rv
dWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBE
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3MDBBOUJFNTAgLyogU3lu
Y2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyog
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07Ci0JCTBGMUZC
MzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAv
KiBWaXNpdGluZ1RpbWVvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0
MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwogCQkwRjFGQjM5NzFF
MUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyog
REZHV29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAv
KiBNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OwpAQCAtMjkxLDYgKzI5MCw3IEBACiAJCTBGNDBFNEE3MUM0OTdGNzQwMEE1NzdGQSAv
KiBBaXJPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNjE4MzMyMUM0NUYzNUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQwRTRBODFDNDk3Rjc0MDBB
NTc3RkEgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2Rl
R2VuZXJhdGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY0MEU0QTkxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2
MDA3MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjQxNTQ1QjFGRDIwQjIyMDAxQjU4RjYgLyogQ29uc3Ry
YWludENvbmN1cnJlbmN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0
MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAv
KiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYx
NDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMTIsNiArMzEyLDkgQEAK
IAkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QTM4RjgxQzhFMTNERjAwMTkw
MzE4IC8qIFN1cGVyU2FtcGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0QzkxNjYxQzI5RjRGMjAw
NDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5o
ICovOyB9OworCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MjFGQzdB
OTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi87IH07CisJCTBGNEQ4Qzc1MUZDN0E5N0Qw
MDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4QzczMUZDN0E5NzQwMDFEMzJBQyAvKiBDb25z
dHJhaW50UGFyYWxsZWxpc20uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjREOEM3ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNG
MUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEg
LyogQWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JD
MTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3
QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9Owog
CQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMzU0LDYgKzM1Nyw3IEBACiAJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBB
cnJheVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYzOTQ3ODE1RENFMzRC
MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8q
IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAw
NkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5o
ICovOyB9OworCQkwRjY0NTMxODFGRDI0NkE3MDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5o
ICovOyB9OwogCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3MDFBNzg0
QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxF
ZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0
QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY0RUFGMzFDNEVDRDA2MDA2MjFFOUIgLyog
QWlyQXJnSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLzsgfTsK
QEAgLTQ0Niw2ICs0NTAsOCBAQAogCQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xl
YW5VcFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEMzY5MzFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi87IH07CiAJ
CTBGOUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBCMUMzRTFDMTEw
MDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLzsgfTsKIAkJMEY5RDRDMTExQzNFMkM3
NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4
NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi87IH07CisJCTBGOURBQTA5MUZE
MUMzQ0YwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5REFBMDcxRkQxQzNDODAwNzlDNUIy
IC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggKi87IH07CisJCTBGOURBQTBBMUZEMUMzRDMw
MDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJh
bGxlbFNvdXJjZUFkYXB0ZXIuaCAqLzsgfTsKIAkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8q
IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2
N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xh
eW91dFBoYXNlLmggKi87IH07CiAJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhD
MTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDk5LDcgKzE1MDUsNiBAQAogCQlBRDlFODUyRjFF
OEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlF
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBREJDNTRENTFERjhFQTJCMDA1QkY3MzggLyogV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBREJDNTREMzFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVl
LmggKi87IH07CiAJCUFERDhGQTQ2MUVCMzA3OTcwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25Q
YXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
RDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLzsgfTsK
LQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEREIxRjYyMThENzdEQjcwMDlC
NThBOCAvKiBPcGFxdWVSb290U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFERTgwMjk0MUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAy
OUExRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk1MUUw
OEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUMxRTA4
RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5NzFFMDhGMUM5MDA1
OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTk4MSw3ICsxOTg2LDYgQEAKIAkJ
MEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRv
clNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9w
VGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNj
aGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdG9y
U2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYxRkIzOTIxRTE3
N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXNpdGluZ1RpbWVvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBhdGggPSBkZmcvREZH
UGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlz
dElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTgxRTFGNjVG
OTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjIzNCw2ICsyMjM4LDcgQEAKIAkJMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0lu
c2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJ
bnNlcnRpb25TZXQuY3BwOyBwYXRoID0gZGZnL0RGR0luc2VydGlvblNldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9i
YmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIw
OEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQxNTQ1QTFGRDIwQjFGMDAx
QjU4RjYgLyogQ29uc3RyYWludENvbmN1cnJlbmN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbnN0cmFpbnRDb25jdXJyZW5jeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVn
aXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4
RiAvKiBEYXRhRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFG
b3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNzAsNiArMjI3NSwxMCBA
QAogCQkwRjRBMzhGODFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1cGVyU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2
IC8qIEIzT3JpZ2luRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09y
aWdpbkR1bXAuaDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0Q291bnRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3MzFGQzdBOTc0MDAxRDMyQUMgLyogQ29uc3RyYWlu
dFBhcmFsbGVsaXNtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0cmFp
bnRQYXJhbGxlbGlzbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3NjFG
Q0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyog
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0REUxQ0MxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5j
cHA7IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3Vz
U3BpbGxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZpeE9idmlvdXNT
cGlsbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBCM09yaWdpbkR1
bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW5EdW1w
LmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMzQxLDYgKzIzNTAsOCBAQAogCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ4MTE1
RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0FycmF5TW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQXJyYXlNb2Rl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1
OTdDIC8qIERGR0FycmF5TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdBcnJheU1vZGUuaDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY2NDUzMTUxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFja01lcmdp
bmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjQ1
MzE2MUZEMjQ2QTAwMDI0MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjZGMUE3ODRCQUYw
MDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQmluYXJ5U3dpdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCaW5hcnlTd2l0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEIyNzcxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxFZGdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MDMsNiArMjUxNCw5IEBACiAJCTBGOUQ0QzBCMUMzRTFDMTEw
MDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFy
Z2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQ0QzBFMUMzRTJDNzQwMDZD
RDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBw
YXRoID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjlENEMwRjFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwNjFGRDFD
M0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFy
a2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY5REFBMDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjExQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNl
cnRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5MTcw
MENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI2Nyw3
ICs0MjgxLDYgQEAKIAkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJs
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0
MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBh
cnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFEREIxRjYyMThENzdEQjcw
MDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAy
OTMxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUxpbmtFcnJvci5jcHA7
IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQURFODAyOTQxRTA4RjFDOTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUxp
bmtFcnJvci5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJs
eUxpbmtFcnJvckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NTE3LDYgKzU1MzAsOCBAQAogCQkJCTBGRENFMTI4MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0
ZVN1YnNwYWNlLmggKi8sCiAJCQkJMTQ2QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZh
dGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFGMjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2Vy
dmF0aXZlUm9vdHMuaCAqLywKKwkJCQkwRjQxNTQ1QTFGRDIwQjFGMDAxQjU4RjYgLyogQ29uc3Ry
YWludENvbmN1cnJlbmN5LmggKi8sCisJCQkJMEY0RDhDNzMxRkM3QTk3NDAwMUQzMkFDIC8qIENv
bnN0cmFpbnRQYXJhbGxlbGlzbS5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAv
KiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRG
NyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVm
ZXJHQy5oICovLApAQCAtNTYxMSwxNyArNTYyNiwyMyBAQAogCQkJCTBGNjYwRTM0MUUwNTE3Qjcw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oICovLAogCQkJCTBGNjYwRTM1MUUwNTE3Qjcw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8sCiAJCQkJMEY2NjBFMzYxRTA1
MTdCODAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmggKi8sCisJCQkJMEY5REFBMDYx
RkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcCAqLywKKwkJCQkw
RjlEQUEwNzFGRDFDM0M4MDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCAqLywK
IAkJCQkxNDJENkYwRTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCAqLywKIAkJCQkx
NDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggKi8sCisJCQkJMEY2NDUzMTYx
RkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcCAqLywKKwkJ
CQkwRjY0NTMxNTFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQu
aCAqLywKIAkJCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5j
cHAgKi8sCiAJCQkJMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIu
aCAqLywKIAkJCQkwRkE3NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAq
LywKIAkJCQkwRkE3NjIwMzFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCi0J
CQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKKwkJCQkw
RjlEQUEwODFGRDFDM0M4MDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggKi8sCiAJ
CQkJMEZCQjczQjYxREVGM0FBQzAwMkMwMDlFIC8qIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCAq
LywKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFCMDggLyogUmVnaXN0ZXJTdGF0ZS5oICovLAog
CQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAvKiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmgg
Ki8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAwQzEzODM5IC8qIFJ1bm5pbmdTY29wZS5oICovLAor
CQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5j
cHAgKi8sCisJCQkJMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25z
dHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9y
LmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAq
LywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmgg
Ki8sCkBAIC01NjQzLDcgKzU2NjQsNyBAQAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAv
KiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKIAkJCQkxNDE0
NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4
Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLywKLQkJCQkw
RjFGQjM5MjFFMTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi8sCisJCQkJMEY0
RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovLAogCQkJCTBGOTUyQTlG
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovLAogCQkJCTBGOTUyQUEwMURG
Nzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLywKIAkJCQkxQUNGNzM3NjE3MUNBNkZC
MDBDOUJCMUUgLyogV2Vhay5jcHAgKi8sCkBAIC04MDAwLDYgKzgwMjEsNyBAQAogCQkJCTBGRUM4
NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjVDRjk4OTFFOUVENjUyMDBDMTg2OTIgLyogQWlyU3RhY2tBbGxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjQxNTQ1QjFGRDIwQjIyMDAxQjU4RjYgLyogQ29uc3RyYWludENv
bmN1cnJlbmN5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5RTFDNUZGNDA1MDAyM0VGMjMg
LyogQWlyU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1OEUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclRtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1OEYxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclRtcElubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODIwMCw2ICs4
MjIyLDcgQEAKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VE
ZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZh
bEluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc1MUZDN0E5N0QwMDFEMzJBQyAvKiBD
b25zdHJhaW50UGFyYWxsZWxpc20uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FE
MzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzND
NjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywK
QEAgLTgyOTMsNiArODMxNiw3IEBACiAJCQkJQTc3QTQyM0UxN0EwQkJGRDAwQThEQjgxIC8qIERG
R0Fic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJB
NTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDRE
OTA0MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2NDUzMTgxRkQyNDZBNzAwMjQzMkExIC8qIE1hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NzE0M0ZDRDNGMDA2
OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MDIx
QjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERG
R0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzY4LDYg
Kzg3OTIsNyBAQAogCQkJCTBGMkI2NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
OTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGOURBQTA5MUZEMUMzQ0YwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAw
OTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFE
QjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg5
MTYsNiArODk0MSw3IEBACiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09i
amVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3
MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNEQ4Qzc0MUZDN0E5N0EwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2Vt
Ymx5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDM1LDkgKzkwNjEsOSBA
QAogCQkJCUUzQzI5NUREMUVEMkNCREEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0eUNoYW5nZUFk
YXB0aXZlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MEExQjYxOEI2NjAw
QzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQzRTQwQzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0
NDYwIC8qIE9iamVjdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1
NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBRERC
MUY2MzE4RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkyNDMsNiArOTI2OSw3IEBACiAJCQkJMEY5NTJBQkQxQjQ4N0E3NzAwQzM2
N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwNjE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCNjcwODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJj
ZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAv
KiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI4
Myw3ICs5MzEwLDYgQEAKIAkJCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQz
M0IzMyAvKiBWYXJPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcw
MDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMUZCMzkz
MUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgYm9vbCBB
Y2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogCiAgICAgc3dpdGNoIChtX3R5cGUp
IHsKICAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1
cnJlbnRseShtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKEhlYXA6Omlz
TWFya2VkKG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQogICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJlc3VsdCA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzIsNyAr
OTcyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJgogICAgIAog
ICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0gdHJ1ZTsKIAotICAgIGlmIChIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KGxvY2tlcikp
IHsKQEAgLTExMjQsNyArMTEyNCw3IEBAIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHRpbWVUb0wKIAogYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHsKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pl
dHRpc29uRHVlVG9PbGRBZ2UoKSkpCkBAIC0xMTM5LDEwICsxMTM5LDEwIEBAIGJvb2wgQ29kZUJs
b2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWcKICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRp
YyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24m
IHRyYW5zaXRpb24pCiB7Ci0gICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFw
Ojppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisg
ICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFwOjppc01hcmtlZCh0cmFuc2l0
aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgp
KSkKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE3Miw3ICsx
MTcyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAgICAg
ICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0
dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KICAgICAg
ICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHko
b2xkU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQob2xkU3Ry
dWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChu
ZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
YWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKQEAgLTEyNDYsMTQgKzEyNDYsMTQgQEAgdm9pZCBD
b2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IEpTQ2VsbCogcmVmZXJlbmNlID0gZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsK
ICAgICAgICAgQVNTRVJUKCFqc0R5bmFtaWNDYXN0PENvZGVCbG9jayo+KCpyZWZlcmVuY2UtPnZt
KCksIHJlZmVyZW5jZSkpOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KHJlZmVyZW5jZSkpIHsKKyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChyZWZlcmVuY2UpKSB7
CiAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5j
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAg
ICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVm
ZXJlbmNlc1tpXS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA0LDEzICsxMDQsMTMgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgZGF0YUxvZyht
X3dvcmtsaXN0LCAiOiBDb21waWxpbmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNs
eVxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRv
IGJlIHNhZmVwb2ludGluZyBzaW5jZSB3ZSBvd24gcmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1f
cGxhbi0+dm0tPmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkg
eworICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAg
ICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BlZCBidXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAg
ICAgICAgIG1fcGxhbi0+Y29tcGlsZUluVGhyZWFkKCZtX2RhdGEpOwogICAgICAgICBpZiAobV9w
bGFuLT5zdGFnZSAhPSBQbGFuOjpDYW5jZWxsZWQpIHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4t
PnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAg
ICAgICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMilc
biIpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICB9CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcmVhZHlQbGFucy5hcHBlbmQobV9wbGFuKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAuY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKTsKICAgICAgICAg
ICAgIG1fd29ya2xpc3QubV9wbGFuQ29tcGlsZWQubm90aWZ5QWxsKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBz
dGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5j
ZWxsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFw
aC5tX3ZtLmhlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC53b3JsZElzU3RvcHBlZCgp
KTsKICAgICAKICAgICBpZiAoc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCkKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJv
b3RzLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMiArNjYsMTIgQEAg
dm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z3JvdygpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1h
cmtIb29rPgotaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVy
KHZvaWQqIHAsIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIgZmls
dGVyLCBNYXJrSG9vayYgbWFya0hvb2spCitpbmxpbmUgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6
Z2VuZXJpY0FkZFBvaW50ZXIodm9pZCogcCwgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhl
YXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgVGlueUJsb29tRmlsdGVyIGZpbHRlciwg
TWFya0hvb2smIG1hcmtIb29rKQogewogICAgIG1hcmtIb29rLm1hcmsocCk7CiAKICAgICBIZWFw
VXRpbDo6ZmluZEdDT2JqZWN0UG9pbnRlcnNGb3JNYXJraW5nKAotICAgICAgICBtX2hlYXAsIG1h
cmtpbmdWZXJzaW9uLCBmaWx0ZXIsIHAsCisgICAgICAgIG1faGVhcCwgbWFya2luZ1ZlcnNpb24s
IG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgZmlsdGVyLCBwLAogICAgICAgICBbJl0gKHZvaWQqIHAp
IHsKICAgICAgICAgICAgIGlmIChtX3NpemUgPT0gbV9jYXBhY2l0eSkKICAgICAgICAgICAgICAg
ICBncm93KCk7CkBAIC05NSw4ICs5NSw5IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRTcGFuKHYKIAogICAgIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIgPSBtX2hlYXAub2JqZWN0
U3BhY2UoKS5ibG9ja3MoKS5maWx0ZXIoKTsgLy8gTWFrZSBhIGxvY2FsIGNvcHkgb2YgZmlsdGVy
IHRvIHNob3cgdGhlIGNvbXBpbGVyIGl0IHdvbid0IGFsaWFzLCBhbmQgY2FuIGJlIHJlZ2lzdGVy
LWFsbG9jYXRlZC4KICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IG1faGVhcC5vYmpl
Y3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCk7CisgICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0
ZWRWZXJzaW9uID0gbV9oZWFwLm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7
CiAgICAgZm9yIChjaGFyKiogaXQgPSBzdGF0aWNfY2FzdDxjaGFyKio+KGJlZ2luKTsgaXQgIT0g
c3RhdGljX2Nhc3Q8Y2hhcioqPihlbmQpOyArK2l0KQotICAgICAgICBnZW5lcmljQWRkUG9pbnRl
cigqaXQsIG1hcmtpbmdWZXJzaW9uLCBmaWx0ZXIsIG1hcmtIb29rKTsKKyAgICAgICAgZ2VuZXJp
Y0FkZFBvaW50ZXIoKml0LCBtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBm
aWx0ZXIsIG1hcmtIb29rKTsKIH0KIAogY2xhc3MgRHVtbXlNYXJrSG9vayB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9u
IDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IG5vbklubGluZUNhcGFjaXR5ID0gODE5MiAvIHNpemVvZihIZWFwQ2VsbCop
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgotICAgIHZvaWQgZ2VuZXJp
Y0FkZFBvaW50ZXIodm9pZCosIEhlYXBWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29r
Jik7CisgICAgdm9pZCBnZW5lcmljQWRkUG9pbnRlcih2b2lkKiwgSGVhcFZlcnNpb24gbWFya2lu
Z1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgVGlueUJsb29tRmls
dGVyLCBNYXJrSG9vayYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CiAgICAg
dm9pZCBnZW5lcmljQWRkU3Bhbih2b2lkKiwgdm9pZCogZW5kLCBNYXJrSG9vayYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludENvbmN1cnJlbmN5
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3RyYWlu
dENvbmN1cnJlbmN5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitlbnVtIGNsYXNzIENvbnN0cmFpbnRDb25jdXJyZW5jeSA6IHVpbnQ4X3Qg
eworICAgIFNlcXVlbnRpYWwsCisgICAgQ29uY3VycmVudAorfTsKKyAgICAKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBKU0M6OkNvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5jeSkK
K3sKKyAgICBzd2l0Y2ggKGNvbmN1cnJlbmN5KSB7CisgICAgY2FzZSBKU0M6OkNvbnN0cmFpbnRD
b25jdXJyZW5jeTo6U2VxdWVudGlhbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXF1ZW50aWFsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludENvbmN1cnJlbmN5OjpD
b25jdXJyZW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbmN1cnJlbnQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc3Ry
YWludFBhcmFsbGVsaXNtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc3RyYWludFBhcmFsbGVsaXNtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSA6IHVpbnQ4X3QgeworICAgIFNlcXVlbnRpYWwsCisgICAgUGFyYWxsZWwK
K307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK2lubGlu
ZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpDb25zdHJhaW50UGFy
YWxsZWxpc20gcGFyYWxsZWxpc20pCit7CisgICAgc3dpdGNoIChwYXJhbGxlbGlzbSkgeworICAg
IGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw6CisgICAgICAgIG91
dC5wcmludCgiU2VxdWVudGlhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkNv
bnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWw6CisgICAgICAgIG91dC5wcmludCgiUGFyYWxs
ZWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTIgKzIwOSwxMSBAQCBpbmxpbmUgY29u
c3QgVCBHQ1NlZ21lbnRlZEFycmF5PFQ+OjpyZW1vCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGlu
bGluZSBib29sIEdDU2VnbWVudGVkQXJyYXk8VD46OmlzRW1wdHkoKQogeworICAgIC8vIFRoaXMg
aGFwcGVucyB0byBiZSBzYWZlIHRvIGNhbGwgY29uY3VycmVudGx5LiBJdCdzIGltcG9ydGFudCB0
byBwcmVzZXJ2ZSB0aGF0IGNhcGFiaWxpdHkuCiAgICAgaWYgKG1fdG9wKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKG1fc2VnbWVudHMuaGVhZCgpLT5uZXh0KCkpIHsKLSAgICAgICAg
QVNTRVJUKG1fc2VnbWVudHMuaGVhZCgpLT5uZXh0KCktPm1fdG9wID09IHNfc2VnbWVudENhcGFj
aXR5KTsKKyAgICBpZiAobV9zZWdtZW50cy5oZWFkKCktPm5leHQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5j
bHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgorI2luY2x1ZGUg
Ik1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIk1h
cmtpbmdDb25zdHJhaW50U2V0LmgiCkBAIC02Niw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiVHlwZVBy
b2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlICJW
TS5oIgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIK
ICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTI4
MSw3ICsyODMsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAg
LCBtX211dGF0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhp
cywgIk0iKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtT
dGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFy
a1N0YWNrQXJyYXk+KCkpCi0gICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtlX3VuaXF1ZTxN
YXJraW5nQ29uc3RyYWludFNldD4oKSkKKyAgICAsIG1fY29uc3RyYWludFNldChzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtpbmdDb25zdHJhaW50U2V0PigqdGhpcykpCiAgICAgLCBtX2hhbmRsZVNldCh2
bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9ja1NldD4oKSkK
ICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1YlJvdXRpbmVT
ZXQ+KCkpCkBAIC01OTQsNyArNTk2LDcgQEAgdm9pZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQwogICAgICAgICBmdW5jKGNvZGVCbG9jayk7CiB9CiAKLXZvaWQgSGVhcDo6YXNz
ZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkKK3ZvaWQgSGVhcDo6YXNzZXJ0TWFya1N0YWNrc0Vt
cHR5KCkKIHsKICAgICBib29sIG9rID0gdHJ1ZTsKICAgICAKQEAgLTYwOCwxMiArNjEwLDIxIEBA
IHZvaWQgSGVhcDo6YXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCkKICAgICAgICAgb2sgPSBm
YWxzZTsKICAgICB9CiAgICAgCisgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAorICAgICAgICBbJl0g
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICBpZiAodmlzaXRvci5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBk
YXRhTG9nKCJGQVRBTDogVmlzaXRvciAiLCBSYXdQb2ludGVyKCZ2aXNpdG9yKSwgIiBpcyBub3Qg
ZW1wdHkhXG4iKTsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgIH0pOworICAgIAog
ICAgIFJFTEVBU0VfQVNTRVJUKG9rKTsKIH0KIAogdm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsKLSAgICBtX21hY2hpbmVUaHJlYWRzLT5nYXRo
ZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxv
Y2tzLCBtX2N1cnJlbnRUaHJlYWRTdGF0ZSk7CisgICAgbV9tYWNoaW5lVGhyZWFkcy0+Z2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1fY29kZUJsb2Nr
cywgbV9jdXJyZW50VGhyZWFkU3RhdGUsIG1fY3VycmVudFRocmVhZCk7CiB9CiAKIHZvaWQgSGVh
cDo6Z2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKQEAgLTczMCw3
ICs3NDEsNyBAQCB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogICAgICAgICAgICAgdmlzaXRvci5y
ZXNldCgpOwogICAgICAgICB9KTsKIAotICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgp
OworICAgIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZl
c3RlcnMucmVtb3ZlQWxsKCk7CiAKICAgICBSRUxFQVNFX0FTU0VSVChtX3JhY2VNYXJrU3RhY2st
PmlzRW1wdHkoKSk7CkBAIC05MTEsNyArOTIyLDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVy
ZWRTZXQoY29uc3QgSlNDZQogICAgIG1fYmFycmllcnNFeGVjdXRlZCsrOwogICAgIGlmIChtX211
dGF0b3JTaG91bGRCZUZlbmNlZCkgewogICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAg
ICAgICAgaWYgKCFpc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICBpZiAoIWlz
TWFya2VkKGNlbGwpKSB7CiAgICAgICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxlY3Rpb24g
YSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQgcGFzdAog
ICAgICAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFu
IHVubWFya2VkIFBvc3NpYmx5QmxhY2sgb2JqZWN0LiBJZiB0aGUKICAgICAgICAgICAgIC8vIG9i
amVjdCBnZXRzIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwgZ28g
ZG93biB0aGUgbm9ybWFsIG1hcmtpbmcKQEAgLTkyNCwxNSArOTM1LDE1IEBAIHZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICAgICAgICAgICAgICAvLyBOb3cgd2Ug
cHJvdGVjdCBhZ2FpbnN0IHRoaXMgcmFjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAg
ICAgICAgIC8vICAgICAxKSBPYmplY3Qgc3RhcnRzIG91dCBibGFjayArIHVubWFya2VkLgotICAg
ICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gaXNNYXJrZWRDb25jdXJyZW50bHkgaGVyZS4K
KyAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkIGhlcmUuCiAgICAgICAg
ICAgICAgICAgLy8gICAgIDIpIE9iamVjdCBpcyBtYXJrZWQgYW5kIGdyZXllZC4KICAgICAgICAg
ICAgICAgICAvLyAgICAgMykgT2JqZWN0IGlzIHNjYW5uZWQgYW5kIGJsYWNrZWQuCiAgICAgICAg
ICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVT
dHJvbmcgaGVyZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIEluIHRo
aXMgY2FzZSB3ZSB3b3VsZCBoYXZlIG1hZGUgdGhlIG9iamVjdCB3aGl0ZSBhZ2FpbiwgZXZlbiB0
aG91Z2ggaXQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gYmUgYmxhY2suIFRoaXMgY2hlY2sg
bGV0cyB1cyBjb3JyZWN0IG91ciBtaXN0YWtlLiBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0
Ci0gICAgICAgICAgICAgICAgLy8gaXNNYXJrZWRDb25jdXJyZW50bHkgY29udmVyZ2VzIG1vbm90
b25pY2FsbHkgdG8gdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoaXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpIHsKKyAgICAgICAgICAgICAgICAvLyBpc01hcmtlZCBjb252ZXJnZXMgbW9ub3Rv
bmljYWxseSB0byB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChpc01hcmtlZChjZWxsKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGRpZmZpY3VsdCB0byB3b3JrIG91dCB3aGV0aGVy
IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGdyZXkgb3IgYmxhY2sgYXQKICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhpcyBwb2ludC4gV2Ugc2F5IGJsYWNrIGNvbnNlcnZhdGl2ZWx5LgogICAgICAgICAg
ICAgICAgICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUJsYWNrKTsK
QEAgLTk0OCw3ICs5NTksNyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBK
U0NlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAg
QVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICAgICAgQVNTRVJU
KEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRoZSBvYmpl
Y3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yIG1heSBz
ZXQgdGhlCiAgICAgLy8gc3RhdGUgdG8gRGVmaW5pdGVseUdyZXkgYW5kIHRoZW4gdG8gUG9zc2li
bHlPbGRPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0bwogICAgIC8vIHJhY2Ug
d2l0aCB0aGUgY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUg
YmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXwpAQCAtMTA5MSw2ICsxMTAyLDcgQEAgYXV0byBIZWFw
OjpydW5DdXJyZW50UGhhc2UoR0NDb25kdWN0b3IgYwogewogICAgIGNoZWNrQ29ubihjb25uKTsK
ICAgICBtX2N1cnJlbnRUaHJlYWRTdGF0ZSA9IGN1cnJlbnRUaHJlYWRTdGF0ZTsKKyAgICBtX2N1
cnJlbnRUaHJlYWQgPSAmV1RGOjpUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICAKICAgICBpZiAoY29u
biA9PSBHQ0NvbmR1Y3Rvcjo6TXV0YXRvcikKICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZt
KCkpOwpAQCAtMTI4MywxMyArMTI5NSwxMSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5G
aXhwb2ludFBoYXNlCiAgICAgfQogICAgICAgICAKICAgICBpZiAoc2xvdFZpc2l0b3IuZGlkUmVh
Y2hUZXJtaW5hdGlvbigpKSB7CisgICAgICAgIG1fb3BhcXVlUm9vdHMuZGVsZXRlT2xkVGFibGVz
KCk7CisgICAgICAgIAogICAgICAgICBtX3NjaGVkdWxlci0+ZGlkUmVhY2hUZXJtaW5hdGlvbigp
OwotICAgICAgICAgICAgCi0gICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwot
ICAgICAgICAgICAgCi0gICAgICAgIHNsb3RWaXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZUlmTmVjZXNzYXJ5KCk7CisgICAg
ICAgIAorICAgICAgICBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICAgICAgICAgIAogICAg
ICAgICAvLyBGSVhNRTogVGFrZSBtX211dGF0b3JEaWRSdW4gaW50byBhY2NvdW50IHdoZW4gc2No
ZWR1bGluZyBjb25zdHJhaW50cy4gTW9zdCBsaWtlbHksCiAgICAgICAgIC8vIHdlIGRvbid0IGhh
dmUgdG8gZXhlY3V0ZSByb290IGNvbnN0cmFpbnRzIGFnYWluIHVubGVzcyB0aGUgbXV0YXRvciBk
aWQgcnVuLiBBdCBhCkBAIC0xMjk3LDE3ICsxMzA3LDE0IEBAIE5FVkVSX0lOTElORSBib29sIEhl
YXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgLy8gZXN0aW1hdGUuCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MjgKICAgICAgICAgICAg
IAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0
IHRoYXQgd2UgY291bGQgdGltZW91dC4gVGhpcyBvbmx5IGNvbWVzCi0gICAgICAgIC8vIGludG8g
cGxheSBpZiB3ZSdyZSBleGVjdXRpbmcgY29uc3RyYWludHMgZm9yIHRoZSBmaXJzdCB0aW1lLiBC
dXQgdGhhdCB3aWxsIG1hdHRlcgotICAgICAgICAvLyB3aGVuIHdlIGhhdmUgZGVlcCBzdGFja3Mg
b3IgYSBsb3Qgb2YgRE9NIHN0dWZmLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMxCi0gICAgICAgICAgICAKICAgICAgICAgLy8gV29uZGVy
aW5nIHdoYXQgdGhpcyBkb2VzPyBMb29rIGF0IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpLiBU
aGUgRE9NIGFuZCBvdGhlcnMgY2FuIGFsc28KICAgICAgICAgLy8gYWRkIHRoZWlyIG93biB1c2lu
ZyBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludCgpLgotICAgICAgICBib29sIGNvbnZlcmdlZCA9
Ci0gICAgICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmV4ZWN1dGVDb252ZXJnZW5jZShzbG90Vmlz
aXRvciwgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgIGJvb2wgY29udmVyZ2Vk
ID0gbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0b3IpOworICAg
ICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZSBzbG90VmlzaXRvci5pc0VtcHR5KCkgY2hlY2sg
aXMgbW9zdCBsaWtlbHkgbm90IG5lZWRlZC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDMxMAogICAgICAgICBpZiAoY29udmVyZ2VkICYmIHNs
b3RWaXNpdG9yLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNr
c0VtcHR5KCk7CisgICAgICAgICAgICBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICAgICAg
ICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBDb2xsZWN0b3JQaGFzZTo6RW5kKTsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0xMzI0LDYgKzEzMzEsMTUgQEAgTkVWRVJfSU5MSU5FIGJv
b2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgICAgICAKICAgICBtX3NjaGVkdWxlci0+c3lu
Y2hyb25vdXNEcmFpbmluZ0RpZFN0YWxsKCk7CiAKKyAgICAvLyBUaGlzIGlzIGtpbmRhIHRyaWNr
eS4gVGhlIHRlcm1pbmF0aW9uIGNoZWNrIGxvb2tzIGF0OgorICAgIC8vCisgICAgLy8gLSBXaGV0
aGVyIHRoZSBtYXJraW5nIHRocmVhZHMgYXJlIGFjdGl2ZS4gSWYgdGhleSBhcmUgbm90LCB0aGlz
IG1lYW5zIHRoYXQgdGhlIG1hcmtpbmcgdGhyZWFkcycKKyAgICAvLyAgIFNsb3RWaXNpdG9ycyBh
cmUgZW1wdHkuCisgICAgLy8gLSBXaGV0aGVyIHRoZSBjb2xsZWN0b3IncyBzbG90IHZpc2l0b3Ig
aXMgZW1wdHkuCisgICAgLy8gLSBXaGV0aGVyIHRoZSBzaGFyZWQgbWFyayBzdGFja3MgYXJlIGVt
cHR5LgorICAgIC8vCisgICAgLy8gVGhpcyBkb2Vzbid0IGhhdmUgdG8gY2hlY2sgdGhlIG11dGF0
b3IgU2xvdFZpc2l0b3IgYmVjYXVzZSB0aGF0IG9uZSBiZWNvbWVzIGVtcHR5IGFmdGVyIGV2ZXJ5
IEdDCisgICAgLy8gd29yayBpbmNyZW1lbnQsIHNvIGl0IG11c3QgYmUgZW1wdHkgbm93LgogICAg
IGlmIChzbG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOyAvLyBUaGlzIGlzIGxpa2UgcmVsb29waW5nIHRvIHRoZSB0b3AgaWYgcnVuRml4cG9pbnRQ
aGFzZSgpLgogICAgICAgICAKQEAgLTE0ODksNiArMTUwNSw4IEBAIE5FVkVSX0lOTElORSBib29s
IEhlYXA6OmZpbmlzaENoYW5naW5nUGgKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2co
Y29ubiwgIjogR29pbmcgdG8gcGhhc2U6ICIsIG1fbmV4dFBoYXNlLCAiIChmcm9tICIsIG1fY3Vy
cmVudFBoYXNlLCAiKVxuIik7CiAgICAgCisgICAgbV9waGFzZVZlcnNpb24rKzsKKyAgICAKICAg
ICBib29sIHN1c3BlbmRlZEJlZm9yZSA9IHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQobV9jdXJyZW50
UGhhc2UpOwogICAgIGJvb2wgc3VzcGVuZGVkQWZ0ZXIgPSB3b3JsZFNob3VsZEJlU3VzcGVuZGVk
KG1fbmV4dFBoYXNlKTsKICAgICAKQEAgLTE1MjYsNyArMTU0NCw3IEBAIE5FVkVSX0lOTElORSBi
b29sIEhlYXA6OmZpbmlzaENoYW5naW5nUGgKIAogdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5
KEdDQ29uZHVjdG9yIGNvbm4pCiB7Ci0gICAgaWYgKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhl
V29ybGRJc1N0b3BwZWQpIHsKKyAgICBpZiAobV93b3JsZElzU3RvcHBlZCkgewogICAgICAgICBk
YXRhTG9nKCJGQVRBTDogd29ybGQgYWxyZWFkeSBzdG9wcGVkLlxuIik7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTUzNyw3ICsxNTU1LDcgQEAgdm9p
ZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29uZHVjdG9yIAogICAgIG1fbXV0YXRvckRpZFJ1
biA9IGZhbHNlOwogCiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwotICAgIG1fY29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworICAgIG1fd29ybGRJc1N0
b3BwZWQgPSB0cnVlOwogCiAgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAogICAgICAgICBbJl0gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewpAQCAtMTU3NCwxMSArMTU5MiwxMSBAQCBORVZFUl9J
TkxJTkUgdm9pZCBIZWFwOjpyZXN1bWVUaGVQZXJpcGhlCiAgICAgCiAgICAgbV9iYXJyaWVyc0V4
ZWN1dGVkID0gMDsKICAgICAKLSAgICBpZiAoIW1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29y
bGRJc1N0b3BwZWQpIHsKKyAgICBpZiAoIW1fd29ybGRJc1N0b3BwZWQpIHsKICAgICAgICAgZGF0
YUxvZygiRmF0YWw6IGNvbGxlY3RvciBkb2VzIG5vdCBiZWxpZXZlIHRoYXQgdGhlIHdvcmxkIGlz
IHN0b3BwZWQuXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9Ci0gICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IGZhbHNl
OworICAgIG1fd29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICAKICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBiZSB2YXN0bHkgaW1wcm92ZWQ6IHdlIHdhbnQgdG8gZ3JhYiB0aGUgbG9ja3MgaW4g
dGhlIG9yZGVyIGluIHdoaWNoIHRoZXkKICAgICAvLyBiZWNvbWUgYXZhaWxhYmxlLiBXZSBiYXNp
Y2FsbHkgd2FudCBhIGxvY2tBbnkoKSBtZXRob2QgdGhhdCB3aWxsIGxvY2sgd2hhdGV2ZXIgbG9j
ayBpcyBhdmFpbGFibGUKQEAgLTI1NzgsNyArMjU5NiwxMSBAQCB2b2lkIEhlYXA6OmFkZENvcmVD
b25zdHJhaW50cygpCiB7CiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDcyIs
ICJDb25zZXJ2YXRpdmUgU2NhbiIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RW
aXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzLCBsYXN0VmVy
c2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKV0gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikgbXV0YWJsZSB7CisgICAgICAgICAgICBib29sIHNob3VsZE5vdFByb2R1Y2VXb3JrID0gbGFz
dFZlcnNpb24gPT0gbV9waGFzZVZlcnNpb247CisgICAgICAgICAgICBpZiAoc2hvdWxkTm90UHJv
ZHVjZVdvcmspCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCiAgICAgICAg
ICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiQ29uc3Ry
YWludDogY29uc2VydmF0aXZlIHNjYW4iKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UucHJl
cGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKTsKICAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3Rz
IGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKQEAgLTI1ODcsMTIgKzI2MDksMTQgQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3Rz
KGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoY29u
c2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsYXN0VmVyc2lvbiA9
IG1fcGhhc2VWZXJzaW9uOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0
eTo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAog
ICAgICAgICAiTXNyIiwgIk1pc2MgU21hbGwgUm9vdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECiAgICAgICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBzbG90Vmlz
aXRvcik7CiAjZW5kaWYKQEAgLTI2MTMsNyArMjYzNyw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIlNo
IiwgIlN0cm9uZyBIYW5kbGVzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25n
SGFuZGxlcyhzbG90VmlzaXRvcik7CiAgICAgICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHNs
b3RWaXNpdG9yKTsKICAgICAgICAgfSwKQEAgLTI2MjEsNyArMjY0NSw3IEBAIHZvaWQgSGVhcDo6
YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAg
ICAgICAgIkQiLCAiRGVidWdnZXIiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAg
ICAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+
c2FtcGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
c2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsKQEAgLTI2NDEsMjEgKzI2NjUsMjEgQEAgdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+
YWRkKAogICAgICAgICAiSnNyIiwgIkpJVCBTdHViIFJvdXRpbmVzIiwKLSAgICAgICAgW3RoaXNd
IChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAg
ICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1f
aml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CiAg
ICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4ZWN1dGlv
bik7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcyIsICJXZWFr
IFNldHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3Qg
VmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikgewogICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHNsb3RWaXNp
dG9yKTsKICAgICAgICAgfSwKICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5
TWFya2luZyk7CiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJXcmgi
LCAiV2VhayBSZWZlcmVuY2UgSGFydmVzdGVycyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlz
XSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBmb3IgKFdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQo
KTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKICAgICAgICAgICAgICAgICBj
dXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RWaXNpdG9yKTsKICAgICAgICAgfSwKQEAg
LTI2NjQsNyArMjY4OCw3IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICNpZiBF
TkFCTEUoREZHX0pJVCkKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkR3Iiwg
IkRGRyBXb3JrbGlzdHMiLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
ciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvcikgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1i
ZXJPZldvcmtsaXN0cygpOyBpLS07KQogICAgICAgICAgICAgICAgIERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoc2xvdFZpc2l0b3IpOwogICAgICAg
ICAgICAgCkBAIC0yNjg0LDcgKzI3MDgsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50
cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICJDYiIsICJDb2Rl
QmxvY2tzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0
IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpIHsKICAgICAgICAgICAgIGl0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxv
Y2tzV2l0aG91dEhvbGRpbmdMb2NrcygKICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9jayog
Y29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBDb2RlQmxvY2sg
YXMgYSBjb25zdHJhaW50IG9ubHkgaWYgaXQncyBibGFjay4KQEAgLTI2OTUsMjMgKzI3MTksNyBA
QCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgIH0sCiAgICAgICAgIENv
bnN0cmFpbnRWb2xhdGlsaXR5OjpTZWxkb21HcmV5ZWQpOwogICAgIAotICAgIG1fY29uc3RyYWlu
dFNldC0+YWRkKAotICAgICAgICAiTXJtcyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIsCi0g
ICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1Rp
bWVvdXQmKSB7Ci0gICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhhdCB3
ZSBpbnRyb2R1Y2VkIHdvcmshCi0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1h
cmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7Ci0gICAgICAgICAgICBz
bG90VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIigiLCBz
aXplLCAiKSIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX211dGF0b3JNYXJrU3RhY2st
PnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKLSAgICAgICAgICAg
IG1fcmFjZU1hcmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNr
KCkpOwotICAgICAgICB9LAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJikgLT4gZG91Ymxl
IHsKLSAgICAgICAgICAgIHJldHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFj
ZU1hcmtTdGFjay0+c2l6ZSgpOwotICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRp
bGl0eTo6R3JleWVkQnlFeGVjdXRpb24pOworICAgIG1fY29uc3RyYWludFNldC0+YWRkKHN0ZDo6
bWFrZV91bmlxdWU8TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ+KCp0aGlzKSk7CiB9CiAKIHZv
aWQgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25z
dHJhaW50PiBjb25zdHJhaW50KQpAQCAtMjc5NCwxNiArMjgwMiw2IEBAIHZvaWQgSGVhcDo6YWxs
b3dDb2xsZWN0aW9uKCkKICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrLnVubG9jaygpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0
b3IoY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OwotICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKLSAgICBmb3IgKGF1dG8mIHNsb3RW
aXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgZnVuYygqc2xvdFZpc2l0
b3IpOwotfQotCiB2b2lkIEhlYXA6OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVl
KQogewogICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdmFsdWU7CkBAIC0yODQ3LDQgKzI4
NDUsMjQgQEAgdm9pZCBIZWFwOjpyZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soYwogICAgIG1f
aGVhcEZpbmFsaXplckNhbGxiYWNrcy5yZW1vdmVGaXJzdChjYWxsYmFjayk7CiB9CiAKK3ZvaWQg
SGVhcDo6c2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNp
dG9yJik+PiB0YXNrKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJraW5nTXV0
ZXgpOworICAgIG1fYm9udXNWaXNpdG9yVGFzayA9IHRhc2s7CisgICAgbV9tYXJraW5nQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgSGVhcDo6cnVuVGFza0luUGFyYWxs
ZWwoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICB1
bnNpZ25lZCBpbml0aWFsUmVmQ291bnQgPSB0YXNrLT5yZWZDb3VudCgpOworICAgIHNldEJvbnVz
VmlzaXRvclRhc2sodGFzayk7CisgICAgdGFzay0+cnVuKCptX2NvbGxlY3RvclNsb3RWaXNpdG9y
KTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKG51bGxwdHIpOworICAgIHsKKyAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX21hcmtpbmdNdXRleCk7CisgICAgICAgIHdoaWxlICh0YXNr
LT5yZWZDb3VudCgpID4gaW5pdGlhbFJlZkNvdW50KQorICAgICAgICAgICAgbV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUud2FpdChtX21hcmtpbmdNdXRleCk7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIy
NTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgogI2luY2x1
ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhy
ZWFkLmg+CisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KQEAgLTczLDYgKzc0LDcgQEAgY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE1hY2hpbmVUaHJlYWRzOwogY2xhc3MgTWFya1N0
YWNrQXJyYXk7CitjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtl
ZEFsbG9jYXRvcjsKIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOwogY2xhc3MgTWFya2luZ0Nv
bnN0cmFpbnQ7CkBAIC0xMTQsNyArMTE2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzX3RpbWVDaGVja1Jlc29sdXRpb24gPSAxNjsKIAogICAgIHN0YXRpYyBib29sIGlz
TWFya2VkKGNvbnN0IHZvaWQqKTsKLSAgICBzdGF0aWMgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRs
eShjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChIZWFwVmVy
c2lvbiwgY29uc3Qgdm9pZCopOwogICAgIAogICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoY29u
c3Qgdm9pZCopOwpAQCAtMTU0LDcgKzE1NSw4IEBAIHB1YmxpYzoKICAgICBNdXRhdG9yU3RhdGUg
bXV0YXRvclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhdGU7IH0KICAgICBzdGQ6
Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gY29sbGVjdGlvblNjb3BlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xsZWN0aW9uU2NvcGU7IH0KICAgICBib29sIGhhc0hlYXBBY2Nlc3MoKSBjb25zdDsK
LSAgICBib29sIGNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkgY29uc3Q7
CisgICAgYm9vbCB3b3JsZElzU3RvcHBlZCgpIGNvbnN0OworICAgIGJvb2wgd29ybGRJc1J1bm5p
bmcoKSBjb25zdCB7IHJldHVybiAhd29ybGRJc1N0b3BwZWQoKTsgfQogCiAgICAgLy8gV2UncmUg
YWx3YXlzIGJ1c3kgb24gdGhlIGNvbGxlY3Rpb24gdGhyZWFkcy4gT24gdGhlIG1haW4gdGhyZWFk
LCB0aGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSdyZQogICAgIC8vIGhlbHBpbmcgaGVhcC4KQEAgLTM0
OSw2ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbGxvd0NvbGxlY3Rpb24oKTsKICAgICAK
ICAgICB1aW50NjRfdCBtdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bXV0YXRvckV4ZWN1dGlvblZlcnNpb247IH0KKyAgICB1aW50NjRfdCBwaGFzZVZlcnNpb24oKSBj
b25zdCB7IHJldHVybiBtX3BoYXNlVmVyc2lvbjsgfQogICAgIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjp1bmlxdWVfcHRyPE1hcmtpbmdDb25z
dHJhaW50Pik7CiAgICAgCkBAIC0zNTgsNiArMzYxLDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIGFkZEhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxpemVyQ2FsbGJhY2sm
KTsKICAgICB2b2lkIHJlbW92ZUhlYXBGaW5hbGl6ZXJDYWxsYmFjayhjb25zdCBIZWFwRmluYWxp
emVyQ2FsbGJhY2smKTsKKyAgICAKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFsbGVsKGNvbnN0IEZ1bmMmIGZ1
bmMpCisgICAgeworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFyZWRUYXNrPHZv
aWQoU2xvdFZpc2l0b3ImKT4oZnVuYykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC0zNzMsNiArMzg3LDcg
QEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogICAgIGZyaWVuZCBj
bGFzcyBKSVRTdHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOworICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkU3BhY2U7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRv
cjsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CkBAIC01MjUsOCArNTQwLDEwIEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGl0ZXJhdGVFeGVj
dXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2Nrcyhjb25zdCBGdW5j
Jik7CiAgICAgCi0gICAgdm9pZCBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICB2
b2lkIGFzc2VydE1hcmtTdGFja3NFbXB0eSgpOwogCisgICAgdm9pZCBzZXRCb251c1Zpc2l0b3JU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+KTsKKyAgICAKICAgICBj
b25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAg
ICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU3OSw5ICs1OTYsNiBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90
VmlzaXRvcnM7CiAgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29u
c3QgRnVuYyYpOwotCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNr
IG1faGFuZGxlU3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVCbG9ja1NldD4gbV9jb2Rl
QmxvY2tzOwpAQCAtNjMzLDggKzY0Nyw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFy
a2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX29wYXF1ZVJvb3RzTXV0ZXg7
Ci0gICAgSGFzaFNldDxjb25zdCB2b2lkKj4gbV9vcGFxdWVSb290czsKKyAgICBDb25jdXJyZW50
UHRySGFzaFNldCBtX29wYXF1ZVJvb3RzOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Js
b2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIApAQCAtNjQyLDYgKzY1NSw3IEBAIHByaXZhdGU6CiAg
ICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25k
aXRpb25hbEZpbmFsaXplcnM7CiAKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNs
aWVudDsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBtX2JvbnVz
VmlzaXRvclRhc2s7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6ZV90IG1f
YmxvY2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKQEAgLTY1Nyw3ICs2NzEsNyBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBuZWVkRmluYWxpemVCaXQgPSAxdSA8PCA0dTsKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsgLy8g
QWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxlLgog
ICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwotICAgIGJvb2wgbV9jb2xsZWN0b3JC
ZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dvcmxk
SXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1fYmVmb3JlR0M7CiAgICAg
TW9ub3RvbmljVGltZSBtX2FmdGVyR0M7CiAgICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwpA
QCAtNjcyLDYgKzY4Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RocmVhZElzU3RvcHBpbmcg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9tdXRhdG9yRGlkUnVuIHsgdHJ1ZSB9OwogICAgIHVpbnQ2
NF90IG1fbXV0YXRvckV4ZWN1dGlvblZlcnNpb24geyAwIH07CisgICAgdWludDY0X3QgbV9waGFz
ZVZlcnNpb24geyAwIH07CiAgICAgQm94PExvY2s+IG1fdGhyZWFkTG9jazsKICAgICBSZWZQdHI8
QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3RocmVhZENvbmRpdGlvbjsgLy8gVGhlIG11dGF0
b3IgbXVzdCBub3Qgd2FpdCBvbiB0aGlzLiBJdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2NrLgogICAg
IFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwpAQCAtNjkzLDYgKzcwOCw3IEBAIHBy
aXZhdGU6CiAgICAgdWludHB0cl90IG1fYmFycmllcnNFeGVjdXRlZCB7IDAgfTsKICAgICAKICAg
ICBDdXJyZW50VGhyZWFkU3RhdGUqIG1fY3VycmVudFRocmVhZFN0YXRlIHsgbnVsbHB0ciB9Owor
ICAgIFdURjo6VGhyZWFkKiBtX2N1cnJlbnRUaHJlYWQgeyBudWxscHRyIH07IC8vIEl0J3MgT0sg
aWYgdGhpcyBiZWNvbWVzIGEgZGFuZ2xpbmcgcG9pbnRlci4KIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MywzMCArNjMsMjAgQEAgaW5saW5lIGJvb2wgSGVhcDo6aGFz
SGVhcEFjY2VzcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fd29ybGRTdGF0ZS5sb2FkKCkgJiBoYXNB
Y2Nlc3NCaXQ7CiB9CiAKLWlubGluZSBib29sIEhlYXA6OmNvbGxlY3RvckJlbGlldmVzVGhhdFRo
ZVdvcmxkSXNTdG9wcGVkKCkgY29uc3QKK2lubGluZSBib29sIEhlYXA6OndvcmxkSXNTdG9wcGVk
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZDsKKyAgICByZXR1cm4gbV93b3JsZElzU3RvcHBlZDsKIH0KIAorLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG1ldGhvZCwgc28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBt
YXJraW5nVmVyc2lvbigpIHF1aWNrbHkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc5OTg4CiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWQoY29u
c3Qgdm9pZCogcmF3Q2VsbCkKIHsKLSAgICBBU1NFUlQobWF5QmVHQ1RocmVhZCgpICE9IEdDVGhy
ZWFkVHlwZTo6SGVscGVyKTsKICAgICBIZWFwQ2VsbCogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KHJhd0NlbGwpOwogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQogICAg
ICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNNYXJrZWQoKTsKICAgICBNYXJr
ZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIHJldHVybiBibG9jay5p
c01hcmtlZCgKLSAgICAgICAgYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdW
ZXJzaW9uKCksIGNlbGwpOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkoY29uc3Qgdm9pZCogcmF3Q2VsbCkKLXsKLSAgICBIZWFwQ2VsbCogY2VsbCA9
IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJhd0NlbGwpOwotICAgIGlmIChjZWxsLT5pc0xhcmdl
QWxsb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCkuaXNN
YXJrZWQoKTsKLSAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwot
ICAgIHJldHVybiBibG9jay5pc01hcmtlZENvbmN1cnJlbnRseSgKLSAgICAgICAgYmxvY2sudm0o
KS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCksIGNlbGwpOworICAgIHJldHVy
biBibG9jay5pc01hcmtlZChibG9jay52bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1Zl
cnNpb24oKSwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBIZWFwOjp0ZXN0QW5kU2V0
TWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiByYXdDZWxsKQpA
QCAtMTc5LDE5ICsxNjksMTkgQEAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWlu
UHRyPAogCiBpbmxpbmUgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKLSAg
ICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNT
dG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkg
fHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJU
KCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERl
cHRoLS07CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRH
Q0lmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX2NvbGxlY3Rv
ckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKKyAgICBBU1NFUlQoIW1heUJlR0NUaHJl
YWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKICAgICAK
ICAgICBpZiAoVU5MSUtFTFkobV9kaWREZWZlckdDV29yaykpIHsKQEAgLTI2OSw0ICsyNTksMTQg
QEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5KCkKICAgICAgICAgc3RvcElmTmVj
ZXNzYXJ5U2xvdygpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBIZWFwOjpm
b3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgIGZ1bmMoKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOworICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKKyAgICBm
b3IgKGF1dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAg
ZnVuYygqc2xvdFZpc2l0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCShy
ZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNo
b3RCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIEhlYXBT
bmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3QoCiB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6
OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQogewogICAgIEFTU0VSVChtX3Byb2ZpbGVyLmFjdGl2
ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOwotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKIAog
ICAgIGlmIChoYXNFeGlzdGluZ05vZGVGb3JDZWxsKGNlbGwpKQogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgJKHJldmlzaW9uIDIyNTQwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDggKzQ2LDggQEAgcHVibGljOgogICAgIC8vIGJlZm9yZSBsaXZlbmVzcyBkYXRhIGlz
IGNsZWFyZWQgdG8gYmUgYWNjdXJhdGUuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAg
ICBzdGF0aWMgdm9pZCBmaW5kR0NPYmplY3RQb2ludGVyc0Zvck1hcmtpbmcoCi0gICAgICAgIEhl
YXAmIGhlYXAsIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIgZmls
dGVyLCB2b2lkKiBwYXNzZWRQb2ludGVyLAotICAgICAgICBjb25zdCBGdW5jJiBmdW5jKQorICAg
ICAgICBIZWFwJiBoZWFwLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLAorICAgICAgICB2
b2lkKiBwYXNzZWRQb2ludGVyLCBjb25zdCBGdW5jJiBmdW5jKQogICAgIHsKICAgICAgICAgY29u
c3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JiBzZXQgPSBoZWFwLm9iamVjdFNwYWNlKCkuYmxvY2tz
KCkuc2V0KCk7CiAgICAgICAgIApAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgJiYgc2V0LmNvbnRhaW5zKHByZXZpb3VzQ2FuZGlkYXRlKQogICAgICAgICAgICAgICAg
ICYmIHByZXZpb3VzQ2FuZGlkYXRlLT5oYW5kbGUoKS5jZWxsS2luZCgpID09IEhlYXBDZWxsOjpB
dXhpbGlhcnkpIHsKICAgICAgICAgICAgICAgICBwcmV2aW91c1BvaW50ZXIgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4ocHJldmlvdXNDYW5kaWRhdGUtPmhhbmRsZSgpLmNlbGxBbGlnbihwcmV2aW91c1Bv
aW50ZXIpKTsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNDYW5kaWRhdGUtPmhhbmRsZSgp
LmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIGlzTWFya2luZywgcHJldmlvdXNQb2ludGVyKSkK
KyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNDYW5kaWRhdGUtPmhhbmRsZSgpLmlzTGl2ZUNl
bGwobWFya2luZ1ZlcnNpb24sIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgaXNNYXJraW5nLCBwcmV2
aW91c1BvaW50ZXIpKQogICAgICAgICAgICAgICAgICAgICBmdW5jKHByZXZpb3VzUG9pbnRlcik7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBhdXRvIHRyeVBvaW50ZXIgPSBb
Jl0gKHZvaWQqIHBvaW50ZXIpIHsKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmhhbmRsZSgp
LmlzTGl2ZUNlbGwobWFya2luZ1ZlcnNpb24sIGlzTWFya2luZywgcG9pbnRlcikpCisgICAgICAg
ICAgICBpZiAoY2FuZGlkYXRlLT5oYW5kbGUoKS5pc0xpdmVDZWxsKG1hcmtpbmdWZXJzaW9uLCBu
ZXdseUFsbG9jYXRlZFZlcnNpb24sIGlzTWFya2luZywgcG9pbnRlcikpCiAgICAgICAgICAgICAg
ICAgZnVuYyhwb2ludGVyKTsKICAgICAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFy
a2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQp
OyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBDZWxsKikgeyByZXR1cm4g
aXNNYXJrZWQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCos
IERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4g
aXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwVmVyc2lv
biwgSGVhcENlbGwqKSB7IHJldHVybiBpc01hcmtlZCgpOyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7
IHJldHVybiBpc01hcmtlZCgpIHx8IGlzTmV3bHlBbGxvY2F0ZWQoKTsgfQogICAgIAogICAgIGJv
b2wgaGFzVmFsaWRDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZENlbGw7IH0KQEAgLTEx
MCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRl
cyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgIAotICAg
IERlcGVuZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24pIHsgcmV0dXJuIG51bGxEZXBlbmRl
bmN5KCk7IH0KKyAgICBEZXBlbmRlbmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uKSB7IHJldHVy
biBEZXBlbmRlbmN5KCk7IH0KICAgICAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdGVzdEFuZFNl
dE1hcmtlZCgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9ja0R1
cmluZ01hcmtpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9M
b2NrRHVyaW5nTWFya2luZy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDE0ICszMyw5
IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gVXNlIHRoaXMgbG9jayBzY29wZSBsaWtlIHNvOgogLy8g
YXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyhoZWFwLCBsb2NrKTsKIHRlbXBsYXRlPHR5
cGVuYW1lIExvY2tUeXBlPgotTG9ja2VyPExvY2tUeXBlPiBsb2NrRHVyaW5nTWFya2luZyhIZWFw
JiBoZWFwLCBMb2NrVHlwZSYgcGFzc2VkTG9jaykKK2F1dG8gbG9ja0R1cmluZ01hcmtpbmcoSGVh
cCYgaGVhcCwgTG9ja1R5cGUmIHBhc3NlZExvY2spCiB7Ci0gICAgTG9ja1R5cGUqIGxvY2s7Ci0g
ICAgaWYgKGhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpCi0gICAgICAgIGxvY2sgPSAmcGFz
c2VkTG9jazsKLSAgICBlbHNlCi0gICAgICAgIGxvY2sgPSBudWxscHRyOwotICAgIHJldHVybiBM
b2NrZXI8TG9ja1R5cGU+KGxvY2spOworICAgIHJldHVybiBob2xkTG9ja0lmKHBhc3NlZExvY2ss
IGhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBA
IHZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFMKICAgICAqc2l6ZSArPSBz
dGFjay5zZWNvbmQ7CiB9CiAKLWJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVh
ZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBidWZmZXIsIHNpemVf
dCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplKQorYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90
aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNpemUsIFRocmVhZCYgY3VycmVudFRocmVhZEZv
ckdDKQogewogICAgIC8vIFByZXZlbnQgdHdvIFZNcyBmcm9tIHN1c3BlbmRpbmcgZWFjaCBvdGhl
cidzIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZSwKICAgICAvLyB3aGljaCBjYW4gY2F1c2UgZGVh
ZGxvY2s6IDxyZGFyOi8vcHJvYmxlbS8yMDMwMDg0Mj4uCkBAIC0xNDUsMTMgKzE0NSwxNCBAQCBi
b29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTCiAgICAgKnNpemUgPSAwOwog
CiAgICAgVGhyZWFkJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Ci0gICAgY29u
c3QgYXV0byYgdGhyZWFkcyA9IG1fdGhyZWFkR3JvdXAtPnRocmVhZHMobG9ja2VyKTsKKyAgICBj
b25zdCBMaXN0SGFzaFNldDxSZWY8VGhyZWFkPj4mIHRocmVhZHMgPSBtX3RocmVhZEdyb3VwLT50
aHJlYWRzKGxvY2tlcik7CiAgICAgQml0VmVjdG9yIGlzU3VzcGVuZGVkKHRocmVhZHMuc2l6ZSgp
KTsKIAogICAgIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgICAgICBmb3IgKGF1
dG8mIHRocmVhZCA6IHRocmVhZHMpIHsKLSAgICAgICAgICAgIGlmICh0aHJlYWQuZ2V0KCkgIT0g
Y3VycmVudFRocmVhZCkgeworICAgICAgICBmb3IgKGNvbnN0IFJlZjxUaHJlYWQ+JiB0aHJlYWQg
OiB0aHJlYWRzKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkLmdldCgpICE9IGN1cnJlbnRUaHJl
YWQKKyAgICAgICAgICAgICAgICAmJiB0aHJlYWQuZ2V0KCkgIT0gY3VycmVudFRocmVhZEZvckdD
KSB7CiAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSB0aHJlYWQtPnN1c3BlbmQoKTsKICAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBpc1N1c3BlbmRl
ZC5zZXQoaW5kZXgpOwpAQCAtMTk5LDcgKzIwMCw3IEBAIHN0YXRpYyB2b2lkIGdyb3dCdWZmZXIo
c2l6ZV90IHNpemUsIHZvaWQKICAgICAqYnVmZmVyID0gZmFzdE1hbGxvYygqY2FwYWNpdHkpOwog
fQogCi12b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2
YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHVi
Um91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcywgQ3VycmVudFRocmVhZFN0YXRlKiBj
dXJyZW50VGhyZWFkU3RhdGUpCit2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJDb25zZXJ2YXRp
dmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0
aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcywgQ3VycmVu
dFRocmVhZFN0YXRlKiBjdXJyZW50VGhyZWFkU3RhdGUsIFRocmVhZCogY3VycmVudFRocmVhZCkK
IHsKICAgICBpZiAoY3VycmVudFRocmVhZFN0YXRlKQogICAgICAgICBnYXRoZXJGcm9tQ3VycmVu
dFRocmVhZChjb25zZXJ2YXRpdmVSb290cywgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzLCAq
Y3VycmVudFRocmVhZFN0YXRlKTsKQEAgLTIwOCw3ICsyMDksNyBAQCB2b2lkIE1hY2hpbmVUaHJl
YWRzOjpnYXRoZXJDb25zZXJ2YXRpdmVSCiAgICAgc2l6ZV90IGNhcGFjaXR5ID0gMDsKICAgICB2
b2lkKiBidWZmZXIgPSBudWxscHRyOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV90aHJl
YWRHcm91cC0+Z2V0TG9jaygpKTsKLSAgICB3aGlsZSAoIXRyeUNvcHlPdGhlclRocmVhZFN0YWNr
cyhsb2NrZXIsIGJ1ZmZlciwgY2FwYWNpdHksICZzaXplKSkKKyAgICB3aGlsZSAoIXRyeUNvcHlP
dGhlclRocmVhZFN0YWNrcyhsb2NrZXIsIGJ1ZmZlciwgY2FwYWNpdHksICZzaXplLCAqY3VycmVu
dFRocmVhZCkpCiAgICAgICAgIGdyb3dCdWZmZXIoc2l6ZSwgJmJ1ZmZlciwgJmNhcGFjaXR5KTsK
IAogICAgIGlmICghYnVmZmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKIHB1YmxpYzoKICAgICBNYWNoaW5l
VGhyZWFkcygpOwogCi0gICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRp
dmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVh
ZFN0YXRlKik7CisgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVS
b290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVhZFN0
YXRlKiwgVGhyZWFkKik7CiAKICAgICAvLyBPbmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBieSBjbGll
bnRzIHRoYXQgY2FuIHVzZSB0aGUgc2FtZSBoZWFwIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KICAg
ICB2b2lkIGFkZEN1cnJlbnRUaHJlYWQoKSB7IG1fdGhyZWFkR3JvdXAtPmFkZEN1cnJlbnRUaHJl
YWQoKTsgfQpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVyRnJvbUN1
cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVC
bG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCiAgICAgdm9pZCB0cnlDb3B5T3RoZXJU
aHJlYWRTdGFjayhUaHJlYWQmLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKLSAg
ICBib29sIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZv
aWQqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCopOworICAgIGJvb2wgdHJ5Q29weU90aGVyVGhy
ZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwg
c2l6ZV90KiwgVGhyZWFkJik7CiAKICAgICBzdGQ6OnNoYXJlZF9wdHI8VGhyZWFkR3JvdXA+IG1f
dGhyZWFkR3JvdXA7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6Ok1hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCisgICAgOiBNYXJraW5nQ29uc3RyYWludCgiTXNt
IiwgIk1hcmsgU3RhY2sgTWVyZ2luZyIsIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeUV4
ZWN1dGlvbikKKyAgICAsIG1faGVhcChoZWFwKQoreworfQorCitNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6fk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCkKK3sKK30KKworZG91YmxlIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYp
Cit7CisgICAgcmV0dXJuIG1faGVhcC5tX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1faGVh
cC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKK30KKwordm9pZCBNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBMb2dnaW5nIHRoZSB3b3JrIGhlcmUgZW5zdXJl
cyB0aGF0IHRoZSBjb25zdHJhaW50IHNvbHZlciBrbm93cyB0aGF0IGl0IGRvZXNuJ3QgbmVlZCB0
byBwcm9kdWNlCisgICAgLy8gYW55bW9yZSB3b3JrLgorICAgIHNpemVfdCBzaXplID0gbV9oZWFw
Lm1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9oZWFwLm1fcmFjZU1hcmtTdGFjay0+c2l6
ZSgpOworICAgIHZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOworICAgIAorICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nKCIoIiwgc2l6ZSwgIikiKTsKK30KKwor
Q29uc3RyYWludFBhcmFsbGVsaXNtIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpleGVjdXRl
SW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2hlYXAubV9tdXRhdG9yTWFya1N0
YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKKyAgICBtX2hlYXAu
bV9yYWNlTWFya1N0YWNrLT50cmFuc2ZlclRvKHZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsK
KyAgICByZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50
IHsKK3B1YmxpYzoKKyAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJik7CisgICAg
fk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KCk7CisgICAgCisgICAgZG91YmxlIHF1aWNrV29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWlu
dFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgQ29uc3RyYWludFBh
cmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgCitwcml2
YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJl
dmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBNYXJrZWRBbGxv
Y2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIAogICAgIHVuc2lnbmVkIGl0ZXJzU2luY2VMYXN0VGlt
ZUNoZWNrID0gMDsKICAgICBmb3IgKGF1dG8qIGJsb2NrIDogbV9ibG9ja3MpIHsKICAgICAgICAg
aWYgKGJsb2NrKQotICAgICAgICAgICAgYmxvY2stPmJsb2NrKCkudXBkYXRlTmVlZHNEZXN0cnVj
dGlvbigpOworICAgICAgICAgICAgaG9sZExvY2soYmxvY2stPmJsb2NrKCkubG9jaygpKTsKICAg
ICAgICAgKytpdGVyc1NpbmNlTGFzdFRpbWVDaGVjazsKICAgICAgICAgaWYgKGl0ZXJzU2luY2VM
YXN0VGltZUNoZWNrID49IEhlYXA6OnNfdGltZUNoZWNrUmVzb2x1dGlvbikgewogICAgICAgICAg
ICAgZG91YmxlIGN1cnJlbnRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KTsKQEAgLTQ0NCw2ICs0NDQsMzMgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFzc2VydE5vVW5z
d2VwdCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK1JlZlB0cjxTaGFyZWRUYXNr
PE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBNYXJrZWRBbGxvY2F0b3I6OnBhcmFsbGVsTm90RW1w
dHlCbG9ja1NvdXJjZSgpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNrPE1h
cmtlZEJsb2NrOjpIYW5kbGUqKCk+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2soTWFya2Vk
QWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRv
cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBydW4oKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9hbGxvY2F0b3Iu
bV9tYXJraW5nTm90RW1wdHkuZmluZEJpdChtX2luZGV4LCB0cnVlKTsKKyAgICAgICAgICAgIGlm
IChtX2luZGV4ID49IG1fYWxsb2NhdG9yLm1fYmxvY2tzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5tX2Jsb2Nr
c1ttX2luZGV4KytdOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IE1hcmtlZEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CisgICAgICAgIHNpemVfdCBtX2luZGV4IHsg
MCB9OworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGFzaygqdGhpcykpOworfQorCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMp
LCAiOiIsIG1fY2VsbFNpemUsICIvIiwgbV9hdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKQEAgLTEwMyw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVu
Y3RvciYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUq
KCk+PiBwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UoKTsKKyAgICAKICAgICB2b2lkIGFkZEJs
b2NrKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJs
b2NrOjpIYW5kbGUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw5ICs4Niw5IEBAIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6On5IYW5kbGUoKQogfQogCiBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2so
Vk0mIHZtLCBIYW5kbGUmIGhhbmRsZSkKLSAgICA6IG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3Bh
Y2U6Om51bGxWZXJzaW9uKQotICAgICwgbV9oYW5kbGUoaGFuZGxlKQorICAgIDogbV9oYW5kbGUo
aGFuZGxlKQogICAgICwgbV92bSgmdm0pCisgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNw
YWNlOjpudWxsVmVyc2lvbikKIHsKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3
UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxuIik7CkBAIC0yMDAsNyArMjAwLDcgQEAgdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAoY29uc3QgRnJlZQogdm9pZCBNYXJrZWRCbG9jazo6
YWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewogICAgIEFTU0VS
VCh2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkuaXNNYXJraW5nKCkpOwotICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAg
IAogICAgIGlmICghYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIHJldHVy
bjsKQEAgLTIyMywxNSArMjIzLDE5IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xv
dyhIZWFwVmUKICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcg
dGhpbmdzLlxuIik7CiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9
IHNwYWNlKCktPm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogICAgICAgICBpZiAoaGFuZGxlKCku
bV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7Ci0gICAg
ICAgICAgICAvLyBNZXJnZSB0aGUgY29udGVudHMgb2YgbWFya2VkIGludG8gbmV3bHlBbGxvY2F0
ZWQuIElmIHdlIGdldCB0aGUgZnVsbCBzZXQgb2YgYml0cwotICAgICAgICAgICAgLy8gdGhlbiBp
bnZhbGlkYXRlIG5ld2x5QWxsb2NhdGVkIGFuZCBzZXQgYWxsb2NhdGVkLgotICAgICAgICAgICAg
aGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5tZXJnZUFuZENsZWFyKG1fbWFya3MpOworICAgICAg
ICAgICAgLy8gV2hlbiBkbyB3ZSBnZXQgaGVyZT8gVGhlIGJsb2NrIGNvdWxkIG5vdCBoYXZlIGJl
ZW4gZmlsbGVkIHVwLiBUaGUgbmV3bHlBbGxvY2F0ZWQgYml0cyB3b3VsZAorICAgICAgICAgICAg
Ly8gaGF2ZSBoYWQgdG8gYmUgY3JlYXRlZCBzaW5jZSB0aGUgZW5kIG9mIHRoZSBsYXN0IGNvbGxl
Y3Rpb24uIFRoZSBvbmx5IHRoaW5ncyB0aGF0IGNyZWF0ZQorICAgICAgICAgICAgLy8gdGhlbSBh
cmUgYWJvdXRUb01hcmtTbG93LCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSwgYW5kIHN0b3BBbGxvY2F0
aW5nLiBJZiBpdCBoYWQgYmVlbgorICAgICAgICAgICAgLy8gYWJvdXRUb01hcmtTbG93LCB0aGVu
IHdlIHNob3VsZG4ndCBiZSBoZXJlIHNpbmNlIHRoZSBtYXJrcyB3b3VsZG4ndCBiZSBzdGFsZSBh
bnltb3JlLiBJdAorICAgICAgICAgICAgLy8gY2Fubm90IGJlIGxhc3RDaGFuY2VUb0ZpbmFsaXpl
LiBTbyBpdCBtdXN0IGJlIHN0b3BBbGxvY2F0aW5nLiBUaGF0IG1lYW5zIHRoYXQgd2UganVzdAor
ICAgICAgICAgICAgLy8gY29tcHV0ZWQgdGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMganVzdCBiZWZv
cmUgdGhlIHN0YXJ0IG9mIGFuIGluY3JlbWVudC4gV2hlbiB3ZSBhcmUgaW4gdGhhdAorICAgICAg
ICAgICAgLy8gbW9kZSwgaXQgc2VlbXMgYXMgaWYgbmV3bHlBbGxvY2F0ZWQgc2hvdWxkIHN1YnN1
bWUgbWFya3MuCisgICAgICAgICAgICBBU1NFUlQoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5z
dWJzdW1lcyhtX21hcmtzKSk7CisgICAgICAgICAgICBtX21hcmtzLmNsZWFyQWxsKCk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiBuZXds
eUFsbG9jYXRlZCB3aXRoIG1hcmtlZC4gSWYgd2UgZ2V0IHRoZSBmdWxsIHNldCBvZgotICAgICAg
ICAgICAgLy8gYml0cyB0aGVuIGludmFsaWRhdGUgbmV3bHlBbGxvY2F0ZWQgYW5kIHNldCBhbGxv
Y2F0ZWQuCiAgICAgICAgICAgICBoYW5kbGUoKS5tX25ld2x5QWxsb2NhdGVkLnNldEFuZENsZWFy
KG1fbWFya3MpOworICAgICAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24g
PSBuZXdseUFsbG9jYXRlZFZlcnNpb247CiAgICAgICAgIH0KLSAgICAgICAgaGFuZGxlKCkubV9u
ZXdseUFsbG9jYXRlZFZlcnNpb24gPSBuZXdseUFsbG9jYXRlZFZlcnNpb247CiAgICAgfQogICAg
IGNsZWFySGFzQW55TWFya2VkKCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTMy
MSwxMSArMzI1LDYgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZW1vdmVGcm9tQWxsbwog
ICAgIG1fYWxsb2NhdG9yLT5yZW1vdmVCbG9jayh0aGlzKTsKIH0KIAotdm9pZCBNYXJrZWRCbG9j
azo6dXBkYXRlTmVlZHNEZXN0cnVjdGlvbigpCi17Ci0gICAgbV9uZWVkc0Rlc3RydWN0aW9uID0g
aGFuZGxlKCkubmVlZHNEZXN0cnVjdGlvbigpOwotfQotCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OmRpZEFkZFRvQWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yLCBzaXplX3Qg
aW5kZXgpCiB7CiAgICAgQVNTRVJUKG1faW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSk7CkBAIC0zNDUsOCArMzQ0LDYgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpkaWRBZGRUb0FsbG9jYQogICAgIGlmIChtX2F0dHJpYnV0ZXMuY2VsbEtpbmQgIT0gSGVhcENl
bGw6OkpTQ2VsbCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9hdHRyaWJ1dGVzLmRlc3RydWN0
aW9uID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24pOwogICAgIAotICAgIGJsb2NrKCkudXBkYXRl
TmVlZHNEZXN0cnVjdGlvbigpOwotICAgIAogICAgIGRvdWJsZSBtYXJrQ291bnRCaWFzID0gLShP
cHRpb25zOjptaW5NYXJrZWRCbG9ja1V0aWxpemF0aW9uKCkgKiBjZWxsc1BlckJsb2NrKCkpOwog
ICAgIAogICAgIC8vIFRoZSBtYXJrIGNvdW50IGJpYXMgc2hvdWxkIGJlIGNvbWZvcnRhYmx5IHdp
dGhpbiB0aGlzIHJhbmdlLgpAQCAtMzY2LDE2ICszNjMsNiBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmRpZFJlbW92ZUZyb21BCiAgICAgbV9hbGxvY2F0b3IgPSBudWxscHRyOwogfQogCi1i
b29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZShjb25zdCBIZWFwQ2VsbCogY2VsbCkKLXsK
LSAgICByZXR1cm4gaXNMaXZlKHNwYWNlKCktPm1hcmtpbmdWZXJzaW9uKCksIHNwYWNlKCktPmlz
TWFya2luZygpLCBjZWxsKTsKLX0KLQotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmVD
ZWxsKGNvbnN0IHZvaWQqIHApCi17Ci0gICAgcmV0dXJuIGlzTGl2ZUNlbGwoc3BhY2UoKS0+bWFy
a2luZ1ZlcnNpb24oKSwgc3BhY2UoKS0+aXNNYXJraW5nKCksIHApOwotfQotCiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogdm9pZCBNYXJrZWRCbG9jazo6YXNzZXJ0VmFsaWRDZWxsKFZNJiB2bSwgSGVh
cENlbGwqIGNlbGwpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Db3VudGluZ0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTYxLDggKzE2
Miw4IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAgICBzaXpl
X3Qgc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlKEhlYXBWZXJz
aW9uIG1hcmtpbmdWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwqKTsKLSAg
ICAgICAgaW5saW5lIGJvb2wgaXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwg
Ym9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKKyAgICAgICAgYm9vbCBpc0xpdmUoSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwg
Ym9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7CisgICAgICAgIGlubGluZSBib29sIGlz
TGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxs
b2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKIAogICAgICAgICBi
b29sIGlzTGl2ZShjb25zdCBIZWFwQ2VsbCopOwogICAgICAgICBib29sIGlzTGl2ZUNlbGwoY29u
c3Qgdm9pZCopOwpAQCAtMjU4LDcgKzI1OSw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNNYXJr
ZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIGNvbnN0IHZvaWQqKTsKLSAgICBib29sIGlzTWFya2VkQ29uY3VycmVudGx5KEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7CiAgICAgYm9vbCBpc01hcmtlZChj
b25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CiAgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0
IHZvaWQqLCBEZXBlbmRlbmN5KTsKICAgICAgICAgCkBAIC0yODAsNyArMjgwLDYgQEAgcHVibGlj
OgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBhcmVNYXJrc1N0YWxlKCk7CiAgICAgYm9v
bCBhcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKLSAgICBEZXBlbmRl
bmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24pOwogICAgIAogICAgIERlcGVuZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKQEAgLTI5MCwxNSArMjg5LDEyIEBAIHB1Ymxp
YzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUoKTsKICNl
bmRpZgogICAgICAgICAKLSAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX25lZWRzRGVzdHJ1Y3Rpb247IH0KLSAgICAKLSAgICAvLyBUaGlzIGlzIHVzdWFsbHkgYSBu
by1vcCwgYW5kIHdlIHVzZSBpdCBhcyBhIG5vLW9wIHRoYXQgdG91Y2hlcyB0aGUgcGFnZSBpbiBp
c1BhZ2VkT3V0KCkuCi0gICAgdm9pZCB1cGRhdGVOZWVkc0Rlc3RydWN0aW9uKCk7Ci0gICAgCiAg
ICAgdm9pZCByZXNldE1hcmtzKCk7CiAgICAgCiAgICAgYm9vbCBpc01hcmtlZFJhdyhjb25zdCB2
b2lkKiBwKTsKICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWFya2luZ1ZlcnNpb247IH0KKyAgICAKKyAgICBDb3VudGluZ0xvY2smIGxvY2soKSB7IHJl
dHVybiBtX2xvY2s7IH0KIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21B
bGlnbm1lbnRNYXNrID0gYXRvbVNpemUgLSAxOwpAQCAtMzE0LDExICszMTAsMTIgQEAgcHJpdmF0
ZToKICAgICB2b2lkIG5vdGVNYXJrZWRTbG93KCk7CiAgICAgCiAgICAgaW5saW5lIGJvb2wgbWFy
a3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24p
OworICAgIGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBW
ZXJzaW9uIG15TWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAg
ICAgICAgCi0gICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKKyAgICBIYW5k
bGUmIG1faGFuZGxlOworICAgIFZNKiBtX3ZtOwogCi0gICAgYm9vbCBtX25lZWRzRGVzdHJ1Y3Rp
b247Ci0gICAgTG9jayBtX2xvY2s7CisgICAgQ291bnRpbmdMb2NrIG1fbG9jazsKICAgICAKICAg
ICAvLyBUaGUgYWN0dWFsIG1hcmsgY291bnQgY2FuIGJlIGNvbXB1dGVkIGJ5IGRvaW5nOiBtX2Jp
YXNlZE1hcmtDb3VudCAtIG1fbWFya0NvdW50Qmlhcy4gTm90ZQogICAgIC8vIHRoYXQgdGhpcyBj
b3VudCBpcyByYWN5LiBJdCB3aWxsIGFjY3VyYXRlbHkgZGV0ZWN0IHdoZXRoZXIgb3Igbm90IGV4
YWN0bHkgemVybyB0aGluZ3Mgd2VyZQpAQCAtMzQ4LDkgKzM0NSw4IEBAIHByaXZhdGU6CiAgICAg
aW50MTZfdCBtX21hcmtDb3VudEJpYXM7CiAKICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJz
aW9uOwotICAgIAotICAgIEhhbmRsZSYgbV9oYW5kbGU7Ci0gICAgVk0qIG1fdm07CisKKyAgICBX
VEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX21hcmtzOwogfTsKIAogaW5saW5lIE1hcmtlZEJs
b2NrOjpIYW5kbGUmIE1hcmtlZEJsb2NrOjpoYW5kbGUoKQpAQCAtNDk4LDE4ICs0OTQsMTIgQEAg
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJr
aW5nVmVyc2lvbiAhPSBtX21hcmtpbmdWZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIERlcGVu
ZGVuY3lXaXRoPGJvb2w+IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3ko
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCi17Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9
IG1fbWFya2luZ1ZlcnNpb247Ci0gICAgcmV0dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3ko
dmVyc2lvbiksIHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pOwotfQotCiBpbmxpbmUgRGVwZW5k
ZW5jeSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24p
CiB7Ci0gICAgYXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2lu
Z1ZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQorICAgIEhlYXBWZXJz
aW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9u
ICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJz
aW9uKTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7CisgICAgcmV0dXJuIERlcGVuZGVu
Y3k6OmZlbmNlKHZlcnNpb24pOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
Ojphc3NlcnRNYXJrc05vdFN0YWxlKCkKQEAgLTUyNCwxNSArNTE0LDEwIEBAIGlubGluZSBib29s
IE1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyhjb24KIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6
OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQogewot
ICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSA/IGZhbHNlIDogaXNNYXJr
ZWRSYXcocCk7Ci19Ci0KLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZENvbmN1cnJl
bnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKLXsKLSAgICBh
dXRvIHJlc3VsdCA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7
Ci0gICAgaWYgKHJlc3VsdC52YWx1ZSkKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJr
aW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJl
cihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVt
YmVyKHApLCBEZXBlbmRlbmN5OjpmZW5jZSh2ZXJzaW9uKSk7CiB9CiAKIGlubGluZSBib29sIE1h
cmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDExIEBAIGlubGlu
ZSBNYXJrZWRTcGFjZSogTWFya2VkQmxvY2s6OkhhbmRsZToKIAogaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6Om1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uKQogeworICAgIHJldHVybiBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2lu
ZyhtX21hcmtpbmdWZXJzaW9uLCBtYXJraW5nVmVyc2lvbik7Cit9CisKK2lubGluZSBib29sIE1h
cmtlZEJsb2NrOjptYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lvbiBt
eU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKK3sKICAgICAvLyBU
aGlzIHJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlc2UgaXMgdHJ1ZToKICAgICAvLyAtIFdlIGp1
c3QgY3JlYXRlZCB0aGUgYmxvY2sgYW5kIHNvIHRoZSBiaXRzIGFyZSBjbGVhciBhbHJlYWR5Lgog
ICAgIC8vIC0gVGhpcyBibG9jayBoYXMgb2JqZWN0cyBtYXJrZWQgZHVyaW5nIHRoZSBsYXN0IEdD
LCBhbmQgc28gaXRzIHZlcnNpb24gd2FzIHVwLXRvLWRhdGUganVzdApAQCAtODIsMzkgKzg3LDEx
NCBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6bWFya3NDb252ZXlMaXZlCiAgICAgQVNTRVJU
KHNwYWNlKCktPmlzTWFya2luZygpKTsKICAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUo
KSAhPSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gbV9tYXJraW5nVmVyc2lvbiA9PSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb24KLSAgICAg
ICAgfHwgTWFya2VkU3BhY2U6Om5leHRWZXJzaW9uKG1fbWFya2luZ1ZlcnNpb24pID09IG1hcmtp
bmdWZXJzaW9uOworICAgIHJldHVybiBteU1hcmtpbmdWZXJzaW9uID09IE1hcmtlZFNwYWNlOjpu
dWxsVmVyc2lvbgorICAgICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJraW5n
VmVyc2lvbikgPT0gbWFya2luZ1ZlcnNpb247CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgYm9vbCBpc01hcmtp
bmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQorQUxXQVlTX0lOTElORSBib29sIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwqIGNl
bGwpCiB7Ci0gICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgCi0gICAgaWYgKFVOTElL
RUxZKGhhc0FueU5ld2x5QWxsb2NhdGVkKCkpKSB7Ci0gICAgICAgIGlmIChpc05ld2x5QWxsb2Nh
dGVkKGNlbGwpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAogICAgIGlm
IChhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgCisgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIHdoaWxl
IGhvbGRpbmcgdGhlIGxvY2sgYmVjYXVzZSBtYXJrcyBtaWdodCBiZSBzdGFsZS4gSW4gdGhhdCBj
YXNlLCBuZXdseQorICAgIC8vIGFsbG9jYXRlZCB3aWxsIG5vdCB5ZXQgYmUgdmFsaWQuIENvbnNp
ZGVyIHRoaXMgaW50ZXJsZWF2aW5nLgorICAgIC8vIAorICAgIC8vIE9uZSB0aHJlYWQgaXMgZG9p
bmcgdGhpczoKKyAgICAvLworICAgIC8vIDEpIElzTGl2ZUNoZWNrc05ld2x5QWxsb2NhdGVkOiBX
ZSBjaGVjayBpZiBuZXdseSBhbGxvY2F0ZWQgaXMgdmFsaWQuIElmIGl0IGlzIHZhbGlkLCBhbmQg
dGhlIGJpdCBpcworICAgIC8vICAgIHNldCwgd2UgcmV0dXJuIHRydWUuIExldCdzIGFzc3VtZSB0
aGF0IHRoaXMgZXhlY3V0ZXMgYXRvbWljYWxseS4gSXQgZG9lc24ndCBoYXZlIHRvIGluIGdlbmVy
YWwsCisgICAgLy8gICAgYnV0IHdlIGNhbiBhc3N1bWUgdGhhdCBmb3IgdGhlIHB1cnBvc2Ugb2Yg
c2VlaW5nIHRoaXMgYnVnLgorICAgIC8vCisgICAgLy8gMikgSXNMaXZlQ2hlY2tzTWFya3M6IEhh
dmluZyBmYWlsZWQgdGhhdCwgd2UgY2hlY2sgdGhlIG1hcmsgYml0cy4gVGhpcyBzdGVwIGltcGxp
ZXMgdGhlIHJlc3Qgb2YKKyAgICAvLyAgICB0aGlzIGZ1bmN0aW9uLiBJdCBoYXBwZW5zIHVuZGVy
IGEgbG9jayBzbyBpdCdzIGF0b21pYy4KKyAgICAvLworICAgIC8vIEFub3RoZXIgdGhyZWFkIGlz
IGRvaW5nOgorICAgIC8vCisgICAgLy8gMSkgQWJvdXRUb01hcmtTbG93OiBUaGlzIGlzIHRoZSBl
bnRpcmUgYWJvdXRUb01hcmtTbG93IGZ1bmN0aW9uLCBhbmQgbGV0J3Mgc2F5IGl0J3MgYXRvbWlj
LiBJdAorICAgIC8vICAgIHNvcnRhIGlzIHNpbmNlIGl0IGhvbGRzIGEgbG9jaywgYnV0IHRoYXQg
ZG9lc24ndCBhY3R1YWxseSBtYWtlIGl0IGF0b21pYyB3aXRoIHJlc3BlY3QgdG8KKyAgICAvLyAg
ICBJc0xpdmVDaGVja3NOZXdseUFsbG9jYXRlZCwgc2luY2UgdGhhdCBkb2VzIG5vdCBob2xkIGEg
bG9jayBpbiBvdXIgc2NlbmFyaW8uCisgICAgLy8KKyAgICAvLyBUaGUgaGFybWZ1bCBpbnRlcmxl
YXZpbmcgaGFwcGVucyBpZiB3ZSBzdGFydCBvdXQgd2l0aCBhIGJsb2NrIHRoYXQgaGFzIHN0YWxl
IG1hcmsgYml0cyB0aGF0CisgICAgLy8gbm9uZXRoZWxlc3MgY29udmV5IGxpdmVuZXNzIGR1cmlu
ZyBtYXJraW5nICh0aGUgb2ZmLWJ5LW9uZSB2ZXJzaW9uIHRyaWNrKS4gVGhlIGludGVybGVhdmlu
ZyBpcworICAgIC8vIGp1c3Q6CisgICAgLy8KKyAgICAvLyBJc0xpdmVDaGVja3NOZXdseUFsbG9j
YXRlZCBBYm91dFRvTWFya1Nsb3cgSXNMaXZlQ2hlY2tzTWFya3MKKyAgICAvLworICAgIC8vIFdl
IHN0YXJ0ZWQgd2l0aCB2YWxpZCBtYXJrcyBidXQgaW52YWxpZCBuZXdseSBhbGxvY2F0ZWQuIFNv
LCB0aGUgZmlyc3QgcGFydCBkb2Vzbid0IHRoaW5rIHRoYXQKKyAgICAvLyBhbnl0aGluZyBpcyBs
aXZlLCBidXQgZHV0aWZ1bGx5IGRyb3BzIGRvd24gdG8gdGhlIG1hcmtzIHN0ZXAuIEJ1dCBpbiB0
aGUgbWVhbnRpbWUsIHdlIGNsZWFyIHRoZQorICAgIC8vIG1hcmsgYml0cyBhbmQgdHJhbnNmZXIg
dGhlaXIgY29udGVudHMgaW50byBuZXdseUFsbG9jYXRlZC4gU28gSXNMaXZlQ2hlY2tzTWFya3Mg
YWxzbyBzZWVzIG5vdGhpbmcKKyAgICAvLyBsaXZlLiBPb29wcyEKKyAgICAvLworICAgIC8vIEZv
cnR1bmF0ZWx5LCBzaW5jZSB0aGlzIGlzIGp1c3QgYSByZWFkIGNyaXRpY2FsIHNlY3Rpb24sIHdl
IGNhbiB1c2UgYSBDb3VudGluZ0xvY2suCisgICAgLy8KKyAgICAvLyBQcm9iYWJseSBtYW55IHVz
ZXJzIG9mIENvdW50aW5nTG9jayBjb3VsZCB1c2UgaXRzIGxhbWJkYS1iYXNlZCBhbmQgbG9ja2Vy
LWJhc2VkIEFQSXMuIEJ1dCBoZXJlLCB3ZQorICAgIC8vIG5lZWQgdG8gZW5zdXJlIHRoYXQgZXZl
cnl0aGluZyBpcyBBTFdBWVNfSU5MSU5FLiBJdCdzIGhhcmQgdG8gZG8gdGhhdCB3aGVuIHVzaW5n
IGxhbWJkYXMuIEl0J3MKKyAgICAvLyBtb3JlIHJlbGlhYmxlIHRvIHdyaXRlIGl0IGlubGluZSBp
bnN0ZWFkLiBFbXBpcmljYWxseSwgaXQgc2VlbXMgbGlrZSBob3cgaW5saW5lIHRoaXMgaXMgaGFz
IHNvbWUKKyAgICAvLyBpbXBhY3Qgb24gcGVyZiAtIGFyb3VuZCAyJSBvbiBzcGxheSBpZiB5b3Ug
Z2V0IGl0IHdyb25nLgorCiAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gdGhpcy0+YmxvY2soKTsK
ICAgICAKLSAgICBpZiAoYmxvY2suYXJlTWFya3NTdGFsZSgpKSB7CisgICAgYXV0byBjb3VudCA9
IGJsb2NrLm1fbG9jay50cnlPcHRpbWlzdGljRmVuY2VsZXNzUmVhZCgpOworICAgIGlmIChjb3Vu
dC52YWx1ZSkgeworICAgICAgICBEZXBlbmRlbmN5IGZlbmNlQmVmb3JlID0gRGVwZW5kZW5jeTo6
ZmVuY2UoY291bnQuaW5wdXQpOworICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmZW5jZWRU
aGlzID0gZmVuY2VCZWZvcmUuY29uc3VtZSh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VS
VCghZmVuY2VkVGhpcy0+aXNGcmVlTGlzdGVkKCkpOworICAgICAgICAKKyAgICAgICAgSGVhcFZl
cnNpb24gbXlOZXdseUFsbG9jYXRlZFZlcnNpb24gPSBmZW5jZWRUaGlzLT5tX25ld2x5QWxsb2Nh
dGVkVmVyc2lvbjsKKyAgICAgICAgaWYgKG15TmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5
QWxsb2NhdGVkVmVyc2lvbikgeworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmZW5jZWRUaGlz
LT5pc05ld2x5QWxsb2NhdGVkKGNlbGwpOworICAgICAgICAgICAgaWYgKGJsb2NrLm1fbG9jay5m
ZW5jZWxlc3NWYWxpZGF0ZShjb3VudC52YWx1ZSwgRGVwZW5kZW5jeTo6ZmVuY2UocmVzdWx0KSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIE1hcmtlZEJsb2NrJiBmZW5jZWRCbG9jayA9ICpmZW5jZUJlZm9yZS5jb25zdW1lKCZi
bG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEhlYXBWZXJzaW9uIG15TWFya2luZ1Zl
cnNpb24gPSBmZW5jZWRCbG9jay5tX21hcmtpbmdWZXJzaW9uOworICAgICAgICAgICAgaWYgKG15
TWFya2luZ1ZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24KKyAgICAgICAgICAgICAgICAmJiAoIWlz
TWFya2luZyB8fCAhZmVuY2VkQmxvY2subWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmco
bXlNYXJraW5nVmVyc2lvbiwgbWFya2luZ1ZlcnNpb24pKSkgeworICAgICAgICAgICAgICAgIGlm
IChibG9jay5tX2xvY2suZmVuY2VsZXNzVmFsaWRhdGUoY291bnQudmFsdWUsIERlcGVuZGVuY3k6
OmZlbmNlKG15TWFya2luZ1ZlcnNpb24pKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9
IGZlbmNlZEJsb2NrLm1fbWFya3MuZ2V0KGJsb2NrLmF0b21OdW1iZXIoY2VsbCkpOworICAgICAg
ICAgICAgICAgIGlmIChibG9jay5tX2xvY2suZmVuY2VsZXNzVmFsaWRhdGUoY291bnQudmFsdWUs
IERlcGVuZGVuY3k6OmZlbmNlKHJlc3VsdCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2soYmxvY2subV9sb2NrKTsKKworICAgIEFTU0VSVCghaXNGcmVlTGlz
dGVkKCkpOworICAgIAorICAgIEhlYXBWZXJzaW9uIG15TmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0g
bV9uZXdseUFsbG9jYXRlZFZlcnNpb247CisgICAgaWYgKG15TmV3bHlBbGxvY2F0ZWRWZXJzaW9u
ID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGlzTmV3bHlBbGxvY2F0
ZWQoY2VsbCk7CisgICAgCisgICAgaWYgKGJsb2NrLmFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNp
b24pKSB7CiAgICAgICAgIGlmICghaXNNYXJraW5nKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBpZiAoIWJsb2NrLm1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1h
cmtpbmdWZXJzaW9uKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAK
ICAgICByZXR1cm4gYmxvY2subV9tYXJrcy5nZXQoYmxvY2suYXRvbU51bWJlcihjZWxsKSk7CiB9
CiAKLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZUNlbGwoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCB2b2lkKiBwKQoraW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2lu
ZywgY29uc3Qgdm9pZCogcCkKIHsKICAgICBpZiAoIW1fYmxvY2stPmlzQXRvbShwKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc0xpdmUobWFya2luZ1ZlcnNpb24sIGlzTWFy
a2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgSGVhcENlbGwqPihwKSk7CisgICAgcmV0dXJuIGlzTGl2
ZShtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBpc01hcmtpbmcsIHN0YXRp
Y19jYXN0PGNvbnN0IEhlYXBDZWxsKj4ocCkpOworfQorCitpbmxpbmUgYm9vbCBNYXJrZWRCbG9j
azo6SGFuZGxlOjppc0xpdmUoY29uc3QgSGVhcENlbGwqIGNlbGwpCit7CisgICAgcmV0dXJuIGlz
TGl2ZShzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZl
cnNpb24oKSwgc3BhY2UoKS0+aXNNYXJraW5nKCksIGNlbGwpOworfQorCitpbmxpbmUgYm9vbCBN
YXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmVDZWxsKGNvbnN0IHZvaWQqIHApCit7CisgICAgcmV0
dXJuIGlzTGl2ZUNlbGwoc3BhY2UoKS0+bWFya2luZ1ZlcnNpb24oKSwgc3BhY2UoKS0+bmV3bHlB
bGxvY2F0ZWRWZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2luZygpLCBwKTsKIH0KIAogLy8gVGhl
IGZvbGxvd2luZyBoYXMgdG8gYmUgdHJ1ZSBmb3Igc3BlY2lhbGl6YXRpb24gdG8ga2ljayBpbjoK
QEAgLTM4Niw2ICs0NjYsMTUgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9k
ZSBNYQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CiBpbmxpbmUgSXRlcmF0aW9uU3RhdHVz
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgZWZmaWNpZW50IHRv
IHVzZSBpbiB0aGUgY29uc3RyYWludCBzb2x2ZXIgYmVjYXVzZSBpc0xpdmUoKSBncmFicyBhCisg
ICAgLy8gbG9jayB0byBwcm90ZWN0IGl0c2VsZiBmcm9tIGNvbmN1cnJlbnQgY2FsbHMgdG8gYWJv
dXRUb01hcmtTbG93KCkuIEJ1dCB3ZSBjb3VsZCBnZXQgYXJvdW5kIHRoaXMgYnkKKyAgICAvLyBo
YXZpbmcgdGhpcyBmdW5jdGlvbiBncmFiIHRoZSBsb2NrIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGl0
ZXJhdGlvbiwgYW5kIGNoZWNrIGlmIHRoZSBtYXJraW5nIHZlcnNpb24KKyAgICAvLyBjaGFuZ2Vk
LiBJZiBpdCBkaWQsIGp1c3QgcnVuIGFnYWluLiBJbnNpZGUgdGhlIGxvb3AsIHdlIG9ubHkgbmVl
ZCB0byBlbnN1cmUgdGhhdCBpZiBhIHJhY2Ugd2VyZSB0bworICAgIC8vIGhhcHBlbiwgd2Ugd2ls
bCBqdXN0IG92ZXJsb29rIG9iamVjdHMuIEkgdGhpbmsgdGhhdCBiZWNhdXNlIG9mIGhvdyBhYm91
dFRvTWFya1Nsb3coKSBkb2VzIHRoaW5ncywKKyAgICAvLyBhIHJhY2Ugb3VnaHQgdG8gbWVhbiB0
aGF0IGl0IGp1c3QgcmV0dXJucyBmYWxzZSB3aGVuIGl0IHNob3VsZCBoYXZlIHJldHVybmVkIHRy
dWUgLSBidXQgdGhpcyBpcworICAgIC8vIHNvbWV0aGluZyB0aGF0IHdvdWxkIGhhdmUgdG8gYmUg
dmVyaWZpZWQgY2FyZWZ1bGx5LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODAzMTUKKyAgICAKICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0gbV9hdHRy
aWJ1dGVzLmNlbGxLaW5kOwogICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1f
ZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAgICAgICBIZWFwQ2VsbCogY2VsbCA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJm1fYmxvY2stPmF0b21zKClbaV0pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6ZW5k
TWFya2luZygpCiAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZXNldEFsbG9jYXRlZCgpOwogICAg
ICAgICAgICAgfSk7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICBtX25ld2x5QWxsb2NhdGVk
VmVyc2lvbiA9IG5leHRWZXJzaW9uKG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKTsKICAgICAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xhcmdlQWxsb2NhdGlvbnNPZmZzZXRGb3JUaGlzQ29sbGVj
dGlvbjsgaSA8IG1fbGFyZ2VBbGxvY2F0aW9ucy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MTY1LDYgKzE2NSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gV2hlbiB0aGlzIGlzIHRydWUgaXQgbWVh
bnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQgYnV0IHRoZSBtYXJrIGJpdHMgaGF2ZW4ndCBjb252ZXJn
ZWQgeWV0LgogICAgIGJvb2wgaXNNYXJraW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc01hcmtpbmc7
IH0KICAgICAKKyAgICBXZWFrU2V0KiBhY3RpdmVXZWFrU2V0c0JlZ2luKCkgeyByZXR1cm4gbV9h
Y3RpdmVXZWFrU2V0cy5iZWdpbigpOyB9CisgICAgV2Vha1NldCogYWN0aXZlV2Vha1NldHNFbmQo
KSB7IHJldHVybiBtX2FjdGl2ZVdlYWtTZXRzLmVuZCgpOyB9CisgICAgV2Vha1NldCogbmV3QWN0
aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0dXJuIG1fbmV3QWN0aXZlV2Vha1NldHMuYmVnaW4oKTsg
fQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdlYWtTZXRzRW5kKCkgeyByZXR1cm4gbV9uZXdBY3Rp
dmVXZWFrU2V0cy5lbmQoKTsgfQorICAgIAogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0m
ID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
c3RkOjphcnJheTxzaXplX3QsIG51bVNpemVDbGFzc2VzPiBzX3NpemVDbGFzc0ZvclNpemVTdGVw
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50LmNwcAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywzMCArMjcsMTggQEAK
ICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlZpc2l0Q291bnRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotTWFya2lu
Z0NvbnN0cmFpbnQ6Ok1hcmtpbmdDb25zdHJhaW50KAotICAgIENTdHJpbmcgYWJicmV2aWF0ZWRO
YW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29u
c3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5jdGlvbiwKLSAgICBDb25zdHJhaW50Vm9s
YXRpbGl0eSB2b2xhdGlsaXR5KQotICAgIDogbV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWRO
YW1lKQotICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlv
bihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3ZvbGF0aWxpdHkodm9sYXRpbGl0
eSkKLXsKLX0KK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLU1hcmtp
bmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgOjpGdW5jdGlvbjxk
b3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKLSAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorTWFya2luZ0NvbnN0cmFpbnQ6Ok1hcmtpbmdD
b25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIENvbnN0cmFp
bnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5jeSBjb25jdXJyZW5j
eSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIDogbV9hYmJyZXZpYXRl
ZE5hbWUoYWJicmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAg
LCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikpCi0gICAgLCBtX3F1
aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9u
KSkKICAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorICAgICwgbV9jb25jdXJyZW5jeShj
b25jdXJyZW5jeSkKKyAgICAsIG1fcGFyYWxsZWxpc20ocGFyYWxsZWxpc20pCiB7CiB9CiAKQEAg
LTYzLDE0ICs1MSw3NCBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNldFN0YXRzKCkKICAg
ICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZXhl
Y3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90
b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJraW5nQ29uc3RyYWlu
dDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNpdENvdW50ZXIgdmlz
aXRDb3VudGVyKHZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSByZXN1bHQgPSBl
eGVjdXRlSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ICs9IHZpc2l0Q291bnRl
ci52aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0Q291
bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0ZWQg
IiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBleGVjdXRlKSIpOworICAgIGlmIChy
ZXN1bHQgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkgeworICAgICAgICAvLyBJ
dCdzIGlsbGVnYWwgdG8gcHJvZHVjZSBwYXJhbGxlbCB3b3JrIGlmIHlvdSBoYXZlbid0IGFkdmVy
dGlzZWQgaXQgdXBmcm9udCBiZWNhdXNlIHRoZSBzb2x2ZXIKKyAgICAgICAgLy8gaGFzIG9wdGlt
aXphdGlvbnMgZm9yIGNvbnN0cmFpbnRzIHRoYXQgcHJvbWlzZSB0byBuZXZlciBwcm9kdWNlIHBh
cmFsbGVsIHdvcmsuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcGFyYWxsZWxpc20gPT0gQ29u
c3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUgTWFya2luZ0NvbnN0cmFpbnQ6
OndvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICByZXR1cm4gbGFzdFZp
c2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRlKHZpc2l0b3IpOworfQorCit2b2lkIE1hcmtp
bmdDb25zdHJhaW50OjpwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25z
dHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2coYWJicmV2aWF0ZWROYW1lKCkpOwotICAg
IFZpc2l0aW5nVGltZW91dCB2aXNpdGluZ1RpbWVvdXQodmlzaXRvciwgZGlkVmlzaXRTb21ldGhp
bmcsIHRpbWVvdXQpOwotICAgIG1fZXhlY3V0ZUZ1bmN0aW9uKHZpc2l0b3IsIHZpc2l0aW5nVGlt
ZW91dCk7Ci0gICAgbV9sYXN0VmlzaXRDb3VudCA9IHZpc2l0aW5nVGltZW91dC52aXNpdENvdW50
KHZpc2l0b3IpOwotICAgIGRpZFZpc2l0U29tZXRoaW5nID0gdmlzaXRpbmdUaW1lb3V0LmRpZFZp
c2l0U29tZXRoaW5nKHZpc2l0b3IpOworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlz
aXRvcik7CisgICAgcHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3RyYWludFNvbHZpbmdMb2NrZXIs
IHZpc2l0b3IpOworICAgIG1fbGFzdFZpc2l0Q291bnQgPSB2aXNpdENvdW50ZXIudmlzaXRDb3Vu
dCgpOworICAgIGlmICh2ZXJib3NlICYmIHZpc2l0Q291bnRlci52aXNpdENvdW50KCkpCisgICAg
ICAgIGRhdGFMb2coIigiLCBhYmJyZXZpYXRlZE5hbWUoKSwgIiB2aXNpdGVkICIsIHZpc2l0Q291
bnRlci52aXNpdENvdW50KCksICIgaW4gcHJlcGFyZVRvRXhlY3V0ZSkiKTsKK30KKwordm9pZCBN
YXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgVmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBkb1BhcmFsbGVs
V29ya0ltcGwodmlzaXRvcik7CisgICAgaWYgKHZlcmJvc2UgJiYgdmlzaXRDb3VudGVyLnZpc2l0
Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAiIHZpc2l0
ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBkb1BhcmFsbGVsV29yaykiKTsK
KyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAg
bV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAgIH0KK30K
Kwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7Cisg
ICAgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50
ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJvc2UgJiYgdmlzaXRD
b3VudGVyLnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFt
ZSgpLCAiIHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBmaW5pc2hQ
YXJhbGxlbFdvcmspIik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4
ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0b3ImKQoreworfQorCit2
b2lkIE1hcmtpbmdDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKQor
eworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworfQorCit2b2lkIE1hcmtpbmdDb25z
dHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJikKK3sKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtpbmdDb25zdHJhaW50LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsy
NSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbnN0cmFpbnRDb25jdXJyZW5j
eS5oIgorI2luY2x1ZGUgIkNvbnN0cmFpbnRQYXJhbGxlbGlzbS5oIgogI2luY2x1ZGUgIkNvbnN0
cmFpbnRWb2xhdGlsaXR5LmgiCi0jaW5jbHVkZSAiVmlzaXRpbmdUaW1lb3V0LmgiCiAjaW5jbHVk
ZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYv
RnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCkBAIC00NCwxNyArNDQsMTEgQEAgY2xhc3MgTWFya2luZ0NvbnN0cmFp
bnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
KTsKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFtZSwgQ29uc3Ry
YWludFZvbGF0aWxpdHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFp
bnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNt
ID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKTsKICAgICAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBNYXJraW5nQ29uc3RyYWludCgKLSAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRl
ZE5hbWUsIENTdHJpbmcgbmFtZSwKLSAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9y
JiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShT
bG90VmlzaXRvciYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwotICAgIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5NYXJraW5nQ29uc3RyYWludCgpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgfk1hcmtpbmdDb25zdHJhaW50KCk7CiAgICAgCiAgICAgdW5zaWduZWQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCkBAIC02NSwzMiArNTksMzkg
QEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBsYXN0VmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdFZpc2l0Q291bnQ7IH0KICAgICAKLSAgICB2b2lkIGV4ZWN1dGUoU2xvdFZpc2l0
b3ImLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KTsKKyAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZShTbG90VmlzaXRvciYpOworICAgIAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgZG91YmxlIHF1aWNrV29ya0VzdGltYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKTsKKyAgICAKKyAgICBkb3VibGUgd29ya0VzdGltYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKTsKICAgICAKLSAgICBkb3VibGUgcXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICBpZiAoIW1fcXVpY2tXb3JrRXN0aW1hdGVG
dW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9xdWlja1dv
cmtFc3RpbWF0ZUZ1bmN0aW9uKHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBkb3VibGUgd29y
a0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxh
c3RWaXNpdENvdW50KCkgKyBxdWlja1dvcmtFc3RpbWF0ZSh2aXNpdG9yKTsKLSAgICB9CisgICAg
dm9pZCBwcmVwYXJlVG9FeGVjdXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29s
dmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICB2b2lkIGRvUGFyYWxsZWxXb3Jr
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hQYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3Im
KTsKICAgICAKICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV92b2xhdGlsaXR5OyB9CiAgICAgCisgICAgQ29uc3RyYWludENvbmN1cnJlbmN5IGNv
bmN1cnJlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9jb25jdXJyZW5jeTsgfQorICAgIENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYWxsZWxpc207
IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQ29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1
dGVJbXBsKFNsb3RWaXNpdG9yJikgPSAwOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
dm9pZCBwcmVwYXJlVG9FeGVjdXRlSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYgY29uc3RyYWlu
dFNvbHZpbmdMb2NrZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGRvUGFyYWxs
ZWxXb3JrSW1wbChTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJhbGxl
bFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBNYXJraW5nQ29uc3RyYWludFNldDsgLy8gU28gaXQgY2FuIHNldCBtX2luZGV4LgogICAgIAog
ICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OwogICAgIENTdHJpbmcgbV9hYmJyZXZp
YXRlZE5hbWU7CiAgICAgQ1N0cmluZyBtX25hbWU7Ci0gICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RW
aXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JiB0aW1lb3V0KT4gbV9leGVjdXRlRnVuY3Rp
b247Ci0gICAgOjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gbV9xdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uOwogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IG1fdm9sYXRpbGl0eTsKKyAg
ICBDb25zdHJhaW50Q29uY3VycmVuY3kgbV9jb25jdXJyZW5jeTsKKyAgICBDb25zdHJhaW50UGFy
YWxsZWxpc20gbV9wYXJhbGxlbGlzbTsKICAgICBzaXplX3QgbV9sYXN0VmlzaXRDb3VudCB7IDAg
fTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNw
cAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2MCArMjYsMTggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgogCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVy
LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlNpbXBsZU1hcmtpbmdDb25zdHJh
aW50LmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQg
ewotcHVibGljOgotICAgIEV4ZWN1dGlvbkNvbnRleHQoTWFya2luZ0NvbnN0cmFpbnRTZXQmIHNl
dCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKLSAgICAgICAg
OiBtX3NldChzZXQpCi0gICAgICAgICwgbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgICAgICwgbV90
aW1lb3V0KHRpbWVvdXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBib29sIGRpZFZpc2l0U29t
ZXRoaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RpZFZpc2l0U29tZXRoaW5n
OwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGRpZFZpc2l0U29tZXRoaW5nKCkgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQp
OwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IHRpbWVzIG91dC4KLSAg
ICBib29sIGRyYWluKEJpdFZlY3RvciYgdW5leGVjdXRlZCkKLSAgICB7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGluZGV4IDogdW5leGVjdXRlZCkgewotICAgICAgICAgICAgZXhlY3V0ZShpbmRleCk7
Ci0gICAgICAgICAgICB1bmV4ZWN1dGVkLmNsZWFyKGluZGV4KTsKLSAgICAgICAgICAgIGlmIChz
aG91bGRUaW1lT3V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIGRpZEV4ZWN1dGUo
c2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVkLmdldChpbmRleCk7IH0KLQot
ICAgIHZvaWQgZXhlY3V0ZShzaXplX3QgaW5kZXgpCi0gICAgewotICAgICAgICBtX3NldC5tX3Nl
dFtpbmRleF0tPmV4ZWN1dGUobV92aXNpdG9yLCBtX2RpZFZpc2l0U29tZXRoaW5nLCBtX3RpbWVv
dXQpOwotICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7Ci0gICAgfQotICAgIAotcHJpdmF0
ZToKLSAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7Ci0gICAgU2xvdFZpc2l0b3ImIG1f
dmlzaXRvcjsKLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZW91dDsKLSAgICBCaXRWZWN0b3IgbV9l
eGVjdXRlZDsKLSAgICBib29sIG1fZGlkVmlzaXRTb21ldGhpbmcgeyBmYWxzZSB9OwotfTsKLQot
TWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KCkKK01hcmtpbmdDb25z
dHJhaW50U2V0OjpNYXJraW5nQ29uc3RyYWludFNldChIZWFwJiBoZWFwKQorICAgIDogbV9oZWFw
KGhlYXApCiB7CiB9CiAKQEAgLTEwNywxOCArNjUsOSBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50
U2V0OjpkaWRTdGFydE1hcmtpCiAgICAgbV9pdGVyYXRpb24gPSAxOwogfQogCi12b2lkIE1hcmtp
bmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJpbmcgbmFt
ZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+
IGZ1bmN0aW9uLCBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQotewotICAgIGFkZChz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFt
ZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7Ci19Ci0K
LXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKLSAgICBDU3RyaW5nIGFiYnJldmlhdGVk
TmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgOjpGdW5jdGlvbjxk
b3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlvbiwKLSAgICBDb25z
dHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQordm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
YWRkKENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsIDo6RnVuY3Rpb248dm9p
ZChTbG90VmlzaXRvciYpPiBmdW5jdGlvbiwgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0
eSwgQ29uc3RyYWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQogewotICAgIGFkZChzdGQ6Om1h
a2VfdW5pcXVlPE1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdU
Rk1vdmUobmFtZSksIFdURk1vdmUoZXhlY3V0ZUZ1bmN0aW9uKSwgV1RGTW92ZShxdWlja1dvcmtF
c3RpbWF0ZUZ1bmN0aW9uKSwgdm9sYXRpbGl0eSkpOworICAgIGFkZChzdGQ6Om1ha2VfdW5pcXVl
PFNpbXBsZU1hcmtpbmdDb25zdHJhaW50PihXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1v
dmUobmFtZSksIFdURk1vdmUoZnVuY3Rpb24pLCB2b2xhdGlsaXR5LCBjb25jdXJyZW5jeSkpOwog
fQogCiB2b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCkBAIC0xMzEsOSArODAsOSBAQCB2
b2lkIE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoCiAgICAgbV9zZXQuYXBwZW5kKFdURk1vdmUo
Y29uc3RyYWludCkpOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK2Jv
b2wgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICBib29sIHJlc3VsdCA9IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlz
aXRvciwgdGltZW91dCk7CisgICAgYm9vbCByZXN1bHQgPSBleGVjdXRlQ29udmVyZ2VuY2VJbXBs
KHZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKCIg
Iik7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0OCwyNyArOTcsMjcgQEAgYm9vbCBNYXJraW5n
Q29uc3RyYWludFNldDo6aXNXYXZlZnJvbnRBZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRv
ciYgdmlzaXRvciwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWlu
dFNldDo6ZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBFeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQoKnRoaXMsIHZpc2l0b3IsIHRpbWVv
dXQpOworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAg
ICBNYXJraW5nQ29uc3RyYWludFNvbHZlciBzb2x2ZXIoKnRoaXMpOwogICAgIAogICAgIHVuc2ln
bmVkIGl0ZXJhdGlvbiA9IG1faXRlcmF0aW9uKys7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpCiAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9uLCAiOiIpOwogCi0gICAgLy8g
SWYgdGhlcmUgYXJlIGFueSBjb25zdHJhaW50cyB0aGF0IHdlIGhhdmUgbm90IGV4ZWN1dGVkIGF0
IGFsbCBkdXJpbmcgdGhpcyBjeWNsZSwgdGhlbgotICAgIC8vIHdlIHNob3VsZCBleGVjdXRlIHRo
b3NlIG5vdy4KLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkUm9v
dHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gRmlyc3QgaXRlcmF0aW9u
IGlzIGJlZm9yZSBhbnkgdmlzaXRvciBkcmFpbmluZywgc28gaXQncyB1bmxpa2VseSB0byB0cmln
Z2VyIGFueSBjb25zdHJhaW50cyBvdGhlcgotICAgIC8vIHRoYW4gcm9vdHMuCi0gICAgaWYgKGl0
ZXJhdGlvbiA9PSAxKQorICAgIGlmIChpdGVyYXRpb24gPT0gMSkgeworICAgICAgICAvLyBGaXJz
dCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWluaW5nLCBzbyBpdCdzIHVubGlr
ZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzCisgICAgICAgIC8vIG90aGVyIHRoYW4gcm9v
dHMuCisgICAgICAgIHNvbHZlci5kcmFpbihtX3VuZXhlY3V0ZWRSb290cyk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAgICAgCi0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0LmRyYWlu
KG1fdW5leGVjdXRlZE91dGdyb3d0aHMpKQorICAgIGlmIChpdGVyYXRpb24gPT0gMikgeworICAg
ICAgICBzb2x2ZXIuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3Rocyk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBrZWVwIHByZWZlcnJpbmcg
dGhlIG91dGdyb3d0aCBjb25zdHJhaW50cyAtIHRoZSBvbmVzIHRoYXQgbmVlZCB0byBiZSBmaXhw
b2ludGVkCiAgICAgLy8gZXZlbiBpbiBhIHN0b3AtdGhlLXdvcmxkIEdDIC0gdW50aWwgdGhleSBz
dG9wIHByb2R1Y2luZy4gVGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gZ28gdG90YWxseQpAQCAtMjE1
LDMzICsxNjQsMTYgQEAgYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNvbnZlcgog
ICAgICAgICAgICAgcmV0dXJuIGEtPnZvbGF0aWxpdHkoKSA+IGItPnZvbGF0aWxpdHkoKTsKICAg
ICAgICAgfSk7CiAgICAgCi0gICAgZm9yIChNYXJraW5nQ29uc3RyYWludCogY29uc3RyYWludCA6
IG1fb3JkZXJlZCkgewotICAgICAgICBzaXplX3QgaSA9IGNvbnN0cmFpbnQtPmluZGV4KCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dC5kaWRFeGVjdXRlKGkpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuZXhlY3V0ZShpKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIE9uY2Ugd2UncmUgaW4gY29udmVyZ2VuY2UsIGl0IG1ha2Vz
IHRoZSBtb3N0IHNlbnNlIHRvIGxldCBzb21lIG1hcmtpbmcgaGFwcGVuIGFueXRpbWUKLSAgICAg
ICAgLy8gd2UgZmluZCB3b3JrLgotICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQg
ZXhlY3V0ZSBhbGwgY29uc3RyYWludHMgdW50aWwgdGltZW91dD8gTm90IGNsZWFyIGlmIHRoYXQn
cwotICAgICAgICAvLyBiZXR0ZXIgb3Igd29yc2UuIE1heWJlIGV2ZW4gYmV0dGVyIGlzIHRoaXM6
Ci0gICAgICAgIC8vIC0gSWYgdGhlIHZpc2l0b3IgaXMgZW1wdHksIGtlZXAgcnVubmluZy4KLSAg
ICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBoYXMgYXQgbGVhc3QgTiB0aGluZ3MsIHJldHVy
bi4KLSAgICAgICAgLy8gLSBFbHNlIHJ1biB1bnRpbCB0aW1lb3V0LgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODMyCi0gICAgICAgIGlmIChl
eGVjdXRpb25Db250ZXh0LmRpZFZpc2l0U29tZXRoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIHNvbHZlci5jb252ZXJnZShtX29yZGVyZWQpOwogICAgIAotICAg
IHJldHVybiB0cnVlOworICAgIC8vIFJldHVybiB0cnVlIGlmIHdlJ3ZlIGNvbnZlcmdlZC4gVGhh
dCBoYXBwZW5zIGlmIHdlIGRpZCBub3QgdmlzaXQgYW55dGhpbmcuCisgICAgcmV0dXJuICFzb2x2
ZXIuZGlkVmlzaXRTb21ldGhpbmcoKTsKIH0KIAogdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6
ZXhlY3V0ZUFsbChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBib29sIGRpZFZpc2l0U29t
ZXRoaW5nID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBjb25zdHJhaW50IDogbV9zZXQpCi0gICAg
ICAgIGNvbnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvciwgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICBjb25zdHJhaW50LT5leGVjdXRlKHZpc2l0
b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAgICBkYXRhTG9nKCIgIik7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJh
aW50U2V0LmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDEyIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOworY2xhc3MgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI7CisKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0IHsKIHB1YmxpYzoKLSAgICBN
YXJraW5nQ29uc3RyYWludFNldCgpOworICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KEhlYXAmKTsK
ICAgICB+TWFya2luZ0NvbnN0cmFpbnRTZXQoKTsKICAgICAKICAgICB2b2lkIGRpZFN0YXJ0TWFy
a2luZygpOwpAQCAtNDEsMTUgKzQ0LDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKAogICAgICAg
ICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKICAgICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4s
Ci0gICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5KTsKLSAgICAKLSAgICB2b2lkIGFkZCgKLSAg
ICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsCi0gICAgICAgIENTdHJpbmcgbmFtZSwKLSAg
ICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
Jik+LAotICAgICAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0
b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAgICAgICBDb25zdHJhaW50
Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQpOwogICAgIAog
ICAgIHZvaWQgYWRkKHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwogICAgIApA
QCAtNjAsMjEgKzU3LDE5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhpcyBleGVjdXRlZCBhbGwgY29uc3RyYWludHMgYW5kIG5vbmUgb2YgdGhlbSBwcm9kdWNlZCBu
ZXcgd29yay4gVGhpcwogICAgIC8vIGFzc3VtZXMgdGhhdCB5b3UndmUgYWxyYWVkeSB2aXNpdGVk
IHJvb3RzIGFuZCBkcmFpbmVkIGZyb20gdGhlcmUuCi0gICAgYm9vbCBleGVjdXRlQ29udmVyZ2Vu
Y2UoCi0gICAgICAgIFNsb3RWaXNpdG9yJiwKLSAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lb3V0
ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgYm9vbCBleGVjdXRlQ29udmVyZ2Vu
Y2UoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBTaW1wbHkgcnVucyBhbGwgY29uc3RyYWlu
dHMgd2l0aG91dCBhbnkgc2hlbmFuaWdhbnMuCiAgICAgdm9pZCBleGVjdXRlQWxsKFNsb3RWaXNp
dG9yJik7CiAgICAgCiBwcml2YXRlOgotICAgIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAg
ZnJpZW5kIGNsYXNzIEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOwogICAgIAotICAgIGJvb2wgZXhlY3V0ZUNvbnZlcmdlbmNlSW1wbChT
bG90VmlzaXRvciYsIE1vbm90b25pY1RpbWUgdGltZW91dCk7CisgICAgYm9vbCBleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJik7CiAgICAgCi0gICAgYm9vbCBkcmFpbihTbG90Vmlz
aXRvciYsIE1vbm90b25pY1RpbWUsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0VmVjdG9yJiBl
eGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOworICAgIGJvb2wgZHJhaW4oU2xvdFZp
c2l0b3ImLCBCaXRWZWN0b3ImIHVuZXhlY3V0ZWQsIEJpdFZlY3RvciYgZXhlY3V0ZWQsIGJvb2wm
IGRpZFZpc2l0U29tZXRoaW5nKTsKICAgICAKKyAgICBIZWFwJiBtX2hlYXA7CiAgICAgQml0VmVj
dG9yIG1fdW5leGVjdXRlZFJvb3RzOwogICAgIEJpdFZlY3RvciBtX3VuZXhlY3V0ZWRPdXRncm93
dGhzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+PiBtX3Nl
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29s
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5n
Q29uc3RyYWludFNvbHZlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeyAKKworTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6Ok1hcmtpbmdDb25z
dHJhaW50U29sdmVyKE1hcmtpbmdDb25zdHJhaW50U2V0JiBzZXQpCisgICAgOiBtX2hlYXAoc2V0
Lm1faGVhcCkKKyAgICAsIG1fbWFpblZpc2l0b3IobV9oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9y
KCkpCisgICAgLCBtX3NldChzZXQpCit7CisgICAgbV9oZWFwLmZvckVhY2hTbG90VmlzaXRvcigK
KyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgbV92aXNp
dENvdW50ZXJzLmFwcGVuZChWaXNpdENvdW50ZXIodmlzaXRvcikpOworICAgICAgICB9KTsKK30K
KworTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6On5NYXJraW5nQ29uc3RyYWludFNvbHZlcigpCit7
Cit9CisKK2Jvb2wgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRpZFZpc2l0U29tZXRoaW5nKCkg
Y29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IFZpc2l0Q291bnRlciYgdmlzaXRDb3VudGVyIDogbV92
aXNpdENvdW50ZXJzKSB7CisgICAgICAgIGlmICh2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6ZXhlY3V0ZShTY2hlZHVsZXJQcmVmZXJlbmNl
IHByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNr
TmV4dCkKK3sKKyAgICBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSA9IHRydWU7CisgICAgUkVMRUFT
RV9BU1NFUlQoIW1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yayk7CisgICAgCisgICAgaWYg
KE9wdGlvbnM6OnVzZVBhcmFsbGVsTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoKSkgeworICAgICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2cocHJlZmVyZW5jZSA9
PSBQYXJhbGxlbFdvcmtGaXJzdCA/ICJQIiA6ICJOIiwgIjwiKTsKKyAgICAgICAgCisgICAgICAg
IG1faGVhcC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAgICAgICBbJl0gKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKSB7IHJ1bkV4ZWN1dGlvblRocmVhZCh2aXNpdG9yLCBwcmVmZXJlbmNlLCBw
aWNrTmV4dCk7IH0pOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisg
ICAgICAgICAgICBkYXRhTG9nKCI+Iik7CisgICAgfSBlbHNlCisgICAgICAgIHJ1bkV4ZWN1dGlv
blRocmVhZChtX21haW5WaXNpdG9yLCBwcmVmZXJlbmNlLCBwaWNrTmV4dCk7CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlQoIW1fcGlja05leHRJc1N0aWxsQWN0aXZlKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrKTsKKyAgICAgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBpbmRleFRvUnVuIDogbV9kaWRFeGVjdXRlSW5QYXJhbGxlbCkKKyAgICAgICAg
bV9zZXQubV9zZXRbaW5kZXhUb1J1bl0tPmZpbmlzaFBhcmFsbGVsV29yayhtX21haW5WaXNpdG9y
KTsKKyAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsLmNsZWFyKCk7CisgICAgCisgICAgaWYgKCFt
X3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleFRvUnVuIDogbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkpCisgICAgICAgICAgICBleGVj
dXRlKCptX3NldC5tX3NldFtpbmRleFRvUnVuXSk7CisgICAgICAgIG1fdG9FeGVjdXRlU2VxdWVu
dGlhbGx5LmNsZWFyKCk7CisgICAgfQorICAgICAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChtX3Rv
RXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV90b0V4
ZWN1dGVJblBhcmFsbGVsU2V0LmJpdENvdW50KCkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyOjpkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpCit7CisgICAgYXV0byBpdGVy
ID0gdW5leGVjdXRlZC5iZWdpbigpOworICAgIGF1dG8gZW5kID0gdW5leGVjdXRlZC5lbmQoKTsK
KyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBpY2tOZXh0
ID0gc2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+KAorICAgICAgICBbJl0g
KCkgLT4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAgaWYgKGl0ZXIgPT0g
ZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICBy
ZXR1cm4gKml0ZXIrKzsKKyAgICAgICAgfSk7CisgICAgZXhlY3V0ZShOZXh0Q29uc3RyYWludEZp
cnN0LCBwaWNrTmV4dCk7CisgICAgdW5leGVjdXRlZC5jbGVhckFsbCgpOworfQorCit2b2lkIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyOjpjb252ZXJnZShjb25zdCBWZWN0b3I8TWFya2luZ0NvbnN0
cmFpbnQqPiYgb3JkZXIpCit7CisgICAgaWYgKGRpZFZpc2l0U29tZXRoaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAob3JkZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIHNpemVfdCBpbmRleCA9IDA7CisKKyAgICAvLyBXZSB3YW50IHRvIGV4
ZWN1dGUgdGhlIGZpcnN0IGNvbnN0cmFpbnQgc2VxdWVudGlhbGx5IGlmIHdlIHRoaW5rIGl0IHdp
bGwgcXVpY2tseSBnaXZlIHVzIGEKKyAgICAvLyByZXN1bHQuIElmIHdlIHJhbiBpdCBpbiBwYXJh
bGxlbCB0byBvdGhlciBjb25zdHJhaW50cywgdGhlbiB3ZSBtaWdodCBlbmQgdXAgaGF2aW5nIHRv
IHdhaXQgZm9yCisgICAgLy8gdGhvc2Ugb3RoZXIgY29uc3RyYWludHMgdG8gZmluaXNoLCB3aGlj
aCB3b3VsZCBiZSBhIHdhc3RlIG9mIHRpbWUgc2luY2UgZHVyaW5nIGNvbnZlcmdlbmNlIGl0J3MK
KyAgICAvLyBlbXBpcmljYWxseSBtb3N0IG9wdGltYWwgdG8gcmV0dXJuIHRvIGRyYWluaW5nIGFz
IHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBNb3N0CisgICAgLy8gY29uc3Ry
YWludHMgZG9uJ3QgZ2VuZXJhdGUgYW55IHdvcmsgbW9zdCBvZiB0aGUgdGltZSwgYW5kIHdoZW4g
dGhleSBkbyBnZW5lcmF0ZSB3b3JrLCB0aGV5IHRlbmQKKyAgICAvLyB0byBnZW5lcmF0ZSBlbm91
Z2ggb2YgaXQgdG8gZmVlZCBhIGRlY2VudCBkcmFpbmluZyBjeWNsZS4gVGhlcmVmb3JlLCBwYXVz
ZSB0aW1lcyBhcmUgbG93ZXN0IGlmCisgICAgLy8gd2UgZ2V0IHRoZSBoZWNrIG91dCBvZiBoZXJl
IGFzIHNvb24gYXMgYSBjb25zdHJhaW50IGdlbmVyYXRlcyB3b3JrLiBJIHRoaW5rIHRoYXQgcGFy
dCBvZiB3aGF0CisgICAgLy8gbWFrZXMgdGhpcyBvcHRpbWFsIGlzIHRoYXQgd2UgYWxzbyBuZXZl
ciBhYm9ydCBydW5uaW5nIGEgY29uc3RyYWludCBlYXJseSwgc28gd2hlbiB3ZSBkbyBydW4KKyAg
ICAvLyBvbmUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byBnZW5lcmF0ZSBhcyBtdWNoIHdvcmsg
YXMgaXQgcG9zc2libHkgY2FuLgorICAgIGlmIChvcmRlcltpbmRleF0tPnF1aWNrV29ya0VzdGlt
YXRlKG1fbWFpblZpc2l0b3IpKSB7CisgICAgICAgIGV4ZWN1dGUoKm9yZGVyW2luZGV4KytdKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChtX3RvRXhlY3V0ZUluUGFyYWxsZWwuaXNFbXB0eSgpCisg
ICAgICAgICAgICAmJiAob3JkZXIuaXNFbXB0eSgpIHx8IGRpZFZpc2l0U29tZXRoaW5nKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhdXRvIHBpY2tOZXh0ID0gc2Nv
cGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KCk+KAorICAgICAgICBbJl0gKCkgLT4g
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4geworICAgICAgICAgICAgaWYgKGRpZFZpc2l0U29tZXRo
aW5nKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGluZGV4ID49IG9yZGVyLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgCisgICAgICAgICAgICBNYXJraW5n
Q29uc3RyYWludCYgY29uc3RyYWludCA9ICpvcmRlcltpbmRleCsrXTsKKyAgICAgICAgICAgIHJl
dHVybiBjb25zdHJhaW50LmluZGV4KCk7CisgICAgICAgIH0pOworICAgIAorICAgIGV4ZWN1dGUo
UGFyYWxsZWxXb3JrRmlyc3QsIHBpY2tOZXh0KTsKK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWlu
dFNvbHZlcjo6ZXhlY3V0ZShNYXJraW5nQ29uc3RyYWludCYgY29uc3RyYWludCkKK3sKKyAgICBp
ZiAobV9leGVjdXRlZC5nZXQoY29uc3RyYWludC5pbmRleCgpKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGNvbnN0cmFpbnQucHJlcGFyZVRvRXhlY3V0ZShOb0xvY2tpbmdOZWNlc3Nhcnks
IG1fbWFpblZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9
IGNvbnN0cmFpbnQuZXhlY3V0ZShtX21haW5WaXNpdG9yKTsKKyAgICBkaWRFeGVjdXRlKHBhcmFs
bGVsaXNtLCBjb25zdHJhaW50LmluZGV4KCkpOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50
U29sdmVyOjpydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNjaGVkdWxl
clByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAgYm9vbCBkb1BhcmFs
bGVsV29ya01vZGU7CisgICAgICAgIHVuc2lnbmVkIGluZGV4VG9SdW47CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIGF1dG8g
dHJ5UGFyYWxsZWxXb3JrID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGluZGV4VG9SdW4gPSBtX3RvRXhlY3V0ZUluUGFyYWxsZWwuZmlyc3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHRyeU5leHRDb25zdHJhaW50ID0gWyZdICgp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcGlja05leHRJc1N0aWxsQWN0
aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcGlja1Jlc3VsdCA9IHBpY2tOZXh0KCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBpY2tSZXN1bHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZXhlY3V0ZWQuZ2V0KCpwaWNrUmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9z
ZXQubV9zZXRbKnBpY2tSZXN1bHRdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0
cmFpbnQuY29uY3VycmVuY3koKSA9PSBDb25zdHJhaW50Q29uY3VycmVuY3k6OlNlcXVlbnRpYWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZVNlcXVlbnRpYWxseS5h
cHBlbmQoKnBpY2tSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbnN0cmFpbnQucGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFs
bGVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtVGhyZWFkc1RoYXRNYXlQcm9k
dWNlV29yaysrOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUb1J1biA9ICpwaWNrUmVz
dWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZG9QYXJhbGxlbFdvcmtNb2RlID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50LnByZXBhcmVUb0V4ZWN1dGUobG9j
a2VyLCB2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAocHJlZmVyZW5jZSA9PSBQYXJhbGxlbFdvcmtGaXJzdCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyYWxsZWxXb3JrKCkgfHwgdHJ5TmV4dENvbnN0
cmFpbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlOZXh0Q29uc3RyYWludCgpIHx8
IHRyeVBhcmFsbGVsV29yaygpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCB3ZSBoYXZlIG5vdGhpbmcgbGVmdCB0byBydW4uIFRoZSBvbmx5IHdheSBmb3Ig
dXMgdG8gaGF2ZSBtb3JlIHdvcmsgaXMKKyAgICAgICAgICAgICAgICAvLyBpZiBzb21lb25lIGlz
IHJ1bm5pbmcgYSBjb25zdHJhaW50IHRoYXQgbWF5IHByb2R1Y2UgcGFyYWxsZWwgd29yay4KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIW1fbnVtVGhyZWFkc1RoYXRNYXlQ
cm9kdWNlV29yaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBbnkgd2FpdGluZyBjb3VsZCBiZSByZXBsYWNl
ZCB3aXRoIGp1c3QgcnVubmluZyB0aGUgU2xvdFZpc2l0b3IuCisgICAgICAgICAgICAgICAgLy8g
SSB3b25kZXIgaWYgdGhhdCB3b3VsZCBiZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgICAgIG1f
Y29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNt
ID0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqbV9zZXQubV9zZXRb
aW5kZXhUb1J1bl07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpZiAoZG9QYXJhbGxl
bFdvcmtNb2RlKQorICAgICAgICAgICAgY29uc3RyYWludC5kb1BhcmFsbGVsV29yayh2aXNpdG9y
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4
ZWN1dGUodmlzaXRvcik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChkb1BhcmFsbGVsV29ya01vZGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmdldChpbmRleFRvUnVuKSkgeworICAg
ICAgICAgICAgICAgICAgICBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleFRvUnVu
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IG1fdG9FeGVjdXRlSW5QYXJhbGxlbC50YWtlRmlyc3QoCisgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKHVuc2lnbmVkIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBpbmRleFRvUnVuOyB9KTsK
KyAgICAgICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LmNsZWFyKGluZGV4
VG9SdW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnN0cmFpbnQucGFyYWxsZWxpc20oKSA9PSBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAgICBtX251bVRocmVhZHNUaGF0TWF5
UHJvZHVjZVdvcmstLTsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGVkLnNldChpbmRleFRvUnVu
KTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxpc20gPT0gQ29uc3RyYWludFBhcmFsbGVs
aXNtOjpQYXJhbGxlbCkgeworICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWwuYXBwZW5kKGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUlu
UGFyYWxsZWxTZXQuc2V0KGluZGV4VG9SdW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9jb25kaXRpb24u
bm90aWZ5QWxsKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFp
bnRTb2x2ZXI6OmRpZEV4ZWN1dGUoQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtLCB1
bnNpZ25lZCBpbmRleCkKK3sKKyAgICBtX2V4ZWN1dGVkLnNldChpbmRleCk7CisgICAgaWYgKHBh
cmFsbGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAg
bV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleCk7CisgICAgICAgIG1fdG9FeGVjdXRl
SW5QYXJhbGxlbFNldC5zZXQoaW5kZXgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29s
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlZpc2l0Q291bnRl
ci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9u
Lmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7Citj
bGFzcyBNYXJraW5nQ29uc3RyYWludFNldDsKKworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtpbmdDb25zdHJhaW50U29sdmVyKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1YmxpYzoKKyAgICBNYXJraW5n
Q29uc3RyYWludFNvbHZlcihNYXJraW5nQ29uc3RyYWludFNldCYpOworICAgIH5NYXJraW5nQ29u
c3RyYWludFNvbHZlcigpOworICAgIAorICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25z
dDsKKyAgICAKKyAgICBlbnVtIFNjaGVkdWxlclByZWZlcmVuY2UgeworICAgICAgICBQYXJhbGxl
bFdvcmtGaXJzdCwKKyAgICAgICAgTmV4dENvbnN0cmFpbnRGaXJzdAorICAgIH07CisKKyAgICB2
b2lkIGV4ZWN1dGUoU2NoZWR1bGVyUHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KTsKKyAgICAKKyAgICB2b2lkIGRyYWluKEJpdFZlY3Rv
ciYgdW5leGVjdXRlZCk7CisgICAgCisgICAgdm9pZCBjb252ZXJnZShjb25zdCBWZWN0b3I8TWFy
a2luZ0NvbnN0cmFpbnQqPiYgb3JkZXIpOworICAgIAorICAgIHZvaWQgZXhlY3V0ZShNYXJraW5n
Q29uc3RyYWludCYpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHJ1bkV4ZWN1dGlvblRocmVh
ZChTbG90VmlzaXRvciYsIFNjaGVkdWxlclByZWZlcmVuY2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7CisgICAgCisgICAgdm9pZCBkaWRFeGVjdXRl
KENvbnN0cmFpbnRQYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgpOworCisgICAgSGVhcCYgbV9o
ZWFwOworICAgIFNsb3RWaXNpdG9yJiBtX21haW5WaXNpdG9yOworICAgIE1hcmtpbmdDb25zdHJh
aW50U2V0JiBtX3NldDsKKyAgICBCaXRWZWN0b3IgbV9leGVjdXRlZDsKKyAgICBEZXF1ZTx1bnNp
Z25lZCwgMzI+IG1fdG9FeGVjdXRlSW5QYXJhbGxlbDsKKyAgICBCaXRWZWN0b3IgbV90b0V4ZWN1
dGVJblBhcmFsbGVsU2V0OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IG1fZGlkRXhlY3V0ZUlu
UGFyYWxsZWw7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAzMj4gbV90b0V4ZWN1dGVTZXF1ZW50aWFs
bHk7CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIHVu
c2lnbmVkIG1fbnVtVGhyZWFkc1RoYXRNYXlQcm9kdWNlV29yayB7IDAgfTsKKyAgICBib29sIG1f
cGlja05leHRJc1N0aWxsQWN0aXZlIHsgdHJ1ZSB9OworICAgIFZlY3RvcjxWaXNpdENvdW50ZXIs
IDE2PiBtX3Zpc2l0Q291bnRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT3BhcXVlUm9vdFNldC5oCShub25l
eGlzdGVudCkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
T3BhcXVlUm9vdFNldCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BhcXVlUm9vdFNldCk7
Ci1wdWJsaWM6Ci0gICAgT3BhcXVlUm9vdFNldCgpCi0gICAgICAgIDogbV9sYXN0UXVlcmllZFJv
b3QobnVsbHB0cikKLSAgICAgICAgLCBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290KGZhbHNlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRhaW5zKHZvaWQqIHJvb3QpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAocm9vdCAhPSBtX2xhc3RRdWVyaWVkUm9vdCkgewotICAgICAgICAgICAg
bV9sYXN0UXVlcmllZFJvb3QgPSByb290OwotICAgICAgICAgICAgbV9jb250YWluc0xhc3RRdWVy
aWVkUm9vdCA9IG1fcm9vdHMuY29udGFpbnMocm9vdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmlzRW1wdHkoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fcm9vdHMuY2xlYXIoKTsKLSAg
ICAgICAgbV9sYXN0UXVlcmllZFJvb3QgPSBudWxscHRyOwotICAgICAgICBtX2NvbnRhaW5zTGFz
dFF1ZXJpZWRSb290ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBhZGQodm9pZCogcm9vdCkK
LSAgICB7Ci0gICAgICAgIGlmIChyb290ID09IG1fbGFzdFF1ZXJpZWRSb290KQotICAgICAgICAg
ICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBtX3Jv
b3RzLmFkZChyb290KS5pc05ld0VudHJ5OwotICAgIH0KLQotICAgIGludCBzaXplKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLnNpemUoKTsKLSAgICB9Ci0KLSAgICBIYXNo
U2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fcm9vdHMuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PHZvaWQqPjo6Y29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmVu
ZCgpOwotICAgIH0KLQotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8dm9pZCo+IG1fcm9vdHM7Ci0g
ICAgbXV0YWJsZSB2b2lkKiBtX2xhc3RRdWVyaWVkUm9vdDsKLSAgICBtdXRhYmxlIGJvb2wgbV9j
b250YWluc0xhc3RRdWVyaWVkUm9vdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxTb3VyY2VBZGFwdGVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFyYWxsZWxT
b3VyY2VBZGFwdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE91dGVyVHlwZSwgdHlwZW5hbWUgSW5uZXJU
eXBlLCB0eXBlbmFtZSBVbndyYXBGdW5jPgorY2xhc3MgUGFyYWxsZWxTb3VyY2VBZGFwdGVyIDog
cHVibGljIFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+IHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbFNv
dXJjZUFkYXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBlKCk+PiBvdXRlclNvdXJjZSwg
Y29uc3QgVW53cmFwRnVuYyYgdW53cmFwRnVuYykKKyAgICAgICAgOiBtX291dGVyU291cmNlKG91
dGVyU291cmNlKQorICAgICAgICAsIG1fdW53cmFwRnVuYyh1bndyYXBGdW5jKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgSW5uZXJUeXBlIHJ1bigpIG92ZXJyaWRlCisgICAgeworICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IGlmIChtX2lubmVyU291cmNlKSB7CisgICAgICAgICAgICAgICAgaWYgKElubmVyVHlwZSByZXN1
bHQgPSBtX2lubmVyU291cmNlLT5ydW4oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgICAgICBtX2lubmVyU291cmNlID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9pbm5lclNvdXJjZSA9IG1fdW53cmFw
RnVuYyhtX291dGVyU291cmNlLT5ydW4oKSk7CisgICAgICAgIH0gd2hpbGUgKG1faW5uZXJTb3Vy
Y2UpOworICAgICAgICByZXR1cm4gSW5uZXJUeXBlKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gbV9vdXRlclNvdXJjZTsKKyAgICBSZWZQ
dHI8U2hhcmVkVGFzazxJbm5lclR5cGUoKT4+IG1faW5uZXJTb3VyY2U7CisgICAgVW53cmFwRnVu
YyBtX3Vud3JhcEZ1bmM7CisgICAgTG9jayBtX2xvY2s7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4KK1Jl
ZjxQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBlLCBJbm5lclR5cGUsIFVud3JhcEZ1bmM+
PiBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXIoUmVmUHRyPFNoYXJlZFRhc2s8T3V0ZXJUeXBl
KCk+PiBvdXRlclNvdXJjZSwgY29uc3QgVW53cmFwRnVuYyYgdW53cmFwRnVuYykKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8T3V0ZXJUeXBlLCBJbm5l
clR5cGUsIFVud3JhcEZ1bmM+KG91dGVyU291cmNlLCB1bndyYXBGdW5jKSk7Cit9CisgICAgCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ6OlNpbXBsZU1hcmtpbmdDb25zdHJhaW50
KAorICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCisgICAgOjpGdW5j
dGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGV4ZWN1dGVGdW5jdGlvbiwKKyAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3kp
CisgICAgOiBNYXJraW5nQ29uc3RyYWludChXVEZNb3ZlKGFiYnJldmlhdGVkTmFtZSksIFdURk1v
dmUobmFtZSksIHZvbGF0aWxpdHksIGNvbmN1cnJlbmN5LCBDb25zdHJhaW50UGFyYWxsZWxpc206
OlNlcXVlbnRpYWwpCisgICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5j
dGlvbikpCit7Cit9CisKK1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Ojp+U2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQoKQoreworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1fZXhl
Y3V0ZUZ1bmN0aW9uKHZpc2l0b3IpOworICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxsZWxpc206
OlNlcXVlbnRpYWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludC5oIgorI2luY2x1ZGUg
PHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBhbGxvd3MgZm9y
IGFuIGluZm9ybWFsIHdheSB0byBkZWZpbmUgY29uc3RyYWludHMuIEp1c3QgcGFzcyBhIGxhbWJk
YSB0byB0aGUgY29uc3RydWN0b3IuIFRoZSBvbmx5CisvLyBkb3duc2lkZSBpcyB0aGF0IHRoaXMg
bWFrZXMgaXQgaGFyZCBmb3IgY29uc3RyYWludHMgdG8gYmUgc3RhdGVmdWwsIHdoaWNoIGlzIG5l
Y2Vzc2FyeSBmb3IgdGhlbSB0byBiZQorLy8gcGFyYWxsZWwuIEluIHRob3NlIGNhc2VzLCBpdCdz
IGVhc2llciB0byBqdXN0IHN1YmNsYXNzIE1hcmtpbmdDb25zdHJhaW50LgorY2xhc3MgU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgeworcHVibGljOgor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50KAorICAgICAgICBD
U3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAorICAgICAgICA6OkZ1bmN0aW9u
PHZvaWQoU2xvdFZpc2l0b3ImKT4sCisgICAgICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5LAorICAg
ICAgICBDb25zdHJhaW50Q29uY3VycmVuY3kgPSBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1
cnJlbnQpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TaW1wbGVNYXJraW5nQ29uc3Ry
YWludCgpOworICAgIAorcHJpdmF0ZToKKyAgICBDb25zdHJhaW50UGFyYWxsZWxpc20gZXhlY3V0
ZUltcGwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDkgKzk4LDcgQEAgU2xvdFZpc2l0b3I6On5TbG90Vmlz
aXRvcigpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiB7Ci0gICAgaWYg
KGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBo
YXZlIG1lcmdlZCBieSBub3cuCi0gICAgZWxzZQorICAgIGlmIChoZWFwKCktPmNvbGxlY3Rpb25T
Y29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbikKICAgICAgICAgcmVzZXQoKTsKIAogICAg
IGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IHZtKCkuaGVhcFByb2ZpbGVyKCkpCkBA
IC0xMTEsNyArMTA5LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAog
dm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX29wYXF1
ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwogICAgIG1fdmlzaXRDb3Vu
dCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyID0gbnVsbHB0cjsKQEAgLTI3Nyw3ICsy
NzQsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2Vs
bCkKIHsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOworICAg
IEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBl
ZCgpKTsKICAgICAKICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwpAQCAtMzQ2LDcgKzM0Myw3
IEBAIHByaXZhdGU6CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGls
ZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29u
Y3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogICAg
IAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7
CiAgICAgCkBAIC00MzUsNyArNDMyLDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25Q
YXJhbGxlbCgpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnVwZGF0ZU11dGF0b3JJc1N0b3BwZWQoY29u
c3QgQWJzdHJhY3RMb2NrZXImKQogewotICAgIG1fbXV0YXRvcklzU3RvcHBlZCA9IChtX2hlYXAu
Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVG
b3JTdG9wcGVkTXV0YXRvcik7CisgICAgbV9tdXRhdG9ySXNTdG9wcGVkID0gKG1faGVhcC53b3Js
ZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKIH0KIAogdm9p
ZCBTbG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZCgpCkBAIC00NTIsNyArNDQ5LDcg
QEAgYm9vbCBTbG90VmlzaXRvcjo6aGFzQWNrbm93bGVkZ2VkVGhhdFRoZQogCiBib29sIFNsb3RW
aXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkSXNVcFRvRGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fbXV0YXRvcklzU3RvcHBlZCA9PSAobV9oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOworICAgIHJl
dHVybiBtX211dGF0b3JJc1N0b3BwZWQgPT0gKG1faGVhcC53b3JsZElzU3RvcHBlZCgpICYgbV9j
YW5PcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6b3B0
aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpCkBAIC00OTAsOCArNDg3LDYgQEAgTkVWRVJfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbgogICAgICAgICBtX3JpZ2h0VG9SdW4uc2FmZXBv
aW50KCk7CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9Ci0gICAgCi0gICAg
bWVyZ2VJZk5lY2Vzc2FyeSgpOwogfQogCiBzaXplX3QgU2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNy
ZW1lbnRPZkRyYWluaW5nKHNpemVfdCBieXRlc1JlcXVlc3RlZCkKQEAgLTU1MCw3ICs1NDUsNiBA
QCBzaXplX3QgU2xvdFZpc2l0b3I6OnBlcmZvcm1JbmNyZW1lbnRPZkRyCiAgICAgfQogCiAgICAg
ZG9uYXRlQWxsKCk7Ci0gICAgbWVyZ2VJZk5lY2Vzc2FyeSgpOwogCiAgICAgcmV0dXJuIGJ5dGVz
VmlzaXRlZCgpOwogfQpAQCAtNTYxLDE3ICs1NTUsMTYgQEAgYm9vbCBTbG90VmlzaXRvcjo6ZGlk
UmVhY2hUZXJtaW5hdGlvbigpCiAgICAgcmV0dXJuIGRpZFJlYWNoVGVybWluYXRpb24obG9ja2Vy
KTsKIH0KIAotYm9vbCBTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBBYnN0
cmFjdExvY2tlciYpCitib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKQotICAgICAg
ICAmJiAhbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgJiYg
bV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKLSAgICAgICAgJiYg
bV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgIHJldHVybiAh
bV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKKyAgICAgICAgJiYgIWhhc1dv
cmsobG9ja2VyKTsKIH0KIAogYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBBYnN0cmFj
dExvY2tlciYpCiB7Ci0gICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKQorICAgIHJldHVybiAhaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2hlYXAu
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICB8fCAhbV9oZWFw
Lm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwogfQogCkBAIC01ODMsMTIgKzU3
NiwxNCBAQCBORVZFUl9JTkxJTkUgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzCiAKICAgICBi
b29sIGlzQWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gYm9udXNUYXNrOworICAgICAgICAKICAg
ICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2luZ011
dGV4KTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2lu
Z011dGV4KTsKICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSkKICAgICAgICAgICAgICAgICBtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICAgICAgbV9oZWFw
Lm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKys7Ci0KKyAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKHNoYXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbikgewogICAgICAgICAg
ICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2Vk
KHRpbWVvdXQpKQpAQCAtNjI5LDI4ICs2MjQsNTEgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNpdG9y
OjpTaGFyZWREcmFpblJlcwogCiAgICAgICAgICAgICAgICAgYXV0byBpc1JlYWR5ID0gWyZdICgp
IC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzV29yayhsb2NrZXIpCisg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrCiAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0
OwogICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91
dCwgaXNSZWFkeSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFoYXNX
b3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fYm9udXNWaXNpdG9y
VGFzaykKKyAgICAgICAgICAgICAgICAgICAgYm9udXNUYXNrID0gbV9oZWFwLm1fYm9udXNWaXNp
dG9yVGFzazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1f
cGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNo
YXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3JF
YWNoTWFya1N0YWNrKAotICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNr
KSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAgICAgICAgICBzdGFjay5zdGVhbFNv
bWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xvYmFs
U3RhY2soc3RhY2spLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZX
YWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICghYm9udXNUYXNrICYmIGlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIGZvckVhY2hNYXJrU3RhY2soCisgICAgICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNr
QXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9oZWFwLm1f
bnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5tX251
bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBkcmFpbih0aW1lb3V0KTsKKyAgICAgICAgaWYgKGJvbnVzVGFzaykgeworICAgICAgICAg
ICAgYm9udXNUYXNrLT5ydW4oKnRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGUgbWFpbiB0aHJlYWQgY291bGQgc3RpbGwgYmUgcnVubmluZywgYW5kIG1heSBydW4gZm9yIGEg
d2hpbGUuIFVubGVzcyB3ZSBjbGVhciB0aGUgdGFzaworICAgICAgICAgICAgLy8gb3Vyc2VsdmVz
LCB3ZSB3aWxsIGtlZXAgbG9vcGluZyBhcm91bmQgdHJ5aW5nIHRvIHJ1biB0aGUgdGFzay4KKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faGVh
cC5tX21hcmtpbmdNdXRleCk7CisgICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX2JvbnVzVmlz
aXRvclRhc2sgPT0gYm9udXNUYXNrKQorICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9ib251
c1Zpc2l0b3JUYXNrID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBib251c1Rhc2sgPSBudWxs
cHRyOworICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5u
b3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFpc0VtcHR5KCkpOworICAgICAgICAgICAgZHJhaW4odGltZW91dCk7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlzQWN0aXZlID0gdHJ1ZTsKICAgICB9CiB9
CkBAIC02NzAsMTUgKzY4OCwxOSBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xv
dFZpc2l0CiAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMQogICAgICAg
ICB8fCAobV9oZWFwLm1fd29ybGRTdGF0ZS5sb2FkKCkgJiBIZWFwOjptdXRhdG9yV2FpdGluZ0Jp
dCkKICAgICAgICAgfHwgIW1faGVhcC5oYXNIZWFwQWNjZXNzKCkKLSAgICAgICAgfHwgbV9oZWFw
LmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgfHwg
bV9oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6
YXRpb24gb3ZlciBkcmFpbkluUGFyYWxsZWwoKSB3aGVuIHdlIGhhdmUgYSBjb25jdXJyZW50IG11
dGF0b3IgYnV0CiAgICAgICAgIC8vIG90aGVyd2lzZSBpdCBpcyBub3QgcHJvZml0YWJsZS4KICAg
ICAgICAgcmV0dXJuIGRyYWluSW5QYXJhbGxlbCh0aW1lb3V0KTsKICAgICB9CiAKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwotICAgIGRvbmF0ZUFsbChsb2Nr
ZXIpOwotICAgIAorICAgIGRvbmF0ZUFsbChob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgp
KTsKKyAgICByZXR1cm4gd2FpdEZvclRlcm1pbmF0aW9uKHRpbWVvdXQpOworfQorCitTbG90Vmlz
aXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OndhaXRGb3JUZXJtaW5hdGlvbihN
b25vdG9uaWNUaW1lIHRpbWVvdXQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hl
YXAubV9tYXJraW5nTXV0ZXgpOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKGhhc0VsYXBz
ZWQodGltZW91dCkpCiAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVk
T3V0OwpAQCAtNzExLDYxICs3MzMsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbGwoY29u
c3QgQWJzdHJhCiAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFs
bCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvb3QpCi17
Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6
bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKSB7Ci0gICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRv
IHRoZSBzaGFyZWQgSGFzaFNldC4KLSAgICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJv
b3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBz
ZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KLSAgICAvLyBh
IHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxh
cmdlLgotICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJv
b3RzLmFkZChyb290KTsKLX0KLQotYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290
KHZvaWQqIHJvb3QpIGNvbnN0Ci17Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgIHJldHVybiBt
X2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKLX0KLQotVHJpU3RhdGUgU2xvdFZp
c2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqIHJvb3QpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKLSAgICAKLSAgICBp
ZiAobV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKLSAgICAgICAgcmV0dXJuIFRydWVUcmlT
dGF0ZTsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVSb290
c011dGV4KTsKLSAgICBpZiAobV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCkpCi0g
ICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Ci19
Ci0KLXZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX29w
YXF1ZVJvb3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1lcmdlT3BhcXVlUm9v
dHMoKTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJs
ZSgpCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29wYXF1ZVJvb3RzLnNpemUo
KSkgPCBPcHRpb25zOjpvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKLX0KLSAgICAKIHZvaWQgU2xvdFZpc2l0b3I6OmRv
bmF0ZSgpCiB7CiAgICAgaWYgKCFtX2lzSW5QYXJhbGxlbE1vZGUpIHsKQEAgLTc4NSwxNiArNzUy
LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oTW9ub3RvbgogICAgIGRyYWlu
KHRpbWVvdXQpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzKCkKLXsK
LSAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1
ZVJvb3RzTXV0ZXgpOwotICAgICAgICBmb3IgKGF1dG8qIHJvb3QgOiBtX29wYXF1ZVJvb3RzKQot
ICAgICAgICAgICAgbV9oZWFwLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotICAgIH0KLSAgICBt
X29wYXF1ZVJvb3RzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3Rlciogd2Vha1JlZmVyZW5jZUhhcnZl
c3RlcikKIHsKICAgICBtX2hlYXAubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5hZGRUaHJlYWRT
YWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBA
CiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIK
ICNpbmNsdWRlICJNYXJrU3RhY2suaCIKLSNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCiAjaW5j
bHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC05NSwxMCArOTQsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU1ZhbHVlKTsKICAgICB2b2lkIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKEpTQ2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKKyAgICBib29sIGFkZE9wYXF1ZVJvb3Qodm9pZCopOyAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4KICAgICAKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7Ci0gICAgVHJpU3Rh
dGUgY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCopIGNvbnN0OworICAgIGJvb2wgY29u
dGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0
dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHko
KTsgfQogCkBAIC0xMjEsNiArMTE5LDggQEAgcHVibGljOgogCiAgICAgU2hhcmVkRHJhaW5SZXN1
bHQgZHJhaW5JblBhcmFsbGVsKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOwogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbFBhc3Np
dmVseShNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsK
KyAgICAKKyAgICBTaGFyZWREcmFpblJlc3VsdCB3YWl0Rm9yVGVybWluYXRpb24oTW9ub3Rvbmlj
VGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICAvLyBBdHRl
bXB0cyB0byBwZXJmb3JtIGFuIGluY3JlbWVudCBvZiBkcmFpbmluZyB0aGF0IGludm9sdmVzIG9u
bHkgd2Fsa2luZyBgYnl0ZXNgIHdvcnRoIG9mIGRhdGEuIFRoaXMKICAgICAvLyBpcyBsaWtlbHkg
dG8gYWNjaWRlbnRhbGx5IHdhbGsgbW9yZSBvciBsZXNzIHRoYW4gdGhhdC4gSXQgd2lsbCB1c3Vh
bGx5IG1hcmsgbW9yZSB0aGFuIGJ5dGVzLiBJdCBtYXkKQEAgLTEyOCw4ICsxMjgsNiBAQCBwdWJs
aWM6CiAgICAgLy8gcmFyZSBjYXNlcyBoYXBwZW4gdGVtcG9yYXJpbHkgZXZlbiBpZiB3ZSdyZSBu
b3QgcmVhY2hpbmcgdGVybWluYXRpb24pLgogICAgIHNpemVfdCBwZXJmb3JtSW5jcmVtZW50T2ZE
cmFpbmluZyhzaXplX3QgYnl0ZXMpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
bWVyZ2VJZk5lY2Vzc2FyeSgpOwotCiAgICAgLy8gVGhpcyBpbmZvcm1zIHRoZSBHQyBhYm91dCBh
dXhpbGlhcnkgb2Ygc29tZSBzaXplIHRoYXQgd2UgYXJlIGtlZXBpbmcgYWxpdmUuIElmIHlvdSBk
b24ndCBkbwogICAgIC8vIHRoaXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQg
b2YgR0MuCiAgICAgdm9pZCBtYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOwpAQCAtMTk0
LDEwICsxOTIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlD
ZWxsKEhlYXBDZWxsKik7CiAgICAgCi0gICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0KLSAg
ICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLQogICAgIHZvaWQgdmlzaXRD
aGlsZHJlbihjb25zdCBKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxs
ZWwoKTsKQEAgLTIxNSw3ICsyMDksNiBAQCBwcml2YXRlOgogCiAgICAgTWFya1N0YWNrQXJyYXkg
bV9jb2xsZWN0b3JTdGFjazsKICAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKLSAg
ICBPcGFxdWVSb290U2V0IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1
Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KICAgICBib29sIG1f
aWdub3JlTmV3T3BhcXVlUm9vdHMgeyBmYWxzZSB9OyAvLyBVc2VmdWwgYXMgYSBkZWJ1Z2dpbmcg
bW9kZS4KICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRVbgogICAgIAogICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKICAgICBp
ZiAoVU5MSUtFTFkoY2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkpIHsKLSAgICAgICAgZGVwZW5k
ZW5jeSA9IG51bGxEZXBlbmRlbmN5KCk7CiAgICAgICAgIGlmIChMSUtFTFkoY2VsbC0+bGFyZ2VB
bGxvY2F0aW9uKCkuaXNNYXJrZWQoKSkpIHsKICAgICAgICAgICAgIGlmIChMSUtFTFkoIW1faGVh
cFNuYXBzaG90QnVpbGRlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtODYsNyArODUs
NiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpCiAgICAgCiAgICAg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5OwogICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xhcmdlQWxs
b2NhdGlvbigpKSkgewotICAgICAgICBkZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKTsKICAg
ICAgICAgaWYgKExJS0VMWShjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewpAQCAtMTM2LDYgKzEzNCwyMyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhCiAgICAgICAgIGFwcGVuZEhpZGRl
bihiYXJyaWVyc1tpXSk7CiB9CiAKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVS
b290KHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFoZWFwKCktPm1fb3BhcXVlUm9vdHMuYWRkKHB0cikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5l
IGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGhlYXAoKS0+bV9vcGFxdWVSb290cy5jb250YWlucyhwdHIpOworfQorCiBp
bmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBz
aXplKQogewogICAgIGlmIChtX2lzRmlyc3RWaXNpdCkgewpAQCAtMTU5LDEyICsxNzQsMTIgQEAg
aW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QKIAogaW5saW5lIFZNJiBTbG90
VmlzaXRvcjo6dm0oKQogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJuICpt
X2hlYXAudm0oKTsKIH0KIAogaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25z
dAogewotICAgIHJldHVybiAqbV9oZWFwLm1fdm07CisgICAgcmV0dXJuICptX2hlYXAudm0oKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiUGFyYWxsZWxT
b3VyY2VBZGFwdGVyLmgiCiAjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2lu
Y2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCkBAIC04OCw1ICs4OSw0MiBAQCBNYXJrZWRCbG9j
azo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
K1JlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IFN1YnNwYWNlOjpwYXJhbGxl
bEFsbG9jYXRvclNvdXJjZSgpCit7CisgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBTaGFyZWRUYXNr
PE1hcmtlZEFsbG9jYXRvciooKT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGFzayhNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9y
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hcmtlZEFsbG9jYXRv
ciogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiByZXN1bHQgPSBt
X2FsbG9jYXRvcjsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgbV9h
bGxvY2F0b3IgPSByZXN1bHQtPm5leHRBbGxvY2F0b3JJblN1YnNwYWNlKCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgICAgIExvY2sgbV9sb2NrOwor
ICAgIH07CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYXNrKG1fZmlyc3RBbGxvY2F0
b3IpKTsKK30KKworUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKT4+IFN1
YnNwYWNlOjpwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKQoreworICAgIHJldHVy
biBjcmVhdGVQYXJhbGxlbFNvdXJjZUFkYXB0ZXI8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkQmxv
Y2s6OkhhbmRsZSo+KAorICAgICAgICBwYXJhbGxlbEFsbG9jYXRvclNvdXJjZSgpLAorICAgICAg
ICBbXSAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIC0+IFJlZlB0cjxTaGFyZWRUYXNrPE1h
cmtlZEJsb2NrOjpIYW5kbGUqKCk+PiB7CisgICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0
b3ItPnBhcmFsbGVsTm90RW1wdHlCbG9ja1NvdXJjZSgpOworICAgICAgICB9KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
aAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjksMTcgKzY5LDI0IEBAIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihjb25zdCBGdW5j
Jik7CiAgICAgCisgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQWxsb2NhdG9yKigpPj4gcGFy
YWxsZWxBbGxvY2F0b3JTb3VyY2UoKTsKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaE1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaE5vdEVtcHR5TWFya2VkQmxv
Y2soY29uc3QgRnVuYyYpOwogICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxTaGFy
ZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBwYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxv
Y2tTb3VyY2UoKTsKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaExhcmdlQWxsb2NhdGlvbihjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmKTsK
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoU2xvdFZpc2l0b3ImKT4+IGZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBG
dW5jJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExp
dmVDZWxsKGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
NTMgQEAgdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgorUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYp
Pj4gU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5j
KQoreworICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9y
Jik+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2soU3Vic3BhY2UmIHN1YnNwYWNlLCBjb25z
dCBGdW5jJiBmdW5jKQorICAgICAgICAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQorICAgICAg
ICAgICAgLCBtX2Jsb2NrU291cmNlKHN1YnNwYWNlLnBhcmFsbGVsTm90RW1wdHlNYXJrZWRCbG9j
a1NvdXJjZSgpKQorICAgICAgICAgICAgLCBtX2Z1bmMoZnVuYykKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHJ1bihTbG90VmlzaXRvciYgdmlzaXRvcikgb3Zl
cnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGhhbmRsZSA9IG1fYmxvY2tTb3VyY2UtPnJ1bigpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxl
LT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCog
Y2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZnVuYyh2aXNpdG9yLCBjZWxsLCBraW5kKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgbV9uZWVkVG9WaXNpdExhcmdlQWxs
b2NhdGlvbnMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9zdWJzcGFjZS5mb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKAorICAgICAgICAgICAgICAgIFsm
XSAoTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChhbGxvY2F0aW9uLT5pc01hcmtlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5j
KHZpc2l0b3IsIGFsbG9jYXRpb24tPmNlbGwoKSwgbV9zdWJzcGFjZS5tX2F0dHJpYnV0ZXMuY2Vs
bEtpbmQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIFN1YnNwYWNlJiBtX3N1YnNwYWNlOworICAgICAgICBSZWZQdHI8U2hh
cmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gbV9ibG9ja1NvdXJjZTsKKyAgICAgICAg
RnVuYyBtX2Z1bmM7CisgICAgICAgIExvY2sgbV9sb2NrOworICAgICAgICBib29sIG1fbmVlZFRv
VmlzaXRMYXJnZUFsbG9jYXRpb25zIHsgdHJ1ZSB9OworICAgIH07CisgICAgCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBUYXNrKCp0aGlzLCBmdW5jKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYgZnVuYykK
IHsKICAgICBmb3JFYWNoTWFya2VkQmxvY2soCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WaXNpdENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9WaXNpdENvdW50ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9WaXNpdENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmlzaXRDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBWaXNp
dENvdW50ZXIoKSB7IH0KKyAgICAKKyAgICBWaXNpdENvdW50ZXIoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisgICAgICAgIDogbV92aXNpdG9yKCZ2aXNpdG9yKQorICAgICAgICAsIG1faW5pdGlhbFZp
c2l0Q291bnQodmlzaXRvci52aXNpdENvdW50KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBT
bG90VmlzaXRvciYgdmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuICptX3Zpc2l0b3I7IH0KKyAgICAK
KyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
aXNpdG9yLT52aXNpdENvdW50KCkgLSBtX2luaXRpYWxWaXNpdENvdW50OworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgU2xvdFZpc2l0b3IqIG1fdmlzaXRvciB7IG51bGxwdHIgfTsKKyAgICBz
aXplX3QgbV9pbml0aWFsVmlzaXRDb3VudCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WaXNpdGluZ1RpbWVvdXQu
aAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRp
bmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFZp
c2l0aW5nVGltZW91dCB7Ci1wdWJsaWM6Ci0gICAgVmlzaXRpbmdUaW1lb3V0KCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIFZpc2l0aW5nVGltZW91dChTbG90VmlzaXRvciYgdmlzaXRvciwgYm9v
bCBkaWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZSB0aW1lb3V0KQotICAgICAgICA6IG1f
ZGlkVmlzaXRTb21ldGhpbmcoZGlkVmlzaXRTb21ldGhpbmcpCi0gICAgICAgICwgbV92aXNpdENv
dW50QmVmb3JlKHZpc2l0b3IudmlzaXRDb3VudCgpKQotICAgICAgICAsIG1fdGltZW91dCh0aW1l
b3V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IHZpc2l0Q291bnQoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdENv
dW50KCkgLSBtX3Zpc2l0Q291bnRCZWZvcmU7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRWaXNpdFNv
bWV0aGluZyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2RpZFZpc2l0U29tZXRoaW5nIHx8IHZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgc2hvdWxkVGltZU91dChTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBkaWRWaXNpdFNvbWV0aGluZyh2aXNpdG9yKSAmJiBoYXNFbGFw
c2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBib29sIG1fZGlkVmlz
aXRTb21ldGhpbmcgeyBmYWxzZSB9OwotICAgIHNpemVfdCBtX3Zpc2l0Q291bnRCZWZvcmUgeyAw
IH07Ci0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVvdXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZp
c2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBXZWFrQmxvY2s6OnNwZWNp
YWxpemVkVmlzaXQoQ29udGFpbgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gd2Vha0ltcGwtPmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5l
ci5pc01hcmtlZENvbmN1cnJlbnRseShtYXJraW5nVmVyc2lvbiwganNWYWx1ZS5hc0NlbGwoKSkp
CisgICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWQobWFya2luZ1ZlcnNpb24sIGpzVmFsdWUu
YXNDZWxsKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAo
IXdlYWtIYW5kbGVPd25lci0+aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSGFuZGxlPFVua25v
d24+Ojp3cmFwU2xvdCgmY29uc3RfY2FzdDxKU1ZhbHVlJj4oanNWYWx1ZSkpLCB3ZWFrSW1wbC0+
Y29udGV4dCgpLCB2aXNpdG9yKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDcgKzM4Miw3IEBA
IEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICBzdHJ1Y3R1cmUg
PSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgIGxhc3RPZmZzZXQgPSBzdHJ1Y3R1
cmUtPmxhc3RPZmZzZXQoKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKTsKLSAgICBEZXBlbmRlbmN5IGluZGV4aW5nVHlwZURlcGVuZGVu
Y3kgPSBkZXBlbmRlbmN5KGluZGV4aW5nVHlwZSk7CisgICAgRGVwZW5kZW5jeSBpbmRleGluZ1R5
cGVEZXBlbmRlbmN5ID0gRGVwZW5kZW5jeTo6ZmVuY2UoaW5kZXhpbmdUeXBlKTsKICAgICBMb2Nr
ZXI8SlNDZWxsPiBsb2NrZXIoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSkgewogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CkBAIC0z
OTYsMTMgKzM5NiwxMyBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGJ1dHRlcmZseSA9IGNv
bnN1bWUodGhpcywgaW5kZXhpbmdUeXBlRGVwZW5kZW5jeSktPmJ1dHRlcmZseSgpOwotICAgIERl
cGVuZGVuY3kgYnV0dGVyZmx5RGVwZW5kZW5jeSA9IGRlcGVuZGVuY3koYnV0dGVyZmx5KTsKKyAg
ICBidXR0ZXJmbHkgPSBpbmRleGluZ1R5cGVEZXBlbmRlbmN5LmNvbnN1bWUodGhpcyktPmJ1dHRl
cmZseSgpOworICAgIERlcGVuZGVuY3kgYnV0dGVyZmx5RGVwZW5kZW5jeSA9IERlcGVuZGVuY3k6
OmZlbmNlKGJ1dHRlcmZseSk7CiAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmU7Ci0gICAgaWYgKGNvbnN1bWUodGhpcywgYnV0dGVyZmx5RGVwZW5kZW5jeSktPnN0
cnVjdHVyZUlEKCkgIT0gc3RydWN0dXJlSUQpCisgICAgaWYgKGJ1dHRlcmZseURlcGVuZGVuY3ku
Y29uc3VtZSh0aGlzKS0+c3RydWN0dXJlSUQoKSAhPSBzdHJ1Y3R1cmVJRCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgaWYgKGNvbnN1bWUoc3RydWN0dXJlLCBidXR0ZXJmbHlEZXBlbmRl
bmN5KS0+bGFzdE9mZnNldCgpICE9IGxhc3RPZmZzZXQpCisgICAgaWYgKGJ1dHRlcmZseURlcGVu
ZGVuY3kuY29uc3VtZShzdHJ1Y3R1cmUpLT5sYXN0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0
T2ZMaW5lUHJvcGVydGllcyh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSwgbGFzdE9mZnNl
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1NCw2ICszNTQsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVBc3lu
Y0l0ZXJhdGlvbiA9IGZhCiAgICAgXAogICAgIHYodW5zaWduZWQsIG1pbmltdW1OdW1iZXJPZlNj
YW5zQmV0d2VlblJlYmFsYW5jZSwgMTAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KHVuc2ln
bmVkLCBudW1iZXJPZkdDTWFya2VycywgY29tcHV0ZU51bWJlck9mR0NNYXJrZXJzKDgpLCBOb3Jt
YWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZVBhcmFsbGVsTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG9wYXF1ZVJv
b3RNZXJnZVRocmVzaG9sZCwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUs
IG1pbkhlYXBVdGlsaXphdGlvbiwgMC44LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJs
ZSwgbWluTWFya2VkQmxvY2tVdGlsaXphdGlvbiwgMC45LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNp
b24gMjI1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEwMSwxNCArMTEwMSwxNCBAQCBib29sIFN0cnVjdHVyZTo6
aXNDaGVhcER1cmluZ0dDKCkKICAgICAvLyBoYXMgYW55IGxhcmdlIHByb3BlcnR5IG5hbWVzLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTczMzQKICAg
ICAKLSAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8fCBIZWFwOjppc01hcmtlZENvbmN1cnJl
bnRseShtX2dsb2JhbE9iamVjdC5nZXQoKSkpCi0gICAgICAgICYmIChoYXNQb2x5UHJvdG8oKSB8
fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHko
c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gKCFtX2dsb2JhbE9iamVjdCB8
fCBIZWFwOjppc01hcmtlZChtX2dsb2JhbE9iamVjdC5nZXQoKSkpCisgICAgICAgICYmIChoYXNQ
b2x5UHJvdG8oKSB8fCAhc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgfHwgSGVhcDo6aXNNYXJrZWQo
c3RvcmVkUHJvdG90eXBlT2JqZWN0KCkpKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6Om1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICghaXNDaGVhcER1cmluZ0dDKCkp
Ci0gICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKHRoaXMpOwogICAgIAogICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1
NDAzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4
MyBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91bGQgYmUgcGFyYWxsZWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTkzNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBkb2VzIHNv
bWUgY2hhbmdlcyB0byBtYWtlIGl0IGVhc2llciB0byBkbyBwYXJhbGxlbCBjb25zdHJhaW50IHNv
bHZpbmc6CisgICAgICAgIAorICAgICAgICAtIEkgZmluYWxseSByZW1vdmVkIGRlcGVuZGVuY3lX
aXRoLiBUaGlzIHdhcyBhIHNpbGx5IGNvbnN0cnVjdCB3aG9zZSBvbmx5IHB1cnBvc2UgaXMgdG8g
Y29uZnVzZQorICAgICAgICAgIHBlb3BsZSBhYm91dCB3aGF0IGl0IG1lYW5zIHRvIGhhdmUgYSBk
ZXBlbmRlbmN5IGNoYWluLiBJIHRvb2sgdGhhdCBhcyBhbiBvcHBvcnR1bml0eSB0byBncmVhbHkK
KyAgICAgICAgICBzaW1wbGlmeSB0aGUgR0MncyB1c2Ugb2YgZGVwZW5kZW5jeSBjaGFpbmluZy4K
KyAgICAgICAgCisgICAgICAgIC0gQWRkZWQgbW9yZSBsb2dpYyB0byBEZXF1ZTw+LCBzaW5jZSBJ
IHVzZSBpdCBmb3IgcGFydCBvZiB0aGUgbG9hZCBiYWxhbmNlci4KKyAgICAgICAgCisgICAgICAg
IC0gTWFkZSBpdCBwb3NzaWJsZSB0byBwcm9maWxlIGxvY2sgY29udGVudGlvbi4gU2VlCisgICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDI1MCNjMCBm
b3Igc29tZSBwcmVsaW1pbmFyeSBtZWFzdXJlbWVudHMuCisgICAgICAgIAorICAgICAgICAtIElu
dHJvZHVjZWQgaG9sZExvY2tJZiwgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBwZXJmb3JtIHByZWRp
Y2F0ZWQgbG9jayBhY3F1aXNpdGlvbi4gV2UgdXNlIHRoYXQKKyAgICAgICAgICB0byBwaWNrIGEg
bG9jayBpbiBXZWJDb3JlLgorICAgICAgICAKKyAgICAgICAgLSBJbnRyb2R1Y2VkIENvdW50aW5n
TG9jay4gSXQncyBsaWtlIFdURjo6TG9jayBleGNlcHQgaXQgYWxzbyBlbmFibGVzIG9wdGltaXN0
aWMgcmVhZCB0cmFuc2FjdGlvbnMKKyAgICAgICAgICBzb3J0YSBsaWtlIEphdmEncyBTdGFtcGVk
TG9jay4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHd0Zi9BdG9taWNzLmg6CisgICAgICAgIChXVEY6OmRlcGVuZGVuY3kpOgorICAgICAgICAo
V1RGOjpEZXBlbmRlbmN5V2l0aDo6RGVwZW5kZW5jeVdpdGgpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpkZXBlbmRlbmN5V2l0aCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5o
OgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAg
ICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0NvbmN1cnJlbnRQdHJIYXNo
U2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpDb25j
dXJyZW50UHRySGFzaFNldCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojp+
Q29uY3VycmVudFB0ckhhc2hTZXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNl
dDo6ZGVsZXRlT2xkVGFibGVzKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6
OmNsZWFyKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmluaXRpYWxpemUp
OgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6YWRkU2xvdyk6CisgICAgICAg
IChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNpemVBbmRBZGQpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogd3RmL0Nv
bmN1cnJlbnRQdHJIYXNoU2V0Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRy
SGFzaFNldDo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6
YWRkKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OnNpemUgY29uc3QpOgor
ICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU6Om1heExvYWQgY29uc3Qp
OgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6aGFzaCk6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpjYXN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFB0ckhhc2hTZXQ6OmNvbnRhaW5zSW1wbCBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRQdHJIYXNoU2V0OjphZGRJbXBsKToKKyAgICAgICAgKiB3dGYvRGVxdWUuaDoKKyAgICAgICAg
KFdURjo6aW5saW5lQ2FwYWNpdHk+Ojp0YWtlRmlyc3QpOgorICAgICAgICAqIHd0Zi9GYXN0TWFs
bG9jLmg6CisgICAgICAgICogd3RmL0xvY2suY3BwOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6
bG9ja1Nsb3cpOgorICAgICAgICAqIHd0Zi9Mb2NrZXIuaDoKKyAgICAgICAgKFdURjo6aG9sZExv
Y2tJZik6CisgICAgICAgICogd3RmL1Njb3BlZExhbWJkYS5oOgorICAgICAgICAqIHd0Zi9TaGFy
ZWRUYXNrLmg6CisgICAgICAgIChXVEY6OlNoYXJlZFRhc2s8UGFzc2VkUmVzdWx0VHlwZSk6Cisg
ICAgICAgIChXVEY6OlNoYXJlZFRhc2s8UmVzdWx0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL1N0YWNrU2hvdC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpTdGFja1No
b3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6
OlN0YWNrU2hvdDo6YXJyYXkgY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6OnNpemUg
Y29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgor
ICAgICAgICAoV1RGOjpTdGFja1Nob3Q6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV1RG
OjpTdGFja1Nob3Q6Omhhc2ggY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6OmlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90OjpvcGVy
YXRvcj4gY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6OmRlbGV0ZWRWYWx1ZUFycmF5
KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90SGFzaDo6aGFzaCk6CisgICAgICAgIChXVEY6OlN0
YWNrU2hvdEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiB3dGYvU3RhY2tTaG90UHJvZmlsZXIuaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hvdFByb2ZpbGVyOjpTdGFja1Nob3RQcm9maWxl
cik6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdFByb2ZpbGVyOjpwcm9maWxlKToKKyAgICAgICAg
KFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OnJ1bik6CisKIDIwMTctMTItMDEgIEJyYWR5IEVpZHNv
biAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBJbnRlcm5hbHMudGVybWluYXRl
U2VydmljZVdvcmtlciwgYW5kIHRoZSBhYmlsaXR5IHRvIHJlc3RhcnQgc2VydmljZSB3b3JrZXJz
IGZvciBwb3N0TWVzc2FnZS4KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogLyogQmVnaW4g
UEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRjUyNkIxRjQyMUZGODAwNEE0NTJDIC8qIFN0
cmluZ01hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjBGNTI2OTFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCAqLzsgfTsK
IAkJMEYzMEJBOTAxRTc4NzA4RTAwMkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMEJBOEExRTc4NzA4RTAw
MkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwICovOyB9OworCQkwRjMwQ0I1QTFGQ0RGMTM0MDA0
QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1
cnJlbnRQdHJIYXNoU2V0LmNwcCAqLzsgfTsKIAkJMEY0M0Q4RjExREI1QUREQzAwMTA4RkI2IC8q
IEF1dG9tYXRpY1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQzRDhFRjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNw
cCAqLzsgfTsKIAkJMEY1QkYxNzYxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTc0MUYyM0Q0
OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgKi87IH07CiAJCTBGNjBGMzJGMURGQ0JEMUIwMDQx
NkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwRjMyRDFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJp
bnRTdHJlYW0uY3BwICovOyB9OwpAQCAtMzQsNiArMzUsNyBAQAogCQkwRjcwNzVGNTFGQkY1M0NE
MDA0ODlBRjAgLyogVGltaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MDc1RjQxRkJGNTM3QTAwNDg5QUYwIC8qIFRpbWluZ1Njb3Bl
LmNwcCAqLzsgfTsKIAkJMEY3QzVGQjYxRDg4NUNGMjAwNDRGNUUyIC8qIEZhc3RCaXRWZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVG
QjUxRDg4NUNGMjAwNDRGNUUyIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjgyNEE2
ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFy
a2luZ0xvdC5jcHAgKi87IH07CisJCTBGOEU4NURCMUZENDg1QjAwMDY5MTg4OSAvKiBDb3VudGlu
Z0xvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY4RTg1REExRkQ0ODVCMDAwNjkxODg5IC8qIENvdW50aW5nTG9jay5jcHAgKi87IH07CiAJCTBG
OEYyQjkyMTcyRTAxMDMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI4RjE3MkUwMEYwMDA3
REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovOyB9OwogCQkwRjlEMzM2MDE2NURCQTcz
MDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJp
bnRTdHJlYW0uY3BwICovOyB9OwogCQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcgLyogUHJpbnRT
dHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTE4
Myw2ICsxODUsOCBAQAogCQkwRjMwQkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hN
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hNYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMEJBOEUxRTc4NzA4RTAwMkNBODQ3IC8q
IExvZ2dpbmdIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dp
bmdIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzBCQThGMUU3ODcw
OEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaFRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2dnaW5nSGFzaFRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hT
ZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0
QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzMURENzAxRjEzMDhCQzAwNzJFQjRBIC8qIExvY2tBbGdvcml0aG1JbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG1JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzQ4QzdEMUY0N0FBOUQwMDNDRkVGMiAvKiBTdHJpbmdWZWN0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RyaW5nVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIxNyw2ICsyMjEsNyBAQAogCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyog
UGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJr
aW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjUxQjc0NDNB
MDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGFya2luZ0xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2
NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSYXdQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOEU4
NURBMUZENDg1QjAwMDY5MTg4OSAvKiBDb3VudGluZ0xvY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ291bnRpbmdMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0
aW9uVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjlCMTcyRjI1OTQwMDdEQkRBNSAvKiBDb252ZXJz
aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb252ZXJzaW9uTW9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjI2LDYgKzIzMSw4IEBACiAJCTBGOUQzMzVDMTY1REJBNzMwMDVB
RDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsZVByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQz
MzVEMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUQzMzVFMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjlEQUEwNDFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrU2hvdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90
UHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tTaG90UHJv
ZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMTgxODBGQTIxODAw
OUI2QjREIC8qIEJhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMUExODEwRTFEQTAwOUI2QjREIC8q
IEJhZ1RvSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWdUb0hhc2hNYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRy
YWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtVHJhY2luZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwLDYgKzI1Nyw3IEBACiAJCTBGRUQ2
N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZGNEI0QzQxRTg4OTM5QzAwREJCRTg2IC8qIExpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2ludGVyQ29tcGFyaXNvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkZCQ0JGQTFGRDM3RTBGMDA3MkFBRjAgLyogQ291bnRpbmdM
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvdW50aW5nTG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZGMTlEQTFCQjMzNEVCMDA4ODZEOTEgLyog
UGFyYWxsZWxIZWxwZXJQb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhcmFsbGVsSGVscGVyUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRkYxOURCMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFs
bG9jLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBh
cmNoaXZlLmFyOyBwYXRoID0gbGliYm1hbGxvYy5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwpAQCAtNzk0LDcgKzgwMiwxMSBAQAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdE
QkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUxQTgyNUEwMDQx
MjNGRiAvKiBDb21waWxlci5oICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlBMkJCQyAvKiBD
b21wbGV0aW9uSGFuZGxlci5oICovLAorCQkJCTBGMzBDQjU4MUZDREYxMzMwMDRCNTMyMyAvKiBD
b25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCisJCQkJMEYzMENCNTkxRkNERjEzMzAwNEI1MzIz
IC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8sCiAJCQkJMEZEQjY5OEQxQjdDNjQzQTAwMEMx
MDc4IC8qIENvbmRpdGlvbi5oICovLAorCQkJCTBGRkJDQkZBMUZEMzdFMEYwMDcyQUFGMCAvKiBD
b3VudGluZ0xvY2suaCAqLywKKwkJCQkwRjhFODVEQTFGRDQ4NUIwMDA2OTE4ODkgLyogQ291bnRp
bmdMb2NrLmNwcCAqLywKIAkJCQlFMzhDNDEyNjFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5j
cHAgKi8sCiAJCQkJRTM4QzQxMjcxRUI0RTA2ODAwNDI5NTdEIC8qIENQVVRpbWUuaCAqLywKIAkJ
CQk1MTVGNzk0QjFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovLApA
QCAtMTAwNSw2ICsxMDE3LDggQEAKIAkJCQlBOEE0NzMwRDE1MUE4MjVCMDA0MTIzRkYgLyogU3Bl
Y3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMu
Y3BwICovLAogCQkJCUE4QTQ3MzBGMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5oICov
LAorCQkJCTBGOURBQTA0MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3QuaCAqLywKKwkJCQkw
RjlEQUEwNTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLywKIAkJCQlG
RURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgKi8sCiAJCQkJRkVEQUNE
M0MxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCAqLywKIAkJCQkzMTNFREVDOTc3OEU0
OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8sCkBAIC0xNDI1LDcgKzE0MzksOSBAQAog
CQkJCTBGRkYxOURDMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1MkIxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNp
c3RlbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4RTg1REIxRkQ0ODVCMDAwNjkx
ODg5IC8qIENvdW50aW5nTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzUyQzFGM0Q0
ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYzMENCNUExRkNERjEzNDAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxRjE3NTJEMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RW5j
b2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcgLyog
UHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9B
dG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lv
biAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzOSwxMTMgKzMzOSwxMDQgQEAgaW5saW5lIHZvaWQgY3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2Uo
KSB7IAogCiAjZW5kaWYKIAotdHlwZWRlZiB1bnNpZ25lZCBEZXBlbmRlbmN5OwordHlwZWRlZiB1
bnNpZ25lZCBJbnRlcm5hbERlcGVuZGVuY3lUeXBlOwogCi1BTFdBWVNfSU5MSU5FIERlcGVuZGVu
Y3kgbnVsbERlcGVuZGVuY3koKQoraW5saW5lIEludGVybmFsRGVwZW5kZW5jeVR5cGUgb3BhcXVl
TWl4dHVyZSgpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUqID0gbnVsbHB0cj4K
LUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHMsIHR5cGVuYW1lIFQ+CitpbmxpbmUgSW50ZXJuYWxEZXBlbmRl
bmN5VHlwZSBvcGFxdWVNaXh0dXJlKFQgdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7
Ci0gICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKLSAgICB1aW50NjRfdCBjb3B5ID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIC8vIENyZWF0ZSBhIG1h
Z2ljYWwgemVybyB2YWx1ZSB0aHJvdWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRp
b24KLSAgICAvLyBpc24ndCB2aXNpYmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0
aGVuIHVzYWJsZSBhcyBhbiBvZmZzZXQgaW4KLSAgICAvLyBmdXJ0aGVyIGFkZHJlc3MgY29tcHV0
YXRpb25zOiBhZGRpbmcgemVybyBkb2VzIG5vdGhpbmcsIGJ1dCB0aGUgY29tcGlsZXIKLSAgICAv
LyBkb2Vzbid0IGtub3cgaXQuIEl0J3MgbWFnaWNhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgYW4gYWRk
cmVzcyBkZXBlbmRlbmN5Ci0gICAgLy8gZnJvbSB0aGUgbG9hZCBvZiBgbG9jYXRpb25gIHRvIHRo
ZSB1c2VzIG9mIHRoZSBkZXBlbmRlbmN5LCB3aGljaCB0cmlnZ2VycwotICAgIC8vIHRoZSBBUk0g
SVNBJ3MgYWRkcmVzcyBkZXBlbmRlbmN5IHJ1bGUsIGEuay5hLiB0aGUgbXl0aGljYWwgQysrIGNv
bnN1bWUKLSAgICAvLyBvcmRlcmluZy4gVGhpcyBmb3JjZXMgd2VhayBtZW1vcnkgb3JkZXIgQ1BV
cyB0byBvYnNlcnZlIGBsb2NhdGlvbmAgYW5kCi0gICAgLy8gZGVwZW5kZW50IGxvYWRzIGluIHRo
ZWlyIHN0b3JlIG9yZGVyIHdpdGhvdXQgdGhlIHJlYWRlciB1c2luZyBhIGJhcnJpZXIKLSAgICAv
LyBvciBhbiBhY3F1aXJlIGxvYWQuCi0gICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2lu
XSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAg
ICAgIDogW2luXSAiciIoY29weSkpOwotI2VsaWYgQ1BVKEFSTSkKLSAgICBhc20oImVvciAlW2Rl
cGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVw
ZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxzZQotICAgIC8vIE5vIGRl
cGVuZGVuY3kgaXMgbmVlZGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KLSAgICBsb2FkTG9hZEZl
bmNlKCk7Ci0gICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOwotI2Vu
ZGlmCi0gICAgcmV0dXJuIGRlcGVuZGVuY3k7CisgICAgdW5pb24geworICAgICAgICBJbnRlcm5h
bERlcGVuZGVuY3lUeXBlIGNvcHk7CisgICAgICAgIFQgdmFsdWU7CisgICAgfSB1OworICAgIHUu
Y29weSA9IDA7CisgICAgdS52YWx1ZSA9IHZhbHVlOworICAgIHJldHVybiBvcGFxdWVNaXh0dXJl
KGFyZ3VtZW50cy4uLikgKyB1LmNvcHk7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgYWxt
b3N0IGlkZW50aWNhbCB0byB0aGUgb3RoZXIgZGVwZW5kZW5jeSgpIG92ZXJsb2FkLgotLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwNQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA0Pjo6dHlwZSog
PSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkK
LXsKLSAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwotICAgIHVpbnQzMl90IGNvcHkgPSBiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKK2NsYXNzIERlcGVuZGVuY3kgeworcHVibGljOgorICAg
IERlcGVuZGVuY3koKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIC8vIE9uIFRTTyBhcmNoaXRlY3R1cmVzLCB0aGlzIGlzIGEgbG9hZC1sb2FkIGZlbmNlIGFu
ZCB0aGUgdmFsdWUgaXQgcmV0dXJucyBpcyBub3QgbWVhbmluZ2Z1bCAoaXQncworICAgIC8vIHpl
cm8pLiBUaGUgbG9hZC1sb2FkIGZlbmNlIGlzIHVzdWFsbHkganVzdCBhIGNvbXBpbGVyIGZlbmNl
LiBPbiBBUk0sIHRoaXMgaXMgYSBzZWxmLXhvciB0aGF0CisgICAgLy8gcHJvZHVjZXMgemVybywg
YnV0IGl0J3MgY29uY2VhbGVkIGZyb20gdGhlIGNvbXBpbGVyLiBUaGUgQ1BVIHVuZGVyc3RhbmRz
IHRoaXMgZHVtbXkgb3AgdG8gYmUgYQorICAgIC8vIHBoYW50b20gZGVwZW5lbmRlbmN5LgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgRGVwZW5kZW5jeSBm
ZW5jZShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxEZXBl
bmRlbmN5VHlwZSBpbnB1dCA9IG9wYXF1ZU1peHR1cmUoYXJndW1lbnRzLi4uKTsKKyAgICAgICAg
SW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBvdXRwdXQ7CiAjaWYgQ1BVKEFSTTY0KQotICAgIGFzbSgi
ZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5j
eV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAg
Ly8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3
aG9zZSBjb21wdXRhdGlvbgorICAgICAgICAvLyBpc24ndCB2aXNpYmxlIHRvIHRoZSBvcHRpbWl6
ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVzYWJsZSBhcyBhbiBvZmZzZXQgaW4KKyAgICAgICAgLy8g
ZnVydGhlciBhZGRyZXNzIGNvbXB1dGF0aW9uczogYWRkaW5nIHplcm8gZG9lcyBub3RoaW5nLCBi
dXQgdGhlIGNvbXBpbGVyCisgICAgICAgIC8vIGRvZXNuJ3Qga25vdyBpdC4gSXQncyBtYWdpY2Fs
IGJlY2F1c2UgaXQgY3JlYXRlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kKKyAgICAgICAgLy8gZnJv
bSB0aGUgbG9hZCBvZiBgbG9jYXRpb25gIHRvIHRoZSB1c2VzIG9mIHRoZSBkZXBlbmRlbmN5LCB3
aGljaCB0cmlnZ2VycworICAgICAgICAvLyB0aGUgQVJNIElTQSdzIGFkZHJlc3MgZGVwZW5kZW5j
eSBydWxlLCBhLmsuYS4gdGhlIG15dGhpY2FsIEMrKyBjb25zdW1lCisgICAgICAgIC8vIG9yZGVy
aW5nLiBUaGlzIGZvcmNlcyB3ZWFrIG1lbW9yeSBvcmRlciBDUFVzIHRvIG9ic2VydmUgYGxvY2F0
aW9uYCBhbmQKKyAgICAgICAgLy8gZGVwZW5kZW50IGxvYWRzIGluIHRoZWlyIHN0b3JlIG9yZGVy
IHdpdGhvdXQgdGhlIHJlYWRlciB1c2luZyBhIGJhcnJpZXIKKyAgICAgICAgLy8gb3IgYW4gYWNx
dWlyZSBsb2FkLgorICAgICAgICBhc20oImVvciAld1tvdXRdLCAld1tpbl0sICV3W2luXSIKKyAg
ICAgICAgICAgIDogW291dF0gIj1yIihvdXRwdXQpCisgICAgICAgICAgICA6IFtpbl0gInIiKGlu
cHV0KSk7CiAjZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5d
LCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAg
ICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgYXNtKCJlb3IgJVtvdXRdLCAlW2luXSwgJVtp
bl0iCisgICAgICAgICAgICA6IFtvdXRdICI9ciIob3V0cHV0KQorICAgICAgICAgICAgOiBbaW5d
ICJyIihpbnB1dCkpOwogI2Vsc2UKLSAgICBsb2FkTG9hZEZlbmNlKCk7Ci0gICAgZGVwZW5kZW5j
eSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOworICAgICAgICAvLyBObyBkZXBlbmRlbmN5
IGlzIG5lZWRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCisgICAgICAgIGxvYWRMb2FkRmVuY2Uo
KTsKKyAgICAgICAgb3V0cHV0ID0gMDsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKICNl
bmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+
Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJl
dHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+
Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShU
IHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2
YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRo
IHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShu
dWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAsIHZhbHVlKCkKKyAgICAgICAgRGVwZW5kZW5jeSBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb3V0cHV0OworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvLyBPbiBUU08gYXJjaGl0ZWN0dXJlcywgdGhpcyBq
dXN0IHJldHVybnMgdGhlIHBvaW50ZXIgeW91IHBhc3MgaXQuIE9uIEFSTSwgdGhpcyBwcm9kdWNl
cyBhIG5ldworICAgIC8vIHBvaW50ZXIgdGhhdCBpcyBkZXBlbmRlbnQgb24gdGhpcyBkZXBlbmRl
bmN5IGFuZCB0aGUgaW5wdXQgcG9pbnRlci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IFQqIGNvbnN1bWUoVCogcG9pbnRlcikKICAgICB7CisjaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJN
KQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBv
aW50ZXIpICsgbV92YWx1ZSk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obV92YWx1ZSk7
CisgICAgICAgIHJldHVybiBwb2ludGVyOworI2VuZGlmCiAgICAgfQogICAgIAotICAgIERlcGVu
ZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAg
IDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQorcHJpdmF0ZToKKyAgICBJbnRlcm5hbERlcGVuZGVu
Y3lUeXBlIG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnB1dFR5cGUsIHR5cGVu
YW1lIFZhbHVlVHlwZT4KK3N0cnVjdCBJbnB1dEFuZFZhbHVlIHsKKyAgICBJbnB1dEFuZFZhbHVl
KCkgeyB9CisgICAgCisgICAgSW5wdXRBbmRWYWx1ZShJbnB1dFR5cGUgaW5wdXQsIFZhbHVlVHlw
ZSB2YWx1ZSkKKyAgICAgICAgOiBpbnB1dChpbnB1dCkKICAgICAgICAgLCB2YWx1ZSh2YWx1ZSkK
ICAgICB7CiAgICAgfQogICAgIAotICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKLSAgICBUIHZh
bHVlOworICAgIElucHV0VHlwZSBpbnB1dDsKKyAgICBWYWx1ZVR5cGUgdmFsdWU7CiB9OwotICAg
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRl
bmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJl
dHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBlbmRlbmN5LCB2YWx1ZSk7Ci19CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRl
cGVuZGVuY3kpCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnB1dFR5cGUsIHR5cGVuYW1lIFZhbHVlVHlw
ZT4KK0lucHV0QW5kVmFsdWU8SW5wdXRUeXBlLCBWYWx1ZVR5cGU+IGlucHV0QW5kVmFsdWUoSW5w
dXRUeXBlIGlucHV0LCBWYWx1ZVR5cGUgdmFsdWUpCiB7Ci0jaWYgQ1BVKEFSTTY0KSB8fCBDUFUo
QVJNKQotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2VfY2FzdDxjaGFyKj4ocG9p
bnRlcikgKyBkZXBlbmRlbmN5KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRlcGVuZGVuY3kp
OwotICAgIHJldHVybiBwb2ludGVyOwotI2VuZGlmCisgICAgcmV0dXJuIElucHV0QW5kVmFsdWU8
SW5wdXRUeXBlLCBWYWx1ZVR5cGU+KGlucHV0LCB2YWx1ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEZ1bmM+CkBAIC00NjksMTEgKzQ2MCw5IEBAIEFMV0FZU19JTkxJTkUg
VCYgZW5zdXJlUG9pbnRlcihBdG9taWM8VCoKIAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBX
VEY6OkRlcGVuZGVuY3k7Ci11c2luZyBXVEY6OkRlcGVuZGVuY3lXaXRoOwotdXNpbmcgV1RGOjpj
b25zdW1lOwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0
aDsKK3VzaW5nIFdURjo6SW5wdXRBbmRWYWx1ZTsKK3VzaW5nIFdURjo6aW5wdXRBbmRWYWx1ZTsK
IHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsKLXVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7Cit1
c2luZyBXVEY6Om9wYXF1ZU1peHR1cmU7CiAKICNlbmRpZiAvLyBBdG9taWNzX2gKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jp
dFZlY3Rvci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3Ir
KyhpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOwor
ICAgICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVuZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAko
cmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDEzICs0MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXRtYXBTaXpl
OwogICAgIH0KIAotICAgIGJvb2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRl
bmN5KCkpIGNvbnN0OworICAgIGJvb2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeSA9IERlcGVuZGVu
Y3koKSkgY29uc3Q7CiAgICAgdm9pZCBzZXQoc2l6ZV90KTsKICAgICB2b2lkIHNldChzaXplX3Qs
IGJvb2wpOwogICAgIGJvb2wgdGVzdEFuZFNldChzaXplX3QpOwogICAgIGJvb2wgdGVzdEFuZENs
ZWFyKHNpemVfdCk7Ci0gICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QsIERlcGVu
ZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpKTsKLSAgICBib29sIGNvbmN1cnJlbnRUZXN0QW5kQ2xl
YXIoc2l6ZV90LCBEZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKSk7CisgICAgYm9vbCBjb25j
dXJyZW50VGVzdEFuZFNldChzaXplX3QsIERlcGVuZGVuY3kgPSBEZXBlbmRlbmN5KCkpOworICAg
IGJvb2wgY29uY3VycmVudFRlc3RBbmRDbGVhcihzaXplX3QsIERlcGVuZGVuY3kgPSBEZXBlbmRl
bmN5KCkpOwogICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3QpIGNvbnN0OwogICAg
IHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CkBAIC0xMzgsNyArMTM4
LDcgQEAgaW5saW5lIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OkJpdAogdGVtcGxhdGU8
c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIGJvb2wgQml0bWFw
PGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Z2V0KHNpemVfdCBuLCBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplICsgZGVwZW5kZW5j
eV0gJiAob25lIDw8IChuICUgd29yZFNpemUpKSk7CisgICAgcmV0dXJuICEhKGRlcGVuZGVuY3ku
Y29uc3VtZSh0aGlzKS0+Yml0c1tuIC8gd29yZFNpemVdICYgKG9uZSA8PCAobiAlIHdvcmRTaXpl
KSkpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
CkBAIC0xODEsNyArMTgxLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXpl
LCBXbwogewogICAgIFdvcmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7CiAgICAg
c2l6ZV90IGluZGV4ID0gbiAvIHdvcmRTaXplOwotICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5k
YXRhKCkgKyBpbmRleCArIGRlcGVuZGVuY3k7CisgICAgV29yZFR5cGUqIGRhdGEgPSBkZXBlbmRl
bmN5LmNvbnN1bWUoYml0cy5kYXRhKCkpICsgaW5kZXg7CiAgICAgcmV0dXJuICFiaXR3aXNlX2Nh
c3Q8QXRvbWljPFdvcmRUeXBlPio+KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCiAgICAgICAg
IFsmXSAoV29yZFR5cGUmIHZhbHVlKSAtPiBib29sIHsKICAgICAgICAgICAgIGlmICh2YWx1ZSAm
IG1hc2spCkBAIC0xOTcsNyArMTk3LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRt
YXBTaXplLCBXbwogewogICAgIFdvcmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7
CiAgICAgc2l6ZV90IGluZGV4ID0gbiAvIHdvcmRTaXplOwotICAgIFdvcmRUeXBlKiBkYXRhID0g
Yml0cy5kYXRhKCkgKyBpbmRleCArIGRlcGVuZGVuY3k7CisgICAgV29yZFR5cGUqIGRhdGEgPSBk
ZXBlbmRlbmN5LmNvbnN1bWUoYml0cy5kYXRhKCkpICsgaW5kZXg7CiAgICAgcmV0dXJuICFiaXR3
aXNlX2Nhc3Q8QXRvbWljPFdvcmRUeXBlPio+KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCiAg
ICAgICAgIFsmXSAoV29yZFR5cGUmIHZhbHVlKSAtPiBib29sIHsKICAgICAgICAgICAgIGlmICgh
KHZhbHVlICYgbWFzaykpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1NDAz
KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4
LDcgKzE4LDkgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxh
dGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgK
ICAgICBDb25kaXRpb24uaAorICAgIENvdW50aW5nTG9jay5oCiAgICAgQ3Jvc3NUaHJlYWRDb3Bp
ZXIuaAogICAgIENyb3NzVGhyZWFkVGFzay5oCiAgICAgQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5o
CkBAIC0xMzIsNiArMTM0LDggQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU2VnbWVudGVkVmVjdG9y
LmgKICAgICBTbWFsbFB0clNldC5oCiAgICAgU3RhY2tCb3VuZHMuaAorICAgIFN0YWNrU2hvdC5o
CisgICAgU3RhY2tTaG90UHJvZmlsZXIuaAogICAgIFN0YWNrU3RhdHMuaAogICAgIFN0YWNrVHJh
Y2UuaAogICAgIFN0ZExpYkV4dHJhcy5oCkBAIC0yMTgsNiArMjIyLDggQEAgc2V0KFdURl9TT1VS
Q0VTCiAgICAgQ1BVVGltZS5jcHAKICAgICBDbG9ja1R5cGUuY3BwCiAgICAgQ29tcGlsYXRpb25U
aHJlYWQuY3BwCisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCisgICAgQ291bnRpbmdMb2Nr
LmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENyeXB0b2dyYXBoaWNVdGlsaXRp
ZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudFB0ckhhc2hTZXQuaCIK
KworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitDb25jdXJy
ZW50UHRySGFzaFNldDo6Q29uY3VycmVudFB0ckhhc2hTZXQoKQoreworICAgIGluaXRpYWxpemUo
KTsKK30KKworQ29uY3VycmVudFB0ckhhc2hTZXQ6On5Db25jdXJyZW50UHRySGFzaFNldCgpCit7
Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmRlbGV0ZU9sZFRhYmxlcygpCit7Cisg
ICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2UgaXQgT0sgZm9yIG90
aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZlbnQKKyAgICAvLyBz
b21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4KKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFibGVzLnJlbW92ZUFs
bE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4mIHRhYmxlKSAt
PiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS5nZXQoKSAhPSBtX3RhYmxlLmxvYWRS
ZWxheGVkKCk7CisgICAgICAgIH0pOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJIYXNoU2V0Ojpj
bGVhcigpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGluIGNhc2UuIEl0IGRvZXMgbm90IG1ha2Ug
aXQgT0sgZm9yIG90aGVyIHRocmVhZHMgdG8gY2FsbCBhZGQoKS4gQnV0IGl0IG1pZ2h0IHByZXZl
bnQKKyAgICAvLyBzb21lIGJhZCBjcmFzaGVzIGlmIHdlIGRpZCBtYWtlIHRoYXQgbWlzdGFrZS4K
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7IAorICAgIAorICAgIG1fYWxsVGFi
bGVzLmNsZWFyKCk7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIENvbmN1cnJlbnRQdHJI
YXNoU2V0Ojppbml0aWFsaXplKCkKK3sKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgaW5pdGlhbFNp
emUgPSAzMjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IHRhYmxlID0gVGFibGU6OmNyZWF0
ZShpbml0aWFsU2l6ZSk7CisgICAgbV90YWJsZS5zdG9yZVJlbGF4ZWQodGFibGUuZ2V0KCkpOwor
ICAgIG1fYWxsVGFibGVzLmFwcGVuZChXVEZNb3ZlKHRhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3Vy
cmVudFB0ckhhc2hTZXQ6OmFkZFNsb3coVGFibGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBpbmRleCwgdm9pZCogcHRyKQoreworICAgIGlmICh0
YWJsZS0+bG9hZC5leGNoYW5nZUFkZCgxKSA+PSB0YWJsZS0+bWF4TG9hZCgpKQorICAgICAgICBy
ZXR1cm4gcmVzaXplQW5kQWRkKHB0cik7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICB2
b2lkKiBvbGRFbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0uY29tcGFyZUV4Y2hhbmdlU3Ryb25n
KG51bGxwdHIsIHB0cik7CisgICAgICAgIGlmICghb2xkRW50cnkpIHsKKyAgICAgICAgICAgIGlm
IChtX3RhYmxlLmxvYWQoKSAhPSB0YWJsZSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGFkZGVk
IGFuIGVudHJ5IHRvIGFuIG9sZCB0YWJsZSEgV2UgbmVlZCB0byByZWV4ZWN1dGUgdGhlIGFkZCBv
biB0aGUgbmV3IHRhYmxlLgorICAgICAgICAgICAgICAgIHJldHVybiBhZGQocHRyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChvbGRFbnRyeSA9PSBwdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAh
PSBzdGFydEluZGV4KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OnJl
c2l6ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CisgICAgVGFibGUqIHRhYmxlID0gbV90YWJsZS5sb2FkUmVsYXhlZCgpOworICAgIGlmICh0YWJs
ZS0+bG9hZC5sb2FkUmVsYXhlZCgpIDwgdGFibGUtPm1heExvYWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gbmV3VGFibGUgPSBUYWJsZTo6Y3Jl
YXRlKHRhYmxlLT5zaXplICogMik7CisgICAgdW5zaWduZWQgbWFzayA9IG5ld1RhYmxlLT5tYXNr
OworICAgIHVuc2lnbmVkIGxvYWQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
YWJsZS0+c2l6ZTsgKytpKSB7CisgICAgICAgIHZvaWQqIHB0ciA9IHRhYmxlLT5hcnJheVtpXS5s
b2FkUmVsYXhlZCgpOworICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGhhc2gocHRyKSAmIG1hc2s7
CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgQXRvbWljPHZvaWQqPiYgZW50cnlSZWYgPSBuZXdUYWJsZS0+YXJyYXlb
aW5kZXhdOworICAgICAgICAgICAgdm9pZCogZW50cnkgPSBlbnRyeVJlZi5sb2FkUmVsYXhlZCgp
OworICAgICAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgICAgIGVudHJ5UmVmLnN0
b3JlUmVsYXhlZChwdHIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkgIT0gcHRyKTsKKyAgICAgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5k
ZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvYWQrKzsK
KyAgICB9CisgICAgCisgICAgbmV3VGFibGUtPmxvYWQuc3RvcmVSZWxheGVkKGxvYWQpOworICAg
IAorICAgIG1fdGFibGUuc3RvcmUobmV3VGFibGUuZ2V0KCkpOworICAgIG1fYWxsVGFibGVzLmFw
cGVuZChXVEZNb3ZlKG5ld1RhYmxlKSk7Cit9CisKK2Jvb2wgQ29uY3VycmVudFB0ckhhc2hTZXQ6
OnJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpCit7CisgICAgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAg
ICByZXR1cm4gYWRkKHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDb25jdXJyZW50UHRySGFz
aFNldDo6VGFibGU+IENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZTo6Y3JlYXRlKHVuc2lnbmVk
IHNpemUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJs
ZT4gcmVzdWx0KG5ldyAoZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIGFycmF5KSAr
IHNpemVvZihBdG9taWM8dm9pZCo+KSAqIHNpemUpKSBUYWJsZSgpKTsKKyAgICByZXN1bHQtPnNp
emUgPSBzaXplOworICAgIHJlc3VsdC0+bWFzayA9IHNpemUgLSAxOworICAgIHJlc3VsdC0+bG9h
ZC5zdG9yZVJlbGF4ZWQoMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgcmVzdWx0LT5hcnJheVtpXS5zdG9yZVJlbGF4ZWQobnVsbHB0cik7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0
Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEgY29uY3VycmVudCBoYXNoLWJhc2Vk
IHNldCBmb3IgcG9pbnRlcnMuIEl0J3Mgb3B0aW1pemVkIGZvcjoKKy8vCisvLyAtIEhpZ2ggcmF0
ZSBvZiBjb250YWlucygpIGNhbGxzLgorLy8gLSBIaWdoIHJhdGUgb2YgYWRkKCkgY2FsbHMgdGhh
dCBkb24ndCBhZGQgYW55dGhpbmcgbmV3LiBhZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0
aGluZyAobm9wIGFkZHMpCisvLyAgIGRvbid0IG11dGF0ZSB0aGUgdGFibGUgYXQgYWxsLgorLy8g
LSBOb3QgdG9vIG1hbnkgdGhyZWFkcy4gSSBkb3VidCB0aGlzIHNjYWxlcyBiZXlvbmQgfjQuIFRo
b3VnaCwgaXQgbWF5IGFjdHVhbGx5IHNjYWxlIGJldHRlciB0aGFuIHRoYXQKKy8vICAgaWYgdGhl
IHJhdGUgb2Ygbm9wIGFkZHMgaXMgYWJzdXJkbHkgaGlnaC4KKy8vCisvLyBJZiB3ZSB3YW50ZWQg
dGhpcyB0byBzY2FsZSBiZXR0ZXIsIHRoZSBtYWluIGNoYW5nZSB3ZSdkIGhhdmUgdG8gbWFrZSBp
cyBob3cgdGhpcyB0YWJsZSBkZXRlcm1pbmVzIHdoZW4KKy8vIHRvIHJlc2l6ZS4gUmlnaHQgbm93
IGl0J3MgYSBzaGFyZWQgY291bnRlci4gV2UgbG9jazt4YWRkIHRoaXMgY291bnRlci4gT25lIGVh
c3kgd2F5IHRvIG1ha2UgdGhhdAorLy8gc2NhbGFibGUgaXMgdG8gcmVxdWlyZSBlYWNoIHRocmVh
ZCB0aGF0IHdvcmtzIHdpdGggdGhlIENvbmN1cnJlbnRQdHJIYXNoU2V0IHRvIHJlZ2lzdGVyIGl0
c2VsZiBmaXJzdC4KKy8vIFRoZW4gZWFjaCB0aHJlYWQgd291bGQgaGF2ZSBzb21lIGRhdGEgc3Ry
dWN0dXJlIHRoYXQgaGFzIGEgY291bnRlci4gV2UgY291bGQgaW5zdGl0dXRlIHRoZSBwb2xpY3kg
dGhhdAorLy8gZWFjaCB0aHJlYWQgc2ltcGx5IGluY3JlbWVudHMgaXRzIG93biBsb2FkIGNvdW50
ZXIsIGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmUuIFRoZW4sIGlmIGFueSBzZWFyY2ggdG8KKy8v
IHJlc29sdmUgYSBjb2xsaXNpb24gZG9lcyBtb3JlIHRoYW4gTiBpdGVyYXRpb25zLCB3ZSBjYW4g
Y29tcHV0ZSBhIGNvbWJpbmVkIGxvYWQgYnkgc3VtbWluZyB0aGUgbG9hZAorLy8gY291bnRlcnMg
b2YgYWxsIG9mIHRoZSB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzLgorLy8KKy8vIENvbmN1cnJlbnRQ
dHJIYXNoU2V0J3MgbWFpbiB1c2VyLCB0aGUgR0MsIHNlZXMgYSA5OCUgbm9wIGFkZCByYXRlIGlu
IFNwZWVkb21ldGVyLiBUaGF0J3Mgd2h5IHRoaXMKKy8vIGZvY3VzZXMgc28gbXVjaCBvbiBjYXNl
cyB3aGVyZSB0aGUgdGFibGUgZG9lcyBub3QgY2hhbmdlLgorY2xhc3MgQ29uY3VycmVudFB0ckhh
c2hTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1cnJlbnRQdHJIYXNoU2V0KTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBDb25jdXJyZW50UHRySGFzaFNldCgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+
Q29uY3VycmVudFB0ckhhc2hTZXQoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIGJvb2wgY29udGFpbnMoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb250YWlu
c0ltcGwoY2FzdCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkSW1wbChj
YXN0KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3RhYmxlLmxvYWRSZWxheGVkKCktPmxvYWQubG9hZFJlbGF4ZWQo
KTsKKyAgICB9CisgICAgCisgICAgLy8gT25seSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBv
dGhlciB0aHJlYWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJlZXMgdXAgbWVtb3J5IHdpdGhvdXQg
Y2hhbmdpbmcKKyAgICAvLyB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlLgorICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGRlbGV0ZU9sZFRhYmxlcygpOworICAgIAorICAgIC8vIE9ubHkgY2Fs
bCB3aGVuIHlvdSBrbm93IHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBjYWxsIGFkZCgpLiBUaGlz
IGZyZWVzIHVwIGFsbCBtZW1vcnkgZXhjZXB0IGZvcgorICAgIC8vIHRoZSBzbWFsbGVzdCBwb3Nz
aWJsZSBoYXNodGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXIoKTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RydWN0IFRhYmxlIHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxUYWJsZT4gY3JlYXRlKHVuc2lnbmVkIHNpemUpOworICAgICAgICAKKyAgICAgICAgdW5zaWdu
ZWQgbWF4TG9hZCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLyAyOyB9CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4KKyAgICAgICAgdW5zaWduZWQg
bWFzazsgLy8gVGhpcyBpcyBpbW11dGFibGUuCisgICAgICAgIEF0b21pYzx1bnNpZ25lZD4gbG9h
ZDsKKyAgICAgICAgQXRvbWljPHZvaWQqPiBhcnJheVsxXTsKKyAgICB9OworICAgIAorICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBQdHJI
YXNoPHZvaWQqPjo6aGFzaChwdHIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUo
KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQqIGNhc3QoVCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IHNpemVvZih2b2lk
KiksICJ0eXBlIHRvbyBiaWciKTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgdm9pZCog
cHRyOworICAgICAgICAgICAgVCB2YWx1ZTsKKyAgICAgICAgfSB1OworICAgICAgICB1LnB0ciA9
IG51bGxwdHI7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHUucHRy
OworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zSW1wbCh2b2lkKiBwdHIpIGNvbnN0Cisg
ICAgeworICAgICAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRSZWxheGVkKCk7CisgICAg
ICAgIHVuc2lnbmVkIG1hc2sgPSB0YWJsZS0+bWFzazsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRJ
bmRleCA9IGhhc2gocHRyKSAmIG1hc2s7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJ
bmRleDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdm9pZCogZW50cnkgPSB0YWJs
ZS0+YXJyYXlbaW5kZXhdLmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChlbnRyeSA9PSBw
dHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0
YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQuCisgICAgYm9vbCBhZGRJbXBsKHZvaWQqIHB0cikKKyAg
ICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAg
ICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOworICAgICAgICB1bnNpZ25lZCBzdGFydElu
ZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydElu
ZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9IHRhYmxl
LT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgICAgIGlmICghZW50cnkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGFkZFNsb3codGFibGUsIG1hc2ssIHN0YXJ0SW5kZXgsIGlu
ZGV4LCBwdHIpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09IHB0cikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGFkZFNsb3coVGFi
bGUqIHRhYmxlLCB1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBp
bmRleCwgdm9pZCogcHRyKTsKKworICAgIHZvaWQgcmVzaXplSWZOZWNlc3NhcnkoKTsKKyAgICBi
b29sIHJlc2l6ZUFuZEFkZCh2b2lkKiBwdHIpOworICAgIAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8VGFibGU+LCA0PiBtX2FsbFRhYmxlczsKKyAgICBBdG9taWM8VGFibGUqPiBtX3RhYmxl
OyAvLyBUaGlzIGlzIG5ldmVyIG51bGwuCisgICAgTG9jayBtX2xvY2s7IC8vIFdlIGp1c3QgdXNl
IHRoaXMgdG8gY29udHJvbCByZXNpemUgcmFjZXMuCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwordXNpbmcgV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0NvdW50aW5nTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ291bnRpbmdM
b2NrLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db3VudGluZ0xvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNv
dW50aW5nTG9jay5oIgorCisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG1JbmxpbmVzLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCit2b2lkIENvdW50aW5nTG9jazo6bG9ja1Nsb3coKQoreworICAg
IEV4Y2x1c2l2ZUFsZ29yaXRobTo6bG9ja1Nsb3cobV93b3JkKTsKK30KKwordm9pZCBDb3VudGlu
Z0xvY2s6OnVubG9ja1Nsb3coKQoreworICAgIEV4Y2x1c2l2ZUFsZ29yaXRobTo6dW5sb2NrU2xv
dyhtX3dvcmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93
dGYvQ291bnRpbmdMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ291bnRpbmdM
b2NrLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ291bnRpbmdMb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CisvLyBUaGlzIGlzIG1vc3RseSBqdXN0IGEgd29yZC1zaXplZCBXVEY6OkxvY2suIEl0IHN1cHBv
cnRzIGJhc2ljYWxseSBldmVyeXRoaW5nIHRoYXQgbG9jayBzdXBwb3J0cy4gQnV0IGFzCisvLyBh
IGJvbnVzLCBpdCBhdG9taWNhbGx5IGNvdW50cyBsb2NrKCkgY2FsbHMgYW5kIGFsbG93cyB5b3Ug
dG8gcGVyZm9ybSBhbiBvcHRpbWlzdGljIHJlYWQgdHJhbnNhY3Rpb24gYnkKKy8vIGNvbXBhcmlu
ZyB0aGUgY291bnQgYmVmb3JlIGFuZCBhZnRlciB0aGUgdHJhbnNhY3Rpb24uIElmIGF0IHRoZSBz
dGFydCBvZiB0aGUgdHJhbnNhY3Rpb24gdGhlIGxvY2sgaXMKKy8vIG5vdCBoZWxkIGFuZCB0aGUg
Y291bnQgcmVtYWlucyB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZSB0cmFuc2FjdGlvbiwgdGhlbiB5
b3Uga25vdyB0aGF0IG5vYm9keSBjb3VsZAorLy8gaGF2ZSBtb2RpZmllZCB5b3VyIGRhdGEgc3Ry
dWN0dXJlIHdoaWxlIHlvdSByYW4uIFlvdSBjYW4gZXZlbiB1c2UgdGhpcyB0byBvcHRpbWlzdGlj
YWxseSByZWFkIHBvaW50ZXJzCisvLyB0aGF0IGNvdWxkIGJlY29tZSBkYW5nbGluZyB1bmRlciBj
b25jdXJyZW50IHdyaXRlcywgaWYgeW91IGp1c3QgcmV2YWxpZGF0ZSB0aGUgY291bnQgZXZlcnkg
dGltZSB5b3UncmUKKy8vIGFib3V0IHRvIGRvIHNvbWV0aGluZyBkYW5nZXJvdXMuCisvLworLy8g
VGhpcyBpcyBsYXJnZWx5IGluc3BpcmVkIGJ5IFN0YW1wZWRMb2NrIGZyb20gSmF2YToKKy8vIGh0
dHBzOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS84L2RvY3MvYXBpL2phdmEvdXRpbC9jb25jdXJy
ZW50L2xvY2tzL0NvdW50aW5nTG9jay5odG1sCisvLworLy8gVGhpcyBpcyBzaW1wbGlmaWVkIGEg
bG90IGNvbXBhcmVkIHRvIFN0YW1wZWRMb2NrLiBVbmxpa2UgU3RhbXBlZExvY2ssIGl0IHVzZXMg
YW4gZXhjbHVzaXZlIGxvY2sgYXMgYQorLy8gZmFsbGJhY2suIFRoZXJlIGlzIG5vIHdheSB0byBh
Y3F1aXJlIGEgQ291bnRpbmdMb2NrIGZvciByZWFkLiBUaGUgb25seSByZWFkIGFjY2VzcyBpcyB2
aWEgb3B0aW1pc3RpYworLy8gcmVhZCB0cmFuc2FjdGlvbnMuCisvLworLy8gQ291bnRpbmdMb2Nr
IHByb3ZpZGVzIHR3byB3YXlzIG9mIGRvaW5nIG9wdGltaXN0aWMgcmVhZHM6CisvLworLy8gLSBU
aGUgZWFzeSB3YXksIHdoZXJlIENvdW50aW5nTG9jayBkb2VzIGFsbCBvZiB0aGUgZmVuY2luZyBm
b3IgeW91LiBUaGF0IGZlbmNpbmcgaXMgZnJlZSBvbiB4ODYgYnV0CisvLyAgIHNvbWV3aGF0IGV4
cGVuc2l2ZSBvbiBBUk0uCisvLyAtIFRoZSBoYXJkIHdheSwgd2hlcmUgeW91IGRvIGZlbmNpbmcg
eW91cnNlbGYgdXNpbmcgRGVwZW5kZW5jeS4gVGhpcyBhbGxvd3MgeW91IHRvIGJlIGZlbmNlbGVz
cyBvbiBib3RoCisvLyAgIHg4NiBhbmQgQVJNLgorLy8KKy8vIFRoZSBsYXR0ZXIgaXMgaW1wb3J0
YW50IGZvciB1cyBiZWNhdXNlIHNvbWUgR0MgcGF0aHMgYXJlIGtub3duIHRvIGJlIHNlbnNpdGl2
ZSB0byBmZW5jZXMgb24gQVJNLgorCitjbGFzcyBDb3VudGluZ0xvY2sgeworICAgIHR5cGVkZWYg
dW5zaWduZWQgTG9ja1R5cGU7CisgICAgCisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBp
c0hlbGRCaXQgPSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgTG9ja1R5cGUgaGFzUGFya2VkQml0
ID0gMjsKKyAgICBzdGF0aWMgY29uc3RleHByIExvY2tUeXBlIG1hc2sgPSBpc0hlbGRCaXQgfCBo
YXNQYXJrZWRCaXQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBzaGlmdCA9IDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBMb2NrVHlwZSBjb3VudFVuaXQgPSA0OworICAgIAorICAgIHN0
cnVjdCBMb2NrSG9va3MgeworICAgICAgICBzdGF0aWMgTG9ja1R5cGUgbG9ja0hvb2soTG9ja1R5
cGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIGNvdW50VW5p
dDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIExvY2tUeXBlIHVubG9ja0hv
b2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgICAgIHN0YXRpYyBMb2Nr
VHlwZSBwYXJrSG9vayhMb2NrVHlwZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICAgICAg
c3RhdGljIExvY2tUeXBlIGhhbmRvZmZIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1
ZTsgfQorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBp
c0hlbGRCaXQsIGhhc1BhcmtlZEJpdCwgTG9ja0hvb2tzPiBFeGNsdXNpdmVBbGdvcml0aG07Cisg
ICAgCitwdWJsaWM6CisgICAgQ291bnRpbmdMb2NrKCkKKyAgICB7CisgICAgICAgIG1fd29yZC5z
dG9yZVJlbGF4ZWQoMCk7CisgICAgfQorICAgIAorICAgIH5Db3VudGluZ0xvY2soKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCB0cnlMb2NrKCkKKyAgICB7CisgICAgICAgIHJldHVybiBF
eGNsdXNpdmVBbGdvcml0aG06OnRyeUxvY2sobV93b3JkKTsKKyAgICB9CisKKyAgICB2b2lkIGxv
Y2soKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFFeGNsdXNpdmVBbGdvcml0aG06Omxv
Y2tGYXN0KG1fd29yZCkpKQorICAgICAgICAgICAgbG9ja1Nsb3coKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFFeGNsdXNpdmVB
bGdvcml0aG06OnVubG9ja0Zhc3QobV93b3JkKSkpCisgICAgICAgICAgICB1bmxvY2tTbG93KCk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIZWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBFeGNsdXNpdmVBbGdvcml0aG06OmlzTG9ja2VkKG1fd29yZCk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgp
OworICAgIH0KKyAgICAKKyAgICAvLyBUaGUgb25seSB0aGluZyB5b3UncmUgYWxsb3dlZCB0byBp
bmZlciBmcm9tIHRoaXMgdmFsdWUgaXMgdGhhdCBpZiBpdCdzIHplcm8sIHRoZW4geW91IGRpZG4n
dCBnZXQKKyAgICAvLyBhIHJlYWwgY291bnQuCisgICAgY2xhc3MgQ291bnQgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92
YWx1ZTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvdW50JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOyB9CisgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWUgIT0gb3RoZXIubV92YWx1ZTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBm
cmllbmQgY2xhc3MgQ291bnRpbmdMb2NrOworICAgICAgICAKKyAgICAgICAgTG9ja1R5cGUgbV92
YWx1ZSB7IDAgfTsKKyAgICB9OworICAgIAorICAgIC8vIEV4YW1wbGUgb2YgaG93IHRvIHVzZSB0
aGlzOgorICAgIC8vCisgICAgLy8gICAgIGludCByZWFkKCkKKyAgICAvLyAgICAgeworICAgIC8v
ICAgICAgICAgaWYgKENvdW50aW5nTG9jazo6Q291bnQgY291bnQgPSBtX2xvY2sudHJ5T3B0aW1p
c3RpY1JlYWQoKSkgeworICAgIC8vICAgICAgICAgICAgIGludCB2YWx1ZSA9IG1fdGhpbmdzOwor
ICAgIC8vICAgICAgICAgICAgIGlmIChtX2xvY2sudmFsaWRhdGUoY291bnQpKQorICAgIC8vICAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7IC8vIHN1Y2Nlc3MhCisgICAgLy8gICAgICAgICB9
CisgICAgLy8gICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgLy8g
ICAgICAgICBpbnQgdmFsdWUgPSBtX3RoaW5nczsKKyAgICAvLyAgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICAvLyAgICAgfQorICAgIC8vCisgICAgLy8gSWYgdHJ5T3B0aW1pc2l0Y1JlYWQoKSBy
dW5zIHdoZW4gdGhlIGxvY2sgaXMgbm90IGhlbGQsIHRoaXMgdGhyZWFkIHdpbGwgcnVuIGEgY3Jp
dGljYWwgc2VjdGlvbgorICAgIC8vIHdpdGhvdXQgZXZlciB3cml0aW5nIHRvIG1lbW9yeS4gSG93
ZXZlciwgb24gQVJNLCB0aGlzIHJlcXVpcmVzIGZlbmNpbmcuIFdlIHVzZSBhIGxvYWQtYWNxdWly
ZSBmb3IKKyAgICAvLyB0cnlPcHRpbWlzdGljUmVhZCgpLiBXZSBoYXZlIG5vIGNob2ljZSBidXQg
dG8gdXNlIHRoZSBtb3JlIGV4cGVuc2l2ZSBgZG1iIGlzaGAgaW4gdmFsaWRhdGUoKS4gSWYKKyAg
ICAvLyB5b3Ugd2FudCB0byBhdm9pZCB0aGF0LCB5b3UgY291bGQgdHJ5IHRvIHVzZSB0cnlPcHRp
bWlzdGljRmVuY2VsZXNzUmVhZCgpLgorICAgIENvdW50IHRyeU9wdGltaXN0aWNSZWFkKCkKKyAg
ICB7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAg
ICAgIGlmIChjdXJyZW50VmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICByZXR1cm4gQ291
bnQoKTsKKyAgICAgICAgcmV0dXJuIGdldENvdW50KGN1cnJlbnRWYWx1ZSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgdmFsaWRhdGUoQ291bnQgY291bnQpCisgICAgeworICAgICAgICBXVEY6Omxv
YWRMb2FkRmVuY2UoKTsKKyAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gbV93b3JkLmxv
YWRSZWxheGVkKCk7CisgICAgICAgIHJldHVybiBnZXRDb3VudChjdXJyZW50VmFsdWUpID09IGNv
dW50OworICAgIH0KKyAgICAKKyAgICAvLyBFeGFtcGxlIG9mIGhvdyB0byB1c2UgdGhpczoKKyAg
ICAvLworICAgIC8vICAgICBpbnQgcmVhZCgpCisgICAgLy8gICAgIHsKKyAgICAvLyAgICAgICAg
IHJldHVybiBtX2xvY2suZG9PcHRpbWl6ZWRSZWFkKAorICAgIC8vICAgICAgICAgICAgIFsmXSAo
KSAtPiBpbnQgeworICAgIC8vICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBtX3RoaW5nczsK
KyAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIC8vICAgICAgICAgICAg
IH0pOworICAgIC8vICAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBhdXRv
IGRvT3B0aW1pemVkUmVhZChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgQ291bnQg
Y291bnQgPSB0cnlPcHRpbWlzdGljUmVhZCgpOworICAgICAgICBpZiAoY291bnQpIHsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuYygpOworICAgICAgICAgICAgaWYgKHZhbGlkYXRlKGNv
dW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAg
IGxvY2soKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jKCk7CisgICAgICAgIHVubG9jaygp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvLyBFeGFtcGxlIG9m
IGhvdyB0byB1c2UgdGhpczoKKyAgICAvLworICAgIC8vICAgICBpbnQgcmVhZCgpCisgICAgLy8g
ICAgIHsKKyAgICAvLyAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9sb2NrLnRyeU9wdGltaXN0aWNG
ZW5jZWxlc3NSZWFkKCk7CisgICAgLy8gICAgICAgICBpZiAoQ291bnRpbmdMb2NrOjpDb3VudCBj
b3VudCA9IHJlc3VsdC52YWx1ZSkgeworICAgIC8vICAgICAgICAgICAgIERlcGVuZGVuY3kgZmVu
Y2VCZWZvcmUgPSBEZXBlbmRlbmN5OjpmZW5jZShyZXN1bHQuaW5wdXQpOworICAgIC8vICAgICAg
ICAgICAgIGF1dG8qIGZlbmNlZFRoaXMgPSBmZW5jZUJlZm9yZS5jb25zdW1lKHRoaXMpOworICAg
IC8vICAgICAgICAgICAgIGludCB2YWx1ZSA9IGZlbmNlZFRoaXMtPm1fdGhpbmdzOworICAgIC8v
ICAgICAgICAgICAgIGlmIChtX2xvY2suZmVuY2VsZXNzVmFsaWRhdGUoY291bnQsIERlcGVuZGVu
Y3k6OmZlbmNlKHZhbHVlKSkpCisgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsg
Ly8gc3VjY2VzcyEKKyAgICAvLyAgICAgICAgIH0KKyAgICAvLyAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAvLyAgICAgICAgIGludCB2YWx1ZSA9IG1fdGhpbmdz
OworICAgIC8vICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIC8vICAgICB9CisgICAgLy8KKyAg
ICAvLyBVc2UgdGhpcyB0byBjcmVhdGUgYSByZWFkIHRyYW5zYWN0aW9uIHVzaW5nIGRlcGVuZGVu
Y3kgY2hhaW5zIG9ubHkuIFlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgdG8KKyAgICAvLyB0aHJlYWQg
dGhlIGRlcGVuZGVuY3kgaW5wdXQgKHRoZSBgaW5wdXRgIGZpZWxkIHRoYXQgdGhlIHJldHVybnMp
IHRocm91Z2ggYSBEZXBlbmRlbmN5LCBhbmQgdGhlbgorICAgIC8vIHRocmVhZCB0aGF0IERlcGVu
ZGVuY3kgaW50byBldmVyeSBsb2FkIChleGNlcHQgZm9yIGxvYWRzIHRoYXQgYXJlIGNoYXNpbmcg
cG9pbnRlcnMgbG9hZGVkIGZyb20KKyAgICAvLyBsb2FkcyB0aGF0IGFscmVhZHkgdXNlcyB0aGF0
IGRlcGVuZGVuY3kpLiBUaGVuLCB0byB2YWxpZGF0ZSB0aGUgcmVhZCB0cmFuc2FjdGlvbiwgeW91
IGhhdmUgdG8gcGFzcworICAgIC8vIGJvdGggdGhlIGNvdW50IGFuZCBhbm90aGVyIERlcGVuZGVu
Y3kgdGhhdCBpcyBiYXNlZCBvbiB3aGF0ZXZlciBsb2FkcyB5b3UgdXNlZCB0byBwcm9kdWNlIHRo
ZQorICAgIC8vIG91dHB1dC4KKyAgICAvLworICAgIC8vIE9uIG5vbi1BUk0gcGxhdGZvcm1zLCB0
aGUgRGVwZW5kZW5jeSBvYmplY3RzIGRvbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBmb3IgRGVwZW5k
ZW5jeTo6ZmVuY2UsIHdoaWNoCisgICAgLy8gaXMgYSBsb2FkLWxvYWQgZmVuY2UuIFRoZSBpZGlv
bSBhYm92ZSBkb2VzIHRoZSByaWdodCB0aGluZyBvbiBib3RoIEFSTSBhbmQgVFNPLgorICAgIC8v
CisgICAgLy8gV0FSTklORzogVGhpcyBjYW4gYmUgaGFyZCB0byBnZXQgcmlnaHQuIFBsZWFzZSBv
bmx5IHVzZSB0aGlzIGZvciB2ZXJ5IHNob3J0IGNyaXRpY2FsIHNlY3Rpb25zIHRoYXQKKyAgICAv
LyBhcmUga25vd24gdG8gYmUgc3VmZmljaWVudGx5IHBlcmYtY3JpdGljYWwgdG8ganVzdGlmeSB0
aGUgcmlzay4KKyAgICBJbnB1dEFuZFZhbHVlPExvY2tUeXBlLCBDb3VudD4gdHJ5T3B0aW1pc3Rp
Y0ZlbmNlbGVzc1JlYWQoKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0g
bV93b3JkLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUgJiBpc0hlbGRC
aXQpCisgICAgICAgICAgICByZXR1cm4gaW5wdXRBbmRWYWx1ZShjdXJyZW50VmFsdWUsIENvdW50
KCkpOworICAgICAgICByZXR1cm4gaW5wdXRBbmRWYWx1ZShjdXJyZW50VmFsdWUsIGdldENvdW50
KGN1cnJlbnRWYWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIGZlbmNlbGVzc1ZhbGlkYXRl
KENvdW50IGNvdW50LCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCisgICAgeworICAgICAgICBMb2Nr
VHlwZSBjdXJyZW50VmFsdWUgPSBkZXBlbmRlbmN5LmNvbnN1bWUodGhpcyktPm1fd29yZC5sb2Fk
UmVsYXhlZCgpOworICAgICAgICByZXR1cm4gZ2V0Q291bnQoY3VycmVudFZhbHVlKSA9PSBjb3Vu
dDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3B0aW1pc3RpY0Z1bmMsIHR5
cGVuYW1lIEZ1bmM+CisgICAgYXV0byBkb09wdGltaXplZEZlbmNlbGVzc1JlYWQoY29uc3QgT3B0
aW1pc3RpY0Z1bmMmIG9wdGltaXN0aWNGdW5jLCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAg
ICAgICAgYXV0byBjb3VudCA9IHRyeU9wdGltaXN0aWNGZW5jZWxlc3NSZWFkKCk7CisgICAgICAg
IGlmIChjb3VudC52YWx1ZSkgeworICAgICAgICAgICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5ID0g
RGVwZW5kZW5jeTo6ZmVuY2UoY291bnQuaW5wdXQpOworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBvcHRpbWlzdGljRnVuYyhkZXBlbmRlbmN5LCBjb3VudC52YWx1ZSk7CisgICAgICAgICAgICBp
ZiAoZmVuY2VsZXNzVmFsaWRhdGUoY291bnQudmFsdWUsIGRlcGVuZGVuY3kpKQorICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgbG9jaygpOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IGZ1bmMoKTsKKyAgICAgICAgdW5sb2NrKCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBsb2NrU2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3co
KTsKKyAgICAKKyAgICBDb3VudCBnZXRDb3VudChMb2NrVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIENvdW50IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZSB8IG1hc2s7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEF0b21pYzxMb2NrVHlw
ZT4gbV93b3JkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q291bnRp
bmdMb2NrOworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3Rm
L0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTEgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBhcHBlbmRBbmRC
dWJibGUoVSYmLCBjb25zdCBGdW5jJik7CiAgICAgCisgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4g
dGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJl
dHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdh
eXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFQgdGFr
ZUZpcnN0KGNvbnN0IEZ1bmMmKTsKKwogICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0
IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBu
dWxsIHZlcnNpb24gb2YKICAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJu
cyBmYWxzZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTcxLDYgKzU3NiwyNSBA
QCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdChjb25zdCBGdW5j
JiBmdW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0g
dGhpcy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgVCBjYW5k
aWRhdGUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkgeworICAg
ICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgcHJlcGVuZCh0YWtlTGFz
dCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAgIH0KKyAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgYXBwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7CisgICAgfQorICAg
IHJldHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVD
YXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgdW5zaWduZWQgY291
bnQgPSAwOwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNl
L1dURi93dGYvRmFzdE1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDcgQEAg
dXNpbmcgV1RGOjpmYXN0QWxpZ25lZEZyZWU7CiAjZGVmaW5lIFdURl9QUklWQVRFX0lOTElORSBp
bmxpbmUKICNlbmRpZgogCi0jZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIFwKLXB1Ymxp
YzogXAorI2RlZmluZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKICAgICB2b2lkKiBv
cGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IFwKICAgICB2b2lkKiBv
cGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gXAogICAgIFwKQEAg
LTI2Myw3ICsyNjIsMTUgQEAgcHVibGljOiBcCiAgICAgICAgIEFTU0VSVChsb2NhdGlvbik7IFwK
ICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOyBcCiAgICAgfSBcCisKKyNkZWZpbmUgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQgXAorcHVibGljOiBcCisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURf
SU1QTCBcCiBwcml2YXRlOiBcCiB0eXBlZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWlj
b2xvbkFmdGVyVGhpc01hY3JvCiAKKyNkZWZpbmUgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEIFwKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9JTVBMIFwKK3R5cGVkZWYgaW50IF9f
dGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm8KKwogI2VuZGlmIC8qIFdU
Rl9GYXN0TWFsbG9jX2ggKi8KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDE2IEBACiAj
aW5jbHVkZSAiTG9jay5oIgogCiAjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG1JbmxpbmVzLmg+
CisjaW5jbHVkZSA8d3RmL1N0YWNrU2hvdFByb2ZpbGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewog
CitzdGF0aWMgY29uc3RleHByIGJvb2wgcHJvZmlsZUxvY2tDb250ZW50aW9uID0gZmFsc2U7CisK
IHZvaWQgTG9ja0Jhc2U6OmxvY2tTbG93KCkKIHsKKyAgICBpZiAocHJvZmlsZUxvY2tDb250ZW50
aW9uKQorICAgICAgICBTVEFDS19TSE9UX1BST0ZJTEUoNCwgMiwgNSk7CiAgICAgRGVmYXVsdExv
Y2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0xvY2tBbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3Jp
dGhtLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0u
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBm
aWVsZC4gVGhlIGxpbWl0IG9mIG9uZSBsb2NrIGlzIGR1ZSB0byB0aGUgdXNlIG9mIHRoZSBmaWVs
ZCdzIGFkZHJlc3MgYXMgYSBrZXkgdG8gZmluZCB0aGUgbG9jaydzCiAvLyBxdWV1ZS4KIAotdGVt
cGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUgaGFz
UGFya2VkQml0PgordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CitzdHJ1Y3QgRW1wdHlMb2Nr
SG9va3MgeworICAgIHN0YXRpYyBMb2NrVHlwZSBsb2NrSG9vayhMb2NrVHlwZSB2YWx1ZSkgeyBy
ZXR1cm4gdmFsdWU7IH0KKyAgICBzdGF0aWMgTG9ja1R5cGUgdW5sb2NrSG9vayhMb2NrVHlwZSB2
YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICBzdGF0aWMgTG9ja1R5cGUgcGFya0hvb2soTG9j
a1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgc3RhdGljIExvY2tUeXBlIGhhbmRv
ZmZIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUgaGFzUGFya2Vk
Qml0LCB0eXBlbmFtZSBIb29rcyA9IEVtcHR5TG9ja0hvb2tzPExvY2tUeXBlPj4KIGNsYXNzIExv
Y2tBbGdvcml0aG0gewogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAg
ICBzdGF0aWMgY29uc3QgTG9ja1R5cGUgbWFzayA9IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdDsK
QEAgLTQzLDcgKzUxLDcgQEAgY2xhc3MgTG9ja0FsZ29yaXRobSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgbG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRvbWljPExvY2tUeXBlPiYgbG9jaykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0
LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFy
ZUV4Y2hhbmdlV2VhaygwLCBIb29rczo6bG9ja0hvb2soaXNIZWxkQml0KSwgc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGxvY2tGYXN0KEF0
b21pYzxMb2NrVHlwZT4mIGxvY2spCkBAIC01Myw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBpZiAodmFsdWUgJiBpc0hlbGRCaXQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICB2YWx1ZSB8PSBpc0hlbGRCaXQ7CisgICAgICAgICAg
ICAgICAgdmFsdWUgPSBIb29rczo6bG9ja0hvb2sodmFsdWUpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUpOwpAQCAtNjcsMTcgKzc2LDE3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0
cnlMb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCiAgICAgewogICAgICAgICBmb3IgKDs7KSB7
Ci0gICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudEJ5dGVWYWx1ZSAm
IGlzSGVsZEJpdCkKKyAgICAgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IGxvY2subG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VmFs
dWUgJiBpc0hlbGRCaXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50
Qnl0ZVZhbHVlIHwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkKKyAgICAg
ICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFZhbHVlLCBIb29rczo6
bG9ja0hvb2soY3VycmVudFZhbHVlIHwgaXNIZWxkQml0KSwgc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBzdGF0aWMgYm9vbCB1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4m
IGxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlz
SGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgICAgIHJldHVybiBs
b2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCBIb29rczo6dW5sb2NrSG9vaygwKSwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBib29s
IHVubG9ja0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKQEAgLTg3LDYgKzk2LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGlmICgodmFsdWUgJiBtYXNrKSAhPSBpc0hlbGRCaXQpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB2YWx1ZSAm
PSB+aXNIZWxkQml0OworICAgICAgICAgICAgICAgIHZhbHVlID0gSG9va3M6OnVubG9ja0hvb2so
dmFsdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSwKICAg
ICAgICAgICAgIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwpJbmRleDogU291cmNlL1dURi93
dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9M
b2NrQWxnb3JpdGhtSW5saW5lcy5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0
Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3
dGYvTG9ja0FsZ29yaXRobS5oPgogI2luY2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMzUsOCArMzYsOCBAQAogCiBuYW1lc3BhY2UgV1RGIHsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5
cGUgaGFzUGFya2VkQml0Pgotdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRCaXQs
IGhhc1BhcmtlZEJpdD46OmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCit0ZW1wbGF0
ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJr
ZWRCaXQsIHR5cGVuYW1lIEhvb2tzPgordm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hl
bGRCaXQsIGhhc1BhcmtlZEJpdCwgSG9va3M+Ojpsb2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBs
b2NrKQogewogICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFs
IGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNwaW5MaW1pdCA9IDQwOwpAQCAtNDQsMTUgKzQ1LDE3IEBAIHZvaWQgTG9ja0FsZ29y
aXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKICAgICB1bnNpZ25lZCBzcGluQ291bnQgPSAwOwog
ICAgIAogICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0g
bG9jay5sb2FkKCk7CisgICAgICAgIExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IGxvY2subG9hZCgp
OwogICAgICAgICAKICAgICAgICAgLy8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgot
ICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQotICAgICAgICAgICAg
JiYgbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRl
VmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIShj
dXJyZW50VmFsdWUgJiBpc0hlbGRCaXQpKSB7CisgICAgICAgICAgICBpZiAobG9jay5jb21wYXJl
RXhjaGFuZ2VXZWFrKGN1cnJlbnRWYWx1ZSwgSG9va3M6OmxvY2tIb29rKGN1cnJlbnRWYWx1ZSB8
IGlzSGVsZEJpdCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm9ib2R5IHBhcmtlZCBh
bmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBhcm91
bmQuCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpICYmIHNw
aW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAgICBpZiAoIShjdXJyZW50VmFsdWUgJiBoYXNQ
YXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgewogICAgICAgICAgICAgc3BpbkNv
dW50Kys7CiAgICAgICAgICAgICBUaHJlYWQ6OnlpZWxkKCk7CiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTYwLDEzICs2MywyNSBAQCB2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVs
ZEJpdCwgCiAKICAgICAgICAgLy8gTmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcg
dGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCiAg
ICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBz
ZXR0aW5nIGl0LgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0
KQotICAgICAgICAgICAgJiYgIWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZh
bHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoIShjdXJyZW50VmFsdWUgJiBoYXNQYXJrZWRCaXQpKSB7CisgICAg
ICAgICAgICBMb2NrVHlwZSBuZXdWYWx1ZSA9IEhvb2tzOjpwYXJrSG9vayhjdXJyZW50VmFsdWUg
fCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAgaWYgKCFsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoY3VycmVudFZhbHVlLCBuZXdWYWx1ZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBuZXdWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKCEoY3VycmVudFZhbHVlICYgaXNIZWxkQml0KSkgeworICAgICAgICAgICAg
ZGF0YUxvZygiTG9jayBub3QgaGVsZCFcbiIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShjdXJyZW50VmFsdWUgJiBo
YXNQYXJrZWRCaXQpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJMb2NrIG5vdCBwYXJrZWQhXG4i
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
IAogICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0byBiZSBpc0hlbGR8aGFzUGFy
a2VkLiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2FuIHBhcmsuCiAgICAgICAgIFBh
cmtpbmdMb3Q6OlBhcmtSZXN1bHQgcGFya1Jlc3VsdCA9Ci0gICAgICAgICAgICBQYXJraW5nTG90
Ojpjb21wYXJlQW5kUGFyaygmbG9jaywgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCB8IGhh
c1BhcmtlZEJpdCk7CisgICAgICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbG9j
aywgY3VycmVudFZhbHVlKTsKICAgICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5wYXJrZWQpIHsK
ICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1bHQudG9rZW4p
KSB7CiAgICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRvZmY6CkBAIC04Nyw4ICsxMDIsOCBAQCB2
b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgCiAgICAgfQogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQ
YXJrZWRCaXQ+Ci12b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgaGFzUGFy
a2VkQml0Pjo6dW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrLCBGYWlybmVzcyBmYWly
bmVzcykKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExv
Y2tUeXBlIGhhc1BhcmtlZEJpdCwgdHlwZW5hbWUgSG9va3M+Cit2b2lkIExvY2tBbGdvcml0aG08
TG9ja1R5cGUsIGlzSGVsZEJpdCwgaGFzUGFya2VkQml0LCBIb29rcz46OnVubG9ja1Nsb3coQXRv
bWljPExvY2tUeXBlPiYgbG9jaywgRmFpcm5lc3MgZmFpcm5lc3MpCiB7CiAgICAgLy8gV2UgY291
bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMgaW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJp
b3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKICAgICAvLyBzb21lb25lIHBhcmtlZC4gU28sIHdl
IG5lZWQgYSBDQVMgbG9vcDogZXZlbiBpZiByaWdodCBub3cgdGhlIGxvY2sgaXMganVzdCBoZWxk
LCBpdCBjb3VsZApAQCAtMTAwLDcgKzExNSw3IEBAIHZvaWQgTG9ja0FsZ29yaXRobTxMb2NrVHlw
ZSwgaXNIZWxkQml0LCAKICAgICAgICAgICAgIHx8IChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSAo
aXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7CiAgICAgICAgIAogICAgICAgICBpZiAoKG9sZEJ5
dGVWYWx1ZSAmIG1hc2spID09IGlzSGVsZEJpdCkgewotICAgICAgICAgICAgaWYgKGxvY2suY29t
cGFyZUV4Y2hhbmdlV2VhayhvbGRCeXRlVmFsdWUsIG9sZEJ5dGVWYWx1ZSAmIH5pc0hlbGRCaXQp
KQorICAgICAgICAgICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRCeXRlVmFsdWUs
IEhvb2tzOjp1bmxvY2tIb29rKG9sZEJ5dGVWYWx1ZSAmIH5pc0hlbGRCaXQpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMTIw
LDEyICsxMzUsMjEgQEAgdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRCaXQsIAog
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGlkVW5wYXJrVGhyZWFkICYmIChmYWlybmVzcyA9
PSBGYWlyIHx8IHJlc3VsdC50aW1lVG9CZUZhaXIpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IHVubG9jayBhbnl0aGluZy4gSW5zdGVhZCwgd2UgaGFuZCB0aGUgbG9jayB0byB0
aGUgdGhyZWFkIHRoYXQgd2FzCiAgICAgICAgICAgICAgICAgICAgIC8vIHdhaXRpbmcuCisgICAg
ICAgICAgICAgICAgICAgIGxvY2sudHJhbnNhY3Rpb24oCisgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTG9ja1R5cGUgbmV3VmFsdWUgPSBIb29rczo6aGFuZG9mZkhvb2sodmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PSB2YWx1ZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gbmV3VmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGxvY2sudHJhbnNhY3Rpb24oCiAgICAgICAgICAgICAg
ICAgICAgIFsmXSAoTG9ja1R5cGUmIHZhbHVlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlICY9IH5tYXNrOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBI
b29rczo6dW5sb2NrSG9vayh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVz
dWx0Lm1heUhhdmVNb3JlVGhyZWFkcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSB8PSBoYXNQYXJrZWRCaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0xvY2tlci5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIExvY2tl
cl9oCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAt
NjQsNiArNjUsNyBAQCBwdWJsaWM6CiAKICAgICB+TG9ja2VyKCkKICAgICB7CisgICAgICAgIGNv
bXBpbGVyRmVuY2UoKTsKICAgICAgICAgaWYgKG1fbG9ja2FibGUpCiAgICAgICAgICAgICBtX2xv
Y2thYmxlLT51bmxvY2soKTsKICAgICB9CkBAIC0xMDgsNiArMTEwLDcgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIGlmIChtX2xvY2thYmxlKQogICAgICAgICAgICAgbV9sb2NrYWJsZS0+bG9j
aygpOworICAgICAgICBjb21waWxlckZlbmNlKCk7CiAgICAgfQogICAgIAogICAgIFQqIG1fbG9j
a2FibGU7CkBAIC0xMjIsNiArMTI1LDEyIEBAIExvY2tlcjxMb2NrVHlwZT4gaG9sZExvY2soTG9j
a1R5cGUmIGxvY2sKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CitMb2NrZXI8TG9j
a1R5cGU+IGhvbGRMb2NrSWYoTG9ja1R5cGUmIGxvY2ssIGJvb2wgcHJlZGljYXRlKQoreworICAg
IHJldHVybiBMb2NrZXI8TG9ja1R5cGU+KHByZWRpY2F0ZSA/ICZsb2NrIDogbnVsbHB0cik7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogTG9ja2VyPExvY2tUeXBlPiB0cnlIb2xk
TG9jayhMb2NrVHlwZSYgbG9jaykKIHsKICAgICByZXR1cm4gTG9ja2VyPExvY2tUeXBlPjo6dHJ5
TG9jayhsb2NrKTsKQEAgLTEzNCw1ICsxNDMsNiBAQCB1c2luZyBXVEY6OkxvY2tlcjsKIHVzaW5n
IFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnOwogdXNpbmcgV1RGOjpOb0xvY2tpbmdOZWNlc3Nh
cnk7CiB1c2luZyBXVEY6OmhvbGRMb2NrOwordXNpbmcgV1RGOjpob2xkTG9ja0lmOwogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDYgKzE3NCwxMyBA
QCBwcml2YXRlOgogCiAvLyBUaGlzIGlzIGZvciB3aGVuIHlvdSBhbHJlYWR5IHJlZmVyIHRvIGEg
ZnVuY3RvciBieSByZWZlcmVuY2UsIGFuZCB5b3Uga25vdyBpdHMgbGlmZXRpbWUgaXMKIC8vIGdv
b2QuIFRoaXMganVzdCBjcmVhdGVzIGEgU2NvcGVkTGFtYmRhIHRoYXQgcG9pbnRzIHRvIHlvdXIg
ZnVuY3Rvci4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBpcyBhbHdheXMgd3Jvbmc6CisvLworLy8g
YXV0byByZWYgPSBzY29wZWRMYW1iZGFSZWYoWy4uLl0gKC4uLikgey4uLn0pOworLy8KKy8vIEJl
Y2F1c2UgdGhlIHNjb3BlZExhbWJkYVJlZiB3aWxsIHJlZmVyIHRvIHRoZSBsYW1iZGEgYnkgcmVm
ZXJlbmNlLCBhbmQgdGhlIGxhbWJkYSB3aWxsIGRpZSBhZnRlciB0aGUKKy8vIHNlbWljb2xvbi4g
VXNlIHNjb3BlZExhbWJkYSgpIGluIHRoYXQgY2FzZS4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KIFNjb3BlZExhbWJkYVJlZkZ1bmN0b3I8RnVuY3Rp
b25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGFSZWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
IHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHJldmlzaW9uIDIyNTQwMykKKysrIFNvdXJjZS9XVEYv
d3RmL1NoYXJlZFRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTEgQEAgbmFtZXNw
YWNlIFdURiB7CiAvLyBzdGF0ZSBpbiBtZW1iZXIgZmllbGRzLiBUaGlzIGNhbiBiZSBtb3JlIG5h
dHVyYWwgaWYgeW91IHdhbnQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB3aGF0CiAvLyBzdGF0
ZSBpcyBzaGFyZWQgYmV0d2VlbiBpbnN0YW5jZXMgb2YgdGhlIHRhc2suCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotY2xhc3MgU2hhcmVkVGFzazxS
ZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8U2hhcmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+IHsKK3RlbXBsYXRl
PHR5cGVuYW1lIFBhc3NlZFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Citj
bGFzcyBTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFBhc3NlZFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPj4gewogcHVibGljOgorICAgIHR5cGVkZWYgUGFzc2VkUmVzdWx0VHlw
ZSBSZXN1bHRUeXBlOworICAgIAogICAgIFNoYXJlZFRhc2soKSB7IH0KICAgICB2aXJ0dWFsIH5T
aGFyZWRUYXNrKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XVEYvd3RmL1N0YWNrU2hvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIFN0YWNrU2hvdCB7CitwdWJsaWM6CisgICAgU3RhY2tTaG90KCkgeyB9CisgICAgCisg
ICAgQUxXQVlTX0lOTElORSBTdGFja1Nob3Qoc2l6ZV90IHNpemUpCisgICAgICAgIDogbV9zaXpl
KHNpemUpCisgICAgeworICAgICAgICBpZiAoc2l6ZSkgeworICAgICAgICAgICAgbV9hcnJheSA9
IHN0ZDo6bWFrZV91bmlxdWU8dm9pZCpbXT4oc2l6ZSk7CisgICAgICAgICAgICBpbnQgaW50U2l6
ZSA9IHNpemU7CisgICAgICAgICAgICBXVEZHZXRCYWNrdHJhY2UobV9hcnJheS5nZXQoKSwgJmlu
dFNpemUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bnRTaXplKSA8PSBzaXplKTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IGludFNpemU7CisgICAgICAg
ICAgICBpZiAoIW1fc2l6ZSkKKyAgICAgICAgICAgICAgICBtX2FycmF5ID0gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTdGFja1Nob3QoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQorICAgICAgICA6IG1fYXJyYXkoZGVsZXRlZFZhbHVlQXJyYXkoKSkKKyAgICAg
ICAgLCBtX3NpemUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdCYgb3BlcmF0
b3I9KGNvbnN0IFN0YWNrU2hvdCYgb3RoZXIpCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8dm9pZCpbXT4gbmV3QXJyYXkgPSBzdGQ6Om1ha2VfdW5pcXVlPHZvaWQqW10+KG90aGVyLm1f
c2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvdGhlci5tX3NpemU7IGktLTspCisgICAg
ICAgICAgICBuZXdBcnJheVtpXSA9IG90aGVyLm1fYXJyYXlbaV07CisgICAgICAgIG1fc2l6ZSA9
IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9hcnJheSA9IFdURk1vdmUobmV3QXJyYXkpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIFN0YWNrU2hvdChjb25zdCBTdGFj
a1Nob3QmIG90aGVyKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICB9CisgICAg
CisgICAgdm9pZCoqIGFycmF5KCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS5nZXQoKTsgfQorICAg
IHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgCisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9hcnJheTsgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdGFja1Nob3QmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fc2l6ZSAhPSBvdGhlci5tX3NpemUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9zaXplOyBpLS07KSB7Cisg
ICAgICAgICAgICBpZiAobV9hcnJheVtpXSAhPSBvdGhlci5tX2FycmF5W2ldKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9zaXplOworICAgICAgICAKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IG1fc2l6ZTsgaS0tOykKKyAgICAgICAgICAgIHJlc3VsdCBePSBQdHJIYXNoPHZv
aWQqPjo6aGFzaChtX2FycmF5W2ldKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NpemUgJiYgbV9hcnJheS5nZXQoKSA9PSBkZWxldGVk
VmFsdWVBcnJheSgpOworICAgIH0KKyAgICAKKyAgICAvLyBNYWtlIFNwZWN0cnVtPD4gaGFwcHku
CisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgU3RhY2tTaG90JikgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQqKiBkZWxldGVkVmFsdWVBcnJh
eSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKio+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkpOyB9CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPHZvaWQqW10+IG1fYXJyYXk7CisgICAg
c2l6ZV90IG1fc2l6ZSB7IDAgfTsKK307CisKK3N0cnVjdCBTdGFja1Nob3RIYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTdGFja1Nob3QmIHNob3QpIHsgcmV0dXJuIHNob3Qu
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RhY2tTaG90JiBhLCBjb25z
dCBTdGFja1Nob3QmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxTdGFja1Nob3Q+IHsKKyAgICB0eXBlZGVmIFN0YWNrU2hvdEhhc2ggSGFzaDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1
Y3QgSGFzaFRyYWl0czxTdGFja1Nob3Q+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFN0YWNrU2hv
dD4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvU3Rh
Y2tTaG90UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3RQ
cm9maWxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2Zp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Qcm9j
ZXNzSUQuaD4KKyNpbmNsdWRlIDx3dGYvU3BlY3RydW0uaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tU
cmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1Nob3QuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBTdGFja1Nob3RQcm9maWxlciB7CitwdWJsaWM6CisgICAgU3RhY2tTaG90UHJvZmlsZXIo
dW5zaWduZWQgbnVtRnJhbWVzLCB1bnNpZ25lZCBmcmFtZXNUb1NraXAsIHVuc2lnbmVkIHN0YWNr
c1RvUmVwb3J0KQorICAgICAgICA6IG1fbnVtRnJhbWVzKG51bUZyYW1lcykKKyAgICAgICAgLCBt
X2ZyYW1lc1RvU2tpcChmcmFtZXNUb1NraXApCisgICAgICAgICwgbV9zdGFja3NUb1JlcG9ydChz
dGFja3NUb1JlcG9ydCkKKyAgICB7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJTdGFja1Nob3RQ
cm9maWxlciIsIFt0aGlzXSAoKSB7IHJ1bigpOyB9KTsKKyAgICB9CisKKyAgICAvLyBORVZFUl9J
TkxJTkUgc28gdGhhdCBmcmFtZXNUb1NraXAgaXMgcHJlZGljdGFibGUuCisgICAgTkVWRVJfSU5M
SU5FIHZvaWQgcHJvZmlsZSgpCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisgICAgICAgIG1fcHJvZmlsZS5hZGQoU3RhY2tTaG90KG1fbnVtRnJhbWVzICsg
bV9mcmFtZXNUb1NraXApKTsKKyAgICAgICAgbV90b3RhbENvdW50Kys7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBOT19SRVRVUk4gdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yICg7
OykgeworICAgICAgICAgICAgc2xlZXAoMV9zKTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGF1dG8gbGlzdCA9IG1fcHJvZmlsZS5idWls
ZExpc3QoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuSG90dGVzdCBzdGFja3MgaW4gIiwgZ2V0
Q3VycmVudFByb2Nlc3NJRCgpLCAiOlxuIik7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
bGlzdC5zaXplKCksIGNvdW50ID0gMDsgaS0tICYmIGNvdW50IDwgbV9zdGFja3NUb1JlcG9ydDsg
Y291bnQrKykgeworICAgICAgICAgICAgICAgIGF1dG8mIGVudHJ5ID0gbGlzdFtpXTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJcblRvcCAjIiwgY291bnQgKyAxLCAiIHN0YWNrOiAiLCBlbnRy
eS5jb3VudCAqIDEwMCAvIG1fdG90YWxDb3VudCwgIiVcbiIpOworICAgICAgICAgICAgICAgIFN0
YWNrVHJhY2UgdHJhY2UoZW50cnkua2V5LmFycmF5KCkgKyBtX2ZyYW1lc1RvU2tpcCwgZW50cnku
a2V5LnNpemUoKSAtIG1fZnJhbWVzVG9Ta2lwKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRy
YWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgV29yZExvY2sgbV9sb2NrOworICAgIFNwZWN0cnVtPFN0YWNr
U2hvdCwgZG91YmxlPiBtX3Byb2ZpbGU7CisgICAgZG91YmxlIG1fdG90YWxDb3VudCB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX251bUZyYW1lczsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lc1RvU2tpcDsK
KyAgICB1bnNpZ25lZCBtX3N0YWNrc1RvUmVwb3J0OworfTsKKworI2RlZmluZSBTVEFDS19TSE9U
X1BST0ZJTEUobnVtRnJhbWVzLCBmcmFtZXNUb1NraXAsIHN0YWNrc1RvUmVwb3J0KSBkbyB7IFwK
KyAgICBzdGF0aWMgU3RhY2tTaG90UHJvZmlsZXIqIHN0YWNrU2hvdFByb2ZpbGVyOyBcCisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YWNrU2hvdFByb2ZpbGVyT25jZUZsYWc7IFwKKyAgICBz
dGQ6OmNhbGxfb25jZShzdGFja1Nob3RQcm9maWxlck9uY2VGbGFnLCBbXSB7IHN0YWNrU2hvdFBy
b2ZpbGVyID0gbmV3IFN0YWNrU2hvdFByb2ZpbGVyKG51bUZyYW1lcywgZnJhbWVzVG9Ta2lwLCBz
dGFja3NUb1JlcG9ydCk7IH0pOyBcCisgICAgc3RhY2tTaG90UHJvZmlsZXItPnByb2ZpbGUoKTsg
XAorfSB3aGlsZSAoZmFsc2UpCisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91bGQgYmUgcGFy
YWxsZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
OTkzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBiZWNhdXNlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhpcyBjaGFuZ2UgaXMg
YmVzdCB0ZXN0ZWQgdXNpbmcgRE9NLUdDLWludGVuc2l2ZQorICAgICAgICBiZW5jaG1hcmtzIGxp
a2UgU3BlZWRvbWV0ZXIgYW5kIERyb21hZW8uCisgICAgICAgIAorICAgICAgICBUaGlzIHBhcmFs
bGVsaXplcyB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0cmFpbnQsIGFuZCBtYWtlcyBzb21lIHNtYWxs
IGNoYW5nZXMgdG8gbWFrZSB0aGlzIG1vcmUKKyAgICAgICAgc2NhbGFibGUuCisKKyAgICAgICAg
KiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg6IEFkZGVk
LgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0Lmg6IFJl
bW92ZWQuCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJh
aW50OjpET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRw
dXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdHJhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NR0NPdXRwdXRDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29ya0ltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaDogQWRkZWQuCisgICAg
ICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKToKKyAgICAgICAgKiBkb20vTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpldmVudFRhcmdldERhdGFDb25jdXJyZW50
bHkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyRXZlbnRUYXJnZXREYXRhKToKKwogMjAxNy0xMi0w
MSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEludGVy
bmFscy50ZXJtaW5hdGVTZXJ2aWNlV29ya2VyLCBhbmQgdGhlIGFiaWxpdHkgdG8gcmVzdGFydCBz
ZXJ2aWNlIHdvcmtlcnMgZm9yIHBvc3RNZXNzYWdlLgpJbmRleDogU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlz
aW9uIDIyNTQwMykKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0zMjEsNiArMzIxLDcgQEAgYmluZGluZ3MvanMvQ2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVy
LmNwcAogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0RmV0Y2hlci5jcHAKIGJpbmRpbmdzL2pzL0Nh
bGxUcmFjZXIuY3BwCiBiaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKK2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5jcHAKIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAKIGJp
bmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBs
ZU1hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKyNwcmFnbWEgb25jZQor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg+CisKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9W
aXNpdGluZ1RpbWVvdXQuaAkocmV2aXNpb24gMjI1NDAzKQorKysgU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvaGVhcC9WaXNpdGluZ1RpbWVvdXQuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDIgKzAsMCBAQAotI3ByYWdtYSBvbmNlCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVmlzaXRp
bmdUaW1lb3V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw2
ICszNTEsNyBAQAogCQkwRjg3MTY3MDFDODY5RDgzMDA0RkYwREUgLyogTGVuZ3RoUG9pbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxNjZFMUM4
NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOEI0NTcyMURDM0ZCQTMwMDQ0M0MzRiAvKiBJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjhCNDU3MTFEQzNGQkEzMDA0NDNDM0YgLyogSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJDYWxsYmFjay5oICovOyB9OwogCQkwRjhCNDU3NjFEQzQxREJBMDA0NDNDM0YgLyog
SlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhCNDU3NDFEQzQxREJBMDA0NDNDM0YgLyogSlNJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi87IH07CisJCTBGOURBQTBGMUZEMUM2NkEwMDc5
QzVCMiAvKiBET01HQ091dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTBFMUZEMUM2NjQwMDc5QzVCMiAvKiBET01HQ091
dHB1dENvbnN0cmFpbnQuaCAqLzsgfTsKIAkJMEZBMjREN0ExNjJERjkxOTAwQTNGNEMwIC8qIEdy
YXBoaWNzTGF5ZXJVcGRhdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkEyNEQ3ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkI2MjUyRjE4REUxQjE1MDBBMDdDMDUgLyogR2VvbWV0cnlVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjYyNTJEMThERTFCMTUwMEEw
N0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjg4OTBBMTY3RDJGQTEwMDEwQ0RBNSAvKiBTY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCODg5MDgxNjdEMkZBMTAwMTBDREE1IC8qIFNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTU0NDYsNiArNTQ0Nyw4IEBACiAJCTBGOEI0NTc0MURDNDFEQkEwMDQ0M0MzRiAvKiBKU0ludGVy
c2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOTRBMzk1MUVGMUIxMDUwMEZCQUZGQiAvKiBKU0RPTVF1YWRDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01RdWFkQ3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRD
IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMEMxRkQxQzY2MzAwNzlDNUIyIC8qIERPTUdDT3V0cHV0
Q29uc3RyYWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01H
Q091dHB1dENvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlE
QUEwRTFGRDFDNjY0MDA3OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUdDT3V0cHV0Q29uc3RyYWludC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEwODUyQjFFNkZCNTVBMDA5NzVGREQgLyogQ1NTUHJv
cGVydGllcy5qc29uICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5qc29uOyBwYXRoID0gQ1NTUHJvcGVydGllcy5qc29uOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkEyNEQ3NzE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXll
clVwZGF0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhp
Y3NMYXllclVwZGF0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyNEQ3
ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NMYXllclVwZGF0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOTgwLDYgKzIyOTgzLDggQEAKIAkJCQk5NTIwNzYwMjFGMjY3
NUY5MDA3RDJBQUIgLyogQ2FsbFRyYWNlclR5cGVzLmggKi8sCiAJCQkJMEY2MEYzMjkxREZCQjEw
NDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLywKIAkJCQkwRjYwRjMyQTFERkJCMTA0MDA0MTZE
NkMgLyogQ29tbW9uVk0uaCAqLywKKwkJCQkwRjlEQUEwQzFGRDFDNjYzMDA3OUM1QjIgLyogRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcCAqLywKKwkJCQkwRjlEQUEwRTFGRDFDNjY0MDA3OUM1QjIg
LyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmggKi8sCiAJCQkJN0M1MTZBRDIxRjM1MjUyMDAwMzRC
NkJGIC8qIERPTVByb21pc2VQcm94eS5oICovLAogCQkJCUJDNTNEQTQ3MTE0MzEzNEQwMDBEODE3
RSAvKiBET01XcmFwcGVyV29ybGQuY3BwICovLAogCQkJCUJDNTNEQTJEMTE0MzEyMUUwMDBEODE3
RSAvKiBET01XcmFwcGVyV29ybGQuaCAqLywKQEAgLTI3NTQ3LDYgKzI3NTUyLDcgQEAKIAkJCQk1
MThGNTAwNDE5NENBQzNBMDA4MUJBQUUgLyogSlNHYW1lcGFkQnV0dG9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRTgwREE2NDBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU4MERBNjYwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvcG9zaXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGOURBQTBGMUZEMUM2NkEwMDc5QzVCMiAvKiBET01HQ091
dHB1dENvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREE3QzFGMTg4MzIyRkMwMEM5
NTRCNSAvKiBKU0dlc3R1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ4MkI3NTIxMTk4
Q0I2QjAwQkZCMDA1IC8qIEpTSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Qzk0RDE0RjBDMjc1QzY4MDA2QkM2MTcgLyogSlNIaXN0b3J5LmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01HQ091dHB1dENvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5oIgorCisjaW5jbHVk
ZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4K
KyNpbmNsdWRlIDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFw
L01hcmtlZEJsb2NrSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7CisKK0RPTUdDT3V0cHV0Q29uc3RyYWludDo6RE9NR0NPdXRwdXRDb25z
dHJhaW50KFZNJiB2bSwgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEpCisgICAgOiBNYXJraW5n
Q29uc3RyYWludCgiRG9tbyIsICJET00gT3V0cHV0IiwgQ29uc3RyYWludFZvbGF0aWxpdHk6OlNl
bGRvbUdyZXllZCwgQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LCBDb25zdHJhaW50
UGFyYWxsZWxpc206OlBhcmFsbGVsKQorICAgICwgbV92bSh2bSkKKyAgICAsIG1fY2xpZW50RGF0
YShjbGllbnREYXRhKQorICAgICwgbV9sYXN0RXhlY3V0aW9uVmVyc2lvbih2bS5oZWFwLm11dGF0
b3JFeGVjdXRpb25WZXJzaW9uKCkpCit7Cit9CisKK0RPTUdDT3V0cHV0Q29uc3RyYWludDo6fkRP
TUdDT3V0cHV0Q29uc3RyYWludCgpCit7Cit9CisKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBET01H
Q091dHB1dENvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikKK3sKKyAgICBIZWFw
JiBoZWFwID0gbV92bS5oZWFwOworICAgIAorICAgIGlmIChoZWFwLm11dGF0b3JFeGVjdXRpb25W
ZXJzaW9uKCkgPT0gbV9sYXN0RXhlY3V0aW9uVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIENvbnN0
cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKKyAgICAKKyAgICBtX2xhc3RFeGVjdXRpb25W
ZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOworICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUKG1fdGFza3MuaXNFbXB0eSgpKTsKKyAgICBtX2NsaWVudERhdGEuZm9yRWFjaE91
dHB1dENvbnN0cmFpbnRTcGFjZSgKKyAgICAgICAgWyZdIChTdWJzcGFjZSYgc3Vic3BhY2UpIHsK
KyAgICAgICAgICAgIGF1dG8gZnVuYyA9IFtdIChTbG90VmlzaXRvciYgdmlzaXRvciwgSGVhcENl
bGwqIGhlYXBDZWxsLCBIZWFwQ2VsbDo6S2luZCkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCog
Y2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKKyAgICAgICAgICAgICAgICBj
ZWxsLT5tZXRob2RUYWJsZSh2aXNpdG9yLnZtKCkpLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNl
bGwsIHZpc2l0b3IpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV90YXNrcy5hcHBlbmQoc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENlbGxJblBhcmFsbGVsKGZ1bmMp
KTsKKyAgICAgICAgfSk7CisgICAgCisgICAgcmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6
UGFyYWxsZWw7Cit9CisgICAgICAgIAordm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmRvUGFy
YWxsZWxXb3JrSW1wbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKGF1dG8mIHRh
c2sgOiBtX3Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4odmlzaXRvcik7Cit9CisgICAgICAgIAor
dm9pZCBET01HQ091dHB1dENvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZp
c2l0b3ImKQoreworICAgIG1fdGFza3MuY2xlYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091
dHB1dENvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8aGVhcC9NYXJraW5nQ29uc3RyYWludC5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEpTVk1DbGllbnREYXRhOworCitjbGFzcyBET01HQ091dHB1dENv
bnN0cmFpbnQgOiBwdWJsaWMgSlNDOjpNYXJraW5nQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAg
RE9NR0NPdXRwdXRDb25zdHJhaW50KEpTQzo6Vk0mLCBKU1ZNQ2xpZW50RGF0YSYpOworICAgIH5E
T01HQ091dHB1dENvbnN0cmFpbnQoKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0M6OkNvbnN0
cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkb1BhcmFsbGVsV29ya0ltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRl
OworICAgIHZvaWQgZmluaXNoUGFyYWxsZWxXb3JrSW1wbChKU0M6OlNsb3RWaXNpdG9yJikgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyAgICBKU1ZNQ2xpZW50RGF0
YSYgbV9jbGllbnREYXRhOworICAgIHVpbnQ2NF90IG1fbGFzdEV4ZWN1dGlvblZlcnNpb247Cisg
ICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+PiBtX3Rhc2tz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyNTQw
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAKKyNpbmNsdWRlICJET01HQ091dHB1
dENvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxoZWFw
L0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8aGVhcC9IZWFw
SW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaD4KLSNpbmNsdWRl
IDxoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL01hcmtlZEJs
b2NrSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvU3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8aGVhcC9WaXNpdGluZ1RpbWVvdXQuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9WTS5oPgpAQCAt
NzQsNDMgKzcyLDcgQEAgdm9pZCBKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKFZNKgog
ICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gbmV3IEpTVk1DbGllbnREYXRhKCp2bSk7
CiAgICAgdm0tPmNsaWVudERhdGEgPSBjbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBv
aW50ZXIuCiAgICAgCi0gICAgYXV0byBjb25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJr
aW5nQ29uc3RyYWludD4oCi0gICAgICAgICJXY29jIiwgIldlYkNvcmUgT3V0cHV0IENvbnN0cmFp
bnRzIiwKLSAgICAgICAgW3ZtLCBjbGllbnREYXRhLCBsYXN0RXhlY3V0aW9uVmVyc2lvbiA9IHZt
LT5oZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCldCi0gICAgICAgIChTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIG11dGFibGUgewotICAgICAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLT5oZWFwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpID09IGxhc3RFeGVjdXRpb25WZXJzaW9uKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGFzdEV4
ZWN1dGlvblZlcnNpb24gPSBoZWFwLm11dGF0b3JFeGVjdXRpb25WZXJzaW9uKCk7Ci0KLSAgICAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gbWFuYWdlIHRoZSB2aXNpdCBjb3VudCBoZXJlIG91cnNlbHZl
cy4gV2UgbmVlZCB0byBrbm93IHRoYXQgaWYgdGhpcyBhZGRzCi0gICAgICAgICAgICAvLyBvcGFx
dWUgcm9vdHMgdGhlbiB3ZSBjYW5ub3QgZGVjbGFyZSB0ZXJtaW5hdGlvbiB5ZXQuIFRoZSB3YXkg
d2Ugc2lnbmFsIHRoaXMgdG8gdGhlCi0gICAgICAgICAgICAvLyBjb25zdHJhaW50IHNvbHZlciBp
cyBieSBhZGRpbmcgdG8gdGhlIHZpc2l0IGNvdW50LgotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzaXplX3QgbnVtT3BhcXVlUm9vdHNCZWZvcmUgPSBoZWFwLm51bU9wYXF1ZVJvb3RzKCk7Ci0K
LSAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgcGFyYWxsZWwhCi0gICAgICAgICAgICB1
bnNpZ25lZCBudW1SZXZpc2l0ZWQgPSAwOwotICAgICAgICAgICAgY2xpZW50RGF0YS0+Zm9yRWFj
aE91dHB1dENvbnN0cmFpbnRTcGFjZSgKLSAgICAgICAgICAgICAgICBbJl0gKFN1YnNwYWNlJiBz
dWJzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2Vs
bCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGhlYXBDZWxsLCBIZWFw
Q2VsbDo6S2luZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9
IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjZWxsLT5tZXRob2RUYWJsZSgqdm0pLT52aXNpdE91dHB1dENvbnN0cmFpbnRzKGNlbGws
IHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1SZXZpc2l0ZWQr
KzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygi
KCIsIG51bVJldmlzaXRlZCwgIikiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvdFZp
c2l0b3IubWVyZ2VJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG90
VmlzaXRvci5hZGRUb1Zpc2l0Q291bnQoaGVhcC5udW1PcGFxdWVSb290cygpIC0gbnVtT3BhcXVl
Um9vdHNCZWZvcmUpOwotICAgICAgICB9LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
U2VsZG9tR3JleWVkKTsKLSAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChXVEZNb3Zl
KGNvbnN0cmFpbnQpKTsKKyAgICB2bS0+aGVhcC5hZGRNYXJraW5nQ29uc3RyYWludChzdGQ6Om1h
a2VfdW5pcXVlPERPTUdDT3V0cHV0Q29uc3RyYWludD4oKnZtLCAqY2xpZW50RGF0YSkpOwogICAg
ICAgICAKICAgICBjbGllbnREYXRhLT5tX25vcm1hbFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpj
cmVhdGUoKnZtLCB0cnVlKTsKICAgICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0
UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCShyZXZpc2lvbiAyMjU0MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVk
ZSAiQmVmb3JlTG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5o
IgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgiCiAjaW5jbHVk
ZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCkBAIC0yMTYyLDcgKzIxNjMsMTQgQEAgRXZlbnRU
YXJnZXREYXRhKiBOb2RlOjpldmVudFRhcmdldERhdGEoKQogCiBFdmVudFRhcmdldERhdGEqIE5v
ZGU6OmV2ZW50VGFyZ2V0RGF0YUNvbmN1cnJlbnRseSgpCiB7Ci0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOworICAgIC8vIE5vdCBob2xkaW5nIHRo
ZSBsb2NrIHdoZW4gdGhlIHdvcmxkIGlzIHN0b3BwZWQgYWNjZWxlcmF0ZXMgcGFyYWxsZWwgY29u
c3RyYWludCBzb2x2aW5nLCB3aGljaAorICAgIC8vIGNhbGxzIHRoaXMgZnVuY3Rpb24gZnJvbSBt
YW55IHRocmVhZHMuIFBhcmFsbGVsIGNvbnN0cmFpbnQgc29sdmluZyBjYW4gaGFwcGVuIHdpdGgg
dGhlIHdvcmxkCisgICAgLy8gcnVubmluZyBvciBzdG9wcGVkLCBidXQgaWYgd2UgZG8gaXQgd2l0
aCBhIHJ1bm5pbmcgd29ybGQsIHRoZW4gd2UncmUgdXN1YWxseSBtaXhpbmcgY29uc3RyYWludAor
ICAgIC8vIHNvbHZpbmcgd2l0aCBvdGhlciB3b3JrLiBUaGVyZWZvcmUsIHRoZSBtb3N0IGxpa2Vs
eSB0aW1lIGZvciBjb250ZW50aW9uIG9uIHRoaXMgbG9jayBpcyB3aGVuIHRoZQorICAgIC8vIHdv
cmxkIGlzIHN0b3BwZWQuIFdlIGRvbid0IGhhdmUgdG8gaG9sZCB0aGUgbG9jayB3aGVuIHRoZSB3
b3JsZCBpcyBzdG9wcGVkLCBiZWNhdXNlIGEgc3RvcHBlZCB3b3JsZAorICAgIC8vIG1lYW5zIHRo
YXQgd2Ugd2lsbCBuZXZlciBtdXRhdGUgdGhlIGV2ZW50IHRhcmdldCBkYXRhIG1hcC4KKyAgICBK
U0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
a0lmKHNfZXZlbnRUYXJnZXREYXRhTWFwTG9jaywgdm0gJiYgdm0tPmhlYXAud29ybGRJc1J1bm5p
bmcoKSk7CiAgICAgcmV0dXJuIGhhc0V2ZW50VGFyZ2V0RGF0YSgpID8gZXZlbnRUYXJnZXREYXRh
TWFwKCkuZ2V0KHRoaXMpIDogbnVsbHB0cjsKIH0KIApAQCAtMjE3MSw2ICsyMTc5LDkgQEAgRXZl
bnRUYXJnZXREYXRhJiBOb2RlOjplbnN1cmVFdmVudFRhcmdldAogICAgIGlmIChoYXNFdmVudFRh
cmdldERhdGEoKSkKICAgICAgICAgcmV0dXJuICpldmVudFRhcmdldERhdGFNYXAoKS5nZXQodGhp
cyk7CiAKKyAgICBKU0M6OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIXZtIHx8IHZtLT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOworCiAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2spOwogICAgIHNldEhhc0V2ZW50
VGFyZ2V0RGF0YSh0cnVlKTsKICAgICByZXR1cm4gKmV2ZW50VGFyZ2V0RGF0YU1hcCgpLmFkZCh0
aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPEV2ZW50VGFyZ2V0RGF0YT4oKSkuaXRlcmF0b3ItPnZhbHVl
OwpAQCAtMjE3OCw2ICsyMTg5LDggQEAgRXZlbnRUYXJnZXREYXRhJiBOb2RlOjplbnN1cmVFdmVu
dFRhcmdldAogCiB2b2lkIE5vZGU6OmNsZWFyRXZlbnRUYXJnZXREYXRhKCkKIHsKKyAgICBKU0M6
OlZNKiB2bSA9IGNvbW1vblZNT3JOdWxsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtIHx8IHZt
LT5oZWFwLndvcmxkSXNSdW5uaW5nKCkpOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc19l
dmVudFRhcmdldERhdGFNYXBMb2NrKTsKICAgICBldmVudFRhcmdldERhdGFNYXAoKS5yZW1vdmUo
dGhpcyk7CiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgorCisgICAgICAgIEdDIGNvbnN0cmFpbnQgc29sdmluZyBzaG91bGQgYmUgcGFyYWxs
ZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTkz
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgKiBTY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrczogQWRkIHNwbGF5LWxhdGVuY3kgdGVzdCwg
c2luY2UgdGhpcyBjaGFuZ2UgbmVlZGVkIHRvIGJlIGNhcmVmdWxseSB2YWxpZGF0ZWQgd2l0aCB0
aGF0IGJlbmNobWFyay4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJI
YXNoU2V0LmNwcDogQWRkZWQuIFRoaXMgaGFzIHVuaXQgdGVzdHMgb2YgdGhlIG5ldyBjb25jdXJy
ZW50IGRhdGEgc3RydWN0dXJlLiBUaGUgdGVzdHMgZm9jdXMgb24gY29ycmVjdG5lc3MgdW5kZXIg
c2VyaWFsIGV4ZWN1dGlvbiwgd2hpY2ggYXBwZWFycyB0byBiZSBlbm91Z2ggZm9yIG5vdyAoaXQn
cyBzbyBlYXN5IHRvIGNhdGNoIGEgY29uY3VycmVuY3kgYnVnIGJ5IGp1c3QgcnVubmluZyB0aGUg
R0MpLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMTItMDEgIEFsaWNp
YSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBT
YW1wbGVNYXAuY3BwIEFQSSB0ZXN0cyB0byBDTWFrZQpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4t
anNjLWJlbmNobWFya3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNo
bWFya3MJKHJldmlzaW9uIDIyNTQwMykKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1h
cmtzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIExPTkdTUElERVJfUEFUSCA9IFBF
UkZPUk1BTkNFVEVTVFNfUEFUSCAKIFY4X1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAi
U3VuU3BpZGVyIiArICJ0ZXN0cyIgKyAidjgtdjYiCiBUQUlMQkVOQ0hfUEFUSCA9IFBFUkZPUk1B
TkNFVEVTVFNfUEFUSCArICJUYWlsQmVuY2g5MDAwIgogTUlDUk9CRU5DSE1BUktTX1BBVEggPSBP
UEVOU09VUkNFX1BBVEggKyAiSlNUZXN0cyIgKyAibWljcm9iZW5jaG1hcmtzIgotT0NUQU5FX1dS
QVBQRVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJPY3RhbmUiICsgIndyYXBwZXJz
IgorT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJPY3Rh
bmUiCitPQ1RBTkVfV1JBUFBFUl9QQVRIID0gT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCArICJ3cmFw
cGVycyIKIEpTQkVOQ0hfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJKU0JlbmNoIgog
U0lYU1BFRURfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAidGVz
dHMiCiBTSVhTUEVFRF9XUkFQUEVSX1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU2l4
U3BlZWQiICsgIndyYXBwZXJzIgpAQCAtODQxLDYgKzg0MiwyMCBAQCBjbGFzcyBTaW5nbGVGaWxl
VGltZWRCZW5jaG1hcmtQYXJhbWV0ZXJzCiAgIGVuZAogZW5kCiAKKyMgQmVuY2htYXJrIHRoYXQg
Y29uc2lzdHMgb2YgYSBzaW5nbGUgZmlsZSBhbmQgbXVzdCBiZSBsb2FkZWQgaW4gaXRzIG93biBn
bG9iYWwgb2JqZWN0IGVhY2gKKyMgdGltZSAoaS5lLiBydW4oKSksIGJ1dCByZXR1cm5zIGl0cyBy
ZXN1bHQgaW4gYSBjdXN0b20gd2F5LgorY2xhc3MgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2ht
YXJrUGFyYW1ldGVycworICBhdHRyX3JlYWRlciA6YmVuY2hQYXRoCisgIAorICBkZWYgaW5pdGlh
bGl6ZShiZW5jaFBhdGgpCisgICAgQGJlbmNoUGF0aCA9IGJlbmNoUGF0aAorICBlbmQKKyAgCisg
IGRlZiBraW5kCisgICAgOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyaworICBlbmQKK2Vu
ZAorCiAjIEJlbmNobWFyayB0aGF0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGRhdGEgZmlsZXMg
dGhhdCBzaG91bGQgYmUgbG9hZGVkIGdsb2JhbGx5LCBmb2xsb3dlZAogIyBieSBhIGNvbW1hbmQg
dG8gcnVuIHRoZSBiZW5jaG1hcmsuCiBjbGFzcyBNdWx0aUZpbGVUaW1lZEJlbmNobWFya1BhcmFt
ZXRlcnMKQEAgLTk2NSw2ICs5ODAsMjUgQEAgZGVmIGVtaXRCZW5jaFJ1bkNvZGVGaWxlKG5hbWUs
IHBsYW4sIGJlbgogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgIGlmIChfX2Jl
bmNoZXJfaW5kZXggPj0gI3t3YXJtdXB9KSBwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7
cGxhbi5pdGVyYXRpb259OiBcIiArIChfX2JlbmNoZXJfaW5kZXggLSAje3dhcm11cH0pICsgXCI6
IFRpbWU6IFwiKygoX19hZnRlci1fX2JlZm9yZSkvX19ydW5zKSk7IikKICAgICAgICAgZG91Ymxl
UHV0cygkc3RkZXJyLGZpbGUsIn0iKQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
I3tiZW5jaFBhcmFtcy50ZWFyRG93bkNvbW1hbmQuanN9IikKKyAgICAgIGVsc2lmIGJlbmNoUGFy
YW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyaworICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hh
dCkgeyIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICB2YXIgX19iZW5jaGVy
X3Jlc3VsdCA9IHt2YWx1ZTogbnVsbH07IikKKyAgICAgICAgJHJlcnVuLnRpbWVzIHsKKyAgICAg
ICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcnVuKF9fYmVuY2hlcl93aGF0LCBfX2Jl
bmNoZXJfcmVzdWx0KTsiKQorICAgICAgICB9CisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixm
aWxlLCIgICBpZiAoX19iZW5jaGVyX3Jlc3VsdC52YWx1ZSA9PSBudWxsKSIpCisgICAgICAgIGRv
dWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdWxsIHJlc3Vs
dFwiKTsiKQorICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcmV0dXJuIF9fYmVu
Y2hlcl9yZXN1bHQudmFsdWU7IikKKyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0i
KQorICAgICAgICAkd2FybXVwLnRpbWVzIHsKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIs
ZmlsZSwiX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5pbnNwZWN0fSkiKQor
ICAgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCJnYygpOyIpIHVubGVzcyBwbGFuLnZt
LnNob3VsZE1lYXN1cmVHQworICAgICAgICB9CisgICAgICAgICRpbm5lci50aW1lcyB7CisgICAg
ICAgICAgfCBpbm5lckluZGV4IHwKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
cHJpbnQoXCIje25hbWV9OiAje3BsYW4udm19OiAje3BsYW4uaXRlcmF0aW9ufTogI3tpbm5lcklu
ZGV4fTogVGltZTogXCIrX19iZW5jaGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5pbnNw
ZWN0fSkpOyIpCisgICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5s
ZXNzIHBsYW4udm0uc2hvdWxkTWVhc3VyZUdDCisgICAgICAgIH0KICAgICAgIGVsc2UKICAgICAg
ICAgcmFpc2UgdW5sZXNzIGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVUaW1lZEJlbmNo
bWFyawogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5jaGVy
X3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCkBAIC0xNTk0LDYgKzE2MjgsMTkgQEAgY2xhc3MgT2N0
YW5lQmVuY2htYXJrCiAgIGVuZAogZW5kCiAKK2NsYXNzIEN1c3RvbVRpbWVkQmVuY2htYXJrCisg
IGluY2x1ZGUgQmVuY2htYXJrCisgIAorICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBmdWxsUGF0aCkK
KyAgICBAbmFtZSA9IG5hbWUKKyAgICBAZnVsbFBhdGggPSBmdWxsUGF0aAorICBlbmQKKyAgCisg
IGRlZiBlbWl0UnVuQ29kZShwbGFuKQorICAgIGVtaXRCZW5jaFJ1bkNvZGUoZnVsbG5hbWUsIHBs
YW4sIFNpbmdsZUZpbGVDdXN0b21UaW1lZEJlbmNobWFya1BhcmFtZXRlcnMubmV3KGVuc3VyZUZp
bGUoIkN1c3RvbVRpbWVkLSN7QG5hbWV9IiwgQGZ1bGxQYXRoKSkpCisgIGVuZAorZW5kCisKIGNs
YXNzIEtyYWtlbkJlbmNobWFyawogICBpbmNsdWRlIEJlbmNobWFyawogICAKQEAgLTMwMTAsNiAr
MzA1Nyw3IEBAIGJlZ2luCiAgICAgfCBhcmdzIHwKICAgICBPQ1RBTkUuYWRkIE9jdGFuZUJlbmNo
bWFyay5uZXcoKmFyZ3MpCiAgIH0KKyAgT0NUQU5FLmFkZCBDdXN0b21UaW1lZEJlbmNobWFyay5u
ZXcoInNwbGF5LWxhdGVuY3kiLCAoT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCArICJzcGxheS5qcyIp
LnRvX3MpCiAKICAgS1JBS0VOID0gQmVuY2htYXJrU3VpdGUubmV3KCJLcmFrZW4iLCA6YXJpdGht
ZXRpY01lYW4sIC0xKQogICBbImFpLWFzdGFyIiwgImF1ZGlvLWJlYXQtZGV0ZWN0aW9uIiwgImF1
ZGlvLWRmdCIsICJhdWRpby1mZnQiLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAKKyAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvQ3Jvc3NUaHJlYWRUYXNrLmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMjU0MDMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQAogCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRp
ZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICov
OyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2Nv
YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5
RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICovOyB9Owog
CQkwRjJDMjBCODFEQ0Q1NDUwMDA1NDJEOUUgLyogVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJEOUUgLyog
VGltZS5jcHAgKi87IH07CisJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50
UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
ICovOyB9OwogCQkwRjNCOTRBNzFBNzcyNjc0MDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVK
YXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlw
dC5tbSAqLzsgfTsKIAkJMEY0RkZBOUUxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVu
ZGVySW5Db250ZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVuZGVySW5Db250
ZXh0Lm1tICovOyB9OwogCQkwRjU2NTFGNzFGQ0U0RERDMDAzMTBGQkMgLyogTm9IaXN0b3J5SXRl
bVNjcm9sbFRvRnJhZ21lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjU2NTFGNjFGQ0U0RERCMDAzMTBGQkMgLyogTm9IaXN0b3J5SXRlbVNjcm9s
bFRvRnJhZ21lbnQubW0gKi87IH07CkBAIC0xMDcyLDYgKzEwNzMsNyBAQAogCQkwRjEzOUU3NTFB
NDIzQTUzMDBGNTkwRjUgLyogV2Vha09iakNQdHIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXZWFrT2JqQ1B0ci5tbTsgcGF0aCA9IGNvY29hL1dlYWtPYmpDUHRy
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3QkJENDE1QUY2QzREMDA3QUI3
NTMgLyogV2ViQ29yZVN0YXRpc3RpY3NXaXRoTm9XZWJQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVTdGF0aXN0aWNzV2l0aE5vV2ViUHJvY2Vz
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkMyMEI3MURDRDU0NDgwMDU0
MkQ5RSAvKiBUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRp
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMwQ0I1QjFGQ0UxNzkyMDA0
QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVh
dGVKYXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjRGRkE5RDFFRDNBQTg1MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRl
eHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTbmFwc2hvdFZp
YVJlbmRlckluQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RkZB
QTAxRUQzRDBERTAwRjcxMTFGIC8qIEltYWdlSU8uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUg
PSBJbWFnZUlPLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSW1h
Z2VJTy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwpAQCAtMjU5Myw2ICsyNTk1
LDcgQEAKIAkJCQkyNkYxQjQ0MjE1Q0E0MzRGMDBEMUU0QkYgLyogQXRvbWljU3RyaW5nLmNwcCAq
LywKIAkJCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIuY3BwICovLAog
CQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlv
bnMuY3BwICovLAorCQkJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAgKi8sCiAJCQkJMEZFQUUzNjcxQjdEMTlDQjAwQ0UxN0YyIC8qIENvbmRpdGlv
bi5jcHAgKi8sCiAJCQkJNTE3MTRFQjkxRDA4NzQxNjAwNDcyM0M0IC8qIENyb3NzVGhyZWFkVGFz
ay5jcHAgKi8sCiAJCQkJMjZBMkM3MkUxNUUyRTczQzAwNUIxQTE0IC8qIENTdHJpbmcuY3BwICov
LApAQCAtMzE3OSw2ICszMTgyLDcgQEAKIAkJCQk3QzgzREVGNjFEMEE1OTBDMDBGRUJDRjMgLyog
TWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVGRTFEMEE1OTBDMDBG
RUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDU0RjMxRjMzOEMz
NjAwQTk3QUE3IC8qIE5ldmVyRGVzdHJveWVkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBD
QjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzREYwMTFEMEE1OTBDMDBGRUJDRjMgLyogT3B0aW9uYWwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE3N0JBQTMxRDlBRkZGQzAwNUZDNTY4IC8qIE9wdGlvblNldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMgLyogT1NPYmplY3RQ
dHIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Db25jdXJyZW50UHRySGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCShub25leGlzdGVudCkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCituYW1lc3BhY2Ug
eworCisvLyBgY29tbWFuZHNgIGlzIGEgc3RyaW5nIHRoYXQgdGVsbHMgdGhpcyB0aGluZyB3aGF0
IHRvIGRvLiBJdCBoYXMgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzLgorLy8g
VGhlIGNoYXJhY3RlciBwYWlycyBhcmUgY29tbWFuZHMuIENvbW1hbmRzOgorLy8KKy8vICt4ICAg
ICBBZGRzICd4JyB0byB0aGUgc2V0IChjYXN0cyAneCcgdG8gYSB2b2lkKikgYW5kIGFzc2VydHMg
dGhhdCBpdCdzIG5ldy4KKy8vICF4ICAgICBBZGRzICd4JyB0byB0aGUgc2V0IGFuZCBhc3NlcnRz
IHRoYXQgaXQgd2FzIHRoZXJlIGFscmVhZHkuCisvLyA9eCAgICAgQXNzZXJ0cyB0aGF0ICd4JyBp
cyBpbiB0aGUgc2V0CisvLyAteCAgICAgQXNzZXJ0cyB0aGF0ICd4JyBpcyBub3QgaW4gdGhlIHNl
dAordm9pZCBkb1Rlc3QoY29uc3QgY2hhciogY29tbWFuZHMpCit7CisgICAgQ29uY3VycmVudFB0
ckhhc2hTZXQgc2V0OworICAgIGZvciAoY29uc3QgY2hhciogY29tbWFuZCA9IGNvbW1hbmRzOyBj
b21tYW5kWzBdICYmIGNvbW1hbmRbMV07IGNvbW1hbmQgKz0gMikgeworICAgICAgICB2b2lkKiBw
dHIgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29tbWFuZFsx
XSkpOworICAgICAgICBzd2l0Y2ggKGNvbW1hbmRbMF0pIHsKKyAgICAgICAgY2FzZSAnKyc6Cisg
ICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQuYWRkKHB0cikpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJyEnOgorICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHNldC5hZGQocHRy
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnPSc6CisgICAgICAgICAgICBF
WFBFQ1RfVFJVRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnLSc6CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKHB0cikp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitURVNUKFdURl9Db25jdXJy
ZW50UHRySGFzaFNldCwgRW1wdHkpCit7CisgICAgZG9UZXN0KCIiKTsKK30KKworVEVTVChXVEZf
Q29uY3VycmVudFB0ckhhc2hTZXQsIEFkZE9uZUVsZW1lbnQpCit7CisgICAgZG9UZXN0KCIreD14
LXktMCIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVu
dE11bHRpcGxlVGltZXMpCit7CisgICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgt
eS0wIik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50
TWFueVRpbWVzKQoreworICAgIGRvVGVzdCgiK3gheCF4IXgheCF4IXgheCF4IXgheD14LXktMCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4Iik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJl
bnRQdHJIYXNoU2V0LCBBZGRMb3RzT2ZFbGVtZW50cykKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0
KzUrNis3KzgrOSswK3ErdytlK3IrdCt5K3UraStvK3ArYStzK2QrZitnK2graitrK2wreit4K2Mr
ditiK24rbStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytMK1orWCtDK1YrQitO
K009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9
az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9SD1KPUs9TD1a
PVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFk
ZExvdHNPZkVsZW1lbnRzTWFueVRpbWVzKQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2Kzcr
OCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2srbCt6K3grYyt2K2Irbitt
K1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9
Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14
PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9
Qj1OPU0tLiExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFn
IWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUoh
SyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFw
IWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMh
RCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0
IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUh
SSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEw
IXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVch
RSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1
ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYh
YiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFN
ITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWsh
bCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFY
IUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQh
ZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFI
IUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkh
byFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFB
IVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUh
ciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZ
IVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSIpOworfQorCitURVNUKFdU
Rl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkTG90c09mRWxlbWVudHNBbmRRdWVyeVNvbWVCZWZv
cmVBZGRpbmdUaGVSZXN0KQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3
K2Urcit0K3krdStpK28rcCthK3MrZCtmK2craCtqK2s9MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9
ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9ay1sLXoteC1jLXYtYi1uLW0tUS1XLUUtUi1U
LVktVS1JLU8tUC1BLVMtRC1GLUctSC1KLUstTC1aLVgtQy1WLUItTi1NK2wreit4K2MrditiK24r
bStRK1crRStSK1QrWStVK0krTytQK0ErUytEK0YrRytIK0orSytMK1orWCtDK1YrQitOK009MT0y
PTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1sPXo9
eD1jPXY9Yj1uPW09UT1XPUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9Qz1W
PUI9Tj1NLS4iKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZFNvbWVF
bGVtZW50c011bHRpcGxlVGltZXNUaGVuQWRkVGhlUmVzdEFuZFF1ZXJ5U29tZUJlZm9yZUFkZGlu
Z1RoZVJlc3QpCit7CisgICAgZG9UZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3Qh
MSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFy
IXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXch
ZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFx
IXchZSFyIXQreSt1K2krbytwK2ErcytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9
dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1S
LVQtWS1VLUktTy1QLUEtUy1ELUYtRy1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2Ir
bittK1ErVytFK1IrVCtZK1UrSStPK1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0x
PTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9
ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1D
PVY9Qj1OPU0tLiIpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisK
</data>
<flag name="review"
          id="347500"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328438</attachid>
            <date>2017-12-04 21:49:56 -0800</date>
            <delta_ts>2017-12-04 21:49:56 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>311649</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU1MTYpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEyLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0MgY29uc3RyYWludCBz
b2x2aW5nIHNob3VsZCBiZSBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5OTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSkYgQmFzdGll
bi4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgdmVyc2lvbiBvZiBzcGxheSB0aGF0IG1lYXN1
cmVzIGxhdGVuY3kgaW4gYSB3YXkgdGhhdCBydW4tanNjLWJlbmNobWFya3MgZ3Jva3MuCisKKyAg
ICAgICAgKiBPY3RhbmUvc3BsYXkuanM6IEFkZGVkLgorICAgICAgICAodGhpcy5TZXR1cC5zZXR1
cC5zZXR1cCk6CisgICAgICAgICh0aGlzLlRlYXJEb3duLnRlYXJEb3duLnRlYXJEb3duKToKKyAg
ICAgICAgKEJlbmNobWFyayk6CisgICAgICAgIChCZW5jaG1hcmtSZXN1bHQpOgorICAgICAgICAo
QmVuY2htYXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mKToKKyAgICAgICAgKEJlbmNobWFya1N1
aXRlKToKKyAgICAgICAgKGFsZXJ0KToKKyAgICAgICAgKE1hdGgucmFuZG9tKToKKyAgICAgICAg
KEJlbmNobWFya1N1aXRlLlJlc2V0Uk5HKToKKyAgICAgICAgKFJ1blN0ZXApOgorICAgICAgICAo
QmVuY2htYXJrU3VpdGUuUnVuU3VpdGVzKToKKyAgICAgICAgKEJlbmNobWFya1N1aXRlLkNvdW50
QmVuY2htYXJrcyk6CisgICAgICAgIChCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuKToKKyAg
ICAgICAgKEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKToKKyAgICAgICAgKEJlbmNo
bWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUpOgorICAgICAgICAoQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhbkxhdGVuY3kpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUuRm9ybWF0
U2NvcmUpOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVN0ZXApOgor
ICAgICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCk6CisgICAgICAg
IChCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuTm90aWZ5RXJyb3IpOgorICAgICAgICAoQmVuY2ht
YXJrU3VpdGUucHJvdG90eXBlLlJ1blNpbmdsZUJlbmNobWFyayk6CisgICAgICAgIChSdW5OZXh0
U2V0dXApOgorICAgICAgICAoUnVuTmV4dEJlbmNobWFyayk6CisgICAgICAgIChSdW5OZXh0VGVh
ckRvd24pOgorICAgICAgICAoQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blN0ZXApOgorICAg
ICAgICAoR2VuZXJhdGVQYXlsb2FkVHJlZSk6CisgICAgICAgIChHZW5lcmF0ZUtleSk6CisgICAg
ICAgIChTcGxheVVwZGF0ZVN0YXRzKToKKyAgICAgICAgKEluc2VydE5ld05vZGUpOgorICAgICAg
ICAoU3BsYXlTZXR1cCk6CisgICAgICAgIChTcGxheVRlYXJEb3duKToKKyAgICAgICAgKFNwbGF5
UnVuKToKKyAgICAgICAgKFNwbGF5VHJlZSk6CisgICAgICAgIChTcGxheVRyZWUucHJvdG90eXBl
LmlzRW1wdHkpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQpOgorICAgICAg
ICAoU3BsYXlUcmVlLnByb3RvdHlwZS5yZW1vdmUpOgorICAgICAgICAoU3BsYXlUcmVlLnByb3Rv
dHlwZS5maW5kKToKKyAgICAgICAgKFNwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCk6CisgICAg
ICAgIChTcGxheVRyZWUucHJvdG90eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuKToKKyAgICAgICAg
KFNwbGF5VHJlZS5wcm90b3R5cGUuZXhwb3J0S2V5cyk6CisgICAgICAgIChTcGxheVRyZWUucHJv
dG90eXBlLnNwbGF5Xyk6CisgICAgICAgIChTcGxheVRyZWUuTm9kZSk6CisgICAgICAgIChTcGxh
eVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2VfKToKKyAgICAgICAgKHJlcG9ydCk6CisgICAg
ICAgIChzdGFydCk6CisKIDIwMTctMTItMDQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCBTdHlsZUJlbmNoL0ludGVyYWN0aXZlUnVubmVyLmh0bWwKSW5k
ZXg6IFBlcmZvcm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvT2N0YW5lL3NwbGF5LmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvT2N0YW5lL3NwbGF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUwIEBACisv
LyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLy8gUGVyZm9ybWFuY2Uubm93IGlzIHVz
ZWQgaW4gbGF0ZW5jeSBiZW5jaG1hcmtzLCB0aGUgZmFsbGJhY2sgaXMgRGF0ZS5ub3cuCit2YXIg
cGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZSB8fCB7fTsKK3BlcmZvcm1hbmNlLm5vdyA9ICgpID0+
IHByZWNpc2VUaW1lKCkgKiAxMDAwOworCisvLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5uaW5n
IHRoZSBiZW5jaG1hcmsgc3VpdGVzIGFuZAorLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQgb24g
dGhlIHRpbWluZyBtZWFzdXJlbWVudHMuCisKKworLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFtZSAo
c3RyaW5nKSBhbmQgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCisvLyBkbyB0aGUgcGVy
Zm9ybWFuY2UgbWVhc3VyZW1lbnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24KKy8v
IGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBhbmQg
YWZ0ZXIKKy8vIHJ1bm5pbmcgdGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUgb2Yg
dGhlc2UgZnVuY3Rpb25zIHdpbGwKKy8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBiZW5j
aG1hcmsgc2NvcmUuCitmdW5jdGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0ZXJt
aW5pc3RpYywgcnVuLCBzZXR1cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJhdGlv
bnMpIHsKKyAgdGhpcy5uYW1lID0gbmFtZTsKKyAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVwOwor
ICB0aGlzLmRvRGV0ZXJtaW5pc3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKKyAgdGhpcy5ydW4gPSBy
dW47CisgIHRoaXMuU2V0dXAgPSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07CisgIHRo
aXMuVGVhckRvd24gPSB0ZWFyRG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07CisgIHRo
aXMubGF0ZW5jeVJlc3VsdCA9IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVsbDsg
CisgIHRoaXMubWluSXRlcmF0aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25zIDog
MzI7Cit9CisKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFuZCB0
aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvCisvLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJlbmNo
bWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEKKy8vIGZ1bGwgYmVuY2htYXJrIHN1
aXRlIGhhcyBydW4gdG8gY29tcGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAorLy8gdGhl
biB0aGVyZSBpcyBubyBsYXRlbmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KK2Z1bmN0aW9u
IEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKKyAgdGhpcy5iZW5j
aG1hcmsgPSBiZW5jaG1hcms7CisgIHRoaXMudGltZSA9IHRpbWU7CisgIHRoaXMubGF0ZW5jeSA9
IGxhdGVuY3k7Cit9CisKKworLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8gbnVt
YmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljCisvLyBtZWFuIGNvbXB1dGF0aW9uLgorQmVuY2ht
YXJrUmVzdWx0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlz
LnRpbWU7Cit9CisKKworLy8gU3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5hbWUg
YW5kIHRoZSBzZXQgb2YgYmVuY2htYXJrcyBpbgorLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVyZW5j
ZSB0aW1pbmcgdGhhdCB0aGUgZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAorLy8gb24uIFRoaXMg
d2F5LCBhbGwgc2NvcmVzIGFyZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhpZ2hl
cgorLy8gc2NvcmVzIGltcGxpZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgorZnVuY3Rpb24gQmVuY2ht
YXJrU3VpdGUobmFtZSwgcmVmZXJlbmNlLCBiZW5jaG1hcmtzKSB7CisgIHRoaXMubmFtZSA9IG5h
bWU7CisgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICB0aGlzLmJlbmNobWFya3MgPSBi
ZW5jaG1hcmtzOworICBCZW5jaG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKK30KKworCisv
LyBLZWVwIHRyYWNrIG9mIGFsbCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgorQmVuY2htYXJr
U3VpdGUuc3VpdGVzID0gW107CisKKy8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNyb3Nz
IHZlcnNpb25zLiBCdW1wIHRoZSB2ZXJzaW9uIGlmCisvLyB5b3UncmUgbWFraW5nIGNoYW5nZXMg
dGhhdCB3aWxsIGFmZmVjdCB0aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCisvLyBhIG5ldyBi
ZW5jaG1hcmsgb3IgY2hhbmdlIGFuIGV4aXN0aW5nIG9uZS4KK0JlbmNobWFya1N1aXRlLnZlcnNp
b24gPSAnOSc7CisKKy8vIE92ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBhbiBl
eGNlcHRpb24gaW5zdGVhZC4KK2FsZXJ0ID0gZnVuY3Rpb24ocykgeworICB0aHJvdyAiQWxlcnQg
Y2FsbGVkIHdpdGggYXJndW1lbnQ6ICIgKyBzOworfTsKKworCisvLyBUbyBtYWtlIHRoZSBiZW5j
aG1hcmsgcmVzdWx0cyBwcmVkaWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQorLy8gd2l0
aCBhIDEwMCUgZGV0ZXJtaW5pc3RpYyBhbHRlcm5hdGl2ZS4KK0JlbmNobWFya1N1aXRlLlJlc2V0
Uk5HID0gZnVuY3Rpb24oKSB7CisgIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgeworICAgIHZh
ciBzZWVkID0gNDk3MzQzMjE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgLy8gUm9i
ZXJ0IEplbmtpbnMnIDMyIGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICBzZWVkID0g
KChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7CisgICAg
ICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZmZmZm
ZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkgICAm
IDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2VlZCA8
PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZjNSkg
KyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICBzZWVkID0gKChzZWVkIF4gMHhi
NTVhNGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICByZXR1cm4gKHNl
ZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworICB9KSgpOworfQorCisKKy8v
IFJ1bnMgYWxsIHJlZ2lzdGVyZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5aWVs
ZHMgYmV0d2VlbgorLy8gZWFjaCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5uaW5n
IGZvciB0b28gbG9uZyBpbiB0aGUKKy8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9uZSwg
dGhlIGZpbmFsIHNjb3JlIGlzIHJlcG9ydGVkIHRvIHRoZQorLy8gcnVubmVyLgorQmVuY2htYXJr
U3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZhciBjb250aW51YXRpb24g
PSBudWxsOworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICB2YXIgbGVu
Z3RoID0gc3VpdGVzLmxlbmd0aDsKKyAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107CisgIHZh
ciBpbmRleCA9IDA7CisgIGZ1bmN0aW9uIFJ1blN0ZXAoKSB7CisgICAgd2hpbGUgKGNvbnRpbnVh
dGlvbiB8fCBpbmRleCA8IGxlbmd0aCkgeworICAgICAgaWYgKGNvbnRpbnVhdGlvbikgeworICAg
ICAgICBjb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpbmRleCsrXTsKKyAgICAgICAgaWYgKHJ1bm5lci5Ob3Rp
ZnlTdGFydCkgcnVubmVyLk5vdGlmeVN0YXJ0KHN1aXRlLm5hbWUpOworICAgICAgICBjb250aW51
YXRpb24gPSBzdWl0ZS5SdW5TdGVwKHJ1bm5lcik7CisgICAgICB9CisgICAgICBpZiAoY29udGlu
dWF0aW9uICYmIHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRpbWVv
dXQpIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOworICAgICAgICBy
ZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKKyAgICBp
ZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7CisgICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtTdWl0
ZS5HZW9tZXRyaWNNZWFuKEJlbmNobWFya1N1aXRlLnNjb3Jlcyk7CisgICAgICB2YXIgZm9ybWF0
dGVkID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOworICAgICAgcnVu
bmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCk7CisgICAgfQorICB9CisgIFJ1blN0ZXAoKTsKK30K
KworCisvLyBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFya3Mu
IFVzZWZ1bCBmb3IKKy8vIHNob3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgorQmVuY2ht
YXJrU3VpdGUuQ291bnRCZW5jaG1hcmtzID0gZnVuY3Rpb24oKSB7CisgIHZhciByZXN1bHQgPSAw
OworICB2YXIgc3VpdGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOworICBmb3IgKHZhciBpID0g
MDsgaSA8IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0uYmVu
Y2htYXJrcy5sZW5ndGg7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvLyBDb21wdXRl
cyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KK0JlbmNobWFya1N1aXRl
Lkdlb21ldHJpY01lYW4gPSBmdW5jdGlvbihudW1iZXJzKSB7CisgIHZhciBsb2cgPSAwOworICBm
b3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKKyAgICBsb2cgKz0gTWF0
aC5sb2cobnVtYmVyc1tpXSk7CisgIH0KKyAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9nIC8g
bnVtYmVycy5sZW5ndGgpOworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVhbiBv
ZiBhIHNldCBvZiB0aHJvdWdocHV0IHRpbWUgbWVhc3VyZW1lbnRzLgorQmVuY2htYXJrU3VpdGUu
R2VvbWV0cmljTWVhblRpbWUgPSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKKyAgdmFyIGxvZyA9
IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50c1tpXS50aW1lKTsKKyAgfQorICByZXR1cm4g
TWF0aC5wb3coTWF0aC5FLCBsb2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKK30KKworCisvLyBD
b21wdXRlcyB0aGUgYXZlcmFnZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUsIGlm
IHBlcmNlbnRpbGUgaXMgOTksIHRoaXMgd2lsbCByZXBvcnQgdGhlCisvLyBhdmVyYWdlIG9mIHRo
ZSB3b3JzdCAxJSBvZiB0aGUgc2FtcGxlcy4KK0JlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBl
cmNlbnRpbGUgPSBmdW5jdGlvbihudW1iZXJzLCBwZXJjZW50aWxlKSB7CisgIC8vIERvbid0IGNo
YW5nZSB0aGUgb3JpZ2luYWwgYXJyYXkuCisgIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7Cisg
IAorICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlci4KKyAgbnVtYmVycy5zb3J0KGZ1bmN0aW9u
KGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAgCisgIC8vIE5vdyB0aGUgZWxlbWVudHMgd2Ug
d2FudCBhcmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJheSBz
aXplIHNocmlua3MgdG9vIG11Y2guCisgIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRpbGUg
PSA5OToKKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3aWxs
IHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1vcmUs
CisgIC8vICAgc2luY2UgdGhlbiBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0gMC45
OS4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2lsbCBy
ZW1vdmUgdGhlIHRlbiB3b3JzdC4KKyAgLy8KKyAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMg
YXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgorICB2YXIgbnVtYmVyc1dlV2Fu
dCA9IFtdOworICB2YXIgb3JpZ2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKKyAgd2hpbGUg
KG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQorICAg
IG51bWJlcnNXZVdhbnQucHVzaChudW1iZXJzLnBvcCgpKTsKKyAgCisgIHZhciBzdW0gPSAwOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCisgICAgc3Vt
ICs9IG51bWJlcnNXZVdhbnRbaV07CisgIAorICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVyc1dl
V2FudC5sZW5ndGg7CisgIAorICAvLyBEbyBhIHNhbml0eSBjaGVjay4KKyAgaWYgKG51bWJlcnMu
bGVuZ3RoICYmIHJlc3VsdCA8IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgeworICAgIHRo
cm93ICJTYW5pdHkgY2hlY2sgZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyByZXN1
bHQgKworICAgICAgIiBidXQgd2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1iZXJz
OworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8vIENvbXB1dGVzIHRoZSBnZW9t
ZXRyaWMgbWVhbiBvZiBhIHNldCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KK0JlbmNobWFya1N1
aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7CisgIHZh
ciBsb2cgPSAwOworICB2YXIgaGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChtZWFzdXJlbWVu
dHNbaV0ubGF0ZW5jeSAhPSAwKSB7CisgICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1lbnRz
W2ldLmxhdGVuY3kpOworICAgICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7CisgICAgfQorICB9
CisgIGlmIChoYXNMYXRlbmN5UmVzdWx0KSB7CisgICAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwg
bG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7Cisg
IH0KK30KKworCisvLyBDb252ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGggYXQg
bGVhc3QgdGhyZWUgc2lnbmlmaWNhbnQKKy8vIGRpZ2l0cy4KK0JlbmNobWFya1N1aXRlLkZvcm1h
dFNjb3JlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHZhbHVlID4gMTAwKSB7CisgICAgcmV0
dXJuIHZhbHVlLnRvRml4ZWQoMCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHZhbHVlLnRvUHJl
Y2lzaW9uKDMpOworICB9Cit9CisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdyZSBk
b25lIHJ1bm5pbmcgYSBzaW5nbGUgYmVuY2htYXJrIGluCisvLyB0aGUgYmVuY2htYXJrIHN1aXRl
LiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcmVwb3J0IHByb2dyZXNzLgorQmVuY2htYXJrU3VpdGUu
cHJvdG90eXBlLk5vdGlmeVN0ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy5yZXN1bHRz
LnB1c2gocmVzdWx0KTsKKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVubmVy
Lk5vdGlmeVN0ZXAocmVzdWx0LmJlbmNobWFyay5uYW1lKTsKK30KKworCisvLyBOb3RpZmllcyB0
aGUgcnVubmVyIHRoYXQgd2UncmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhhdAor
Ly8gd2UgaGF2ZSBhIHJlc3VsdCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIgaWYg
bmVlZGVkLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0aW9u
KCkgeworICB2YXIgbWVhbiA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRoaXMu
cmVzdWx0cyk7CisgIHZhciBzY29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKKyAgQmVu
Y2htYXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmUpOworICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5
UmVzdWx0KSB7CisgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlKTsKKyAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1lLCBm
b3JtYXR0ZWQpOworICB9CisgIGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgeworICAg
IHZhciBtZWFuTGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KHRo
aXMucmVzdWx0cyk7CisgICAgaWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKKyAgICAgIHZhciBzY29y
ZUxhdGVuY3kgPSB0aGlzLnJlZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OworICAgICAgQmVuY2ht
YXJrU3VpdGUuc2NvcmVzLnB1c2goc2NvcmVMYXRlbmN5KTsKKyAgICAgIGlmICh0aGlzLnJ1bm5l
ci5Ob3RpZnlSZXN1bHQpIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5jaG1h
cmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCisgICAgICAgIHRoaXMucnVu
bmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVuY3kp
OworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKy8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhh
dCBydW5uaW5nIGEgYmVuY2htYXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgorQmVuY2htYXJrU3Vp
dGUucHJvdG90eXBlLk5vdGlmeUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKKyAgaWYgKHRoaXMu
cnVubmVyLk5vdGlmeUVycm9yKSB7CisgICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhpcy5u
YW1lLCBlcnJvcik7CisgIH0KKyAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKKyAgICB0
aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHRoaXMubmFtZSk7CisgIH0KK30KKworCisvLyBSdW5zIGEg
c2luZ2xlIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRoZQor
Ly8gYXZlcmFnZSB0aW1lIGl0IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCitCZW5j
aG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVuY2ht
YXJrLCBkYXRhKSB7CisgIGZ1bmN0aW9uIE1lYXN1cmUoZGF0YSkgeworICAgIHZhciBlbGFwc2Vk
ID0gMDsKKyAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAKKyAgLy8gUnVuIGVpdGhlciBm
b3IgMSBzZWNvbmQgb3IgZm9yIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQKKyAg
Ly8gYnkgbWluSXRlcmF0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0RldGVy
bWluaXN0aWMuCisgICAgZm9yICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlzdGlj
ID8gCisgICAgICBpPGJlbmNobWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDApOyBp
KyspIHsKKyAgICAgIGJlbmNobWFyay5ydW4oKTsKKyAgICAgIGVsYXBzZWQgPSBuZXcgRGF0ZSgp
IC0gc3RhcnQ7CisgICAgfQorICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIGRhdGEucnVu
cyArPSBpOworICAgICAgZGF0YS5lbGFwc2VkICs9IGVsYXBzZWQ7CisgICAgfQorICB9CisKKyAg
Ly8gU2V0cyB1cCBkYXRhIGluIG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhhc2Uu
CisgIGlmICghYmVuY2htYXJrLmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgeworICAgIGRhdGEg
PSB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKKyAgfQorCisgIGlmIChkYXRhID09IG51bGwpIHsK
KyAgICBNZWFzdXJlKG51bGwpOworICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsK
KyAgfSBlbHNlIHsKKyAgICBNZWFzdXJlKGRhdGEpOworICAgIC8vIElmIHdlJ3ZlIHJ1biB0b28g
ZmV3IGl0ZXJhdGlvbnMsIHdlIGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KKyAgICBpZiAo
ZGF0YS5ydW5zIDwgYmVuY2htYXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOworICAgIHZh
ciB1c2VjID0gKGRhdGEuZWxhcHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOworICAgIHZhciBsYXRl
bmN5U2FtcGxlcyA9IChiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNobWFy
ay5sYXRlbmN5UmVzdWx0KCkgOiBbMF07CisgICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41OworICAg
IHZhciBsYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShsYXRl
bmN5U2FtcGxlcywgcGVyY2VudGlsZSkgKiAxMDAwOworICAgIHRoaXMuTm90aWZ5U3RlcChuZXcg
QmVuY2htYXJrUmVzdWx0KGJlbmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOworICAgIHJldHVybiBu
dWxsOworICB9Cit9CisKKworLy8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1aXRl
LCBidXQgc3RvcHMgYmV0d2VlbiBlYWNoCisvLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0aGUg
c3VpdGUgYW5kIHJldHVybnMgYSBjb250aW51YXRpb24KKy8vIGZ1bmN0aW9uIHdoaWNoIGNhbiBi
ZSBpbnZva2VkIHRvIHJ1biB0aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCisvLyBsYXN0IGJl
bmNobWFyayBoYXMgYmVlbiBleGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KK0JlbmNobWFya1N1
aXRlLnByb3RvdHlwZS5SdW5TdGVwID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIEJlbmNobWFya1N1
aXRlLlJlc2V0Uk5HKCk7CisgIHRoaXMucmVzdWx0cyA9IFtdOworICB0aGlzLnJ1bm5lciA9IHJ1
bm5lcjsKKyAgdmFyIGxlbmd0aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7CisgIHZhciBpbmRl
eCA9IDA7CisgIHZhciBzdWl0ZSA9IHRoaXM7CisgIHZhciBkYXRhOworCisgIC8vIFJ1biB0aGUg
c2V0dXAsIHRoZSBhY3R1YWwgYmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJlZQor
ICAvLyBzZXBhcmF0ZSBzdGVwcyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJldHdl
ZW4gYW55IG9mIHRoZQorICAvLyBzdGVwcy4KKworICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAoKSB7
CisgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICB0cnkgeworICAgICAgICBzdWl0ZS5i
ZW5jaG1hcmtzW2luZGV4XS5TZXR1cCgpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBz
dWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisgICAg
ICByZXR1cm4gUnVuTmV4dEJlbmNobWFyazsKKyAgICB9CisgICAgc3VpdGUuTm90aWZ5UmVzdWx0
KCk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0QmVuY2htYXJr
KCkgeworICAgIHRyeSB7CisgICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJrKHN1
aXRlLmJlbmNobWFya3NbaW5kZXhdLCBkYXRhKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBz
dWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAvLyBJ
ZiBkYXRhIGlzIG51bGwsIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KKyAgICByZXR1
cm4gKGRhdGEgPT0gbnVsbCkgPyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJrKCk7
CisgIH0KKworICBmdW5jdGlvbiBSdW5OZXh0VGVhckRvd24oKSB7CisgICAgdHJ5IHsKKyAgICAg
IHN1aXRlLmJlbmNobWFya3NbaW5kZXgrK10uVGVhckRvd24oKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihlKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0K
KyAgICByZXR1cm4gUnVuTmV4dFNldHVwOworICB9CisKKyAgLy8gU3RhcnQgb3V0IHJ1bm5pbmcg
dGhlIHNldHVwLgorICByZXR1cm4gUnVuTmV4dFNldHVwKCk7Cit9CisKKy8vIENvcHlyaWdodCAy
MDA5IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAg
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKy8vIFRoaXMgYmVuY2htYXJrIGlzIGJhc2VkIG9uIGEgSmF2YVNjcmlwdCBs
b2cgcHJvY2Vzc2luZyBtb2R1bGUgdXNlZAorLy8gYnkgdGhlIFY4IHByb2ZpbGVyIHRvIGdlbmVy
YXRlIGV4ZWN1dGlvbiB0aW1lIHByb2ZpbGVzIGZvciBydW5zIG9mCisvLyBKYXZhU2NyaXB0IGFw
cGxpY2F0aW9ucywgYW5kIGl0IGVmZmVjdGl2ZWx5IG1lYXN1cmVzIGhvdyBmYXN0IHRoZQorLy8g
SmF2YVNjcmlwdCBlbmdpbmUgaXMgYXQgYWxsb2NhdGluZyBub2RlcyBhbmQgcmVjbGFpbWluZyB0
aGUgbWVtb3J5CisvLyB1c2VkIGZvciBvbGQgbm9kZXMuIEJlY2F1c2Ugb2YgdGhlIHdheSBzcGxh
eSB0cmVlcyB3b3JrLCB0aGUgZW5naW5lCisvLyBhbHNvIGhhcyB0byBkZWFsIHdpdGggYSBsb3Qg
b2YgY2hhbmdlcyB0byB0aGUgbGFyZ2UgdHJlZSBvYmplY3QKKy8vIGdyYXBoLgorCit2YXIgU3Bs
YXkgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1NwbGF5JywgWzgxNDkxLCAyNzM5NTE0XSwgWworICBu
ZXcgQmVuY2htYXJrKCJTcGxheSIsIHRydWUsIGZhbHNlLCAKKyAgICBTcGxheVJ1biwgU3BsYXlT
ZXR1cCwgU3BsYXlUZWFyRG93biwgU3BsYXlMYXRlbmN5KQorXSk7CisKKworLy8gQ29uZmlndXJh
dGlvbi4KK3ZhciBrU3BsYXlUcmVlU2l6ZSA9IDgwMDA7Cit2YXIga1NwbGF5VHJlZU1vZGlmaWNh
dGlvbnMgPSA4MDsKK3ZhciBrU3BsYXlUcmVlUGF5bG9hZERlcHRoID0gNTsKKwordmFyIHNwbGF5
VHJlZSA9IG51bGw7Cit2YXIgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSAwLjA7CisKK2Z1bmN0aW9u
IEdlbmVyYXRlUGF5bG9hZFRyZWUoZGVwdGgsIHRhZykgeworICBpZiAoZGVwdGggPT0gMCkgewor
ICAgIHJldHVybiB7CisgICAgICBhcnJheSAgOiBbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgs
IDkgXSwKKyAgICAgIHN0cmluZyA6ICdTdHJpbmcgZm9yIGtleSAnICsgdGFnICsgJyBpbiBsZWFm
IG5vZGUnCisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4geworICAgICAgbGVmdDogIEdl
bmVyYXRlUGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpLAorICAgICAgcmlnaHQ6IEdlbmVyYXRl
UGF5bG9hZFRyZWUoZGVwdGggLSAxLCB0YWcpCisgICAgfTsKKyAgfQorfQorCisKK2Z1bmN0aW9u
IEdlbmVyYXRlS2V5KCkgeworICAvLyBUaGUgYmVuY2htYXJrIGZyYW1ld29yayBndWFyYW50ZWVz
IHRoYXQgTWF0aC5yYW5kb20gaXMKKyAgLy8gZGV0ZXJtaW5pc3RpYzsgc2VlIGJhc2UuanMuCisg
IHJldHVybiBNYXRoLnJhbmRvbSgpOworfQorCit2YXIgc3BsYXlTYW1wbGVzID0gW107CisKK2Z1
bmN0aW9uIFNwbGF5TGF0ZW5jeSgpIHsKKyAgcmV0dXJuIHNwbGF5U2FtcGxlczsKK30KKworZnVu
Y3Rpb24gU3BsYXlVcGRhdGVTdGF0cyh0aW1lKSB7CisgIHZhciBwYXVzZSA9IHRpbWUgLSBzcGxh
eVNhbXBsZVRpbWVTdGFydDsKKyAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSB0aW1lOworICBzcGxh
eVNhbXBsZXMucHVzaChwYXVzZSk7Cit9CisKK2Z1bmN0aW9uIEluc2VydE5ld05vZGUoKSB7Cisg
IC8vIEluc2VydCBuZXcgbm9kZSB3aXRoIGEgdW5pcXVlIGtleS4KKyAgdmFyIGtleTsKKyAgZG8g
eworICAgIGtleSA9IEdlbmVyYXRlS2V5KCk7CisgIH0gd2hpbGUgKHNwbGF5VHJlZS5maW5kKGtl
eSkgIT0gbnVsbCk7CisgIHZhciBwYXlsb2FkID0gR2VuZXJhdGVQYXlsb2FkVHJlZShrU3BsYXlU
cmVlUGF5bG9hZERlcHRoLCBTdHJpbmcoa2V5KSk7CisgIHNwbGF5VHJlZS5pbnNlcnQoa2V5LCBw
YXlsb2FkKTsKKyAgcmV0dXJuIGtleTsKK30KKworCitmdW5jdGlvbiBTcGxheVNldHVwKCkgewor
ICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZSBwZXJmb3JtYW5jZS5ub3cgaGlnaCBy
ZXNvbHV0aW9uIHRpbWVyLgorICAvLyBJZiBub3QsIHRocm93IGV4Y2VwdGlvbiBhbmQgcXVpdC4K
KyAgaWYgKCFwZXJmb3JtYW5jZS5ub3cpIHsKKyAgICB0aHJvdyAiUGVyZm9ybWFuY2VOb3dVbnN1
cHBvcnRlZCI7CisgIH0KKworICBzcGxheVRyZWUgPSBuZXcgU3BsYXlUcmVlKCk7CisgIHNwbGF5
U2FtcGxlVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCkKKyAgZm9yICh2YXIgaSA9IDA7IGkg
PCBrU3BsYXlUcmVlU2l6ZTsgaSsrKSB7CisgICAgSW5zZXJ0TmV3Tm9kZSgpOworICAgIGlmICgo
aSsxKSAlIDIwID09IDE5KSB7CisgICAgICBTcGxheVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5v
dygpKTsKKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBTcGxheVRlYXJEb3duKCkgeworICAv
LyBBbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSB0aGUgbWVtb3J5CisgIC8v
IHVzZWQgYnkgdGhlIHNwbGF5IHRyZWUgbm8gbWF0dGVyIGhvdyB3ZSBleGl0IHRoZQorICAvLyB0
ZWFyIGRvd24gZnVuY3Rpb24uCisgIHZhciBrZXlzID0gc3BsYXlUcmVlLmV4cG9ydEtleXMoKTsK
KyAgc3BsYXlUcmVlID0gbnVsbDsKKworICBzcGxheVNhbXBsZXMgPSBbXTsKKworICAvLyBWZXJp
ZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgdGhlIHJpZ2h0IHNpemUuCisgIHZhciBsZW5ndGgg
PSBrZXlzLmxlbmd0aDsKKyAgaWYgKGxlbmd0aCAhPSBrU3BsYXlUcmVlU2l6ZSkgeworICAgIHRo
cm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBoYXMgd3Jvbmcgc2l6ZSIpOworICB9CisKKyAgLy8g
VmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRyZWUgaGFzIHNvcnRlZCwgdW5pcXVlIGtleXMuCisgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgaWYgKGtleXNbaV0gPj0g
a2V5c1tpICsgMV0pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiU3BsYXkgdHJlZSBub3Qgc29y
dGVkIik7CisgICAgfQorICB9Cit9CisKKworZnVuY3Rpb24gU3BsYXlSdW4oKSB7CisgIC8vIFJl
cGxhY2UgYSBmZXcgbm9kZXMgaW4gdGhlIHNwbGF5IHRyZWUuCisgIGZvciAodmFyIGkgPSAwOyBp
IDwga1NwbGF5VHJlZU1vZGlmaWNhdGlvbnM7IGkrKykgeworICAgIHZhciBrZXkgPSBJbnNlcnRO
ZXdOb2RlKCk7CisgICAgdmFyIGdyZWF0ZXN0ID0gc3BsYXlUcmVlLmZpbmRHcmVhdGVzdExlc3NU
aGFuKGtleSk7CisgICAgaWYgKGdyZWF0ZXN0ID09IG51bGwpIHNwbGF5VHJlZS5yZW1vdmUoa2V5
KTsKKyAgICBlbHNlIHNwbGF5VHJlZS5yZW1vdmUoZ3JlYXRlc3Qua2V5KTsKKyAgfQorICBTcGxh
eVVwZGF0ZVN0YXRzKHBlcmZvcm1hbmNlLm5vdygpKTsKK30KKworCisvKioKKyAqIENvbnN0cnVj
dHMgYSBTcGxheSB0cmVlLiAgQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmluYXJ5
CisgKiBzZWFyY2ggdHJlZSB3aXRoIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHRoYXQgcmVjZW50
bHkgYWNjZXNzZWQKKyAqIGVsZW1lbnRzIGFyZSBxdWljayB0byBhY2Nlc3MgYWdhaW4uIEl0IHBl
cmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMKKyAqIHN1Y2ggYXMgaW5zZXJ0aW9uLCBsb29rLXVwIGFu
ZCByZW1vdmFsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KKyAqCisgKiBAY29uc3RydWN0
b3IKKyAqLworZnVuY3Rpb24gU3BsYXlUcmVlKCkgeworfTsKKworCisvKioKKyAqIFBvaW50ZXIg
dG8gdGhlIHJvb3Qgbm9kZSBvZiB0aGUgdHJlZS4KKyAqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5v
ZGV9CisgKiBAcHJpdmF0ZQorICovCitTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfID0gbnVsbDsK
KworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRyZWUgaXMgZW1wdHku
CisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgeworICByZXR1
cm4gIXRoaXMucm9vdF87Cit9OworCisKKy8qKgorICogSW5zZXJ0cyBhIG5vZGUgaW50byB0aGUg
dHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSBpZgorICogdGhlIHRyZWUgZG9l
cyBub3QgYWxyZWFkeSBjb250YWluIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LiBJZgor
ICogdGhlIHZhbHVlIGlzIGluc2VydGVkLCBpdCBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0cmVl
LgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGluc2VydCBpbnRvIHRoZSB0cmVl
LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4KKyAq
LworU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7Cisg
IGlmICh0aGlzLmlzRW1wdHkoKSkgeworICAgIHRoaXMucm9vdF8gPSBuZXcgU3BsYXlUcmVlLk5v
ZGUoa2V5LCB2YWx1ZSk7CisgICAgcmV0dXJuOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBrZXkg
dG8gbW92ZSB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBmb3IKKyAgLy8gdGhlIGtl
eSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAgaWYgKHRo
aXMucm9vdF8ua2V5ID09IGtleSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbm9kZSA9IG5l
dyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKKyAgaWYgKGtleSA+IHRoaXMucm9vdF8ua2V5
KSB7CisgICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLnJpZ2h0ID0gdGhpcy5y
b290Xy5yaWdodDsKKyAgICB0aGlzLnJvb3RfLnJpZ2h0ID0gbnVsbDsKKyAgfSBlbHNlIHsKKyAg
ICBub2RlLnJpZ2h0ID0gdGhpcy5yb290XzsKKyAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3RfLmxl
ZnQ7CisgICAgdGhpcy5yb290Xy5sZWZ0ID0gbnVsbDsKKyAgfQorICB0aGlzLnJvb3RfID0gbm9k
ZTsKK307CisKKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5
IGZyb20gdGhlIHRyZWUgaWYgdGhlIHRyZWUKKyAqIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRoaXMg
a2V5LiBUaGUgcmVtb3ZlZCBub2RlIGlzIHJldHVybmVkLiBJZiB0aGUKKyAqIGtleSBpcyBub3Qg
Zm91bmQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGtl
eSBLZXkgdG8gZmluZCBhbmQgcmVtb3ZlIGZyb20gdGhlIHRyZWUuCisgKiBAcmV0dXJuIHtTcGxh
eVRyZWUuTm9kZX0gVGhlIHJlbW92ZWQgbm9kZS4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5y
ZW1vdmUgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgdGhy
b3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkpOworICB9CisgIHRoaXMuc3BsYXlfKGtl
eSk7CisgIGlmICh0aGlzLnJvb3RfLmtleSAhPSBrZXkpIHsKKyAgICB0aHJvdyBFcnJvcignS2V5
IG5vdCBmb3VuZDogJyArIGtleSk7CisgIH0KKyAgdmFyIHJlbW92ZWQgPSB0aGlzLnJvb3RfOwor
ICBpZiAoIXRoaXMucm9vdF8ubGVmdCkgeworICAgIHRoaXMucm9vdF8gPSB0aGlzLnJvb3RfLnJp
Z2h0OworICB9IGVsc2UgeworICAgIHZhciByaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7CisgICAg
dGhpcy5yb290XyA9IHRoaXMucm9vdF8ubGVmdDsKKyAgICAvLyBTcGxheSB0byBtYWtlIHN1cmUg
dGhhdCB0aGUgbmV3IHJvb3QgaGFzIGFuIGVtcHR5IHJpZ2h0IGNoaWxkLgorICAgIHRoaXMuc3Bs
YXlfKGtleSk7CisgICAgLy8gSW5zZXJ0IHRoZSBvcmlnaW5hbCByaWdodCBjaGlsZCBhcyB0aGUg
cmlnaHQgY2hpbGQgb2YgdGhlIG5ldworICAgIC8vIHJvb3QuCisgICAgdGhpcy5yb290Xy5yaWdo
dCA9IHJpZ2h0OworICB9CisgIHJldHVybiByZW1vdmVkOworfTsKKworCisvKioKKyAqIFJldHVy
bnMgdGhlIG5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgdGhlIHRyZWUg
ZG9lc24ndCBjb250YWluCisgKiBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KKyAqCisg
KiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGluIHRoZSB0cmVlLgorICogQHJldHVy
biB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBzcGVjaWZpZWQga2V5LgorICovCitT
cGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMuaXNF
bXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5zcGxheV8oa2V5KTsKKyAg
cmV0dXJuIHRoaXMucm9vdF8ua2V5ID09IGtleSA/IHRoaXMucm9vdF8gOiBudWxsOworfTsKKwor
CisvKioKKyAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0aGUgbWF4aW11
bSBrZXkgdmFsdWUuCisgKi8KK1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heCA9IGZ1bmN0aW9u
KG9wdF9zdGFydE5vZGUpIHsKKyAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CisgICAgcmV0dXJuIG51
bGw7CisgIH0KKyAgdmFyIGN1cnJlbnQgPSBvcHRfc3RhcnROb2RlIHx8IHRoaXMucm9vdF87Cisg
IHdoaWxlIChjdXJyZW50LnJpZ2h0KSB7CisgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7Cisg
IH0KKyAgcmV0dXJuIGN1cnJlbnQ7Cit9OworCisKKy8qKgorICogQHJldHVybiB7U3BsYXlUcmVl
Lk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZSB0aGF0CisgKiAgICAgaXMg
bGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IHZhbHVlLgorICovCitTcGxheVRyZWUucHJvdG90
eXBlLmZpbmRHcmVhdGVzdExlc3NUaGFuID0gZnVuY3Rpb24oa2V5KSB7CisgIGlmICh0aGlzLmlz
RW1wdHkoKSkgeworICAgIHJldHVybiBudWxsOworICB9CisgIC8vIFNwbGF5IG9uIHRoZSBrZXkg
dG8gbW92ZSB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGxhc3QKKyAgLy8gbm9k
ZSBvbiB0aGUgc2VhcmNoIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4KKyAgdGhpcy5zcGxh
eV8oa2V5KTsKKyAgLy8gTm93IHRoZSByZXN1bHQgaXMgZWl0aGVyIHRoZSByb290IG5vZGUgb3Ig
dGhlIGdyZWF0ZXN0IG5vZGUgaW4KKyAgLy8gdGhlIGxlZnQgc3VidHJlZS4KKyAgaWYgKHRoaXMu
cm9vdF8ua2V5IDwga2V5KSB7CisgICAgcmV0dXJuIHRoaXMucm9vdF87CisgIH0gZWxzZSBpZiAo
dGhpcy5yb290Xy5sZWZ0KSB7CisgICAgcmV0dXJuIHRoaXMuZmluZE1heCh0aGlzLnJvb3RfLmxl
ZnQpOworICB9IGVsc2UgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisKKy8qKgorICog
QHJldHVybiB7QXJyYXk8Kj59IEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIG9mIHRy
ZWUncyBub2Rlcy4KKyAqLworU3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzID0gZnVuY3Rp
b24oKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgaWYgKCF0aGlzLmlzRW1wdHkoKSkgeworICAg
IHRoaXMucm9vdF8udHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpIHsgcmVzdWx0LnB1c2gobm9kZS5r
ZXkpOyB9KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfTsKKworCisvKioKKyAqIFBlcmZvcm0g
dGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUgd2l0
aAorICogdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9kZSBo
YXMgdGhlIGdpdmVuCisgKiBrZXksIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRoIGlz
IG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlCisgKiB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlmaWVk
IHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgorICogIlNlbGYtYWRqdXN0aW5nIEJp
bmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbgorICoKKyAqIEBwYXJhbSB7
bnVtYmVyfSBrZXkgS2V5IHRvIHNwbGF5IHRoZSB0cmVlIG9uLgorICogQHByaXZhdGUKKyAqLwor
U3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheV8gPSBmdW5jdGlvbihrZXkpIHsKKyAgaWYgKHRoaXMu
aXNFbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIENyZWF0ZSBhIGR1bW15IG5vZGUu
ICBUaGUgdXNlIG9mIHRoZSBkdW1teSBub2RlIGlzIGEgYml0CisgIC8vIGNvdW50ZXItaW50dWl0
aXZlOiBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCisgIC8vIHRo
ZSBMIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBsZWZ0IGNoaWxkIG9mIHRoZSBkdW1teSBu
b2RlCisgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2luZyBh
IGR1bW15IG5vZGUsIGxlZnQKKyAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVzIGFu
ZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgorICB2YXIgZHVtbXksIGxlZnQsIHJpZ2h0OworICBk
dW1teSA9IGxlZnQgPSByaWdodCA9IG5ldyBTcGxheVRyZWUuTm9kZShudWxsLCBudWxsKTsKKyAg
dmFyIGN1cnJlbnQgPSB0aGlzLnJvb3RfOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChrZXkg
PCBjdXJyZW50LmtleSkgeworICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsKKyAgICAgICAgYnJl
YWs7CisgICAgICB9CisgICAgICBpZiAoa2V5IDwgY3VycmVudC5sZWZ0LmtleSkgeworICAgICAg
ICAvLyBSb3RhdGUgcmlnaHQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LmxlZnQ7CisgICAg
ICAgIGN1cnJlbnQubGVmdCA9IHRtcC5yaWdodDsKKyAgICAgICAgdG1wLnJpZ2h0ID0gY3VycmVu
dDsKKyAgICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LmxlZnQpIHsK
KyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gTGluayByaWdo
dC4KKyAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OworICAgICAgcmlnaHQgPSBjdXJyZW50Owor
ICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDsKKyAgICB9IGVsc2UgaWYgKGtleSA+IGN1cnJl
bnQua2V5KSB7CisgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICB9CisgICAgICBpZiAoa2V5ID4gY3VycmVudC5yaWdodC5rZXkpIHsKKyAgICAgICAgLy8g
Um90YXRlIGxlZnQuCisgICAgICAgIHZhciB0bXAgPSBjdXJyZW50LnJpZ2h0OworICAgICAgICBj
dXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CisgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsKKyAg
ICAgICAgY3VycmVudCA9IHRtcDsKKyAgICAgICAgaWYgKCFjdXJyZW50LnJpZ2h0KSB7CisgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIExpbmsgbGVmdC4KKyAg
ICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OworICAgICAgbGVmdCA9IGN1cnJlbnQ7CisgICAgICBj
dXJyZW50ID0gY3VycmVudC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7CisgICAg
fQorICB9CisgIC8vIEFzc2VtYmxlLgorICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0OworICBy
aWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKKyAgY3VycmVudC5sZWZ0ID0gZHVtbXkucmlnaHQ7
CisgIGN1cnJlbnQucmlnaHQgPSBkdW1teS5sZWZ0OworICB0aGlzLnJvb3RfID0gY3VycmVudDsK
K307CisKKworLyoqCisgKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZSBub2RlLgorICoKKyAqIEBw
YXJhbSB7bnVtYmVyfSBrZXkgS2V5LgorICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZS4KKyAqLwor
U3BsYXlUcmVlLk5vZGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgIHRoaXMua2V5ID0ga2V5
OworICB0aGlzLnZhbHVlID0gdmFsdWU7Cit9OworCisKKy8qKgorICogQHR5cGUge1NwbGF5VHJl
ZS5Ob2RlfQorICovCitTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdCA9IG51bGw7CisKKwor
LyoqCisgKiBAdHlwZSB7U3BsYXlUcmVlLk5vZGV9CisgKi8KK1NwbGF5VHJlZS5Ob2RlLnByb3Rv
dHlwZS5yaWdodCA9IG51bGw7CisKKworLyoqCisgKiBQZXJmb3JtcyBhbiBvcmRlcmVkIHRyYXZl
cnNhbCBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBhdAorICogdGhpcyBTcGxheVRyZWUuTm9kZS4K
KyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFNwbGF5VHJlZS5Ob2RlKX0gZiBWaXNpdG9yIGZ1bmN0
aW9uLgorICogQHByaXZhdGUKKyAqLworU3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnRyYXZlcnNl
XyA9IGZ1bmN0aW9uKGYpIHsKKyAgdmFyIGN1cnJlbnQgPSB0aGlzOworICB3aGlsZSAoY3VycmVu
dCkgeworICAgIHZhciBsZWZ0ID0gY3VycmVudC5sZWZ0OworICAgIGlmIChsZWZ0KSBsZWZ0LnRy
YXZlcnNlXyhmKTsKKyAgICBmKGN1cnJlbnQpOworICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0
OworICB9Cit9OworCitmdW5jdGlvbiByZXBvcnQobXNnKQoreworfQorCitmdW5jdGlvbiBzdGFy
dChyZXN1bHRPYmplY3QpCit7CisgICAgU3BsYXlTZXR1cCgpOworICAgIHZhciBzYW1wbGVzID0g
W107CisgICAgdmFyIGJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBTcGxheVJ1bigpOworICAgICAgICB2YXIg
YWZ0ZXIgPSBwZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAgc2FtcGxlcy5wdXNoKGFmdGVyIC0g
YmVmb3JlKTsKKyAgICAgICAgYmVmb3JlID0gYWZ0ZXI7CisgICAgfQorICAgIFNwbGF5VGVhckRv
d24oKTsKKyAgICAKKyAgICB2YXIgc2NhdHRlckRhdGEgPSBbXTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHNhbXBsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHNjYXR0ZXJEYXRhLnB1c2goe3g6
IGkgKyAxLCB5OiBzYW1wbGVzW2ldfSk7CisgICAgCisgICAgcmVwb3J0KCJKZXRTdHJlYW0tbGlr
ZSBMYXRlbmN5IFNjb3JlOiAiICsgTWF0aC5yb3VuZCg0MDAwIC8gQmVuY2htYXJrU3VpdGUuQXZl
cmFnZUFib3ZlUGVyY2VudGlsZShzYW1wbGVzLCA5OS41KSkpOworICAgIAorICAgIHZhciBzdW1P
ZlNxdWFyZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2FtcGxlcy5sZW5ndGg7ICsr
aSkKKyAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHNhbXBsZXNbaV0gKiBzYW1wbGVzW2ldOworICAg
IHJlcG9ydCgiT2N0YW5lLWxpa2UgTGF0ZW5jeSBTY29yZTogIiArIE1hdGgucm91bmQoMjczOTUu
MTQgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gc2FtcGxlcy5sZW5ndGgpKSk7CisgICAgCisg
ICAgZm9yICh2YXIgcGVyY2VudGlsZSBvZiBbOTkuNSwgOTUsIDg3LCA3NSwgNTAsIDBdKQorICAg
ICAgICByZXBvcnQoIkF2ZXJhZ2UgYWJvdmUgIiArIHBlcmNlbnRpbGUgKyAiJTogIiArIEJlbmNo
bWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUoc2FtcGxlcywgcGVyY2VudGlsZSkpOwor
ICAgIAorICAgIHJlc3VsdE9iamVjdC52YWx1ZSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUoc2FtcGxlcywgOTkuNSk7Cit9CisKK3N0YXJ0KGFyZ3VtZW50c1swXSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMDQgQEAK
KzIwMTctMTItMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBH
QyBjb25zdHJhaW50IHNvbHZpbmcgc2hvdWxkIGJlIHBhcmFsbGVsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5MzQKKworICAgICAgICBSZXZpZXdl
ZCBieSBKRiBCYXN0aWVuLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJs
ZSB0byBkbyBjb25zdHJhaW50IHNvbHZpbmcgaW4gcGFyYWxsZWwuIFRoaXMgbG9va3MgbGlrZSBh
IDElIFNwZWVkb21ldGVyCisgICAgICAgIHNwZWVkLXVwLiBJdCdzIG1vcmUgdGhhbiAxJSBvbiB0
cnVuay1TcGVlZG9tZXRlci4KKyAgICAgICAgCisgICAgICAgIFRoZSBjb25zdHJhaW50IHNvbHZl
ciBzdXBwb3J0cyBydW5uaW5nIGNvbnN0cmFpbnRzIGluIHBhcmFsbGVsIGluIHR3byBkaWZmZXJl
bnQgd2F5czoKKyAgICAgICAgCisgICAgICAgIC0gUnVuIG11bHRpcGxlIGNvbnN0cmFpbnRzIGlu
IHBhcmFsbGVsIHRvIGVhY2ggb3RoZXIuIFRoaXMgb25seSB3b3JrcyBmb3IgY29uc3RyYWludHMg
dGhhdCBjYW4KKyAgICAgICAgICB0b2xlcmF0ZSBvdGhlciBjb25zdHJhaW50cyBydW5uaW5nIGNv
bmN1cnJlbnRseSB0byB0aGVtIChjb25zdHJhaW50LmNvbmN1cnJlbmN5KCkgPT0KKyAgICAgICAg
ICBDb25zdHJhaW50Q29uY3VycmVuY3k6OkNvbmN1cnJlbnQpLiBUaGlzIGlzIHRoZSBtb3N0IGJh
c2ljIGtpbmQgb2YgcGFyYWxsZWxpc20gdGhhdCB0aGUKKyAgICAgICAgICBjb25zdHJhaW50IHNv
bHZlciBzdXBwb3J0cy4gQWxsIGNvbnN0cmFpbnRzIGV4Y2VwdCB0aGUgSlNDIFNQSSBjb25zdHJh
aW50cyBhcmUgY29uY3VycmVudC4gV2UKKyAgICAgICAgICBjb3VsZCBwcm9iYWJseSBtYWtlIHRo
ZW0gY29uY3VycmVudCwgYnV0IEknbSBwbGF5aW5nIGl0IHNhZmUgZm9yIG5vdy4KKyAgICAgICAg
CisgICAgICAgIC0gQSBjb25zdHJhaW50IGNhbiBjcmVhdGUgcGFyYWxsZWwgd29yayBmb3IgaXRz
ZWxmLCB3aGljaCB0aGUgY29uc3RyYWludCBzb2x2ZXIgd2lsbCBpbnRlcmxlYXZlCisgICAgICAg
ICAgd2l0aCBvdGhlciBzdHVmZi4gQSBjb25zdHJhaW50IGNhbiByZXBvcnQgdGhhdCBpdCBoYXMg
cGFyYWxsZWwgd29yayBieSByZXR1cm5pbmcKKyAgICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxp
c206OlBhcmFsbGVsIGZyb20gaXRzIGV4ZWN1dGVJbXBsKCkgZnVuY3Rpb24uIFRoZW4gdGhlIHNv
bHZlciB3aWxsIGFsbG93IHRoYXQKKyAgICAgICAgICBjb25zdHJhaW50J3MgZG9QYXJhbGxlbFdv
cmtJbXBsKCkgZnVuY3Rpb24gdG8gcnVuIG9uIGFzIG1hbnkgR0MgbWFya2VyIHRocmVhZHMgYXMg
YXJlIGF2YWlsYWJsZSwKKyAgICAgICAgICBmb3IgYXMgbG9uZyBhcyB0aGF0IGZ1bmN0aW9uIHdh
bnRzIHRvIHJ1bi4KKyAgICAgICAgCisgICAgICAgIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGhhdmUg
YSBub24tY29uY3VycmVudCBjb25zdHJhaW50IHRoYXQgY3JlYXRlcyBwYXJhbGxlbCB3b3JrLgor
ICAgICAgICAKKyAgICAgICAgVGhlIHBhcmFsbGVsaXNtIGlzIGltcGxlbWVudGVkIGluIHRlcm1z
IG9mIHRoZSBleGlzdGluZyBHQyBtYXJrZXIgdGhyZWFkcy4gVGhpcyB0dXJucyBvdXQgdG8gYmUK
KyAgICAgICAgbW9zdCBuYXR1cmFsIGZvciB0d28gcmVhc29uczoKKyAgICAgICAgCisgICAgICAg
IC0gTm8gbmVlZCB0byBzdGFydCBhbnkgb3RoZXIgdGhyZWFkcy4KKyAgICAgICAgCisgICAgICAg
IC0gVGhlIGNvbnN0cmFpbnRzIGFsbCB3YW50IHRvIGJlIHBhc3NlZCBhIFNsb3RWaXNpdG9yLiBS
dW5uaW5nIG9uIHRoZSBtYXJrZXIgdGhyZWFkcyBtZWFucyBoYXZpbmcKKyAgICAgICAgICBhY2Nl
c3MgdG8gdGhvc2UgdGhyZWFkcycgU2xvdFZpc2l0b3JzLiBBbHNvLCBpdCBtZWFucyBsZXNzIGxv
YWQgYmFsYW5jaW5nLiBUaGUgc29sdmVyIHdpbGwKKyAgICAgICAgICBjcmVhdGUgd29yayBvbiBl
YWNoIG1hcmtpbmcgdGhyZWFkJ3MgU2xvdFZpc2l0b3IuIFdoZW4gdGhlIHNvbHZlciBpcyBkb25l
ICJzdGVhbGluZyIgYSBtYXJrZXIKKyAgICAgICAgICB0aHJlYWQsIHRoYXQgdGhyZWFkIHdpbGwg
aGF2ZSB3b3JrIGl0IGNhbiBzdGFydCBkb2luZyBpbW1lZGlhdGVseS4gQmVmb3JlIHRoaXMgY2hh
bmdlLCB3ZSBoYWQgdG8KKyAgICAgICAgICBjb250cmlidXRlIHRoZSB3b3JrIGZvdW5kIGJ5IHRo
ZSBjb25zdHJhaW50IHNvbHZlciB0byB0aGUgZ2xvYmFsIHdvcmtsaXN0IHNvIHRoYXQgaXQgY291
bGQgYmUKKyAgICAgICAgICBkaXN0cmlidXRlZCB0byB0aGUgbWFya2VyIHRocmVhZHMgYnkgbG9h
ZCBiYWxhbmNpbmcuIFRoaXMgY2hhbmdlIHByb2JhYmx5IGhlbHBzIHRvIGF2b2lkIHRoYXQKKyAg
ICAgICAgICBsb2FkIGJhbGFuY2luZyBzdGVwLgorICAgICAgICAKKyAgICAgICAgQSBsb3Qgb2Yg
dGhpcyBjaGFuZ2UgaXMgYWJvdXQgbWFraW5nIGl0IGVhc3kgdG8gaXRlcmF0ZSBHQyBkYXRhIHN0
cnVjdHVyZXMgaW4gcGFyYWxsZWwuIFRoaXMKKyAgICAgICAgY2hhbmdlIG1ha2VzIGFsbW9zdCBh
bGwgY29uc3RyYWludHMgcGFyYWxsZWwtZW5hYmxlZCwgYnV0IG9ubHkgdGhlIERPTSdzIG91dHB1
dCBjb25zdHJhaW50IHVzZXMKKyAgICAgICAgdGhlIHBhcmFsbGVsIHdvcmsgQVBJLiBUaGF0IGNv
bnN0cmFpbnQgaXRlcmF0ZXMgdGhlIG1hcmtlZCBjZWxscyBpbiB0d28gc3Vic3BhY2VzLiBUaGlz
IGNoYW5nZQorICAgICAgICBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8gY29tcG9zZSBwYXJhbGxlbCBp
dGVyYXRvcnMgb3ZlciBzdWJzcGFjZXMsIGFsbG9jYXRvcnMsIGJsb2NrcywgYW5kIGNlbGxzLgor
ICAgICAgICBUaGUgbWFya2VkIGNlbGwgcGFyYWxsZWwgaXRlcmF0b3IgaXMgY29tcG9zZWQgb3V0
IG9mIHBhcmFsbGVsIGl0ZXJhdG9ycyBmb3IgdGhlIG90aGVycy4gQSBwYXJhbGxlbAorICAgICAg
ICBpdGVyYXRvciBpcyBqdXN0IGFuIGl0ZXJhdG9yIHRoYXQgY2FuIGRvIGFuIGF0b21pYyBuZXh0
KCkgdmVyeSBxdWlja2x5LiBXZSBhYnN0cmFjdCB0aGVtIHVzaW5nCisgICAgICAgIFJlZlB0cjxT
aGFyZWRUYXNrPC4uLigpPj4sIHdoZXJlIC4uLiBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRo
ZSBpdGVyYXRvci4gV2Uga25vdyBpdCdzIGRvbmUKKyAgICAgICAgd2hlbiBpdCByZXR1cm5zIGEg
ZmFsc2lzaCB2ZXJzaW9uIG9mIC4uLiAoaW4gdGhlIGN1cnJlbnQgY29kZSwgdGhhdCdzIGFsd2F5
cyBhIHBvaW50ZXIgdHlwZSwgc28KKyAgICAgICAgZG9uZSBpcyBpbmRpY2F0ZWQgYnkgbnVsbCku
CisgICAgICAgIAorICAgICAgICAqIEFQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0ZS5jcHA6
CisgICAgICAgIChKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAg
KiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbToKKyAgICAgICAgKHNjYW5FeHRlcm5hbE9iamVjdEdy
YXBoKToKKyAgICAgICAgKHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQpOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zIGNvbnN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vha2x5
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKToK
KyAgICAgICAgKEpTQzo6c2hvdWxkTWFya1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpk
ZXRlcm1pbmVMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAg
ICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6Cisg
ICAgICAgICogaGVhcC9Db25zdHJhaW50UGFyYWxsZWxpc20uaDogQWRkZWQuCisgICAgICAgIChX
VEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQp
OgorICAgICAgICAoSlNDOjpIZWFwOjpydW5GaXhwb2ludFBoYXNlKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6c3RvcFRoZVBlcmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlc3VtZVRoZVBl
cmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENvcmVDb25zdHJhaW50cyk6CisgICAg
ICAgIChKU0M6OkhlYXA6OnNldEJvbnVzVmlzaXRvclRhc2spOgorICAgICAgICAoSlNDOjpIZWFw
OjpydW5UYXNrSW5QYXJhbGxlbCk6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hTbG90Vmlz
aXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6Okhl
YXA6OndvcmxkSXNSdW5uaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRnVuY3Rp
b25JblBhcmFsbGVsKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkhlYXA6OndvcmxkSXNTdG9wcGVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNN
YXJrZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCk6CisgICAgICAgIChKU0M6
OkhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSk6IERlbGV0ZWQuCisgICAgICAgICog
aGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90
QnVpbGRlcjo6YXBwZW5kTm9kZSk6CisgICAgICAgICogaGVhcC9MYXJnZUFsbG9jYXRpb24uaDoK
KyAgICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6
OkxhcmdlQWxsb2NhdGlvbjo6aXNNYXJrZWRDb25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAg
ICAqIGhlYXAvTG9ja0R1cmluZ01hcmtpbmcuaDoKKyAgICAgICAgKEpTQzo6bG9ja0R1cmluZ01h
cmtpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3VyY2UpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5o
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRUb01hcmspOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJl
TWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01h
cmtlZFNwYWNlLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphY3RpdmVXZWFrU2V0c0Jl
Z2luKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFjdGl2ZVdlYWtTZXRzRW5kKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Om5ld0FjdGl2ZVdlYWtTZXRzQmVnaW4pOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6bmV3QWN0aXZlV2Vha1NldHNFbmQpOgorICAgICAgICAqIGhl
YXAvTWFya2luZ0NvbnN0cmFpbnQuY3BwOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWlu
dDo6TWFya2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6
ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50OjpxdWlja1dvcmtFc3Rp
bWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50Ojp3b3JrRXN0aW1hdGUpOgor
ICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZG9QYXJhbGxlbFdvcmspOgorICAgICAg
ICAoSlNDOjpNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrKToKKyAgICAgICAg
KEpTQzo6TWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxXb3JrSW1wbCk6CisgICAgICAgIChK
U0M6Ok1hcmtpbmdDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKToKKyAgICAgICAg
KiBoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50OjpsYXN0RXhlY3V0ZVBhcmFsbGVsaXNtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0NvbnN0cmFpbnQ6OnBhcmFsbGVsaXNtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0Nv
bnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnQ6OndvcmtFc3RpbWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9N
YXJraW5nQ29uc3RyYWludFNldC5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50
U2V0OjpNYXJraW5nQ29uc3RyYWludFNldCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0
ZUNvbnZlcmdlbmNlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4ZWN1
dGVDb252ZXJnZW5jZUltcGwpOgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6
ZXhlY3V0ZUFsbCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U2V0OjpFeGVjdXRp
b25Db250ZXh0OjpFeGVjdXRpb25Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFy
a2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1dGlvbkNvbnRleHQ6OmRpZFZpc2l0U29tZXRoaW5nIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTZXQ6OkV4ZWN1
dGlvbkNvbnRleHQ6OnNob3VsZFRpbWVPdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6ZHJhaW4pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXJraW5nQ29uc3RyYWludFNldDo6RXhlY3V0aW9uQ29udGV4dDo6
ZGlkRXhlY3V0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJh
aW50U2V0OjpFeGVjdXRpb25Db250ZXh0OjpleGVjdXRlKTogRGVsZXRlZC4KKyAgICAgICAgKCk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5oOgorICAgICAg
ICAqIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyKToKKyAg
ICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6On5NYXJraW5nQ29uc3RyYWludFNv
bHZlcik6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRWaXNpdFNv
bWV0aGluZyBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpl
eGVjdXRlKToKKyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRyYWluKToK
KyAgICAgICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmNvbnZlcmdlKToKKyAgICAg
ICAgKEpTQzo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OnJ1bkV4ZWN1dGlvblRocmVhZCk6Cisg
ICAgICAgIChKU0M6Ok1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRFeGVjdXRlKToKKyAgICAg
ICAgKiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmg6IEFkZGVkLgorICAgICAgICAqIGhl
YXAvT3BhcXVlUm9vdFNldC5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvUGFyYWxsZWxTb3Vy
Y2VBZGFwdGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQYXJhbGxlbFNvdXJjZUFkYXB0ZXI6
OlBhcmFsbGVsU291cmNlQWRhcHRlcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVBhcmFsbGVsU291
cmNlQWRhcHRlcik6CisgICAgICAgICogaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6U2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQpOgorICAgICAgICAoSlNDOjpTaW1wbGVNYXJraW5nQ29uc3RyYWludDo6
flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KToKKyAgICAgICAgKEpTQzo6U2ltcGxlTWFya2luZ0Nv
bnN0cmFpbnQ6OnF1aWNrV29ya0VzdGltYXRlKToKKyAgICAgICAgKEpTQzo6U2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQ6OmV4ZWN1dGVJbXBsKToKKyAgICAgICAgKiBoZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRv
TWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dXBkYXRlTXV0YXRvcklzU3RvcHBlZCk6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjptdXRhdG9ySXNTdG9wcGVkSXNVcFRvRGF0ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
Omhhc1dvcmspOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluSW5QYXJhbGxlbFBhc3NpdmVseSk6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24pOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWVyZ2VJZk5lY2Vzc2FyeSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9m
aXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVl
Um9vdHMpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAg
KiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1
ZVJvb3QgY29uc3QpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dm0pOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6dm0gY29uc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuY3Bw
OgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UpOgorICAg
ICAgICAoSlNDOjpTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKToK
KyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAgICogaGVhcC9TdWJzcGFjZUlubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxl
bCk6CisgICAgICAgICogaGVhcC9WaXNpdENvdW50ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OlZpc2l0Q291bnRlcjo6VmlzaXRDb3VudGVyKToKKyAgICAgICAgKEpTQzo6VmlzaXRDb3VudGVy
Ojp2aXNpdENvdW50IGNvbnN0KToKKyAgICAgICAgKiBoZWFwL1Zpc2l0aW5nVGltZW91dC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vh
a0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNDaGVhcER1cmluZ0dDKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjptYXJrSWZDaGVhcCk6CisKIDIwMTctMTItMDQgIERhdmlkIFF1ZXNh
ZGEgIDxkYXZpZF9xdWVzYWRhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBjbGFzcyBmb3Ig
cGFyc2luZyBhcHBsaWNhdGlvbiBtYW5pZmVzdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDEzICs1MDAsMTYgQEAgaGVhcC9KSVRTdHViUm91
dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcAogaGVhcC9NYWNoaW5lU3RhY2tN
YXJrZXIuY3BwCiBoZWFwL01hcmtTdGFjay5jcHAKK2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0
cmFpbnQuY3BwCiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKIGhlYXAvTWFya2VkQmxvY2suY3Bw
CiBoZWFwL01hcmtlZFNwYWNlLmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCitoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNw
cAogaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNwcAogaGVhcC9NdXRhdG9yU3RhdGUuY3BwCitoZWFw
L1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9TbG90VmlzaXRvci5jcHAKIGhlYXAv
U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3RvY2hhc3RpY1NwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFy
a2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFya2luZ0NvbnN0cmFpbnRQcml2YXRlLmNwcAkocmV2aXNpb24gMjI1NTE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hcmtpbmdDb25zdHJhaW50UHJpdmF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUNh
c3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFp
bnQuaCIKLSNpbmNsdWRlICJWaXNpdGluZ1RpbWVvdXQuaCIKKyNpbmNsdWRlICJTaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC03MiwxMSArNzEs
MTEgQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAgIC8vIGVs
c2UgZ2V0cyBtYXJrZWQuCiAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSA9IENv
bnN0cmFpbnRWb2xhdGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmc7CiAgICAgCi0gICAgYXV0byBjb25z
dHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludD4oCisgICAgYXV0byBj
b25zdHJhaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxTaW1wbGVNYXJraW5nQ29uc3RyYWludD4oCiAg
ICAgICAgIHRvQ1N0cmluZygiQW1jIiwgY29uc3RyYWludEluZGV4LCAiKCIsIFJhd1BvaW50ZXIo
Yml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwgIikiKSwKICAgICAgICAg
dG9DU3RyaW5nKCJBUEkgTWFya2luZyBDb25zdHJhaW50ICMiLCBjb25zdHJhaW50SW5kZXgsICIg
KCIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjb25zdHJhaW50Q2FsbGJhY2spKSwg
IiwgIiwgUmF3UG9pbnRlcih1c2VyRGF0YSksICIpIiksCiAgICAgICAgIFtjb25zdHJhaW50Q2Fs
bGJhY2ssIHVzZXJEYXRhXQotICAgICAgICAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25z
dCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
IHsKICAgICAgICAgICAgIE1hcmtlciBtYXJrZXI7CiAgICAgICAgICAgICBtYXJrZXIuSXNNYXJr
ZWQgPSBpc01hcmtlZDsKICAgICAgICAgICAgIG1hcmtlci5NYXJrID0gbWFyazsKQEAgLTg0LDcg
KzgzLDggQEAgdm9pZCBKU0NvbnRleHRHcm91cEFkZE1hcmtpbmdDb25zdHJhaW50KAogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjb25zdHJhaW50Q2FsbGJhY2soJm1hcmtlciwgdXNlckRhdGEp
OwogICAgICAgICB9LAotICAgICAgICB2b2xhdGlsaXR5KTsKKyAgICAgICAgdm9sYXRpbGl0eSwK
KyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsKTsKICAgICAKICAgICB2
bS5oZWFwLmFkZE1hcmtpbmdDb25zdHJhaW50KFdURk1vdmUoY29uc3RyYWludCkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2
aXNpb24gMjI1NTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNo
aW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsOSArMjgzLDggQEAgc3RhdGljIHZvaWQgc2Nh
bkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOgogICAgICAgICB3aGlsZSAoIXN0YWNrLmlzRW1wdHko
KSkgewogICAgICAgICAgICAgdm9pZCogbmV4dFJvb3QgPSBzdGFjay5sYXN0KCk7CiAgICAgICAg
ICAgICBzdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBpZiAodmlzaXRvci5jb250YWlu
c09wYXF1ZVJvb3RUcmlTdGF0ZShuZXh0Um9vdCkgPT0gVHJ1ZVRyaVN0YXRlKQorICAgICAgICAg
ICAgaWYgKCF2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4dFJvb3QpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KTsK
IAogICAgICAgICAgICAgYXV0byBhcHBlbmRPd25lZE9iamVjdHMgPSBbJl0gewogICAgICAgICAg
ICAgICAgIE5TTWFwVGFibGUgKm93bmVkT2JqZWN0cyA9IFtleHRlcm5hbE9iamVjdEdyYXBoIG9i
amVjdEZvcktleTpzdGF0aWNfY2FzdDxpZD4obmV4dFJvb3QpXTsKQEAgLTMyNyw4ICszMjYsNiBA
QCB2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlNDOjpWTSYgCiAgICAgICAgIH0KICAg
ICAgICAgW2V4dGVybmFsUmVtZW1iZXJlZFNldCByZW1vdmVBbGxPYmplY3RzXTsKICAgICB9Ci0K
LSAgICB2aXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKIH0KIAogI2VuZGlmIC8vIEpTQ19PQkpD
X0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjI1NTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNiBAQAogCQkw
RjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQw
MDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0Ey
MUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2
IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgfTsKIAkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OwotCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5MjFF
MTc3QTZGMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxRkIzOTYxRTFBRjdFMTAwQTlCRTUwIC8q
IERGR1BsYW5JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCAqLzsg
fTsKIAkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovOyB9OwogCQkwRjFGQjM5OTFF
MUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTgxRTFGNjVGOTAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKQEAgLTI5MSw2ICsyOTAsNyBAQAogCQkwRjQwRTRBNzFD
NDk3Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0
MEU0QTgxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzQxQzQ1RjNCNjAwNzI0
NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNDBFNEE5MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNv
ZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0MTU0NUIxRkQyMEIyMjAw
MUI1OEY2IC8qIENvbnN0cmFpbnRDb25jdXJyZW5jeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MTU0NUExRkQyMEIxRjAwMUI1OEY2IC8qIENvbnN0
cmFpbnRDb25jdXJyZW5jeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NTE0
NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBW
aXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0QjE0
NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3Jt
YXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzEyLDYgKzMxMiw5IEBACiAJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEEz
OEY4MUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQg
LyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAv
KiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKKwkJMEY0RDhDNzQxRkM3QTk3QTAwMUQzMkFDIC8qIFZp
c2l0Q291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovOyB9OworCQkw
RjREOEM3NTFGQzdBOTdEMDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3MzFGQzdBOTc0
MDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5
RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRG
MjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1NCw2ICszNTcsNyBAQAogCQkwRjYzOTQ1NTE1RDA3
MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ1MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9m
aWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDc2MTVE
Q0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi87IH07CiAJCTBG
NjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAv
KiBERkdBcnJheU1vZGUuaCAqLzsgfTsKKwkJMEY2NDUzMTgxRkQyNDZBNzAwMjQzMkExIC8qIE1h
cmtTdGFja01lcmdpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY0NTMxNTFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuaCAqLzsgfTsKIAkJMEY2NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJp
bmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRCMjdBMUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEVBRjMxQzRF
Q0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJ
bmxpbmVzLmggKi87IH07CkBAIC00NDYsNiArNDUwLDggQEAKIAkJMEY5RDM2OTUxQUU5Q0MzMzAw
MEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5RDM2OTMxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQ
aGFzZS5oICovOyB9OwogCQkwRjlENEMwRDFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9u
VGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmggKi87IH07CiAJ
CTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlENEMw
RjFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICovOyB9
OworCQkwRjlEQUEwOTFGRDFDM0NGMDA3OUM1QjIgLyogTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOURBQTA3
MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZlci5oICovOyB9OworCQkw
RjlEQUEwQTFGRDFDM0QzMDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEQUEwODFGRDFDM0M4
MDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggKi87IH07CiAJCTBGOUUzMjY0MUIw
NUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAw
ODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi87IH07CiAJCTBGOUZC
NEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBDQjY3
RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovOyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBE
NTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ5OSw3ICsxNTA1LDYg
QEAKIAkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOUU4NTJF
MUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURCQzU0RDUxREY4RUEyQjAw
NUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFz
c2VtYmx5VG9KU0NhbGxlZS5oICovOyB9OwogCQlBREQ4RkE0NjFFQjMwNzk3MDBERjU0MkYgLyog
V2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9u
UGFyc2VyLmggKi87IH07Ci0JCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRERC
MUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3
OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBREU4MDI5NDFFMDhGMUM5MDA1OERFNzggLyogSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUFERTgwMjlBMUUwOEYxREUwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBREU4MDI5NTFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25z
dHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUFERTgwMjlDMUUwOEYxREUwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURF
ODAyOTcxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5ODIs
NyArMTk4Nyw2IEBACiAJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEMxRTE3M0E2MjAwQTlC
RTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMUZCMzkyMUUxNzdBNkYwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVvdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRpbmdUaW1lb3V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5o
OyBwYXRoID0gZGZnL0RGR1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGgg
PSBkZmcvREZHV29ya2xpc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMzUsNiArMjIzOSw3IEBACiAJCTBGM0JEMUI2MUI4OTZBMDcw
MDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25T
ZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNDMUYxODFCODY4RTc5MDBB
QkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzFG
MTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0YXRlLmg7IHBhdGggPSBkZmcv
REZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0
MTU0NUExRkQyMEIxRjAwMUI1OEY2IC8qIENvbnN0cmFpbnRDb25jdXJyZW5jeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJhaW50Q29uY3VycmVuY3kuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVy
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFG
OEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0
QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MjcxLDYgKzIyNzYsMTAgQEAKIAkJMEY0QTM4RjgxQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2Ft
cGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdXBlclNhbXBsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8q
IFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEM5MTY1
MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNPcmlnaW5EdW1wLmg7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZp
c2l0Q291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdENvdW50
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzMxRkM3QTk3NDAwMUQz
MkFDIC8qIENvbnN0cmFpbnRQYXJhbGxlbGlzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb25zdHJhaW50UGFyYWxsZWxpc20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzcxRkNB
M0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNERFMUNDMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZp
b3VzU3BpbGxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckZp
eE9idmlvdXNTcGlsbHMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEg
LyogQWlyRml4T2J2aW91c1NwaWxscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHBhdGggPSBiMy9haXIvQWlyRml4T2J2aW91c1NwaWxs
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRERTFEMDFDNEQ3NjRCMDA0RDZD
MTEgLyogQjNPcmlnaW5EdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzT3JpZ2luRHVtcC5jcHA7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM0Miw2ICsyMzUxLDggQEAKIAkJMEY2Mzk0NzYxNURD
RTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0g
ZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2Mzk0ODExNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcnJheU1vZGUuY3BwOyBwYXRoID0g
ZGZnL0RGR0FycmF5TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5
NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQXJyYXlNb2RlLmg7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjQ1MzE1MUZEMjQ2QTAwMDI0MzJBMSAv
KiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjY0NTMxNjFGRDI0NkEwMDAyNDMyQTEgLyogTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpbmFyeVN3aXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2gu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmluYXJ5U3dpdGNoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxs
RWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTA0LDYgKzI1MTUsOSBAQAogCQkw
RjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4Y2VwdGlvblRhcmdldC5oOyBwYXRoID0gZnRs
L0ZUTEV4Y2VwdGlvblRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlE
NEMwRTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlLmNwcDsgcGF0aCA9IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0
IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oOyBwYXRoID0gZnRsL0ZU
TFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY5REFBMDYxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50
U29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5REFBMDcxRkQxQzND
ODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U29sdmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGOURBQTA4MUZEMUMzQzgwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJj
ZUFkYXB0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxTb3Vy
Y2VBZGFwdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUUzMjYxMUIwNUFC
MDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQyNjgsNyArNDI4Miw2IEBACiAJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAv
KiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHkuaDsgcGF0aCA9
IGpzL0pTV2ViQXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZB
NDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDQxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1l
U2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
RERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFERTgwMjkzMUUwOEYxQzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk0MUUwOEYxQzkwMDU4REU3OCAvKiBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTUxRTA4RjFDOTAwNThE
RTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oOyBwYXRo
ID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTUyMCw2ICs1NTMzLDggQEAKIAkJCQkwRkRDRTEyODFGQUZBODU5MDA2
RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFC
RUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAw
ODNCMTJCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCisJCQkJMEY0MTU0NUExRkQyMEIxRjAw
MUI1OEY2IC8qIENvbnN0cmFpbnRDb25jdXJyZW5jeS5oICovLAorCQkJCTBGNEQ4QzczMUZDN0E5
NzQwMDFEMzJBQyAvKiBDb25zdHJhaW50UGFyYWxsZWxpc20uaCAqLywKIAkJCQkwRjdERjEyRjFF
Mjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKIAkJCQkyQTdBNThF
RTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJCQkJMEYxMzZENEIxNzRBRDY5
QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKQEAgLTU2MTQsMTcgKzU2MjksMjMgQEAKIAkJCQkw
RjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQkw
RjY2MEUzNTFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwICovLAog
CQkJCTBGNjYwRTM2MUUwNTE3QjgwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5oICov
LAorCQkJCTBGOURBQTA2MUZEMUMzQzgwMDc5QzVCMiAvKiBNYXJraW5nQ29uc3RyYWludFNvbHZl
ci5jcHAgKi8sCisJCQkJMEY5REFBMDcxRkQxQzNDODAwNzlDNUIyIC8qIE1hcmtpbmdDb25zdHJh
aW50U29sdmVyLmggKi8sCiAJCQkJMTQyRDZGMEUxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFj
ay5jcHAgKi8sCiAJCQkJMTQyRDZGMEYxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFjay5oICov
LAorCQkJCTBGNjQ1MzE2MUZEMjQ2QTAwMDI0MzJBMSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludC5jcHAgKi8sCisJCQkJMEY2NDUzMTUxRkQyNDZBMDAwMjQzMkExIC8qIE1hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBN
dXRhdG9yU2NoZWR1bGVyLmggKi8sCiAJCQkJMEZBNzYyMDIxREI5MjQyMzAwQjdBMkZEIC8qIE11
dGF0b3JTdGF0ZS5jcHAgKi8sCiAJCQkJMEZBNzYyMDMxREI5MjQyMzAwQjdBMkZEIC8qIE11dGF0
b3JTdGF0ZS5oICovLAotCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggKi8sCisJCQkJMEY5REFBMDgxRkQxQzNDODAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNl
QWRhcHRlci5oICovLAogCQkJCTBGQkI3M0I2MURFRjNBQUMwMDJDMDA5RSAvKiBQcmV2ZW50Q29s
bGVjdGlvblNjb3BlLmggKi8sCiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4IC8qIFJlZ2lz
dGVyU3RhdGUuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIgLyogUmVsZWFzZUhl
YXBBY2Nlc3NTY29wZS5oICovLAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMxMzgzOSAvKiBSdW5u
aW5nU2NvcGUuaCAqLywKKwkJCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuY3BwICovLAorCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBT
aW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5
OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8q
IFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RW
aXNpdG9ySW5saW5lcy5oICovLApAQCAtNTY0Niw3ICs1NjY3LDcgQEAKIAkJCQkwRjFGQjM4QjFF
MTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5o
ICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggKi8sCi0JCQkJMEYxRkIzOTIxRTE3N0E2RjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91
dC5oICovLAorCQkJCTBGNEQ4QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAq
LywKIAkJCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLywK
IAkJCQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8sCiAJCQkJ
MUFDRjczNzYxNzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwICovLApAQCAtODAwNSw2ICs4MDI2
LDcgQEAKIAkJCQkwRkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1Q0Y5ODkxRTlFRDY1MjAwQzE4NjkyIC8qIEFpclN0YWNrQWxsb2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clN0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0MTU0NUIxRkQyMEIyMjAwMUI1OEY2
IC8qIENvbnN0cmFpbnRDb25jdXJyZW5jeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkJEOUUx
QzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NThFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTgyMDYsNiArODIyOCw3IEBACiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8q
IEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZB
IC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJC
MDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjREOEM3NTFGQzdB
OTdEMDAxRDMyQUMgLyogQ29uc3RyYWludFBhcmFsbGVsaXNtLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxsRGF0YS5o
IGluIEhlYWRlcnMgKi8sCkBAIC04Mjk5LDYgKzgzMjIsNyBAQAogCQkJCUE3N0E0MjNFMTdBMEJC
RkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDRE
OTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjQ1MzE4MUZEMjQ2QTcwMDI0MzJB
MSAvKiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMThEM0QwMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtODc3NCw2ICs4Nzk4LDcgQEAKIAkJCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
NzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjlEQUEwOTFGRDFDM0NGMDA3OUM1QjIgLyogTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUz
OUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC04OTIyLDYgKzg5NDcsNyBAQAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNC
MDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjREOEM3NDFGQzdBOTdBMDAxRDMyQUMgLyogVmlz
aXRDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAzOUQwNjkg
LyogSlNXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFQjFGNzVBRDczMDAwQkNB
QUYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYxRThBMEM3
QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAt
OTA0MSw5ICs5MDY3LDkgQEAKIAkJCQlFM0MyOTVERDFFRDJDQkRBMDBEMzAxNkYgLyogT2JqZWN0
UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDNFNDBBMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEM0U0MEMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjREOEM3ODFGQ0EzQ0ZBMDAxRDMy
QUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDQ2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPYmplY3RQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRz
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjQ5LDYgKzkyNzUsNyBAQAogCQkJCTBGOTUy
QUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEQUEwQTFGRDFDM0QzMDA3OUM1QjIg
LyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRCOTREQzE3
QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkyODksNyArOTMxNiw2IEBACiAJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUx
NjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUw
NTAyRDFBQTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAq
LywKLQkJCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBp
biBIZWFkZXJzICovLAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVj
b3JkLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcg
KzMyMCw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKIAogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKICAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjU1MTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTcyLDcgKzk3Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90
VmlzaXRvciYKICAgICAKICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IHRydWU7CiAK
LSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgaWYgKEhlYXA6
OmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkVmlzaXRT
dHJvbmdseShsb2NrZXIpKSB7CkBAIC0xMTI0LDcgKzExMjQsNyBAQCBzdGF0aWMgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcyB0aW1lVG9MCiAKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7Ci0gICAgaWYgKEhlYXA6
OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgIGlmIChIZWFwOjppc01hcmtlZCh0aGlz
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZv
cmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQpAQCAtMTEzOSwxMCArMTEzOSwx
MCBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnCiAjaWYgRU5BQkxF
KERGR19KSVQpCiBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZl
cmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQogewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29k
ZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVP
cmlnaW4uZ2V0KCkpKQorICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6
aXNNYXJrZWQodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0
aW9uLm1fZnJvbS5nZXQoKSkpCisgICAgaWYgKCFIZWFwOjppc01hcmtlZCh0cmFuc2l0aW9uLm1f
ZnJvbS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTExNzIsNyArMTE3Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhjb24KICAgICAgICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxl
KCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJs
ZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKEhlYXA6
OmlzTWFya2VkKG9sZFN0cnVjdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CkBAIC0xMjQ2LDE0ICsx
MjQ2LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7
ICsraSkgewogICAgICAgICBKU0NlbGwqIHJlZmVyZW5jZSA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVy
ZW5jZXNbaV0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVCghanNEeW5hbWljQ2FzdDxDb2RlQmxvY2sq
PigqcmVmZXJlbmNlLT52bSgpLCByZWZlcmVuY2UpKTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01h
cmtlZENvbmN1cnJlbnRseShyZWZlcmVuY2UpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJr
ZWQocmVmZXJlbmNlKSkgewogICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYWxsQXJlTGl2ZVNv
RmFyKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtT
dHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6
OmlzTWFya2VkQ29uY3VycmVudGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNb
aV0uZ2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+
d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYWxs
QXJlTGl2ZVNvRmFyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2
aXNpb24gMjI1NTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMyArMTA0LDEzIEBAIHByb3RlY3RlZDoKICAgICAg
ICAgICAgIGRhdGFMb2cobV93b3JrbGlzdCwgIjogQ29tcGlsaW5nICIsIG1fcGxhbi0+a2V5KCks
ICIgYXN5bmNocm9ub3VzbHlcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUncyBubyB3
YXkgZm9yIHRoZSBHQyB0byBiZSBzYWZlcG9pbnRpbmcgc2luY2Ugd2Ugb3duIHJpZ2h0VG9SdW4u
Ci0gICAgICAgIGlmIChtX3BsYW4tPnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAud29ybGRJc1N0
b3BwZWQoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiSGVhcCBpcyBzdG9wZWQgYnV0IGhlcmUg
d2UgYXJlISAoMSlcbiIpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgfQogICAgICAgICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZCgmbV9kYXRhKTsK
ICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UgIT0gUGxhbjo6Q2FuY2VsbGVkKSB7Ci0gICAgICAg
ICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCgpKSB7CisgICAgICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3Rv
cHBlZCgpKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGVhcCBpcyBzdG9wcGVkIGJ1dCBo
ZXJlIHdlIGFyZSEgKDIpXG4iKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgfQpAQCAtMTMwLDcgKzEzMCw3IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3JlYWR5UGxhbnMuYXBwZW5k
KG1fcGxhbik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Bs
YW4tPnZtLT5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKCkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAud29ybGRJc1N0b3Bw
ZWQoKSk7CiAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcGxhbkNvbXBpbGVkLm5vdGlmeUFsbCgp
OwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCShyZXZpc2lvbiAyMjU1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQg
Y29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmIChzYWZlcG9pbnRS
ZXN1bHQuZGlkR2V0Q2FuY2VsbGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSRUxFQVNFX0FT
U0VSVCghc3RhdGUuZ3JhcGgubV92bS5oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxk
SXNTdG9wcGVkKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhlYXAu
d29ybGRJc1N0b3BwZWQoKSk7CiAgICAgCiAgICAgaWYgKHN0YXRlLmFsbG9jYXRpb25GYWlsZWQp
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYsMTIgKzY2LDEyIEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KLWlubGluZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpn
ZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgVGlu
eUJsb29tRmlsdGVyIGZpbHRlciwgTWFya0hvb2smIG1hcmtIb29rKQoraW5saW5lIHZvaWQgQ29u
c2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKHZvaWQqIHAsIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIFRpbnlCbG9v
bUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKIHsKICAgICBtYXJrSG9vay5tYXJr
KHApOwogCiAgICAgSGVhcFV0aWw6OmZpbmRHQ09iamVjdFBvaW50ZXJzRm9yTWFya2luZygKLSAg
ICAgICAgbV9oZWFwLCBtYXJraW5nVmVyc2lvbiwgZmlsdGVyLCBwLAorICAgICAgICBtX2hlYXAs
IG1hcmtpbmdWZXJzaW9uLCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGZpbHRlciwgcCwKICAgICAg
ICAgWyZdICh2b2lkKiBwKSB7CiAgICAgICAgICAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkp
CiAgICAgICAgICAgICAgICAgZ3JvdygpOwpAQCAtOTUsOCArOTUsOSBAQCB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2CiAKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVy
ID0gbV9oZWFwLm9iamVjdFNwYWNlKCkuYmxvY2tzKCkuZmlsdGVyKCk7IC8vIE1ha2UgYSBsb2Nh
bCBjb3B5IG9mIGZpbHRlciB0byBzaG93IHRoZSBjb21waWxlciBpdCB3b24ndCBhbGlhcywgYW5k
IGNhbiBiZSByZWdpc3Rlci1hbGxvY2F0ZWQuCiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24gPSBtX2hlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpOworICAgIEhlYXBWZXJz
aW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IG1faGVhcC5vYmplY3RTcGFjZSgpLm5ld2x5QWxs
b2NhdGVkVmVyc2lvbigpOwogICAgIGZvciAoY2hhcioqIGl0ID0gc3RhdGljX2Nhc3Q8Y2hhcioq
PihiZWdpbik7IGl0ICE9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsgKytpdCkKLSAgICAgICAg
Z2VuZXJpY0FkZFBvaW50ZXIoKml0LCBtYXJraW5nVmVyc2lvbiwgZmlsdGVyLCBtYXJrSG9vayk7
CisgICAgICAgIGdlbmVyaWNBZGRQb2ludGVyKCppdCwgbWFya2luZ1ZlcnNpb24sIG5ld2x5QWxs
b2NhdGVkVmVyc2lvbiwgZmlsdGVyLCBtYXJrSG9vayk7CiB9CiAKIGNsYXNzIER1bW15TWFya0hv
b2sgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVS
b290cy5oCShyZXZpc2lvbiAyMjU1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25JbmxpbmVDYXBhY2l0eSA9IDgxOTIgLyBz
aXplb2YoSGVhcENlbGwqKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4K
LSAgICB2b2lkIGdlbmVyaWNBZGRQb2ludGVyKHZvaWQqLCBIZWFwVmVyc2lvbiwgVGlueUJsb29t
RmlsdGVyLCBNYXJrSG9vayYpOworICAgIHZvaWQgZ2VuZXJpY0FkZFBvaW50ZXIodm9pZCosIEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNp
b24sIFRpbnlCbG9vbUZpbHRlciwgTWFya0hvb2smKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1hcmtIb29rPgogICAgIHZvaWQgZ2VuZXJpY0FkZFNwYW4odm9pZCosIHZvaWQqIGVuZCwgTWFy
a0hvb2smKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRDb25j
dXJyZW5jeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0
cmFpbnRDb25jdXJyZW5jeS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvbnN0cmFpbnRDb25jdXJyZW5jeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBDb25zdHJhaW50Q29uY3Vy
cmVuY3kgOiB1aW50OF90IHsKKyAgICBTZXF1ZW50aWFsLAorICAgIENvbmN1cnJlbnQKK307Cisg
ICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpDb25zdHJhaW50Q29uY3VycmVu
Y3kgY29uY3VycmVuY3kpCit7CisgICAgc3dpdGNoIChjb25jdXJyZW5jeSkgeworICAgIGNhc2Ug
SlNDOjpDb25zdHJhaW50Q29uY3VycmVuY3k6OlNlcXVlbnRpYWw6CisgICAgICAgIG91dC5wcmlu
dCgiU2VxdWVudGlhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkNvbnN0cmFp
bnRDb25jdXJyZW5jeTo6Q29uY3VycmVudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25jdXJyZW50
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnN0cmFpbnRQYXJhbGxlbGlzbS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51
bSBjbGFzcyBDb25zdHJhaW50UGFyYWxsZWxpc20gOiB1aW50OF90IHsKKyAgICBTZXF1ZW50aWFs
LAorICAgIFBhcmFsbGVsCit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworCitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
Qzo6Q29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQoreworICAgIHN3aXRjaCAocGFy
YWxsZWxpc20pIHsKKyAgICBjYXNlIEpTQzo6Q29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50
aWFsOgorICAgICAgICBvdXQucHJpbnQoIlNlcXVlbnRpYWwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSlNDOjpDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsOgorICAgICAgICBv
dXQucHJpbnQoIlBhcmFsbGVsIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheUlu
bGluZXMuaAkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NTZWdtZW50ZWRBcnJheUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDEyICsyMDks
MTEgQEAgaW5saW5lIGNvbnN0IFQgR0NTZWdtZW50ZWRBcnJheTxUPjo6cmVtbwogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiBpbmxpbmUgYm9vbCBHQ1NlZ21lbnRlZEFycmF5PFQ+Ojppc0VtcHR5KCkK
IHsKKyAgICAvLyBUaGlzIGhhcHBlbnMgdG8gYmUgc2FmZSB0byBjYWxsIGNvbmN1cnJlbnRseS4g
SXQncyBpbXBvcnRhbnQgdG8gcHJlc2VydmUgdGhhdCBjYXBhYmlsaXR5LgogICAgIGlmIChtX3Rv
cCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3NlZ21lbnRzLmhlYWQoKS0+bmV4
dCgpKSB7Ci0gICAgICAgIEFTU0VSVChtX3NlZ21lbnRzLmhlYWQoKS0+bmV4dCgpLT5tX3RvcCA9
PSBzX3NlZ21lbnRDYXBhY2l0eSk7CisgICAgaWYgKG1fc2VnbWVudHMuaGVhZCgpLT5uZXh0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMjU1MTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
NiArNDksNyBAQAogI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJr
ZXIuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIgogI2luY2x1ZGUg
Ik1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZUlubGluZXMu
aCIKICNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNldC5oIgpAQCAtNjYsNiArNjcsNyBAQAog
I2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKICNpbmNsdWRl
ICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNsdWRlIDxh
bGdvcml0aG0+CkBAIC0yODEsNyArMjgzLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgICwgbV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxT
bG90VmlzaXRvcj4oKnRoaXMsICJNIikpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjpt
YWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQotICAgICwgbV9jb25zdHJhaW50U2V0KHN0
ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+KCkpCisgICAgLCBtX2NvbnN0cmFp
bnRTZXQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKnRoaXMpKQogICAg
ICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxD
b2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVl
PEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAtNTk0LDcgKzU5Niw3IEBAIHZvaWQgSGVhcDo6aXRl
cmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0MKICAgICAgICAgZnVuYyhjb2RlQmxvY2spOwogfQog
Ci12b2lkIEhlYXA6OmFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpCit2b2lkIEhlYXA6OmFz
c2VydE1hcmtTdGFja3NFbXB0eSgpCiB7CiAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgCkBAIC02
MDgsMTIgKzYxMCwyMSBAQCB2b2lkIEhlYXA6OmFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgp
CiAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgfQogICAgIAorICAgIGZvckVhY2hTbG90VmlzaXRv
cigKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgaWYg
KHZpc2l0b3IuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZGF0YUxvZygiRkFUQUw6IFZpc2l0b3IgIiwgUmF3UG9pbnRlcigmdmlz
aXRvciksICIgaXMgbm90IGVtcHR5IVxuIik7CisgICAgICAgICAgICBvayA9IGZhbHNlOworICAg
ICAgICB9KTsKKyAgICAKICAgICBSRUxFQVNFX0FTU0VSVChvayk7CiB9CiAKIHZvaWQgSGVhcDo6
Z2F0aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9tYWNo
aW5lVGhyZWFkcy0+Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0
aW5lcywgKm1fY29kZUJsb2NrcywgbV9jdXJyZW50VGhyZWFkU3RhdGUpOworICAgIG1fbWFjaGlu
ZVRocmVhZHMtPmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9qaXRTdHViUm91dGlu
ZXMsICptX2NvZGVCbG9ja3MsIG1fY3VycmVudFRocmVhZFN0YXRlLCBtX2N1cnJlbnRUaHJlYWQp
OwogfQogCiB2b2lkIEhlYXA6OmdhdGhlckpTU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYg
cm9vdHMpCkBAIC03MzAsNyArNzQxLDcgQEAgdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKICAgICAg
ICAgICAgIHZpc2l0b3IucmVzZXQoKTsKICAgICAgICAgfSk7CiAKLSAgICBhc3NlcnRTaGFyZWRN
YXJrU3RhY2tzRW1wdHkoKTsKKyAgICBhc3NlcnRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICBtX3dl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9yYWNlTWFya1N0YWNrLT5pc0VtcHR5KCkpOwpAQCAtOTExLDcgKzkyMiw3IEBAIHZvaWQgSGVh
cDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQr
KzsKICAgICBpZiAobV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQpIHsKICAgICAgICAgV1RGOjpsb2Fk
TG9hZEZlbmNlKCk7Ci0gICAgICAgIGlmICghaXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsK
KyAgICAgICAgaWYgKCFpc01hcmtlZChjZWxsKSkgewogICAgICAgICAgICAgLy8gRHVyaW5nIGEg
ZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQg
c3VyaXZpdmVkIHBhc3QKICAgICAgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3Qg
YXMgYSBzdG9yZSB0byBhbiB1bm1hcmtlZCBQb3NzaWJseUJsYWNrIG9iamVjdC4gSWYgdGhlCiAg
ICAgICAgICAgICAvLyBvYmplY3QgZ2V0cyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMg
dGhlbiBpdCB3aWxsIGdvIGRvd24gdGhlIG5vcm1hbCBtYXJraW5nCkBAIC05MjQsMTUgKzkzNSwx
NSBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgICAgICAg
ICAgICAgLy8gTm93IHdlIHByb3RlY3QgYWdhaW5zdCB0aGlzIHJhY2U6CiAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICAvLyAgICAgMSkgT2JqZWN0IHN0YXJ0cyBvdXQgYmxhY2sg
KyB1bm1hcmtlZC4KLSAgICAgICAgICAgICAgICAvLyAgICAgLS0+IFdlIGRvIGlzTWFya2VkQ29u
Y3VycmVudGx5IGhlcmUuCisgICAgICAgICAgICAgICAgLy8gICAgIC0tPiBXZSBkbyBpc01hcmtl
ZCBoZXJlLgogICAgICAgICAgICAgICAgIC8vICAgICAyKSBPYmplY3QgaXMgbWFya2VkIGFuZCBn
cmV5ZWQuCiAgICAgICAgICAgICAgICAgLy8gICAgIDMpIE9iamVjdCBpcyBzY2FubmVkIGFuZCBi
bGFja2VkLgogICAgICAgICAgICAgICAgIC8vICAgICAtLT4gV2UgZG8gYXRvbWljQ29tcGFyZUV4
Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nIGhlcmUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAg
ICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugd291bGQgaGF2ZSBtYWRlIHRoZSBvYmplY3Qgd2hp
dGUgYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHNob3VsZAogICAgICAgICAgICAgICAgIC8vIGJlIGJs
YWNrLiBUaGlzIGNoZWNrIGxldHMgdXMgY29ycmVjdCBvdXIgbWlzdGFrZS4gVGhpcyByZWxpZXMg
b24gdGhlIGZhY3QgdGhhdAotICAgICAgICAgICAgICAgIC8vIGlzTWFya2VkQ29uY3VycmVudGx5
IGNvbnZlcmdlcyBtb25vdG9uaWNhbGx5IHRvIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGlz
TWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgICAgICAgICAgLy8gaXNNYXJrZWQg
Y29udmVyZ2VzIG1vbm90b25pY2FsbHkgdG8gdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNN
YXJrZWQoY2VsbCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBkaWZmaWN1bHQgdG8g
d29yayBvdXQgd2hldGhlciB0aGUgb2JqZWN0IHNob3VsZCBiZSBncmV5IG9yIGJsYWNrIGF0CiAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgcG9pbnQuIFdlIHNheSBibGFjayBjb25zZXJ2YXRp
dmVseS4KICAgICAgICAgICAgICAgICAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6
UG9zc2libHlCbGFjayk7CkBAIC05NDgsNyArOTU5LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fSBlbHNlCi0gICAgICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7
CisgICAgICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAgICAgLy8gSXQgY291bGQg
YmUgdGhhdCB0aGUgb2JqZWN0IHdhcyAqanVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhl
IGNvbGxlY3RvciBtYXkgc2V0IHRoZQogICAgIC8vIHN0YXRlIHRvIERlZmluaXRlbHlHcmV5IGFu
ZCB0aGVuIHRvIFBvc3NpYmx5T2xkT3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMg
dG8KICAgICAvLyByYWNlIHdpdGggdGhlIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0
aGlzIGlzIGFjY3VyYXRlIGJlY2F1c2UgdGhlIG9iamVjdCBfd2lsbF8KQEAgLTEwOTEsNiArMTEw
Miw3IEBAIGF1dG8gSGVhcDo6cnVuQ3VycmVudFBoYXNlKEdDQ29uZHVjdG9yIGMKIHsKICAgICBj
aGVja0Nvbm4oY29ubik7CiAgICAgbV9jdXJyZW50VGhyZWFkU3RhdGUgPSBjdXJyZW50VGhyZWFk
U3RhdGU7CisgICAgbV9jdXJyZW50VGhyZWFkID0gJldURjo6VGhyZWFkOjpjdXJyZW50KCk7CiAg
ICAgCiAgICAgaWYgKGNvbm4gPT0gR0NDb25kdWN0b3I6Ok11dGF0b3IpCiAgICAgICAgIHNhbml0
aXplU3RhY2tGb3JWTSh2bSgpKTsKQEAgLTEyODMsMTMgKzEyOTUsMTEgQEAgTkVWRVJfSU5MSU5F
IGJvb2wgSGVhcDo6cnVuRml4cG9pbnRQaGFzZQogICAgIH0KICAgICAgICAgCiAgICAgaWYgKHNs
b3RWaXNpdG9yLmRpZFJlYWNoVGVybWluYXRpb24oKSkgeworICAgICAgICBtX29wYXF1ZVJvb3Rz
LmRlbGV0ZU9sZFRhYmxlcygpOworICAgICAgICAKICAgICAgICAgbV9zY2hlZHVsZXItPmRpZFJl
YWNoVGVybWluYXRpb24oKTsKLSAgICAgICAgICAgIAotICAgICAgICBhc3NlcnRTaGFyZWRNYXJr
U3RhY2tzRW1wdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICBzbG90VmlzaXRvci5tZXJnZUlm
TmVjZXNzYXJ5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJh
bGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VJZk5l
Y2Vzc2FyeSgpOworICAgICAgICAKKyAgICAgICAgYXNzZXJ0TWFya1N0YWNrc0VtcHR5KCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IFRha2UgbV9tdXRhdG9yRGlkUnVuIGludG8g
YWNjb3VudCB3aGVuIHNjaGVkdWxpbmcgY29uc3RyYWludHMuIE1vc3QgbGlrZWx5LAogICAgICAg
ICAvLyB3ZSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyBhZ2FpbiB1bmxl
c3MgdGhlIG11dGF0b3IgZGlkIHJ1bi4gQXQgYQpAQCAtMTI5NywxNyArMTMwNywxNCBAQCBORVZF
Ul9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNlCiAgICAgICAgIC8vIGVzdGltYXRl
LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
ODI4CiAgICAgICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0YWtlIGFkdmFu
dGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdlIGNvdWxkIHRpbWVvdXQuIFRoaXMgb25seSBjb21lcwot
ICAgICAgICAvLyBpbnRvIHBsYXkgaWYgd2UncmUgZXhlY3V0aW5nIGNvbnN0cmFpbnRzIGZvciB0
aGUgZmlyc3QgdGltZS4gQnV0IHRoYXQgd2lsbCBtYXR0ZXIKLSAgICAgICAgLy8gd2hlbiB3ZSBo
YXZlIGRlZXAgc3RhY2tzIG9yIGEgbG90IG9mIERPTSBzdHVmZi4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgzMQotICAgICAgICAgICAgCiAg
ICAgICAgIC8vIFdvbmRlcmluZyB3aGF0IHRoaXMgZG9lcz8gTG9vayBhdCBIZWFwOjphZGRDb3Jl
Q29uc3RyYWludHMoKS4gVGhlIERPTSBhbmQgb3RoZXJzIGNhbiBhbHNvCiAgICAgICAgIC8vIGFk
ZCB0aGVpciBvd24gdXNpbmcgSGVhcDo6YWRkTWFya2luZ0NvbnN0cmFpbnQoKS4KLSAgICAgICAg
Ym9vbCBjb252ZXJnZWQgPQotICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29u
dmVyZ2VuY2Uoc2xvdFZpc2l0b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAg
ICBib29sIGNvbnZlcmdlZCA9IG1fY29uc3RyYWludFNldC0+ZXhlY3V0ZUNvbnZlcmdlbmNlKHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGUgc2xvdFZpc2l0b3Iu
aXNFbXB0eSgpIGNoZWNrIGlzIG1vc3QgbGlrZWx5IG5vdCBuZWVkZWQuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTAKICAgICAgICAgaWYg
KGNvbnZlcmdlZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGFzc2Vy
dFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOworICAgICAgICAgICAgYXNzZXJ0TWFya1N0YWNrc0Vt
cHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gY2hhbmdlUGhhc2UoY29ubiwgQ29sbGVjdG9yUGhh
c2U6OkVuZCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTMyNCw2ICsxMzMxLDE1IEBA
IE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkZpeHBvaW50UGhhc2UKICAgICAgICAgCiAgICAg
bV9zY2hlZHVsZXItPnN5bmNocm9ub3VzRHJhaW5pbmdEaWRTdGFsbCgpOwogCisgICAgLy8gVGhp
cyBpcyBraW5kYSB0cmlja3kuIFRoZSB0ZXJtaW5hdGlvbiBjaGVjayBsb29rcyBhdDoKKyAgICAv
LworICAgIC8vIC0gV2hldGhlciB0aGUgbWFya2luZyB0aHJlYWRzIGFyZSBhY3RpdmUuIElmIHRo
ZXkgYXJlIG5vdCwgdGhpcyBtZWFucyB0aGF0IHRoZSBtYXJraW5nIHRocmVhZHMnCisgICAgLy8g
ICBTbG90VmlzaXRvcnMgYXJlIGVtcHR5LgorICAgIC8vIC0gV2hldGhlciB0aGUgY29sbGVjdG9y
J3Mgc2xvdCB2aXNpdG9yIGlzIGVtcHR5LgorICAgIC8vIC0gV2hldGhlciB0aGUgc2hhcmVkIG1h
cmsgc3RhY2tzIGFyZSBlbXB0eS4KKyAgICAvLworICAgIC8vIFRoaXMgZG9lc24ndCBoYXZlIHRv
IGNoZWNrIHRoZSBtdXRhdG9yIFNsb3RWaXNpdG9yIGJlY2F1c2UgdGhhdCBvbmUgYmVjb21lcyBl
bXB0eSBhZnRlciBldmVyeSBHQworICAgIC8vIHdvcmsgaW5jcmVtZW50LCBzbyBpdCBtdXN0IGJl
IGVtcHR5IG5vdy4KICAgICBpZiAoc2xvdFZpc2l0b3IuZGlkUmVhY2hUZXJtaW5hdGlvbigpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gVGhpcyBpcyBsaWtlIHJlbG9vcGluZyB0byB0aGUgdG9w
IGlmIHJ1bkZpeHBvaW50UGhhc2UoKS4KICAgICAgICAgCkBAIC0xNDg5LDYgKzE1MDUsOCBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpmaW5pc2hDaGFuZ2luZ1BoCiAgICAgaWYgKGZhbHNlKQog
ICAgICAgICBkYXRhTG9nKGNvbm4sICI6IEdvaW5nIHRvIHBoYXNlOiAiLCBtX25leHRQaGFzZSwg
IiAoZnJvbSAiLCBtX2N1cnJlbnRQaGFzZSwgIilcbiIpOwogICAgIAorICAgIG1fcGhhc2VWZXJz
aW9uKys7CisgICAgCiAgICAgYm9vbCBzdXNwZW5kZWRCZWZvcmUgPSB3b3JsZFNob3VsZEJlU3Vz
cGVuZGVkKG1fY3VycmVudFBoYXNlKTsKICAgICBib29sIHN1c3BlbmRlZEFmdGVyID0gd29ybGRT
aG91bGRCZVN1c3BlbmRlZChtX25leHRQaGFzZSk7CiAgICAgCkBAIC0xNTI2LDcgKzE1NDQsNyBA
QCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpmaW5pc2hDaGFuZ2luZ1BoCiAKIHZvaWQgSGVhcDo6
c3RvcFRoZVBlcmlwaGVyeShHQ0NvbmR1Y3RvciBjb25uKQogewotICAgIGlmIChtX2NvbGxlY3Rv
ckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKSB7CisgICAgaWYgKG1fd29ybGRJc1N0b3Bw
ZWQpIHsKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IHdvcmxkIGFscmVhZHkgc3RvcHBlZC5cbiIp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE1Mzcs
NyArMTU1NSw3IEBAIHZvaWQgSGVhcDo6c3RvcFRoZVBlcmlwaGVyeShHQ0NvbmR1Y3RvciAKICAg
ICBtX211dGF0b3JEaWRSdW4gPSBmYWxzZTsKIAogICAgIHN1c3BlbmRDb21waWxlclRocmVhZHMo
KTsKLSAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gdHJ1ZTsK
KyAgICBtX3dvcmxkSXNTdG9wcGVkID0gdHJ1ZTsKIAogICAgIGZvckVhY2hTbG90VmlzaXRvcigK
ICAgICAgICAgWyZdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKQEAgLTE1NzQsMTEgKzE1
OTIsMTEgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6cmVzdW1lVGhlUGVyaXBoZQogICAgIAog
ICAgIG1fYmFycmllcnNFeGVjdXRlZCA9IDA7CiAgICAgCi0gICAgaWYgKCFtX2NvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKSB7CisgICAgaWYgKCFtX3dvcmxkSXNTdG9wcGVk
KSB7CiAgICAgICAgIGRhdGFMb2coIkZhdGFsOiBjb2xsZWN0b3IgZG9lcyBub3QgYmVsaWV2ZSB0
aGF0IHRoZSB3b3JsZCBpcyBzdG9wcGVkLlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQotICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJ
c1N0b3BwZWQgPSBmYWxzZTsKKyAgICBtX3dvcmxkSXNTdG9wcGVkID0gZmFsc2U7CiAgICAgCiAg
ICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgdmFzdGx5IGltcHJvdmVkOiB3ZSB3YW50IHRvIGdy
YWIgdGhlIGxvY2tzIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5CiAgICAgLy8gYmVjb21lIGF2
YWlsYWJsZS4gV2UgYmFzaWNhbGx5IHdhbnQgYSBsb2NrQW55KCkgbWV0aG9kIHRoYXQgd2lsbCBs
b2NrIHdoYXRldmVyIGxvY2sgaXMgYXZhaWxhYmxlCkBAIC0yNTc4LDcgKzI1OTYsMTEgQEAgdm9p
ZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogewogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiQ3MiLCAiQ29uc2VydmF0aXZlIFNjYW4iLAotICAgICAgICBbdGhpc10gKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0JikgeworICAgICAg
ICBbdGhpcywgbGFzdFZlcnNpb24gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMCldIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpIG11dGFibGUgeworICAgICAgICAgICAgYm9vbCBzaG91bGROb3RQ
cm9kdWNlV29yayA9IGxhc3RWZXJzaW9uID09IG1fcGhhc2VWZXJzaW9uOworICAgICAgICAgICAg
aWYgKHNob3VsZE5vdFByb2R1Y2VXb3JrKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29w
ZSgqdGhpcywgIkNvbnN0cmFpbnQ6IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBt
X29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CiAgICAgICAgICAgICBD
b25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CkBAIC0yNTg3LDEyICsy
NjA5LDE0IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgIGdh
dGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJT
Y3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbGFzdFZlcnNpb24gPSBtX3BoYXNlVmVyc2lvbjsKICAgICAgICAgfSwKICAgICAgICAgQ29u
c3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKICAgICAKICAgICBtX2NvbnN0
cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIk1zciIsICJNaXNjIFNtYWxsIFJvb3RzIiwKLSAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91
dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICNpZiBK
U0NfT0JKQ19BUElfRU5BQkxFRAogICAgICAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNl
dCgqbV92bSwgc2xvdFZpc2l0b3IpOwogI2VuZGlmCkBAIC0yNjEzLDcgKzI2MzcsNyBAQCB2b2lk
IEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJhaW50U2V0LT5h
ZGQoCiAgICAgICAgICJTaCIsICJTdHJvbmcgSGFuZGxlcyIsCi0gICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAg
IFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBtX2hhbmRs
ZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoc2xvdFZpc2l0b3IpOwogICAgICAgICAgICAgbV9oYW5k
bGVTdGFjay52aXNpdChzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCkBAIC0yNjIxLDcgKzI2NDUs
NyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgCiAgICAgbV9jb25zdHJh
aW50U2V0LT5hZGQoCiAgICAgICAgICJEIiwgIkRlYnVnZ2VyIiwKLSAgICAgICAgW3RoaXNdIChT
bG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAg
ICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICNpZiBFTkFCTEUoU0FNUExJ
TkdfUFJPRklMRVIpCiAgICAgICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQ
cm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CkBAIC0yNjQxLDIx
ICsyNjY1LDIxIEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAKICAgICBt
X2NvbnN0cmFpbnRTZXQtPmFkZCgKICAgICAgICAgIkpzciIsICJKSVQgU3R1YiBSb3V0aW5lcyIs
Ci0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7
CiAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMo
c2xvdFZpc2l0b3IpOwogICAgICAgICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6
R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiV3MiLCAiV2VhayBTZXRzIiwKLSAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3RoaXNdIChTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRX
ZWFrU2V0cyhzbG90VmlzaXRvcik7CiAgICAgICAgIH0sCiAgICAgICAgIENvbnN0cmFpbnRWb2xh
dGlsaXR5OjpHcmV5ZWRCeU1hcmtpbmcpOwogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRk
KAogICAgICAgICAiV3JoIiwgIldlYWsgUmVmZXJlbmNlIEhhcnZlc3RlcnMiLAotICAgICAgICBb
dGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jikg
eworICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewogICAgICAgICAg
ICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV93ZWFrUmVmZXJlbmNl
SGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCiAg
ICAgICAgICAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcyhzbG90VmlzaXRvcik7
CiAgICAgICAgIH0sCkBAIC0yNjY0LDcgKzI2ODgsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25z
dHJhaW50cygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQo
CiAgICAgICAgICJEdyIsICJERkcgV29ya2xpc3RzIiwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpIHsKKyAgICAgICAgW3Ro
aXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpIHsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKICAgICAgICAgICAgICAgICBE
Rkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKHNsb3RW
aXNpdG9yKTsKICAgICAgICAgICAgIApAQCAtMjY4NCw3ICsyNzA4LDcgQEAgdm9pZCBIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMoKQogICAgIAogICAgIG1fY29uc3RyYWludFNldC0+YWRkKAogICAg
ICAgICAiQ2IiLCAiQ29kZUJsb2NrcyIsCi0gICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSB7CisgICAgICAgIFt0aGlzXSAoU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKSB7CiAgICAgICAgICAgICBpdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoCiAgICAgICAgICAgICAgICAg
WyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAgICAgICAvLyBWaXNp
dCB0aGUgQ29kZUJsb2NrIGFzIGEgY29uc3RyYWludCBvbmx5IGlmIGl0J3MgYmxhY2suCkBAIC0y
Njk1LDIzICsyNzE5LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAg
ICB9LAogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6U2VsZG9tR3JleWVkKTsKICAgICAK
LSAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKLSAgICAgICAgIk1ybXMiLCAiTXV0YXRvcitSYWNl
IE1hcmsgU3RhY2siLAotICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwg
Y29uc3QgVmlzaXRpbmdUaW1lb3V0JikgewotICAgICAgICAgICAgLy8gSW5kaWNhdGUgdG8gdGhl
IGZpeHBvaW50IHRoYXQgd2UgaW50cm9kdWNlZCB3b3JrIQotICAgICAgICAgICAgc2l6ZV90IHNp
emUgPSBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgp
OwotICAgICAgICAgICAgc2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIoIiwgc2l6ZSwgIikiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9t
dXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2so
KSk7Ci0gICAgICAgICAgICBtX3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3Iu
bXV0YXRvck1hcmtTdGFjaygpKTsKLSAgICAgICAgfSwKLSAgICAgICAgW3RoaXNdIChTbG90Vmlz
aXRvciYpIC0+IGRvdWJsZSB7Ci0gICAgICAgICAgICByZXR1cm4gbV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCkgKyBtX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKLSAgICAgICAgfSwKLSAgICAgICAg
Q29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5RXhlY3V0aW9uKTsKKyAgICBtX2NvbnN0cmFp
bnRTZXQtPmFkZChzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50Pigq
dGhpcykpOwogfQogCiB2b2lkIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVl
X3B0cjxNYXJraW5nQ29uc3RyYWludD4gY29uc3RyYWludCkKQEAgLTI3OTQsMTYgKzI4MDIsNiBA
QCB2b2lkIEhlYXA6OmFsbG93Q29sbGVjdGlvbigpCiAgICAgbV9jb2xsZWN0Q29udGludW91c2x5
TG9jay51bmxvY2soKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgSGVhcDo6
Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKLSAgICBmdW5jKCptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yKTsKLSAgICBmdW5jKCptX211dGF0b3JTbG90VmlzaXRvcik7Ci0gICAg
Zm9yIChhdXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAg
IGZ1bmMoKnNsb3RWaXNpdG9yKTsKLX0KLQogdm9pZCBIZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVG
ZW5jZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBtX211dGF0b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVl
OwpAQCAtMjg0Nyw0ICsyODQ1LDI2IEBAIHZvaWQgSGVhcDo6cmVtb3ZlSGVhcEZpbmFsaXplckNh
bGxiYWNrKGMKICAgICBtX2hlYXBGaW5hbGl6ZXJDYWxsYmFja3MucmVtb3ZlRmlyc3QoY2FsbGJh
Y2spOwogfQogCit2b2lkIEhlYXA6OnNldEJvbnVzVmlzaXRvclRhc2soUmVmUHRyPFNoYXJlZFRh
c2s8dm9pZChTbG90VmlzaXRvciYpPj4gdGFzaykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbWFya2luZ011dGV4KTsKKyAgICBtX2JvbnVzVmlzaXRvclRhc2sgPSB0YXNrOworICAg
IG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworfQorCit2b2lkIEhlYXA6
OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+
IHRhc2spCit7CisgICAgdW5zaWduZWQgaW5pdGlhbFJlZkNvdW50ID0gdGFzay0+cmVmQ291bnQo
KTsKKyAgICBzZXRCb251c1Zpc2l0b3JUYXNrKHRhc2spOworICAgIHRhc2stPnJ1bigqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7CisgICAgc2V0Qm9udXNWaXNpdG9yVGFzayhudWxscHRyKTsKKyAg
ICAvLyBUaGUgY29uc3RyYWludCBzb2x2ZXIgZXhwZWN0cyByZXR1cm4gb2YgdGhpcyBmdW5jdGlv
biB0byBpbXBseSB0ZXJtaW5hdGlvbiBvZiB0aGUgdGFzayBpbiBhbGwKKyAgICAvLyB0aHJlYWRz
LiBUaGlzIGVuc3VyZXMgdGhhdCBwcm9wZXJ0eS4KKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9tYXJraW5nTXV0ZXgpOworICAgICAgICB3aGlsZSAodGFzay0+cmVmQ291
bnQoKSA+IGluaXRpYWxSZWZDb3VudCkKKyAgICAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLndhaXQobV9tYXJraW5nTXV0ZXgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjU1MTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKICNpbmNsdWRlICJXZWFr
UmVmZXJlbmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgor
I2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CkBAIC03Myw2ICs3NCw3IEBAIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiBjbGFzcyBNYWNoaW5lVGhyZWFkczsKIGNsYXNzIE1hcmtTdGFja0FycmF5
OworY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJrZWRBbGxvY2F0
b3I7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50
OwpAQCAtMTE0LDcgKzExNiw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
c190aW1lQ2hlY2tSZXNvbHV0aW9uID0gMTY7CiAKICAgICBzdGF0aWMgYm9vbCBpc01hcmtlZChj
b25zdCB2b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoY29uc3Qg
dm9pZCopOwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcFZlcnNpb24sIGNv
bnN0IHZvaWQqKTsKICAgICAKICAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKGNvbnN0IHZvaWQq
KTsKQEAgLTE1NCw3ICsxNTUsOCBAQCBwdWJsaWM6CiAgICAgTXV0YXRvclN0YXRlIG11dGF0b3JT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YXRlOyB9CiAgICAgc3RkOjpvcHRpb25h
bDxDb2xsZWN0aW9uU2NvcGU+IGNvbGxlY3Rpb25TY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29s
bGVjdGlvblNjb3BlOyB9CiAgICAgYm9vbCBoYXNIZWFwQWNjZXNzKCkgY29uc3Q7Ci0gICAgYm9v
bCBjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpIGNvbnN0OworICAgIGJv
b2wgd29ybGRJc1N0b3BwZWQoKSBjb25zdDsKKyAgICBib29sIHdvcmxkSXNSdW5uaW5nKCkgY29u
c3QgeyByZXR1cm4gIXdvcmxkSXNTdG9wcGVkKCk7IH0KIAogICAgIC8vIFdlJ3JlIGFsd2F5cyBi
dXN5IG9uIHRoZSBjb2xsZWN0aW9uIHRocmVhZHMuIE9uIHRoZSBtYWluIHRocmVhZCwgdGhpcyBy
ZXR1cm5zIHRydWUgaWYgd2UncmUKICAgICAvLyBoZWxwaW5nIGhlYXAuCkBAIC0zNDksNiArMzUx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWxsb3dDb2xsZWN0aW9uKCk7CiAgICAgCiAgICAgdWlu
dDY0X3QgbXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JF
eGVjdXRpb25WZXJzaW9uOyB9CisgICAgdWludDY0X3QgcGhhc2VWZXJzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9waGFzZVZlcnNpb247IH0KICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4p
OwogICAgIApAQCAtMzU4LDYgKzM2MSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRI
ZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJik7CiAgICAg
dm9pZCByZW1vdmVIZWFwRmluYWxpemVyQ2FsbGJhY2soY29uc3QgSGVhcEZpbmFsaXplckNhbGxi
YWNrJik7CisgICAgCisgICAgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KKyAgICB2b2lkIHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbChjb25zdCBGdW5jJiBmdW5jKQorICAg
IHsKKyAgICAgICAgcnVuVGFza0luUGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzazx2b2lkKFNsb3RW
aXNpdG9yJik+KGZ1bmMpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIHZvaWQgZm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmKTsKIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgQWxsb2NhdGluZ1Njb3BlOwpAQCAtMzczLDYgKzM4Nyw3IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBWZXJpZmllcjsKICAgICBmcmllbmQgY2xhc3MgSklU
U3R1YlJvdXRpbmU7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKyAg
ICBmcmllbmQgY2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ7CiAgICAgZnJpZW5kIGNs
YXNzIE1hcmtlZFNwYWNlOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAgICAg
ZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwpAQCAtNTI1LDggKzU0MCwxMCBAQCBwcml2YXRlOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5k
Q29tcGlsaW5nQ29kZUJsb2Nrc1dpdGhvdXRIb2xkaW5nTG9ja3MoY29uc3QgRnVuYyYpOwogICAg
IAotICAgIHZvaWQgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0VtcHR5KCk7CisgICAgdm9pZCBhc3Nl
cnRNYXJrU3RhY2tzRW1wdHkoKTsKIAorICAgIHZvaWQgc2V0Qm9udXNWaXNpdG9yVGFzayhSZWZQ
dHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pik7CisgICAgCiAgICAgY29uc3QgSGVh
cFR5cGUgbV9oZWFwVHlwZTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwogICAgIGNvbnN0
IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CkBAIC01NzksOSArNTk2LDYgQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8U2xvdFZpc2l0b3IqPiBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3Jz
OwogICAgIExvY2sgbV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jazsKICAgICAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgZm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMm
KTsKLQogICAgIEhhbmRsZVNldCBtX2hhbmRsZVNldDsKICAgICBIYW5kbGVTdGFjayBtX2hhbmRs
ZVN0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQmxvY2tTZXQ+IG1fY29kZUJsb2NrczsK
QEAgLTYzMyw4ICs2NDcsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZXYWl0
aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0IHsgZmFsc2UgfTsKIAotICAgIExvY2sgbV9vcGFxdWVSb290c011dGV4OwotICAgIEhh
c2hTZXQ8Y29uc3Qgdm9pZCo+IG1fb3BhcXVlUm9vdHM7CisgICAgQ29uY3VycmVudFB0ckhhc2hT
ZXQgbV9vcGFxdWVSb290czsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja0ZyYWdt
ZW50TGVuZ3RoID0gMzI7CiAKQEAgLTY0Miw2ICs2NTUsNyBAQCBwcml2YXRlOgogICAgIExpc3Rh
YmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29uZGl0aW9uYWxG
aW5hbGl6ZXJzOwogCiAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQgbV9oZWxwZXJDbGllbnQ7Cisg
ICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gbV9ib251c1Zpc2l0b3JU
YXNrOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIHNpemVfdCBtX2Jsb2NrQnl0
ZXNBbGxvY2F0ZWQgeyAwIH07CkBAIC02NTcsNyArNjcxLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbmVlZEZpbmFsaXplQml0ID0gMXUgPDwgNHU7CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG11dGF0b3JXYWl0aW5nQml0ID0gMXUgPDwgNXU7IC8vIEFsbG93cyB0
aGUgbXV0YXRvciB0byB1c2UgdGhpcyBhcyBhIGNvbmRpdGlvbiB2YXJpYWJsZS4KICAgICBBdG9t
aWM8dW5zaWduZWQ+IG1fd29ybGRTdGF0ZTsKLSAgICBib29sIG1fY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV93b3JsZElzU3RvcHBl
ZCB7IGZhbHNlIH07CiAgICAgTW9ub3RvbmljVGltZSBtX2JlZm9yZUdDOwogICAgIE1vbm90b25p
Y1RpbWUgbV9hZnRlckdDOwogICAgIE1vbm90b25pY1RpbWUgbV9zdG9wVGltZTsKQEAgLTY3Miw2
ICs2ODYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV90aHJlYWRJc1N0b3BwaW5nIHsgZmFsc2Ug
fTsKICAgICBib29sIG1fbXV0YXRvckRpZFJ1biB7IHRydWUgfTsKICAgICB1aW50NjRfdCBtX211
dGF0b3JFeGVjdXRpb25WZXJzaW9uIHsgMCB9OworICAgIHVpbnQ2NF90IG1fcGhhc2VWZXJzaW9u
IHsgMCB9OwogICAgIEJveDxMb2NrPiBtX3RocmVhZExvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRp
Y1RocmVhZENvbmRpdGlvbj4gbV90aHJlYWRDb25kaXRpb247IC8vIFRoZSBtdXRhdG9yIG11c3Qg
bm90IHdhaXQgb24gdGhpcy4gSXQgd291bGQgY2F1c2UgYSBkZWFkbG9jay4KICAgICBSZWZQdHI8
QXV0b21hdGljVGhyZWFkPiBtX3RocmVhZDsKQEAgLTY5Myw2ICs3MDgsNyBAQCBwcml2YXRlOgog
ICAgIHVpbnRwdHJfdCBtX2JhcnJpZXJzRXhlY3V0ZWQgeyAwIH07CiAgICAgCiAgICAgQ3VycmVu
dFRocmVhZFN0YXRlKiBtX2N1cnJlbnRUaHJlYWRTdGF0ZSB7IG51bGxwdHIgfTsKKyAgICBXVEY6
OlRocmVhZCogbV9jdXJyZW50VGhyZWFkIHsgbnVsbHB0ciB9OyAvLyBJdCdzIE9LIGlmIHRoaXMg
YmVjb21lcyBhIGRhbmdsaW5nIHBvaW50ZXIuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjI1
NTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsMzAgKzYzLDIwIEBAIGlubGluZSBib29sIEhlYXA6Omhhc0hlYXBBY2Nl
c3MoKSBjb25zdAogICAgIHJldHVybiBtX3dvcmxkU3RhdGUubG9hZCgpICYgaGFzQWNjZXNzQml0
OwogfQogCi1pbmxpbmUgYm9vbCBIZWFwOjpjb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCgpIGNvbnN0CitpbmxpbmUgYm9vbCBIZWFwOjp3b3JsZElzU3RvcHBlZCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQ7
CisgICAgcmV0dXJuIG1fd29ybGRJc1N0b3BwZWQ7CiB9CiAKKy8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBhbiBpbnN0YW5jZSBtZXRob2QsIHNvIHRoYXQgaXQgY2FuIGdldCB0aGUgbWFya2luZ1Zl
cnNpb24oKSBxdWlja2x5LgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3OTk4OAogQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQq
IHJhd0NlbGwpCiB7Ci0gICAgQVNTRVJUKG1heUJlR0NUaHJlYWQoKSAhPSBHQ1RocmVhZFR5cGU6
OkhlbHBlcik7CiAgICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihy
YXdDZWxsKTsKICAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkKICAgICAgICAgcmV0
dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7CiAgICAgTWFya2VkQmxvY2sm
IGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKLSAgICByZXR1cm4gYmxvY2suaXNNYXJrZWQo
Ci0gICAgICAgIGJsb2NrLnZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigp
LCBjZWxsKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KGNvbnN0IHZvaWQqIHJhd0NlbGwpCi17Ci0gICAgSGVhcENlbGwqIGNlbGwgPSBiaXR3aXNl
X2Nhc3Q8SGVhcENlbGwqPihyYXdDZWxsKTsKLSAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2VkKCk7
Ci0gICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKLSAgICByZXR1
cm4gYmxvY2suaXNNYXJrZWRDb25jdXJyZW50bHkoCi0gICAgICAgIGJsb2NrLnZtKCktPmhlYXAu
b2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpLCBjZWxsKTsKKyAgICByZXR1cm4gYmxvY2su
aXNNYXJrZWQoYmxvY2sudm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCks
IGNlbGwpOwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6dGVzdEFuZFNldE1hcmtlZChI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcmF3Q2VsbCkKQEAgLTE3OSwx
OSArMTY5LDE5IEBAIGlubGluZSB2b2lkIEhlYXA6OnJlbGVhc2VTb29uKFJldGFpblB0cjwKIAog
aW5saW5lIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7Ci0gICAgQVNTRVJU
KCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7
CiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OmRlY3JlbWVu
dERlZmVycmFsRGVwdGgoKQogewotICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1fY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOworICAgIEFTU0VSVCghbWF5QmVH
Q1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwogICAgIG1fZGVmZXJyYWxEZXB0aC0tOwog
fQogCiBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRl
ZCgpCiB7Ci0gICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV9jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwg
bV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiAgICAgCiAgICAgaWYg
KFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspKSB7CkBAIC0yNjksNCArMjU5LDE0IEBAIGlubGlu
ZSB2b2lkIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeSgpCiAgICAgICAgIHN0b3BJZk5lY2Vzc2FyeVNs
b3coKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgSGVhcDo6Zm9yRWFjaFNs
b3RWaXNpdG9yKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RW
aXNpdG9yKTsKKyAgICBmdW5jKCptX211dGF0b3JTbG90VmlzaXRvcik7CisgICAgZm9yIChhdXRv
JiBzbG90VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgIGZ1bmMoKnNs
b3RWaXNpdG9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAkocmV2aXNpb24g
MjI1NTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBIZWFwU25hcHNob3RC
dWlsZGVyOjpidWlsZFNuYXBzaG90KAogdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmRO
b2RlKEpTQ2VsbCogY2VsbCkKIHsKICAgICBBU1NFUlQobV9wcm9maWxlci5hY3RpdmVTbmFwc2hv
dEJ1aWxkZXIoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAKICAgICBpZiAo
aGFzRXhpc3RpbmdOb2RlRm9yQ2VsbChjZWxsKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCShyZXZpc2lvbiAyMjU1MTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4
ICs0Niw4IEBAIHB1YmxpYzoKICAgICAvLyBiZWZvcmUgbGl2ZW5lc3MgZGF0YSBpcyBjbGVhcmVk
IHRvIGJlIGFjY3VyYXRlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgc3RhdGlj
IHZvaWQgZmluZEdDT2JqZWN0UG9pbnRlcnNGb3JNYXJraW5nKAotICAgICAgICBIZWFwJiBoZWFw
LCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgVGlueUJsb29tRmlsdGVyIGZpbHRlciwgdm9p
ZCogcGFzc2VkUG9pbnRlciwKLSAgICAgICAgY29uc3QgRnVuYyYgZnVuYykKKyAgICAgICAgSGVh
cCYgaGVhcCwgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxs
b2NhdGVkVmVyc2lvbiwgVGlueUJsb29tRmlsdGVyIGZpbHRlciwKKyAgICAgICAgdm9pZCogcGFz
c2VkUG9pbnRlciwgY29uc3QgRnVuYyYgZnVuYykKICAgICB7CiAgICAgICAgIGNvbnN0IEhhc2hT
ZXQ8TWFya2VkQmxvY2sqPiYgc2V0ID0gaGVhcC5vYmplY3RTcGFjZSgpLmJsb2NrcygpLnNldCgp
OwogICAgICAgICAKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICYm
IHNldC5jb250YWlucyhwcmV2aW91c0NhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAmJiBwcmV2
aW91c0NhbmRpZGF0ZS0+aGFuZGxlKCkuY2VsbEtpbmQoKSA9PSBIZWFwQ2VsbDo6QXV4aWxpYXJ5
KSB7CiAgICAgICAgICAgICAgICAgcHJldmlvdXNQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KHByZXZpb3VzQ2FuZGlkYXRlLT5oYW5kbGUoKS5jZWxsQWxpZ24ocHJldmlvdXNQb2ludGVyKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2FuZGlkYXRlLT5oYW5kbGUoKS5pc0xpdmVD
ZWxsKG1hcmtpbmdWZXJzaW9uLCBpc01hcmtpbmcsIHByZXZpb3VzUG9pbnRlcikpCisgICAgICAg
ICAgICAgICAgaWYgKHByZXZpb3VzQ2FuZGlkYXRlLT5oYW5kbGUoKS5pc0xpdmVDZWxsKG1hcmtp
bmdWZXJzaW9uLCBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGlzTWFya2luZywgcHJldmlvdXNQb2lu
dGVyKSkKICAgICAgICAgICAgICAgICAgICAgZnVuYyhwcmV2aW91c1BvaW50ZXIpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgYXV0byB0cnlQb2ludGVyID0gWyZdICh2b2lk
KiBwb2ludGVyKSB7Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5oYW5kbGUoKS5pc0xpdmVD
ZWxsKG1hcmtpbmdWZXJzaW9uLCBpc01hcmtpbmcsIHBvaW50ZXIpKQorICAgICAgICAgICAgaWYg
KGNhbmRpZGF0ZS0+aGFuZGxlKCkuaXNMaXZlQ2VsbChtYXJraW5nVmVyc2lvbiwgbmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uLCBpc01hcmtpbmcsIHBvaW50ZXIpKQogICAgICAgICAgICAgICAgIGZ1bmMo
cG9pbnRlcik7CiAgICAgICAgIH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9MYXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDcgKzc2LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZCgpIHsg
cmV0dXJuIG1faXNNYXJrZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsgfQogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2Vk
KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqLCBEZXBlbmRl
bmN5KSB7IHJldHVybiBpc01hcmtlZCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFy
a2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uLCBIZWFwQ2VsbCopIHsgcmV0dXJuIGlzTWFya2Vk
KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24sIEhlYXBD
ZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyByZXR1cm4g
aXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29sIGhhc1Zh
bGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkBAIC0xMTAsNyArMTEw
LDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJp
YnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KICAgICAKLSAgICBEZXBlbmRl
bmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uKSB7IHJldHVybiBudWxsRGVwZW5kZW5jeSgpOyB9
CisgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbikgeyByZXR1cm4gRGVwZW5k
ZW5jeSgpOyB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBib29sIHRlc3RBbmRTZXRNYXJrZWQo
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2tEdXJpbmdNYXJr
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9ja0R1cmlu
Z01hcmtpbmcuaAkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTG9ja0R1cmluZ01hcmtpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxNCArMzMsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIC8vIFVzZSB0aGlzIGxvY2sgc2NvcGUgbGlrZSBzbzoKIC8vIGF1dG8gbG9j
a2VyID0gbG9ja0R1cmluZ01hcmtpbmcoaGVhcCwgbG9jayk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBM
b2NrVHlwZT4KLUxvY2tlcjxMb2NrVHlwZT4gbG9ja0R1cmluZ01hcmtpbmcoSGVhcCYgaGVhcCwg
TG9ja1R5cGUmIHBhc3NlZExvY2spCithdXRvIGxvY2tEdXJpbmdNYXJraW5nKEhlYXAmIGhlYXAs
IExvY2tUeXBlJiBwYXNzZWRMb2NrKQogewotICAgIExvY2tUeXBlKiBsb2NrOwotICAgIGlmICho
ZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpKQotICAgICAgICBsb2NrID0gJnBhc3NlZExvY2s7
Ci0gICAgZWxzZQotICAgICAgICBsb2NrID0gbnVsbHB0cjsKLSAgICByZXR1cm4gTG9ja2VyPExv
Y2tUeXBlPihsb2NrKTsKKyAgICByZXR1cm4gaG9sZExvY2tJZihwYXNzZWRMb2NrLCBoZWFwLm11
dGF0b3JTaG91bGRCZUZlbmNlZCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJ
KHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVT
dGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIE1h
Y2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTCiAgICAgKnNpemUgKz0gc3RhY2suc2Vj
b25kOwogfQogCi1ib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3Mo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCogc2l6ZSkKK2Jvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVh
ZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBidWZmZXIsIHNpemVf
dCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplLCBUaHJlYWQmIGN1cnJlbnRUaHJlYWRGb3JHQykKIHsK
ICAgICAvLyBQcmV2ZW50IHR3byBWTXMgZnJvbSBzdXNwZW5kaW5nIGVhY2ggb3RoZXIncyB0aHJl
YWRzIGF0IHRoZSBzYW1lIHRpbWUsCiAgICAgLy8gd2hpY2ggY2FuIGNhdXNlIGRlYWRsb2NrOiA8
cmRhcjovL3Byb2JsZW0vMjAzMDA4NDI+LgpAQCAtMTQ1LDEzICsxNDUsMTQgQEAgYm9vbCBNYWNo
aW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkUwogICAgICpzaXplID0gMDsKIAogICAgIFRo
cmVhZCYgY3VycmVudFRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwotICAgIGNvbnN0IGF1dG8m
IHRocmVhZHMgPSBtX3RocmVhZEdyb3VwLT50aHJlYWRzKGxvY2tlcik7CisgICAgY29uc3QgTGlz
dEhhc2hTZXQ8UmVmPFRocmVhZD4+JiB0aHJlYWRzID0gbV90aHJlYWRHcm91cC0+dGhyZWFkcyhs
b2NrZXIpOwogICAgIEJpdFZlY3RvciBpc1N1c3BlbmRlZCh0aHJlYWRzLnNpemUoKSk7CiAKICAg
ICB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiB0aHJl
YWQgOiB0aHJlYWRzKSB7Ci0gICAgICAgICAgICBpZiAodGhyZWFkLnB0cigpICE9ICZjdXJyZW50
VGhyZWFkKSB7CisgICAgICAgIGZvciAoY29uc3QgUmVmPFRocmVhZD4mIHRocmVhZCA6IHRocmVh
ZHMpIHsKKyAgICAgICAgICAgIGlmICh0aHJlYWQucHRyKCkgIT0gJmN1cnJlbnRUaHJlYWQKKyAg
ICAgICAgICAgICAgICAmJiB0aHJlYWQucHRyKCkgIT0gJmN1cnJlbnRUaHJlYWRGb3JHQykgewog
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFkLT5zdXNwZW5kKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgaXNTdXNwZW5kZWQuc2V0
KGluZGV4KTsKQEAgLTE5OSw3ICsyMDAsNyBAQCBzdGF0aWMgdm9pZCBncm93QnVmZmVyKHNpemVf
dCBzaXplLCB2b2lkCiAgICAgKmJ1ZmZlciA9IGZhc3RNYWxsb2MoKmNhcGFjaXR5KTsKIH0KIAot
dm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRp
bmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MsIEN1cnJlbnRUaHJlYWRTdGF0ZSogY3VycmVu
dFRocmVhZFN0YXRlKQordm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGluZVNl
dCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MsIEN1cnJlbnRUaHJl
YWRTdGF0ZSogY3VycmVudFRocmVhZFN0YXRlLCBUaHJlYWQqIGN1cnJlbnRUaHJlYWQpCiB7CiAg
ICAgaWYgKGN1cnJlbnRUaHJlYWRTdGF0ZSkKICAgICAgICAgZ2F0aGVyRnJvbUN1cnJlbnRUaHJl
YWQoY29uc2VydmF0aXZlUm9vdHMsIGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2NrcywgKmN1cnJl
bnRUaHJlYWRTdGF0ZSk7CkBAIC0yMDgsNyArMjA5LDcgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6
Z2F0aGVyQ29uc2VydmF0aXZlUgogICAgIHNpemVfdCBjYXBhY2l0eSA9IDA7CiAgICAgdm9pZCog
YnVmZmVyID0gbnVsbHB0cjsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fdGhyZWFkR3Jv
dXAtPmdldExvY2soKSk7Ci0gICAgd2hpbGUgKCF0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MobG9j
a2VyLCBidWZmZXIsIGNhcGFjaXR5LCAmc2l6ZSkpCisgICAgd2hpbGUgKCF0cnlDb3B5T3RoZXJU
aHJlYWRTdGFja3MobG9ja2VyLCBidWZmZXIsIGNhcGFjaXR5LCAmc2l6ZSwgKmN1cnJlbnRUaHJl
YWQpKQogICAgICAgICBncm93QnVmZmVyKHNpemUsICZidWZmZXIsICZjYXBhY2l0eSk7CiAKICAg
ICBpZiAoIWJ1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVT
dGFja01hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
Y2hpbmVTdGFja01hcmtlci5oCShyZXZpc2lvbiAyMjU1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyAr
NDQsNyBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiBwdWJsaWM6CiAgICAgTWFjaGluZVRocmVh
ZHMoKTsKIAotICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0
ZSopOworICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
LCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSos
IFRocmVhZCopOwogCiAgICAgLy8gT25seSBuZWVkcyB0byBiZSBjYWxsZWQgYnkgY2xpZW50cyB0
aGF0IGNhbiB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCiAgICAgdm9p
ZCBhZGRDdXJyZW50VGhyZWFkKCkgeyBtX3RocmVhZEdyb3VwLT5hZGRDdXJyZW50VGhyZWFkKCk7
IH0KQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdhdGhlckZyb21DdXJyZW50
VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tT
ZXQmLCBDdXJyZW50VGhyZWFkU3RhdGUmKTsKIAogICAgIHZvaWQgdHJ5Q29weU90aGVyVGhyZWFk
U3RhY2soVGhyZWFkJiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7Ci0gICAgYm9v
bCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiwg
c2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKKyAgICBib29sIHRyeUNvcHlPdGhlclRocmVhZFN0
YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBzaXplX3QgY2FwYWNpdHksIHNpemVf
dCosIFRocmVhZCYpOwogCiAgICAgc3RkOjpzaGFyZWRfcHRyPFRocmVhZEdyb3VwPiBtX3RocmVh
ZEdyb3VwOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludChIZWFwJiBoZWFwKQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQoIk1zbSIsICJN
YXJrIFN0YWNrIE1lcmdpbmciLCBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlFeGVjdXRp
b24pCisgICAgLCBtX2hlYXAoaGVhcCkKK3sKK30KKworTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQ6On5NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCgpCit7Cit9CisKK2RvdWJsZSBNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludDo6cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImKQorewor
ICAgIHJldHVybiBtX2hlYXAubV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX2hlYXAubV9y
YWNlTWFya1N0YWNrLT5zaXplKCk7Cit9CisKK3ZvaWQgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQ6OnByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgLy8gTG9nZ2luZyB0aGUgd29yayBoZXJlIGVuc3VyZXMgdGhh
dCB0aGUgY29uc3RyYWludCBzb2x2ZXIga25vd3MgdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8gcHJv
ZHVjZQorICAgIC8vIGFueW1vcmUgd29yay4KKyAgICBzaXplX3Qgc2l6ZSA9IG1faGVhcC5tX211
dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1faGVhcC5tX3JhY2VNYXJrU3RhY2stPnNpemUoKTsK
KyAgICB2aXNpdG9yLmFkZFRvVmlzaXRDb3VudChzaXplKTsKKyAgICAKKyAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIHNpemUsICIpIik7Cit9CisKK0NvbnN0
cmFpbnRQYXJhbGxlbGlzbSBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6ZXhlY3V0ZUltcGwo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9oZWFwLm1fbXV0YXRvck1hcmtTdGFjay0+
dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CisgICAgbV9oZWFwLm1fcmFj
ZU1hcmtTdGFjay0+dHJhbnNmZXJUbyh2aXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CisgICAg
cmV0dXJuIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2VxdWVudGlhbDsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBN
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7Citw
dWJsaWM6CisgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYpOworICAgIH5NYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludCgpOworICAgIAorICAgIGRvdWJsZSBxdWlja1dvcmtFc3Rp
bWF0ZShTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQg
cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2
aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIENvbnN0cmFpbnRQYXJhbGxl
bGlzbSBleGVjdXRlSW1wbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToK
KyAgICBIZWFwJiBtX2hlYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lv
biAyMjU1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgTWFya2VkQWxsb2NhdG9y
Ojppc1BhZ2VkT3V0KGRvdWJsZSAKICAgICB1bnNpZ25lZCBpdGVyc1NpbmNlTGFzdFRpbWVDaGVj
ayA9IDA7CiAgICAgZm9yIChhdXRvKiBibG9jayA6IG1fYmxvY2tzKSB7CiAgICAgICAgIGlmIChi
bG9jaykKLSAgICAgICAgICAgIGJsb2NrLT5ibG9jaygpLnVwZGF0ZU5lZWRzRGVzdHJ1Y3Rpb24o
KTsKKyAgICAgICAgICAgIGhvbGRMb2NrKGJsb2NrLT5ibG9jaygpLmxvY2soKSk7CiAgICAgICAg
ICsraXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2s7CiAgICAgICAgIGlmIChpdGVyc1NpbmNlTGFzdFRp
bWVDaGVjayA+PSBIZWFwOjpzX3RpbWVDaGVja1Jlc29sdXRpb24pIHsKICAgICAgICAgICAgIGRv
dWJsZSBjdXJyZW50VGltZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CkBA
IC00NDQsNiArNDQ0LDMzIEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphc3NlcnROb1Vuc3dlcHQo
KQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJr
ZWRCbG9jazo6SGFuZGxlKigpPj4gTWFya2VkQWxsb2NhdG9yOjpwYXJhbGxlbE5vdEVtcHR5Qmxv
Y2tTb3VyY2UoKQoreworICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazxNYXJrZWRC
bG9jazo6SGFuZGxlKigpPiB7CisgICAgcHVibGljOgorICAgICAgICBUYXNrKE1hcmtlZEFsbG9j
YXRvciYgYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogcnVuKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgbV9pbmRleCA9IG1fYWxsb2NhdG9yLm1fbWFy
a2luZ05vdEVtcHR5LmZpbmRCaXQobV9pbmRleCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9p
bmRleCA+PSBtX2FsbG9jYXRvci5tX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IubV9ibG9ja3NbbV9p
bmRleCsrXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJr
ZWRBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsK
KyAgICAgICAgTG9jayBtX2xvY2s7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRhc2soKnRoaXMpKTsKK30KKwogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoi
LCBtX2NlbGxTaXplLCAiLyIsIG1fYXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI1NTE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvU2hhcmVkVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC0xMDMsNiArMTA0LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICAKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4g
cGFyYWxsZWxOb3RFbXB0eUJsb2NrU291cmNlKCk7CisgICAgCiAgICAgdm9pZCBhZGRCbG9jayhN
YXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9jazo6
SGFuZGxlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsOSArODYsOSBAQCBNYXJrZWRCbG9j
azo6SGFuZGxlOjp+SGFuZGxlKCkKIH0KIAogTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKFZNJiB2
bSwgSGFuZGxlJiBoYW5kbGUpCi0gICAgOiBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjpu
dWxsVmVyc2lvbikKLSAgICAsIG1faGFuZGxlKGhhbmRsZSkKKyAgICA6IG1faGFuZGxlKGhhbmRs
ZSkKICAgICAsIG1fdm0oJnZtKQorICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6
bnVsbFZlcnNpb24pCiB7CiAgICAgaWYgKGZhbHNlKQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50
ZXIodGhpcyksICI6IEFsbG9jYXRlZC5cbiIpOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6emFwKGNvbnN0IEZyZWUKIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0
VG9NYXJrU2xvdyhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKICAgICBBU1NFUlQodm0o
KS0+aGVhcC5vYmplY3RTcGFjZSgpLmlzTWFya2luZygpKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2xvY2spOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAKICAg
ICBpZiAoIWFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pKQogICAgICAgICByZXR1cm47CkBA
IC0yMjMsMTUgKzIyMywxOSBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVh
cFZlCiAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5nIHRoaW5n
cy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBzcGFj
ZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICAgICAgaWYgKGhhbmRsZSgpLm1fbmV3
bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikgewotICAgICAgICAg
ICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5ld2x5QWxsb2NhdGVkLiBJ
ZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKLSAgICAgICAgICAgIC8vIHRoZW4gaW52YWxp
ZGF0ZSBuZXdseUFsbG9jYXRlZCBhbmQgc2V0IGFsbG9jYXRlZC4KLSAgICAgICAgICAgIGhhbmRs
ZSgpLm1fbmV3bHlBbGxvY2F0ZWQubWVyZ2VBbmRDbGVhcihtX21hcmtzKTsKKyAgICAgICAgICAg
IC8vIFdoZW4gZG8gd2UgZ2V0IGhlcmU/IFRoZSBibG9jayBjb3VsZCBub3QgaGF2ZSBiZWVuIGZp
bGxlZCB1cC4gVGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMgd291bGQKKyAgICAgICAgICAgIC8vIGhh
dmUgaGFkIHRvIGJlIGNyZWF0ZWQgc2luY2UgdGhlIGVuZCBvZiB0aGUgbGFzdCBjb2xsZWN0aW9u
LiBUaGUgb25seSB0aGluZ3MgdGhhdCBjcmVhdGUKKyAgICAgICAgICAgIC8vIHRoZW0gYXJlIGFi
b3V0VG9NYXJrU2xvdywgbGFzdENoYW5jZVRvRmluYWxpemUsIGFuZCBzdG9wQWxsb2NhdGluZy4g
SWYgaXQgaGFkIGJlZW4KKyAgICAgICAgICAgIC8vIGFib3V0VG9NYXJrU2xvdywgdGhlbiB3ZSBz
aG91bGRuJ3QgYmUgaGVyZSBzaW5jZSB0aGUgbWFya3Mgd291bGRuJ3QgYmUgc3RhbGUgYW55bW9y
ZS4gSXQKKyAgICAgICAgICAgIC8vIGNhbm5vdCBiZSBsYXN0Q2hhbmNlVG9GaW5hbGl6ZS4gU28g
aXQgbXVzdCBiZSBzdG9wQWxsb2NhdGluZy4gVGhhdCBtZWFucyB0aGF0IHdlIGp1c3QKKyAgICAg
ICAgICAgIC8vIGNvbXB1dGVkIHRoZSBuZXdseUFsbG9jYXRlZCBiaXRzIGp1c3QgYmVmb3JlIHRo
ZSBzdGFydCBvZiBhbiBpbmNyZW1lbnQuIFdoZW4gd2UgYXJlIGluIHRoYXQKKyAgICAgICAgICAg
IC8vIG1vZGUsIGl0IHNlZW1zIGFzIGlmIG5ld2x5QWxsb2NhdGVkIHNob3VsZCBzdWJzdW1lIG1h
cmtzLgorICAgICAgICAgICAgQVNTRVJUKGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWQuc3Vic3Vt
ZXMobV9tYXJrcykpOworICAgICAgICAgICAgbV9tYXJrcy5jbGVhckFsbCgpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgY29udGVudHMgb2YgbmV3bHlBbGxv
Y2F0ZWQgd2l0aCBtYXJrZWQuIElmIHdlIGdldCB0aGUgZnVsbCBzZXQgb2YKLSAgICAgICAgICAg
IC8vIGJpdHMgdGhlbiBpbnZhbGlkYXRlIG5ld2x5QWxsb2NhdGVkIGFuZCBzZXQgYWxsb2NhdGVk
LgogICAgICAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zZXRBbmRDbGVhcihtX21h
cmtzKTsKKyAgICAgICAgICAgIGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gbmV3
bHlBbGxvY2F0ZWRWZXJzaW9uOwogICAgICAgICB9Ci0gICAgICAgIGhhbmRsZSgpLm1fbmV3bHlB
bGxvY2F0ZWRWZXJzaW9uID0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOwogICAgIH0KICAgICBjbGVh
ckhhc0FueU1hcmtlZCgpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC0zMjEsMTEg
KzMyNSw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVtb3ZlRnJvbUFsbG8KICAgICBt
X2FsbG9jYXRvci0+cmVtb3ZlQmxvY2sodGhpcyk7CiB9CiAKLXZvaWQgTWFya2VkQmxvY2s6OnVw
ZGF0ZU5lZWRzRGVzdHJ1Y3Rpb24oKQotewotICAgIG1fbmVlZHNEZXN0cnVjdGlvbiA9IGhhbmRs
ZSgpLm5lZWRzRGVzdHJ1Y3Rpb24oKTsKLX0KLQogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpk
aWRBZGRUb0FsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciwgc2l6ZV90IGluZGV4
KQogewogICAgIEFTU0VSVChtX2luZGV4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCkpOwpAQCAtMzQ1LDggKzM0NCw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlk
QWRkVG9BbGxvY2EKICAgICBpZiAobV9hdHRyaWJ1dGVzLmNlbGxLaW5kICE9IEhlYXBDZWxsOjpK
U0NlbGwpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9
PSBEb2VzTm90TmVlZERlc3RydWN0aW9uKTsKICAgICAKLSAgICBibG9jaygpLnVwZGF0ZU5lZWRz
RGVzdHJ1Y3Rpb24oKTsKLSAgICAKICAgICBkb3VibGUgbWFya0NvdW50QmlhcyA9IC0oT3B0aW9u
czo6bWluTWFya2VkQmxvY2tVdGlsaXphdGlvbigpICogY2VsbHNQZXJCbG9jaygpKTsKICAgICAK
ICAgICAvLyBUaGUgbWFyayBjb3VudCBiaWFzIHNob3VsZCBiZSBjb21mb3J0YWJseSB3aXRoaW4g
dGhpcyByYW5nZS4KQEAgLTM2NiwxNiArMzYzLDYgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpkaWRSZW1vdmVGcm9tQQogICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKIH0KIAotYm9vbCBN
YXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoY29uc3QgSGVhcENlbGwqIGNlbGwpCi17Ci0gICAg
cmV0dXJuIGlzTGl2ZShzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCBzcGFjZSgpLT5pc01hcmtp
bmcoKSwgY2VsbCk7Ci19Ci0KLWJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChj
b25zdCB2b2lkKiBwKQotewotICAgIHJldHVybiBpc0xpdmVDZWxsKHNwYWNlKCktPm1hcmtpbmdW
ZXJzaW9uKCksIHNwYWNlKCktPmlzTWFya2luZygpLCBwKTsKLX0KLQogI2lmICFBU1NFUlRfRElT
QUJMRUQKIHZvaWQgTWFya2VkQmxvY2s6OmFzc2VydFZhbGlkQ2VsbChWTSYgdm0sIEhlYXBDZWxs
KiBjZWxsKSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCShyZXZpc2lvbiAyMjU1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ291bnRpbmdMb2NrLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2MSw4ICsxNjIsOCBA
QCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBtYXJrQ291bnQoKTsKICAgICAgICAgc2l6ZV90IHNp
emUoKTsKICAgICAgICAgCi0gICAgICAgIGlubGluZSBib29sIGlzTGl2ZShIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7Ci0gICAgICAg
IGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGJvb2wg
aXNNYXJraW5nLCBjb25zdCB2b2lkKik7CisgICAgICAgIGJvb2wgaXNMaXZlKEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGJvb2wg
aXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCopOworICAgICAgICBpbmxpbmUgYm9vbCBpc0xpdmVD
ZWxsKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRl
ZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCB2b2lkKik7CiAKICAgICAgICAgYm9vbCBp
c0xpdmUoY29uc3QgSGVhcENlbGwqKTsKICAgICAgICAgYm9vbCBpc0xpdmVDZWxsKGNvbnN0IHZv
aWQqKTsKQEAgLTI1OCw3ICsyNTksNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTWFya2VkKGNv
bnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
LCBjb25zdCB2b2lkKik7Ci0gICAgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qg
dm9pZCosIERlcGVuZGVuY3kpOwogICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lk
KiwgRGVwZW5kZW5jeSk7CiAgICAgICAgIApAQCAtMjgwLDcgKzI4MCw2IEBAIHB1YmxpYzoKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgYXJlTWFya3NTdGFsZSgpOwogICAgIGJvb2wgYXJl
TWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7Ci0gICAgRGVwZW5kZW5jeVdp
dGg8Ym9vbD4gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uKTsKICAgICAKICAgICBEZXBlbmRlbmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKTsKICAgICAgICAgCkBAIC0yOTAsMTUgKzI4OSwxMiBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhc3NlcnRNYXJrc05vdFN0YWxlKCk7CiAjZW5kaWYK
ICAgICAgICAgCi0gICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9u
ZWVkc0Rlc3RydWN0aW9uOyB9Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB1c3VhbGx5IGEgbm8tb3As
IGFuZCB3ZSB1c2UgaXQgYXMgYSBuby1vcCB0aGF0IHRvdWNoZXMgdGhlIHBhZ2UgaW4gaXNQYWdl
ZE91dCgpLgotICAgIHZvaWQgdXBkYXRlTmVlZHNEZXN0cnVjdGlvbigpOwotICAgIAogICAgIHZv
aWQgcmVzZXRNYXJrcygpOwogICAgIAogICAgIGJvb2wgaXNNYXJrZWRSYXcoY29uc3Qgdm9pZCog
cCk7CiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21h
cmtpbmdWZXJzaW9uOyB9CisgICAgCisgICAgQ291bnRpbmdMb2NrJiBsb2NrKCkgeyByZXR1cm4g
bV9sb2NrOyB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tQWxpZ25t
ZW50TWFzayA9IGF0b21TaXplIC0gMTsKQEAgLTMxNCwxMSArMzEwLDEyIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBub3RlTWFya2VkU2xvdygpOwogICAgIAogICAgIGlubGluZSBib29sIG1hcmtzQ29u
dmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKKyAg
ICBpbmxpbmUgYm9vbCBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lv
biBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgICAg
IAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CisgICAgSGFuZGxlJiBt
X2hhbmRsZTsKKyAgICBWTSogbV92bTsKIAotICAgIGJvb2wgbV9uZWVkc0Rlc3RydWN0aW9uOwot
ICAgIExvY2sgbV9sb2NrOworICAgIENvdW50aW5nTG9jayBtX2xvY2s7CiAgICAgCiAgICAgLy8g
VGhlIGFjdHVhbCBtYXJrIGNvdW50IGNhbiBiZSBjb21wdXRlZCBieSBkb2luZzogbV9iaWFzZWRN
YXJrQ291bnQgLSBtX21hcmtDb3VudEJpYXMuIE5vdGUKICAgICAvLyB0aGF0IHRoaXMgY291bnQg
aXMgcmFjeS4gSXQgd2lsbCBhY2N1cmF0ZWx5IGRldGVjdCB3aGV0aGVyIG9yIG5vdCBleGFjdGx5
IHplcm8gdGhpbmdzIHdlcmUKQEAgLTM0OCw5ICszNDUsOCBAQCBwcml2YXRlOgogICAgIGludDE2
X3QgbV9tYXJrQ291bnRCaWFzOwogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsK
LSAgICAKLSAgICBIYW5kbGUmIG1faGFuZGxlOwotICAgIFZNKiBtX3ZtOworCisgICAgV1RGOjpC
aXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKIH07CiAKIGlubGluZSBNYXJrZWRCbG9jazo6
SGFuZGxlJiBNYXJrZWRCbG9jazo6aGFuZGxlKCkKQEAgLTQ5OCwxOCArNDk0LDEyIEBAIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKEgKICAgICByZXR1cm4gbWFya2luZ1Zl
cnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5
V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQotewotICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21h
cmtpbmdWZXJzaW9uOwotICAgIHJldHVybiBkZXBlbmRlbmN5V2l0aChkZXBlbmRlbmN5KHZlcnNp
b24pLCB2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKTsKLX0KLQogaW5saW5lIERlcGVuZGVuY3kg
TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewot
ICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkocmVzdWx0LnZhbHVlKSkKKyAgICBIZWFwVmVyc2lvbiB2
ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBt
YXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFib3V0VG9NYXJrU2xvdyhtYXJraW5nVmVyc2lvbik7
Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRlbmN5OworICAgIHJldHVybiBEZXBlbmRlbmN5Ojpm
ZW5jZSh2ZXJzaW9uKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNz
ZXJ0TWFya3NOb3RTdGFsZSgpCkBAIC01MjQsMTUgKzUxNCwxMCBAQCBpbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6aXNNYXJrZWRSYXcoY29uCiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01h
cmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKIHsKLSAgICBy
ZXR1cm4gYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbikgPyBmYWxzZSA6IGlzTWFya2VkUmF3
KHApOwotfQotCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHko
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCi17Ci0gICAgYXV0byBy
ZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwotICAg
IGlmIChyZXN1bHQudmFsdWUpCisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1Zl
cnNpb247CisgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCks
IHJlc3VsdC5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihw
KSwgRGVwZW5kZW5jeTo6ZmVuY2UodmVyc2lvbikpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJ
KHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxMSBAQCBpbmxpbmUgTWFy
a2VkU3BhY2UqIE1hcmtlZEJsb2NrOjpIYW5kbGU6CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2Nr
OjptYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbikKIHsKKyAgICByZXR1cm4gbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobV9t
YXJraW5nVmVyc2lvbiwgbWFya2luZ1ZlcnNpb24pOworfQorCitpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6bWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoSGVhcFZlcnNpb24gbXlNYXJr
aW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCit7CiAgICAgLy8gVGhpcyBy
ZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZXNlIGlzIHRydWU6CiAgICAgLy8gLSBXZSBqdXN0IGNy
ZWF0ZWQgdGhlIGJsb2NrIGFuZCBzbyB0aGUgYml0cyBhcmUgY2xlYXIgYWxyZWFkeS4KICAgICAv
LyAtIFRoaXMgYmxvY2sgaGFzIG9iamVjdHMgbWFya2VkIGR1cmluZyB0aGUgbGFzdCBHQywgYW5k
IHNvIGl0cyB2ZXJzaW9uIHdhcyB1cC10by1kYXRlIGp1c3QKQEAgLTgyLDM5ICs4NywxMTQgQEAg
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAgIEFTU0VSVChzcGFj
ZSgpLT5pc01hcmtpbmcoKSk7CiAgICAgaWYgKGhlYXAoKS0+Y29sbGVjdGlvblNjb3BlKCkgIT0g
Q29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IG1fbWFya2luZ1ZlcnNpb24gPT0gTWFya2VkU3BhY2U6Om51bGxWZXJzaW9uCi0gICAgICAgIHx8
IE1hcmtlZFNwYWNlOjpuZXh0VmVyc2lvbihtX21hcmtpbmdWZXJzaW9uKSA9PSBtYXJraW5nVmVy
c2lvbjsKKyAgICByZXR1cm4gbXlNYXJraW5nVmVyc2lvbiA9PSBNYXJrZWRTcGFjZTo6bnVsbFZl
cnNpb24KKyAgICAgICAgfHwgTWFya2VkU3BhY2U6Om5leHRWZXJzaW9uKG15TWFya2luZ1ZlcnNp
b24pID09IG1hcmtpbmdWZXJzaW9uOwogfQogCi1pbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBj
b25zdCBIZWFwQ2VsbCogY2VsbCkKK0FMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5
QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQog
ewotICAgIEFTU0VSVCghaXNGcmVlTGlzdGVkKCkpOwotICAgIAotICAgIGlmIChVTkxJS0VMWSho
YXNBbnlOZXdseUFsbG9jYXRlZCgpKSkgewotICAgICAgICBpZiAoaXNOZXdseUFsbG9jYXRlZChj
ZWxsKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKICAgICBpZiAoYWxs
b2NhdG9yKCktPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAorICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyB3aGlsZSBob2xk
aW5nIHRoZSBsb2NrIGJlY2F1c2UgbWFya3MgbWlnaHQgYmUgc3RhbGUuIEluIHRoYXQgY2FzZSwg
bmV3bHkKKyAgICAvLyBhbGxvY2F0ZWQgd2lsbCBub3QgeWV0IGJlIHZhbGlkLiBDb25zaWRlciB0
aGlzIGludGVybGVhdmluZy4KKyAgICAvLyAKKyAgICAvLyBPbmUgdGhyZWFkIGlzIGRvaW5nIHRo
aXM6CisgICAgLy8KKyAgICAvLyAxKSBJc0xpdmVDaGVja3NOZXdseUFsbG9jYXRlZDogV2UgY2hl
Y2sgaWYgbmV3bHkgYWxsb2NhdGVkIGlzIHZhbGlkLiBJZiBpdCBpcyB2YWxpZCwgYW5kIHRoZSBi
aXQgaXMKKyAgICAvLyAgICBzZXQsIHdlIHJldHVybiB0cnVlLiBMZXQncyBhc3N1bWUgdGhhdCB0
aGlzIGV4ZWN1dGVzIGF0b21pY2FsbHkuIEl0IGRvZXNuJ3QgaGF2ZSB0byBpbiBnZW5lcmFsLAor
ICAgIC8vICAgIGJ1dCB3ZSBjYW4gYXNzdW1lIHRoYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHNlZWlu
ZyB0aGlzIGJ1Zy4KKyAgICAvLworICAgIC8vIDIpIElzTGl2ZUNoZWNrc01hcmtzOiBIYXZpbmcg
ZmFpbGVkIHRoYXQsIHdlIGNoZWNrIHRoZSBtYXJrIGJpdHMuIFRoaXMgc3RlcCBpbXBsaWVzIHRo
ZSByZXN0IG9mCisgICAgLy8gICAgdGhpcyBmdW5jdGlvbi4gSXQgaGFwcGVucyB1bmRlciBhIGxv
Y2sgc28gaXQncyBhdG9taWMuCisgICAgLy8KKyAgICAvLyBBbm90aGVyIHRocmVhZCBpcyBkb2lu
ZzoKKyAgICAvLworICAgIC8vIDEpIEFib3V0VG9NYXJrU2xvdzogVGhpcyBpcyB0aGUgZW50aXJl
IGFib3V0VG9NYXJrU2xvdyBmdW5jdGlvbiwgYW5kIGxldCdzIHNheSBpdCdzIGF0b21pYy4gSXQK
KyAgICAvLyAgICBzb3J0YSBpcyBzaW5jZSBpdCBob2xkcyBhIGxvY2ssIGJ1dCB0aGF0IGRvZXNu
J3QgYWN0dWFsbHkgbWFrZSBpdCBhdG9taWMgd2l0aCByZXNwZWN0IHRvCisgICAgLy8gICAgSXNM
aXZlQ2hlY2tzTmV3bHlBbGxvY2F0ZWQsIHNpbmNlIHRoYXQgZG9lcyBub3QgaG9sZCBhIGxvY2sg
aW4gb3VyIHNjZW5hcmlvLgorICAgIC8vCisgICAgLy8gVGhlIGhhcm1mdWwgaW50ZXJsZWF2aW5n
IGhhcHBlbnMgaWYgd2Ugc3RhcnQgb3V0IHdpdGggYSBibG9jayB0aGF0IGhhcyBzdGFsZSBtYXJr
IGJpdHMgdGhhdAorICAgIC8vIG5vbmV0aGVsZXNzIGNvbnZleSBsaXZlbmVzcyBkdXJpbmcgbWFy
a2luZyAodGhlIG9mZi1ieS1vbmUgdmVyc2lvbiB0cmljaykuIFRoZSBpbnRlcmxlYXZpbmcgaXMK
KyAgICAvLyBqdXN0OgorICAgIC8vCisgICAgLy8gSXNMaXZlQ2hlY2tzTmV3bHlBbGxvY2F0ZWQg
QWJvdXRUb01hcmtTbG93IElzTGl2ZUNoZWNrc01hcmtzCisgICAgLy8KKyAgICAvLyBXZSBzdGFy
dGVkIHdpdGggdmFsaWQgbWFya3MgYnV0IGludmFsaWQgbmV3bHkgYWxsb2NhdGVkLiBTbywgdGhl
IGZpcnN0IHBhcnQgZG9lc24ndCB0aGluayB0aGF0CisgICAgLy8gYW55dGhpbmcgaXMgbGl2ZSwg
YnV0IGR1dGlmdWxseSBkcm9wcyBkb3duIHRvIHRoZSBtYXJrcyBzdGVwLiBCdXQgaW4gdGhlIG1l
YW50aW1lLCB3ZSBjbGVhciB0aGUKKyAgICAvLyBtYXJrIGJpdHMgYW5kIHRyYW5zZmVyIHRoZWly
IGNvbnRlbnRzIGludG8gbmV3bHlBbGxvY2F0ZWQuIFNvIElzTGl2ZUNoZWNrc01hcmtzIGFsc28g
c2VlcyBub3RoaW5nCisgICAgLy8gbGl2ZS4gT29vcHMhCisgICAgLy8KKyAgICAvLyBGb3J0dW5h
dGVseSwgc2luY2UgdGhpcyBpcyBqdXN0IGEgcmVhZCBjcml0aWNhbCBzZWN0aW9uLCB3ZSBjYW4g
dXNlIGEgQ291bnRpbmdMb2NrLgorICAgIC8vCisgICAgLy8gUHJvYmFibHkgbWFueSB1c2VycyBv
ZiBDb3VudGluZ0xvY2sgY291bGQgdXNlIGl0cyBsYW1iZGEtYmFzZWQgYW5kIGxvY2tlci1iYXNl
ZCBBUElzLiBCdXQgaGVyZSwgd2UKKyAgICAvLyBuZWVkIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhp
bmcgaXMgQUxXQVlTX0lOTElORS4gSXQncyBoYXJkIHRvIGRvIHRoYXQgd2hlbiB1c2luZyBsYW1i
ZGFzLiBJdCdzCisgICAgLy8gbW9yZSByZWxpYWJsZSB0byB3cml0ZSBpdCBpbmxpbmUgaW5zdGVh
ZC4gRW1waXJpY2FsbHksIGl0IHNlZW1zIGxpa2UgaG93IGlubGluZSB0aGlzIGlzIGhhcyBzb21l
CisgICAgLy8gaW1wYWN0IG9uIHBlcmYgLSBhcm91bmQgMiUgb24gc3BsYXkgaWYgeW91IGdldCBp
dCB3cm9uZy4KKwogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CiAgICAg
Ci0gICAgaWYgKGJsb2NrLmFyZU1hcmtzU3RhbGUoKSkgeworICAgIGF1dG8gY291bnQgPSBibG9j
ay5tX2xvY2sudHJ5T3B0aW1pc3RpY0ZlbmNlbGVzc1JlYWQoKTsKKyAgICBpZiAoY291bnQudmFs
dWUpIHsKKyAgICAgICAgRGVwZW5kZW5jeSBmZW5jZUJlZm9yZSA9IERlcGVuZGVuY3k6OmZlbmNl
KGNvdW50LmlucHV0KTsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmVuY2VkVGhpcyA9
IGZlbmNlQmVmb3JlLmNvbnN1bWUodGhpcyk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWZl
bmNlZFRoaXMtPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAgICAgCisgICAgICAgIEhlYXBWZXJzaW9u
IG15TmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gZmVuY2VkVGhpcy0+bV9uZXdseUFsbG9jYXRlZFZl
cnNpb247CisgICAgICAgIGlmIChteU5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9PSBuZXdseUFsbG9j
YXRlZFZlcnNpb24pIHsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmVuY2VkVGhpcy0+aXNO
ZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAgICAgICAgIGlmIChibG9jay5tX2xvY2suZmVuY2Vs
ZXNzVmFsaWRhdGUoY291bnQudmFsdWUsIERlcGVuZGVuY3k6OmZlbmNlKHJlc3VsdCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBNYXJrZWRCbG9jayYgZmVuY2VkQmxvY2sgPSAqZmVuY2VCZWZvcmUuY29uc3VtZSgmYmxvY2sp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBIZWFwVmVyc2lvbiBteU1hcmtpbmdWZXJzaW9u
ID0gZmVuY2VkQmxvY2subV9tYXJraW5nVmVyc2lvbjsKKyAgICAgICAgICAgIGlmIChteU1hcmtp
bmdWZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uCisgICAgICAgICAgICAgICAgJiYgKCFpc01hcmtp
bmcgfHwgIWZlbmNlZEJsb2NrLm1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG15TWFy
a2luZ1ZlcnNpb24sIG1hcmtpbmdWZXJzaW9uKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxv
Y2subV9sb2NrLmZlbmNlbGVzc1ZhbGlkYXRlKGNvdW50LnZhbHVlLCBEZXBlbmRlbmN5OjpmZW5j
ZShteU1hcmtpbmdWZXJzaW9uKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmZW5j
ZWRCbG9jay5tX21hcmtzLmdldChibG9jay5hdG9tTnVtYmVyKGNlbGwpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoYmxvY2subV9sb2NrLmZlbmNlbGVzc1ZhbGlkYXRlKGNvdW50LnZhbHVlLCBEZXBl
bmRlbmN5OjpmZW5jZShyZXN1bHQpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKGJsb2NrLm1fbG9jayk7CisKKyAgICBBU1NFUlQoIWlzRnJlZUxpc3RlZCgp
KTsKKyAgICAKKyAgICBIZWFwVmVyc2lvbiBteU5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IG1fbmV3
bHlBbGxvY2F0ZWRWZXJzaW9uOworICAgIGlmIChteU5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9PSBu
ZXdseUFsbG9jYXRlZFZlcnNpb24pCisgICAgICAgIHJldHVybiBpc05ld2x5QWxsb2NhdGVkKGNl
bGwpOworICAgIAorICAgIGlmIChibG9jay5hcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSkg
ewogICAgICAgICBpZiAoIWlzTWFya2luZykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgaWYgKCFibG9jay5tYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5n
VmVyc2lvbikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCisgICAgCiAgICAg
cmV0dXJuIGJsb2NrLm1fbWFya3MuZ2V0KGJsb2NrLmF0b21OdW1iZXIoY2VsbCkpOwogfQogCi1p
bmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmVDZWxsKEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3Qgdm9pZCogcCkKK2lubGluZSBib29s
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNv
bnN0IHZvaWQqIHApCiB7CiAgICAgaWYgKCFtX2Jsb2NrLT5pc0F0b20ocCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNMaXZlKG1hcmtpbmdWZXJzaW9uLCBpc01hcmtpbmcs
IHN0YXRpY19jYXN0PGNvbnN0IEhlYXBDZWxsKj4ocCkpOworICAgIHJldHVybiBpc0xpdmUobWFy
a2luZ1ZlcnNpb24sIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgaXNNYXJraW5nLCBzdGF0aWNfY2Fz
dDxjb25zdCBIZWFwQ2VsbCo+KHApKTsKK30KKworaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Okhh
bmRsZTo6aXNMaXZlKGNvbnN0IEhlYXBDZWxsKiBjZWxsKQoreworICAgIHJldHVybiBpc0xpdmUo
c3BhY2UoKS0+bWFya2luZ1ZlcnNpb24oKSwgc3BhY2UoKS0+bmV3bHlBbGxvY2F0ZWRWZXJzaW9u
KCksIHNwYWNlKCktPmlzTWFya2luZygpLCBjZWxsKTsKK30KKworaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6aXNMaXZlQ2VsbChjb25zdCB2b2lkKiBwKQoreworICAgIHJldHVybiBp
c0xpdmVDZWxsKHNwYWNlKCktPm1hcmtpbmdWZXJzaW9uKCksIHNwYWNlKCktPm5ld2x5QWxsb2Nh
dGVkVmVyc2lvbigpLCBzcGFjZSgpLT5pc01hcmtpbmcoKSwgcCk7CiB9CiAKIC8vIFRoZSBmb2xs
b3dpbmcgaGFzIHRvIGJlIHRydWUgZm9yIHNwZWNpYWxpemF0aW9uIHRvIGtpY2sgaW46CkBAIC0z
ODYsNiArNDY2LDE1IEBAIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgTWEK
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgogaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpmb3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
IHsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY3VycmVudGx5IGVmZmljaWVudCB0byB1c2Ug
aW4gdGhlIGNvbnN0cmFpbnQgc29sdmVyIGJlY2F1c2UgaXNMaXZlKCkgZ3JhYnMgYQorICAgIC8v
IGxvY2sgdG8gcHJvdGVjdCBpdHNlbGYgZnJvbSBjb25jdXJyZW50IGNhbGxzIHRvIGFib3V0VG9N
YXJrU2xvdygpLiBCdXQgd2UgY291bGQgZ2V0IGFyb3VuZCB0aGlzIGJ5CisgICAgLy8gaGF2aW5n
IHRoaXMgZnVuY3Rpb24gZ3JhYiB0aGUgbG9jayBiZWZvcmUgYW5kIGFmdGVyIHRoZSBpdGVyYXRp
b24sIGFuZCBjaGVjayBpZiB0aGUgbWFya2luZyB2ZXJzaW9uCisgICAgLy8gY2hhbmdlZC4gSWYg
aXQgZGlkLCBqdXN0IHJ1biBhZ2Fpbi4gSW5zaWRlIHRoZSBsb29wLCB3ZSBvbmx5IG5lZWQgdG8g
ZW5zdXJlIHRoYXQgaWYgYSByYWNlIHdlcmUgdG8KKyAgICAvLyBoYXBwZW4sIHdlIHdpbGwganVz
dCBvdmVybG9vayBvYmplY3RzLiBJIHRoaW5rIHRoYXQgYmVjYXVzZSBvZiBob3cgYWJvdXRUb01h
cmtTbG93KCkgZG9lcyB0aGluZ3MsCisgICAgLy8gYSByYWNlIG91Z2h0IHRvIG1lYW4gdGhhdCBp
dCBqdXN0IHJldHVybnMgZmFsc2Ugd2hlbiBpdCBzaG91bGQgaGF2ZSByZXR1cm5lZCB0cnVlIC0g
YnV0IHRoaXMgaXMKKyAgICAvLyBzb21ldGhpbmcgdGhhdCB3b3VsZCBoYXZlIHRvIGJlIHZlcmlm
aWVkIGNhcmVmdWxseS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgwMzE1CisgICAgCiAgICAgSGVhcENlbGw6OktpbmQga2luZCA9IG1fYXR0cmlidXRl
cy5jZWxsS2luZDsKICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0
b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWlu
dGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZtX2Jsb2NrLT5hdG9tcygpW2ldKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIy
NTUxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgTWFya2VkU3BhY2U6OmVuZE1hcmtp
bmcoKQogICAgICAgICAgICAgICAgIGhhbmRsZS0+cmVzZXRBbGxvY2F0ZWQoKTsKICAgICAgICAg
ICAgIH0pOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNp
b24gPSBuZXh0VmVyc2lvbihtX25ld2x5QWxsb2NhdGVkVmVyc2lvbik7CiAgICAgCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9sYXJnZUFsbG9jYXRpb25zT2Zmc2V0Rm9yVGhpc0NvbGxlY3Rpb247
IGkgPCBtX2xhcmdlQWxsb2NhdGlvbnMuc2l6ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2
ICsxNjUsMTEgQEAgcHVibGljOgogICAgIC8vIFdoZW4gdGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRo
YXQgd2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUgbWFyayBiaXRzIGhhdmVuJ3QgY29udmVyZ2VkIHll
dC4KICAgICBib29sIGlzTWFya2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJraW5nOyB9CiAg
ICAgCisgICAgV2Vha1NldCogYWN0aXZlV2Vha1NldHNCZWdpbigpIHsgcmV0dXJuIG1fYWN0aXZl
V2Vha1NldHMuYmVnaW4oKTsgfQorICAgIFdlYWtTZXQqIGFjdGl2ZVdlYWtTZXRzRW5kKCkgeyBy
ZXR1cm4gbV9hY3RpdmVXZWFrU2V0cy5lbmQoKTsgfQorICAgIFdlYWtTZXQqIG5ld0FjdGl2ZVdl
YWtTZXRzQmVnaW4oKSB7IHJldHVybiBtX25ld0FjdGl2ZVdlYWtTZXRzLmJlZ2luKCk7IH0KKyAg
ICBXZWFrU2V0KiBuZXdBY3RpdmVXZWFrU2V0c0VuZCgpIHsgcmV0dXJuIG1fbmV3QWN0aXZlV2Vh
a1NldHMuZW5kKCk7IH0KKyAgICAKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdU
Rjo6ZGF0YUZpbGUoKSk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6
YXJyYXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nlcz4gc19zaXplQ2xhc3NGb3JTaXplU3RlcDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludC5j
cHAJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtp
bmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzAgKzI3LDE4IEBACiAjaW5j
bHVkZSAiTWFya2luZ0NvbnN0cmFpbnQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJWaXNpdENvdW50ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLU1hcmtpbmdDb25z
dHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwg
Q1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZp
c2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAgQ29uc3RyYWludFZvbGF0aWxp
dHkgdm9sYXRpbGl0eSkKLSAgICA6IG1fYWJicmV2aWF0ZWROYW1lKGFiYnJldmlhdGVkTmFtZSkK
LSAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICwgbV9leGVjdXRlRnVuY3Rpb24oV1RG
TW92ZShleGVjdXRlRnVuY3Rpb24pKQotICAgICwgbV92b2xhdGlsaXR5KHZvbGF0aWxpdHkpCi17
Ci19CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZU1hcmtpbmdDb25zdHJhaW50ID0gZmFs
c2U7CiAKLU1hcmtpbmdDb25zdHJhaW50OjpNYXJraW5nQ29uc3RyYWludCgKLSAgICBDU3RyaW5n
IGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgIDo6RnVuY3Rpb248dm9pZChTbG90
VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiBleGVjdXRlRnVuY3Rpb24sCi0gICAg
OjpGdW5jdGlvbjxkb3VibGUoU2xvdFZpc2l0b3ImKT4gcXVpY2tXb3JrRXN0aW1hdGVGdW5jdGlv
biwKLSAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5KQorTWFya2luZ0NvbnN0cmFp
bnQ6Ok1hcmtpbmdDb25zdHJhaW50KENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5h
bWUsIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHksIENvbnN0cmFpbnRDb25jdXJyZW5j
eSBjb25jdXJyZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKQogICAgIDog
bV9hYmJyZXZpYXRlZE5hbWUoYWJicmV2aWF0ZWROYW1lKQogICAgICwgbV9uYW1lKFdURk1vdmUo
bmFtZSkpCi0gICAgLCBtX2V4ZWN1dGVGdW5jdGlvbihXVEZNb3ZlKGV4ZWN1dGVGdW5jdGlvbikp
Ci0gICAgLCBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24oV1RGTW92ZShxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uKSkKICAgICAsIG1fdm9sYXRpbGl0eSh2b2xhdGlsaXR5KQorICAgICwgbV9j
b25jdXJyZW5jeShjb25jdXJyZW5jeSkKKyAgICAsIG1fcGFyYWxsZWxpc20ocGFyYWxsZWxpc20p
CiB7CiB9CiAKQEAgLTYzLDE0ICs1MSw3NCBAQCB2b2lkIE1hcmtpbmdDb25zdHJhaW50OjpyZXNl
dFN0YXRzKCkKICAgICBtX2xhc3RWaXNpdENvdW50ID0gMDsKIH0KIAotdm9pZCBNYXJraW5nQ29u
c3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgYm9vbCYgZGlkVmlzaXRTb21l
dGhpbmcsIE1vbm90b25pY1RpbWUgdGltZW91dCkKK0NvbnN0cmFpbnRQYXJhbGxlbGlzbSBNYXJr
aW5nQ29uc3RyYWludDo6ZXhlY3V0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBWaXNp
dENvdW50ZXIgdmlzaXRDb3VudGVyKHZpc2l0b3IpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlz
bSByZXN1bHQgPSBleGVjdXRlSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNpdENvdW50ICs9
IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJvc2VNYXJraW5nQ29uc3Ry
YWludCAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBkYXRhTG9nKCIoIiwg
YWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgp
LCAiIGluIGV4ZWN1dGUpIik7CisgICAgaWYgKHJlc3VsdCA9PSBDb25zdHJhaW50UGFyYWxsZWxp
c206OlBhcmFsbGVsKSB7CisgICAgICAgIC8vIEl0J3MgaWxsZWdhbCB0byBwcm9kdWNlIHBhcmFs
bGVsIHdvcmsgaWYgeW91IGhhdmVuJ3QgYWR2ZXJ0aXNlZCBpdCB1cGZyb250IGJlY2F1c2UgdGhl
IHNvbHZlcgorICAgICAgICAvLyBoYXMgb3B0aW1pemF0aW9ucyBmb3IgY29uc3RyYWludHMgdGhh
dCBwcm9taXNlIHRvIG5ldmVyIHByb2R1Y2UgcGFyYWxsZWwgd29yay4KKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9wYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVs
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZG91YmxlIE1hcmtpbmdDb25zdHJh
aW50OjpxdWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYpCit7CisgICAgcmV0dXJuIDA7Cit9
CisKK2RvdWJsZSBNYXJraW5nQ29uc3RyYWludDo6d29ya0VzdGltYXRlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIHJldHVybiBsYXN0VmlzaXRDb3VudCgpICsgcXVpY2tXb3JrRXN0aW1h
dGUodmlzaXRvcik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OnByZXBhcmVUb0V4ZWN1
dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0
YUxvZyhhYmJyZXZpYXRlZE5hbWUoKSk7Ci0gICAgVmlzaXRpbmdUaW1lb3V0IHZpc2l0aW5nVGlt
ZW91dCh2aXNpdG9yLCBkaWRWaXNpdFNvbWV0aGluZywgdGltZW91dCk7Ci0gICAgbV9leGVjdXRl
RnVuY3Rpb24odmlzaXRvciwgdmlzaXRpbmdUaW1lb3V0KTsKLSAgICBtX2xhc3RWaXNpdENvdW50
ID0gdmlzaXRpbmdUaW1lb3V0LnZpc2l0Q291bnQodmlzaXRvcik7Ci0gICAgZGlkVmlzaXRTb21l
dGhpbmcgPSB2aXNpdGluZ1RpbWVvdXQuZGlkVmlzaXRTb21ldGhpbmcodmlzaXRvcik7CisgICAg
VmlzaXRDb3VudGVyIHZpc2l0Q291bnRlcih2aXNpdG9yKTsKKyAgICBwcmVwYXJlVG9FeGVjdXRl
SW1wbChjb25zdHJhaW50U29sdmluZ0xvY2tlciwgdmlzaXRvcik7CisgICAgbV9sYXN0VmlzaXRD
b3VudCA9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJvc2VNYXJraW5n
Q29uc3RyYWludCAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBkYXRhTG9n
KCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlzaXRD
b3VudCgpLCAiIGluIHByZXBhcmVUb0V4ZWN1dGUpIik7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0
cmFpbnQ6OmRvUGFyYWxsZWxXb3JrKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0
Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRvcik7CisgICAgZG9QYXJhbGxlbFdvcmtJbXBsKHZp
c2l0b3IpOworICAgIGlmICh2ZXJib3NlTWFya2luZ0NvbnN0cmFpbnQgJiYgdmlzaXRDb3VudGVy
LnZpc2l0Q291bnQoKSkKKyAgICAgICAgZGF0YUxvZygiKCIsIGFiYnJldmlhdGVkTmFtZSgpLCAi
IHZpc2l0ZWQgIiwgdmlzaXRDb3VudGVyLnZpc2l0Q291bnQoKSwgIiBpbiBkb1BhcmFsbGVsV29y
aykiKTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAg
ICAgICAgbV9sYXN0VmlzaXRDb3VudCArPSB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpOworICAg
IH0KK30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludDo6ZmluaXNoUGFyYWxsZWxXb3JrKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIFZpc2l0Q291bnRlciB2aXNpdENvdW50ZXIodmlzaXRv
cik7CisgICAgZmluaXNoUGFyYWxsZWxXb3JrSW1wbCh2aXNpdG9yKTsKKyAgICBtX2xhc3RWaXNp
dENvdW50ICs9IHZpc2l0Q291bnRlci52aXNpdENvdW50KCk7CisgICAgaWYgKHZlcmJvc2VNYXJr
aW5nQ29uc3RyYWludCAmJiB2aXNpdENvdW50ZXIudmlzaXRDb3VudCgpKQorICAgICAgICBkYXRh
TG9nKCIoIiwgYWJicmV2aWF0ZWROYW1lKCksICIgdmlzaXRlZCAiLCB2aXNpdENvdW50ZXIudmlz
aXRDb3VudCgpLCAiIGluIGZpbmlzaFBhcmFsbGVsV29yaykiKTsKK30KKwordm9pZCBNYXJraW5n
Q29uc3RyYWludDo6cHJlcGFyZVRvRXhlY3V0ZUltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBT
bG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmRvUGFyYWxsZWxX
b3JrSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnQ6OmZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xv
dFZpc2l0b3ImKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI1NTE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiQ29uc3RyYWludENvbmN1cnJlbmN5LmgiCisjaW5jbHVkZSAiQ29uc3RyYWludFBhcmFsbGVs
aXNtLmgiCiAjaW5jbHVkZSAiQ29uc3RyYWludFZvbGF0aWxpdHkuaCIKLSNpbmNsdWRlICJWaXNp
dGluZ1RpbWVvdXQuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9u
aWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQ0LDE3ICs0NCwxMSBA
QCBjbGFzcyBNYXJraW5nQ29uc3RyYWludCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWFya2luZ0NvbnN0cmFpbnQoCi0gICAg
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVu
Y3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAg
ICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOworICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwgQ1N0cmluZyBuYW1lLCBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWlu
dENvbmN1cnJlbmN5ID0gQ29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50LAorICAgICAg
ICBDb25zdHJhaW50UGFyYWxsZWxpc20gPSBDb25zdHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRp
YWwpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1hcmtpbmdDb25zdHJhaW50KAotICAg
ICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1
bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAg
ICAgIDo6RnVuY3Rpb248ZG91YmxlKFNsb3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eSk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1hcmtpbmdDb25zdHJh
aW50KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWFya2luZ0NvbnN0cmFpbnQo
KTsKICAgICAKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0K
ICAgICAKQEAgLTY1LDMyICs1OSwzOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc2l6ZV90IGxhc3RW
aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaXRDb3VudDsgfQogICAgIAotICAg
IHZvaWQgZXhlY3V0ZShTbG90VmlzaXRvciYsIGJvb2wmIGRpZFZpc2l0U29tZXRoaW5nLCBNb25v
dG9uaWNUaW1lIHRpbWVvdXQpOworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBleGVjdXRlKFNs
b3RWaXNpdG9yJik7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCBkb3VibGUg
cXVpY2tXb3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOworICAgIAorICAgIGRvdWJs
ZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpOwogICAgIAotICAgIGRvdWJsZSBx
dWlja1dvcmtFc3RpbWF0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlm
ICghbV9xdWlja1dvcmtFc3RpbWF0ZUZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24odmlzaXRvcik7Ci0gICAg
fQotICAgIAotICAgIGRvdWJsZSB3b3JrRXN0aW1hdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0g
ICAgewotICAgICAgICByZXR1cm4gbGFzdFZpc2l0Q291bnQoKSArIHF1aWNrV29ya0VzdGltYXRl
KHZpc2l0b3IpOwotICAgIH0KKyAgICB2b2lkIHByZXBhcmVUb0V4ZWN1dGUoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGNvbnN0cmFpbnRTb2x2aW5nTG9ja2VyLCBTbG90VmlzaXRvciYpOworICAgIAor
ICAgIHZvaWQgZG9QYXJhbGxlbFdvcmsoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGZpbmlzaFBh
cmFsbGVsV29yayhTbG90VmlzaXRvciYpOwogICAgIAogICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5
IHZvbGF0aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxpdHk7IH0KICAgICAKKyAgICBD
b25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVuY3koKSBjb25zdCB7IHJldHVybiBtX2NvbmN1
cnJlbmN5OyB9CisgICAgQ29uc3RyYWludFBhcmFsbGVsaXNtIHBhcmFsbGVsaXNtKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJhbGxlbGlzbTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBDb25z
dHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoU2xvdFZpc2l0b3ImKSA9IDA7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHByZXBhcmVUb0V4ZWN1dGVJbXBsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBjb25zdHJhaW50U29sdmluZ0xvY2tlciwgU2xvdFZpc2l0b3ImKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKFNsb3RWaXNpdG9yJik7CisgICAgdmly
dHVhbCB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImKTsKKyAgICAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U2V0OyAvLyBTbyBpdCBj
YW4gc2V0IG1faW5kZXguCiAgICAgCiAgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07
CiAgICAgQ1N0cmluZyBtX2FiYnJldmlhdGVkTmFtZTsKICAgICBDU3RyaW5nIG1fbmFtZTsKLSAg
ICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmIHRp
bWVvdXQpPiBtX2V4ZWN1dGVGdW5jdGlvbjsKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90Vmlz
aXRvciYpPiBtX3F1aWNrV29ya0VzdGltYXRlRnVuY3Rpb247CiAgICAgQ29uc3RyYWludFZvbGF0
aWxpdHkgbV92b2xhdGlsaXR5OworICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSBtX2NvbmN1cnJl
bmN5OworICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbSBtX3BhcmFsbGVsaXNtOwogICAgIHNpemVf
dCBtX2xhc3RWaXNpdENvdW50IHsgMCB9OworICAgIExvY2sgbV9sb2NrOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29u
c3RyYWludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCShyZXZpc2lvbiAyMjU1MTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYwICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtp
bmdDb25zdHJhaW50U2V0LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVk
ZSAiU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
ICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYXJraW5nQ29uc3RyYWlu
dFNldDo6RXhlY3V0aW9uQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgRXhlY3V0aW9uQ29udGV4dChN
YXJraW5nQ29uc3RyYWludFNldCYgc2V0LCBTbG90VmlzaXRvciYgdmlzaXRvciwgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0KQotICAgICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgLCBtX3Zpc2l0b3Io
dmlzaXRvcikKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fZGlkVmlzaXRTb21ldGhpbmc7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkVGlt
ZU91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRTb21ldGhpbmcoKSAm
JiBoYXNFbGFwc2VkKG1fdGltZW91dCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybnMgZmFs
c2UgaWYgaXQgdGltZXMgb3V0LgotICAgIGJvb2wgZHJhaW4oQml0VmVjdG9yJiB1bmV4ZWN1dGVk
KQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiB1bmV4ZWN1dGVkKSB7Ci0gICAg
ICAgICAgICBleGVjdXRlKGluZGV4KTsKLSAgICAgICAgICAgIHVuZXhlY3V0ZWQuY2xlYXIoaW5k
ZXgpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRpbWVPdXQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgZGlkRXhlY3V0ZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZXhl
Y3V0ZWQuZ2V0KGluZGV4KTsgfQotCi0gICAgdm9pZCBleGVjdXRlKHNpemVfdCBpbmRleCkKLSAg
ICB7Ci0gICAgICAgIG1fc2V0Lm1fc2V0W2luZGV4XS0+ZXhlY3V0ZShtX3Zpc2l0b3IsIG1fZGlk
VmlzaXRTb21ldGhpbmcsIG1fdGltZW91dCk7Ci0gICAgICAgIG1fZXhlY3V0ZWQuc2V0KGluZGV4
KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0JiBtX3Nl
dDsKLSAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOwotICAgIE1vbm90b25pY1RpbWUgbV90aW1l
b3V0OwotICAgIEJpdFZlY3RvciBtX2V4ZWN1dGVkOwotICAgIGJvb2wgbV9kaWRWaXNpdFNvbWV0
aGluZyB7IGZhbHNlIH07Ci19OwotCi1NYXJraW5nQ29uc3RyYWludFNldDo6TWFya2luZ0NvbnN0
cmFpbnRTZXQoKQorTWFya2luZ0NvbnN0cmFpbnRTZXQ6Ok1hcmtpbmdDb25zdHJhaW50U2V0KEhl
YXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsKIH0KIApAQCAtMTA3LDE4ICs2NSw5IEBA
IHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmRpZFN0YXJ0TWFya2kKICAgICBtX2l0ZXJhdGlv
biA9IDE7CiB9CiAKLXZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZChDU3RyaW5nIGFiYnJl
dmlhdGVkTmFtZSwgQ1N0cmluZyBuYW1lLCA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImLCBj
b25zdCBWaXNpdGluZ1RpbWVvdXQmKT4gZnVuY3Rpb24sIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZv
bGF0aWxpdHkpCi17Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+
KFdURk1vdmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlv
biksIHZvbGF0aWxpdHkpKTsKLX0KLQotdm9pZCBNYXJraW5nQ29uc3RyYWludFNldDo6YWRkKAot
ICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLCBDU3RyaW5nIG5hbWUsCi0gICAgOjpGdW5jdGlv
bjx2b2lkKFNsb3RWaXNpdG9yJiwgY29uc3QgVmlzaXRpbmdUaW1lb3V0Jik+IGV4ZWN1dGVGdW5j
dGlvbiwKLSAgICA6OkZ1bmN0aW9uPGRvdWJsZShTbG90VmlzaXRvciYpPiBxdWlja1dvcmtFc3Rp
bWF0ZUZ1bmN0aW9uLAotICAgIENvbnN0cmFpbnRWb2xhdGlsaXR5IHZvbGF0aWxpdHkpCit2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjphZGQoQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJp
bmcgbmFtZSwgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+IGZ1bmN0aW9uLCBDb25zdHJh
aW50Vm9sYXRpbGl0eSB2b2xhdGlsaXR5LCBDb25zdHJhaW50Q29uY3VycmVuY3kgY29uY3VycmVu
Y3kpCiB7Ci0gICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnQ+KFdURk1v
dmUoYWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShleGVjdXRlRnVuY3Rp
b24pLCBXVEZNb3ZlKHF1aWNrV29ya0VzdGltYXRlRnVuY3Rpb24pLCB2b2xhdGlsaXR5KSk7Cisg
ICAgYWRkKHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQ+KFdURk1vdmUo
YWJicmV2aWF0ZWROYW1lKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShmdW5jdGlvbiksIHZvbGF0
aWxpdHksIGNvbmN1cnJlbmN5KSk7CiB9CiAKIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFk
ZCgKQEAgLTEzMSw5ICs4MCw5IEBAIHZvaWQgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmFkZCgKICAg
ICBtX3NldC5hcHBlbmQoV1RGTW92ZShjb25zdHJhaW50KSk7CiB9CiAKLWJvb2wgTWFya2luZ0Nv
bnN0cmFpbnRTZXQ6OmV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYgdmlzaXRvciwgTW9u
b3RvbmljVGltZSB0aW1lb3V0KQorYm9vbCBNYXJraW5nQ29uc3RyYWludFNldDo6ZXhlY3V0ZUNv
bnZlcmdlbmNlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJvb2wgcmVzdWx0ID0gZXhl
Y3V0ZUNvbnZlcmdlbmNlSW1wbCh2aXNpdG9yLCB0aW1lb3V0KTsKKyAgICBib29sIHJlc3VsdCA9
IGV4ZWN1dGVDb252ZXJnZW5jZUltcGwodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkpCiAgICAgICAgIGRhdGFMb2coIiAiKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDI3
ICs5NywyNyBAQCBib29sIE1hcmtpbmdDb25zdHJhaW50U2V0Ojppc1dhdmVmcm9udEFkCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29u
dmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
Citib29sIE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIEV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4
dCgqdGhpcywgdmlzaXRvciwgdGltZW91dCk7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOworICAgIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHNvbHZlcigq
dGhpcyk7CiAgICAgCiAgICAgdW5zaWduZWQgaXRlcmF0aW9uID0gbV9pdGVyYXRpb24rKzsKICAg
ICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVy
YXRpb24sICI6Iik7CiAKLSAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbnN0cmFpbnRzIHRoYXQg
d2UgaGF2ZSBub3QgZXhlY3V0ZWQgYXQgYWxsIGR1cmluZyB0aGlzIGN5Y2xlLCB0aGVuCi0gICAg
Ly8gd2Ugc2hvdWxkIGV4ZWN1dGUgdGhvc2Ugbm93LgotICAgIGlmICghZXhlY3V0aW9uQ29udGV4
dC5kcmFpbihtX3VuZXhlY3V0ZWRSb290cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICAvLyBGaXJzdCBpdGVyYXRpb24gaXMgYmVmb3JlIGFueSB2aXNpdG9yIGRyYWluaW5nLCBz
byBpdCdzIHVubGlrZWx5IHRvIHRyaWdnZXIgYW55IGNvbnN0cmFpbnRzIG90aGVyCi0gICAgLy8g
dGhhbiByb290cy4KLSAgICBpZiAoaXRlcmF0aW9uID09IDEpCisgICAgaWYgKGl0ZXJhdGlvbiA9
PSAxKSB7CisgICAgICAgIC8vIEZpcnN0IGl0ZXJhdGlvbiBpcyBiZWZvcmUgYW55IHZpc2l0b3Ig
ZHJhaW5pbmcsIHNvIGl0J3MgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgY29uc3RyYWludHMKKyAg
ICAgICAgLy8gb3RoZXIgdGhhbiByb290cy4KKyAgICAgICAgc29sdmVyLmRyYWluKG1fdW5leGVj
dXRlZFJvb3RzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKLSAgICBpZiAo
IWV4ZWN1dGlvbkNvbnRleHQuZHJhaW4obV91bmV4ZWN1dGVkT3V0Z3Jvd3RocykpCisgICAgaWYg
KGl0ZXJhdGlvbiA9PSAyKSB7CisgICAgICAgIHNvbHZlci5kcmFpbihtX3VuZXhlY3V0ZWRPdXRn
cm93dGhzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKICAgICAvLyBXZSB3
YW50IHRvIGtlZXAgcHJlZmVycmluZyB0aGUgb3V0Z3Jvd3RoIGNvbnN0cmFpbnRzIC0gdGhlIG9u
ZXMgdGhhdCBuZWVkIHRvIGJlIGZpeHBvaW50ZWQKICAgICAvLyBldmVuIGluIGEgc3RvcC10aGUt
d29ybGQgR0MgLSB1bnRpbCB0aGV5IHN0b3AgcHJvZHVjaW5nLiBUaGV5IGhhdmUgYSB0ZW5kZW5j
eSB0byBnbyB0b3RhbGx5CkBAIC0yMTUsMzMgKzE2NCwxNiBAQCBib29sIE1hcmtpbmdDb25zdHJh
aW50U2V0OjpleGVjdXRlQ29udmVyCiAgICAgICAgICAgICByZXR1cm4gYS0+dm9sYXRpbGl0eSgp
ID4gYi0+dm9sYXRpbGl0eSgpOwogICAgICAgICB9KTsKICAgICAKLSAgICBmb3IgKE1hcmtpbmdD
b25zdHJhaW50KiBjb25zdHJhaW50IDogbV9vcmRlcmVkKSB7Ci0gICAgICAgIHNpemVfdCBpID0g
Y29uc3RyYWludC0+aW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChleGVjdXRpb25Db250
ZXh0LmRpZEV4ZWN1dGUoaSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZXhlY3V0
aW9uQ29udGV4dC5leGVjdXRlKGkpOwotICAgICAgICAKLSAgICAgICAgLy8gT25jZSB3ZSdyZSBp
biBjb252ZXJnZW5jZSwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gbGV0IHNvbWUgbWFya2lu
ZyBoYXBwZW4gYW55dGltZQotICAgICAgICAvLyB3ZSBmaW5kIHdvcmsuCi0gICAgICAgIC8vIEZJ
WE1FOiBNYXliZSB0aGlzIHNob3VsZCBleGVjdXRlIGFsbCBjb25zdHJhaW50cyB1bnRpbCB0aW1l
b3V0PyBOb3QgY2xlYXIgaWYgdGhhdCdzCi0gICAgICAgIC8vIGJldHRlciBvciB3b3JzZS4gTWF5
YmUgZXZlbiBiZXR0ZXIgaXMgdGhpczoKLSAgICAgICAgLy8gLSBJZiB0aGUgdmlzaXRvciBpcyBl
bXB0eSwga2VlcCBydW5uaW5nLgotICAgICAgICAvLyAtIElmIHRoZSB2aXNpdG9yIGlzIGhhcyBh
dCBsZWFzdCBOIHRoaW5ncywgcmV0dXJuLgotICAgICAgICAvLyAtIEVsc2UgcnVuIHVudGlsIHRp
bWVvdXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjY4MzIKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQuZGlkVmlzaXRTb21ldGhpbmco
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgc29sdmVyLmNvbnZlcmdl
KG1fb3JkZXJlZCk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gUmV0dXJuIHRydWUg
aWYgd2UndmUgY29udmVyZ2VkLiBUaGF0IGhhcHBlbnMgaWYgd2UgZGlkIG5vdCB2aXNpdCBhbnl0
aGluZy4KKyAgICByZXR1cm4gIXNvbHZlci5kaWRWaXNpdFNvbWV0aGluZygpOwogfQogCiB2b2lk
IE1hcmtpbmdDb25zdHJhaW50U2V0OjpleGVjdXRlQWxsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGNv
bnN0cmFpbnQgOiBtX3NldCkKLSAgICAgICAgY29uc3RyYWludC0+ZXhlY3V0ZSh2aXNpdG9yLCBk
aWRWaXNpdFNvbWV0aGluZywgTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgICAgIGNv
bnN0cmFpbnQtPmV4ZWN1dGUodmlzaXRvcik7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAg
ICAgICAgIGRhdGFMb2coIiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtpbmdDb25zdHJhaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkocmV2aXNpb24gMjI1NTE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsOSArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA7
CitjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKKwogY2xhc3MgTWFya2luZ0NvbnN0cmFp
bnRTZXQgewogcHVibGljOgotICAgIE1hcmtpbmdDb25zdHJhaW50U2V0KCk7CisgICAgTWFya2lu
Z0NvbnN0cmFpbnRTZXQoSGVhcCYpOwogICAgIH5NYXJraW5nQ29uc3RyYWludFNldCgpOwogICAg
IAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CkBAIC00MSwxNSArNDQsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhZGQoCiAgICAgICAgIENTdHJpbmcgYWJicmV2aWF0ZWROYW1lLAogICAgICAg
ICBDU3RyaW5nIG5hbWUsCi0gICAgICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYsIGNv
bnN0IFZpc2l0aW5nVGltZW91dCYpPiwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHkpOwot
ICAgIAotICAgIHZvaWQgYWRkKAotICAgICAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFtZSwKLSAg
ICAgICAgQ1N0cmluZyBuYW1lLAotICAgICAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3Im
LCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKT4sCi0gICAgICAgIDo6RnVuY3Rpb248ZG91YmxlKFNs
b3RWaXNpdG9yJik+LAotICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eSk7CisgICAgICAgIDo6
RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiwKKyAgICAgICAgQ29uc3RyYWludFZvbGF0aWxp
dHksCisgICAgICAgIENvbnN0cmFpbnRDb25jdXJyZW5jeSA9IENvbnN0cmFpbnRDb25jdXJyZW5j
eTo6Q29uY3VycmVudCk7CiAgICAgCiAgICAgdm9pZCBhZGQoc3RkOjp1bmlxdWVfcHRyPE1hcmtp
bmdDb25zdHJhaW50Pik7CiAgICAgCkBAIC02MCwyMSArNTcsMTkgQEAgcHVibGljOgogICAgIAog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGV4ZWN1dGVkIGFsbCBjb25zdHJhaW50cyBhbmQg
bm9uZSBvZiB0aGVtIHByb2R1Y2VkIG5ldyB3b3JrLiBUaGlzCiAgICAgLy8gYXNzdW1lcyB0aGF0
IHlvdSd2ZSBhbHJhZWR5IHZpc2l0ZWQgcm9vdHMgYW5kIGRyYWluZWQgZnJvbSB0aGVyZS4KLSAg
ICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZSgKLSAgICAgICAgU2xvdFZpc2l0b3ImLAotICAgICAg
ICBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAg
ICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZShTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIFNp
bXBseSBydW5zIGFsbCBjb25zdHJhaW50cyB3aXRob3V0IGFueSBzaGVuYW5pZ2Fucy4KICAgICB2
b2lkIGV4ZWN1dGVBbGwoU2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6Ci0gICAgY2xhc3Mg
RXhlY3V0aW9uQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgRXhlY3V0aW9uQ29udGV4dDsKKyAg
ICBmcmllbmQgY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI7CiAgICAgCi0gICAgYm9vbCBl
eGVjdXRlQ29udmVyZ2VuY2VJbXBsKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSB0aW1lb3V0
KTsKKyAgICBib29sIGV4ZWN1dGVDb252ZXJnZW5jZUltcGwoU2xvdFZpc2l0b3ImKTsKICAgICAK
LSAgICBib29sIGRyYWluKFNsb3RWaXNpdG9yJiwgTW9ub3RvbmljVGltZSwgQml0VmVjdG9yJiB1
bmV4ZWN1dGVkLCBCaXRWZWN0b3ImIGV4ZWN1dGVkLCBib29sJiBkaWRWaXNpdFNvbWV0aGluZyk7
CisgICAgYm9vbCBkcmFpbihTbG90VmlzaXRvciYsIEJpdFZlY3RvciYgdW5leGVjdXRlZCwgQml0
VmVjdG9yJiBleGVjdXRlZCwgYm9vbCYgZGlkVmlzaXRTb21ldGhpbmcpOwogICAgIAorICAgIEhl
YXAmIG1faGVhcDsKICAgICBCaXRWZWN0b3IgbV91bmV4ZWN1dGVkUm9vdHM7CiAgICAgQml0VmVj
dG9yIG1fdW5leGVjdXRlZE91dGdyb3d0aHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxN
YXJraW5nQ29uc3RyYWludD4+IG1fc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuaCIKKworI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IAorCitNYXJraW5nQ29uc3Ry
YWludFNvbHZlcjo6TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoTWFya2luZ0NvbnN0cmFpbnRTZXQm
IHNldCkKKyAgICA6IG1faGVhcChzZXQubV9oZWFwKQorICAgICwgbV9tYWluVmlzaXRvcihtX2hl
YXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKSkKKyAgICAsIG1fc2V0KHNldCkKK3sKKyAgICBtX2hl
YXAuZm9yRWFjaFNsb3RWaXNpdG9yKAorICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSB7CisgICAgICAgICAgICBtX3Zpc2l0Q291bnRlcnMuYXBwZW5kKFZpc2l0Q291bnRlcih2aXNp
dG9yKSk7CisgICAgICAgIH0pOworfQorCitNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6fk1hcmtp
bmdDb25zdHJhaW50U29sdmVyKCkKK3sKK30KKworYm9vbCBNYXJraW5nQ29uc3RyYWludFNvbHZl
cjo6ZGlkVmlzaXRTb21ldGhpbmcoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgVmlzaXRDb3Vu
dGVyJiB2aXNpdENvdW50ZXIgOiBtX3Zpc2l0Q291bnRlcnMpIHsKKyAgICAgICAgaWYgKHZpc2l0
Q291bnRlci52aXNpdENvdW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpleGVj
dXRlKFNjaGVkdWxlclByZWZlcmVuY2UgcHJlZmVyZW5jZSwgU2NvcGVkTGFtYmRhPHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+KCk+IHBpY2tOZXh0KQoreworICAgIG1fcGlja05leHRJc1N0aWxsQWN0
aXZlID0gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9udW1UaHJlYWRzVGhhdE1heVByb2R1
Y2VXb3JrKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dXNlUGFyYWxsZWxNYXJraW5nQ29uc3Ry
YWludFNvbHZlcigpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAg
ICAgZGF0YUxvZyhwcmVmZXJlbmNlID09IFBhcmFsbGVsV29ya0ZpcnN0ID8gIlAiIDogIk4iLCAi
PCIpOworICAgICAgICAKKyAgICAgICAgbV9oZWFwLnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKyAg
ICAgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsgcnVuRXhlY3V0aW9uVGhyZWFk
KHZpc2l0b3IsIHByZWZlcmVuY2UsIHBpY2tOZXh0KTsgfSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIj4iKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcnVuRXhlY3V0aW9uVGhyZWFkKG1fbWFpblZpc2l0b3IsIHByZWZlcmVuY2Us
IHBpY2tOZXh0KTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9waWNrTmV4dElzU3RpbGxB
Y3RpdmUpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdv
cmspOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX2RpZEV4ZWN1
dGVJblBhcmFsbGVsKQorICAgICAgICBtX3NldC5tX3NldFtpbmRleFRvUnVuXS0+ZmluaXNoUGFy
YWxsZWxXb3JrKG1fbWFpblZpc2l0b3IpOworICAgIG1fZGlkRXhlY3V0ZUluUGFyYWxsZWwuY2xl
YXIoKTsKKyAgICAKKyAgICBpZiAoIW1fdG9FeGVjdXRlU2VxdWVudGlhbGx5LmlzRW1wdHkoKSkg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4VG9SdW4gOiBtX3RvRXhlY3V0ZVNlcXVlbnRp
YWxseSkKKyAgICAgICAgICAgIGV4ZWN1dGUoKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dKTsKKyAg
ICAgICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuY2xlYXIoKTsKKyAgICB9CisgICAgICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0VtcHR5KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuYml0Q291bnQoKSk7Cit9
CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmRyYWluKEJpdFZlY3RvciYgdW5leGVj
dXRlZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSB1bmV4ZWN1dGVkLmJlZ2luKCk7CisgICAgYXV0byBl
bmQgPSB1bmV4ZWN1dGVkLmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0
dXJuOworICAgIGF1dG8gcGlja05leHQgPSBzY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4oKT4oCisgICAgICAgIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB7Cisg
ICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiAqaXRlcisrOworICAgICAgICB9KTsKKyAgICBl
eGVjdXRlKE5leHRDb25zdHJhaW50Rmlyc3QsIHBpY2tOZXh0KTsKKyAgICB1bmV4ZWN1dGVkLmNs
ZWFyQWxsKCk7Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmNvbnZlcmdlKGNv
bnN0IFZlY3RvcjxNYXJraW5nQ29uc3RyYWludCo+JiBvcmRlcikKK3sKKyAgICBpZiAoZGlkVmlz
aXRTb21ldGhpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChvcmRlci5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgc2l6ZV90IGluZGV4ID0gMDsK
KworICAgIC8vIFdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgY29uc3RyYWludCBzZXF1ZW50
aWFsbHkgaWYgd2UgdGhpbmsgaXQgd2lsbCBxdWlja2x5IGdpdmUgdXMgYQorICAgIC8vIHJlc3Vs
dC4gSWYgd2UgcmFuIGl0IGluIHBhcmFsbGVsIHRvIG90aGVyIGNvbnN0cmFpbnRzLCB0aGVuIHdl
IG1pZ2h0IGVuZCB1cCBoYXZpbmcgdG8gd2FpdCBmb3IKKyAgICAvLyB0aG9zZSBvdGhlciBjb25z
dHJhaW50cyB0byBmaW5pc2gsIHdoaWNoIHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSBzaW5jZSBk
dXJpbmcgY29udmVyZ2VuY2UgaXQncworICAgIC8vIGVtcGlyaWNhbGx5IG1vc3Qgb3B0aW1hbCB0
byByZXR1cm4gdG8gZHJhaW5pbmcgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVzIHdv
cmsuIE1vc3QKKyAgICAvLyBjb25zdHJhaW50cyBkb24ndCBnZW5lcmF0ZSBhbnkgd29yayBtb3N0
IG9mIHRoZSB0aW1lLCBhbmQgd2hlbiB0aGV5IGRvIGdlbmVyYXRlIHdvcmssIHRoZXkgdGVuZAor
ICAgIC8vIHRvIGdlbmVyYXRlIGVub3VnaCBvZiBpdCB0byBmZWVkIGEgZGVjZW50IGRyYWluaW5n
IGN5Y2xlLiBUaGVyZWZvcmUsIHBhdXNlIHRpbWVzIGFyZSBsb3dlc3QgaWYKKyAgICAvLyB3ZSBn
ZXQgdGhlIGhlY2sgb3V0IG9mIGhlcmUgYXMgc29vbiBhcyBhIGNvbnN0cmFpbnQgZ2VuZXJhdGVz
IHdvcmsuIEkgdGhpbmsgdGhhdCBwYXJ0IG9mIHdoYXQKKyAgICAvLyBtYWtlcyB0aGlzIG9wdGlt
YWwgaXMgdGhhdCB3ZSBhbHNvIG5ldmVyIGFib3J0IHJ1bm5pbmcgYSBjb25zdHJhaW50IGVhcmx5
LCBzbyB3aGVuIHdlIGRvIHJ1bgorICAgIC8vIG9uZSwgaXQgaGFzIGFuIG9wcG9ydHVuaXR5IHRv
IGdlbmVyYXRlIGFzIG11Y2ggd29yayBhcyBpdCBwb3NzaWJseSBjYW4uCisgICAgaWYgKG9yZGVy
W2luZGV4XS0+cXVpY2tXb3JrRXN0aW1hdGUobV9tYWluVmlzaXRvcikgPiAwLikgeworICAgICAg
ICBleGVjdXRlKCpvcmRlcltpbmRleCsrXSk7CisgICAgICAgIAorICAgICAgICBpZiAobV90b0V4
ZWN1dGVJblBhcmFsbGVsLmlzRW1wdHkoKQorICAgICAgICAgICAgJiYgKG9yZGVyLmlzRW1wdHko
KSB8fCBkaWRWaXNpdFNvbWV0aGluZygpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgYXV0byBwaWNrTmV4dCA9IHNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPigpPigKKyAgICAgICAgWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAg
ICAgICAgICAgIGlmIChkaWRWaXNpdFNvbWV0aGluZygpKQorICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBv
cmRlci5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSAqb3Jk
ZXJbaW5kZXgrK107CisgICAgICAgICAgICByZXR1cm4gY29uc3RyYWludC5pbmRleCgpOworICAg
ICAgICB9KTsKKyAgICAKKyAgICBleGVjdXRlKFBhcmFsbGVsV29ya0ZpcnN0LCBwaWNrTmV4dCk7
Cit9CisKK3ZvaWQgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXI6OmV4ZWN1dGUoTWFya2luZ0NvbnN0
cmFpbnQmIGNvbnN0cmFpbnQpCit7CisgICAgaWYgKG1fZXhlY3V0ZWQuZ2V0KGNvbnN0cmFpbnQu
aW5kZXgoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjb25zdHJhaW50LnByZXBhcmVU
b0V4ZWN1dGUoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX21haW5WaXNpdG9yKTsKKyAgICBDb25zdHJh
aW50UGFyYWxsZWxpc20gcGFyYWxsZWxpc20gPSBjb25zdHJhaW50LmV4ZWN1dGUobV9tYWluVmlz
aXRvcik7CisgICAgZGlkRXhlY3V0ZShwYXJhbGxlbGlzbSwgY29uc3RyYWludC5pbmRleCgpKTsK
K30KKwordm9pZCBNYXJraW5nQ29uc3RyYWludFNvbHZlcjo6cnVuRXhlY3V0aW9uVGhyZWFkKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBTY2hlZHVsZXJQcmVmZXJlbmNlIHByZWZlcmVuY2UsIFNjb3Bl
ZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCkKK3sKKyAgICBmb3Ig
KDs7KSB7CisgICAgICAgIGJvb2wgZG9QYXJhbGxlbFdvcmtNb2RlOworICAgICAgICB1bnNpZ25l
ZCBpbmRleFRvUnVuOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRyeVBhcmFsbGVsV29yayA9IFsmXSAoKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbmRleFRvUnVuID0gbV90b0V4ZWN1dGVJ
blBhcmFsbGVsLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgIGRvUGFyYWxsZWxXb3JrTW9k
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0
byB0cnlOZXh0Q29uc3RyYWludCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHBpY2tSZXN1bHQgPSBwaWNrTmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFwaWNrUmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9waWNrTmV4dElz
U3RpbGxBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWN1dGVkLmdldCgqcGlja1Jlc3Vs
dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtpbmdD
b25zdHJhaW50JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0WypwaWNrUmVzdWx0XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LmNvbmN1cnJlbmN5KCkgPT0gQ29uc3Ry
YWludENvbmN1cnJlbmN5OjpTZXF1ZW50aWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV90b0V4ZWN1dGVTZXF1ZW50aWFsbHkuYXBwZW5kKCpwaWNrUmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFsbGVsaXNtKCkgPT0g
Q29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmsrKzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4VG9SdW4gPSAqcGlja1Jlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRvUGFyYWxsZWxXb3JrTW9kZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3RyYWludC5wcmVwYXJlVG9FeGVjdXRlKGxvY2tlciwgdmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHByZWZlcmVu
Y2UgPT0gUGFyYWxsZWxXb3JrRmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBh
cmFsbGVsV29yaygpIHx8IHRyeU5leHRDb25zdHJhaW50KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodHJ5TmV4dENvbnN0cmFpbnQoKSB8fCB0cnlQYXJhbGxlbFdvcmsoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSBub3RoaW5nIGxl
ZnQgdG8gcnVuLiBUaGUgb25seSB3YXkgZm9yIHVzIHRvIGhhdmUgbW9yZSB3b3JrIGlzCisgICAg
ICAgICAgICAgICAgLy8gaWYgc29tZW9uZSBpcyBydW5uaW5nIGEgY29uc3RyYWludCB0aGF0IG1h
eSBwcm9kdWNlIHBhcmFsbGVsIHdvcmsuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKCFtX251bVRocmVhZHNUaGF0TWF5UHJvZHVjZVdvcmspCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
QW55IHdhaXRpbmcgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBqdXN0IHJ1bm5pbmcgdGhlIFNsb3RW
aXNpdG9yLgorICAgICAgICAgICAgICAgIC8vIEkgd29uZGVyIGlmIHRoYXQgd291bGQgYmUgcHJv
Zml0YWJsZS4KKyAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIENvbnN0
cmFpbnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSA9IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6U2Vx
dWVudGlhbDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1hcmtpbmdDb25zdHJhaW50
JiBjb25zdHJhaW50ID0gKm1fc2V0Lm1fc2V0W2luZGV4VG9SdW5dOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgaWYgKGRvUGFyYWxsZWxXb3JrTW9kZSkKKyAgICAgICAgICAgIGNvbnN0
cmFpbnQuZG9QYXJhbGxlbFdvcmsodmlzaXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHBhcmFsbGVsaXNtID0gY29uc3RyYWludC5leGVjdXRlKHZpc2l0b3IpOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZG9QYXJh
bGxlbFdvcmtNb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdG9FeGVjdXRlSW5QYXJhbGxl
bFNldC5nZXQoaW5kZXhUb1J1bikpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kaWRFeGVjdXRl
SW5QYXJhbGxlbC5hcHBlbmQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWwudGFrZUZp
cnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUgPT0gaW5kZXhUb1J1bjsgfSk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9FeGVj
dXRlSW5QYXJhbGxlbFNldC5jbGVhcihpbmRleFRvUnVuKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnBhcmFs
bGVsaXNtKCkgPT0gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKKyAgICAgICAgICAg
ICAgICAgICAgbV9udW1UaHJlYWRzVGhhdE1heVByb2R1Y2VXb3JrLS07CisgICAgICAgICAgICAg
ICAgbV9leGVjdXRlZC5zZXQoaW5kZXhUb1J1bik7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFs
bGVsaXNtID09IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsLmFwcGVuZChpbmRleFRvUnVuKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV90b0V4ZWN1dGVJblBhcmFsbGVsU2V0LnNldChpbmRleFRvUnVuKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOjpkaWRFeGVjdXRlKENvbnN0cmFp
bnRQYXJhbGxlbGlzbSBwYXJhbGxlbGlzbSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgbV9leGVj
dXRlZC5zZXQoaW5kZXgpOworICAgIGlmIChwYXJhbGxlbGlzbSA9PSBDb25zdHJhaW50UGFyYWxs
ZWxpc206OlBhcmFsbGVsKSB7CisgICAgICAgIG1fdG9FeGVjdXRlSW5QYXJhbGxlbC5hcHBlbmQo
aW5kZXgpOworICAgICAgICBtX3RvRXhlY3V0ZUluUGFyYWxsZWxTZXQuc2V0KGluZGV4KTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJWaXNpdENvdW50ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcDsK
K2NsYXNzIE1hcmtpbmdDb25zdHJhaW50OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnRTZXQ7CisK
K2NsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShNYXJraW5nQ29uc3RyYWludFNvbHZlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgCitwdWJsaWM6CisgICAgTWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoTWFya2luZ0NvbnN0
cmFpbnRTZXQmKTsKKyAgICB+TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIoKTsKKyAgICAKKyAgICBi
b29sIGRpZFZpc2l0U29tZXRoaW5nKCkgY29uc3Q7CisgICAgCisgICAgZW51bSBTY2hlZHVsZXJQ
cmVmZXJlbmNlIHsKKyAgICAgICAgUGFyYWxsZWxXb3JrRmlyc3QsCisgICAgICAgIE5leHRDb25z
dHJhaW50Rmlyc3QKKyAgICB9OworCisgICAgdm9pZCBleGVjdXRlKFNjaGVkdWxlclByZWZlcmVu
Y2UsIFNjb3BlZExhbWJkYTxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigpPiBwaWNrTmV4dCk7Cisg
ICAgCisgICAgdm9pZCBkcmFpbihCaXRWZWN0b3ImIHVuZXhlY3V0ZWQpOworICAgIAorICAgIHZv
aWQgY29udmVyZ2UoY29uc3QgVmVjdG9yPE1hcmtpbmdDb25zdHJhaW50Kj4mIG9yZGVyKTsKKyAg
ICAKKyAgICB2b2lkIGV4ZWN1dGUoTWFya2luZ0NvbnN0cmFpbnQmKTsKKyAgICAKK3ByaXZhdGU6
CisgICAgdm9pZCBydW5FeGVjdXRpb25UaHJlYWQoU2xvdFZpc2l0b3ImLCBTY2hlZHVsZXJQcmVm
ZXJlbmNlLCBTY29wZWRMYW1iZGE8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKT4gcGlja05leHQp
OworICAgIAorICAgIHZvaWQgZGlkRXhlY3V0ZShDb25zdHJhaW50UGFyYWxsZWxpc20sIHVuc2ln
bmVkIGluZGV4KTsKKworICAgIEhlYXAmIG1faGVhcDsKKyAgICBTbG90VmlzaXRvciYgbV9tYWlu
VmlzaXRvcjsKKyAgICBNYXJraW5nQ29uc3RyYWludFNldCYgbV9zZXQ7CisgICAgQml0VmVjdG9y
IG1fZXhlY3V0ZWQ7CisgICAgRGVxdWU8dW5zaWduZWQsIDMyPiBtX3RvRXhlY3V0ZUluUGFyYWxs
ZWw7CisgICAgQml0VmVjdG9yIG1fdG9FeGVjdXRlSW5QYXJhbGxlbFNldDsKKyAgICBWZWN0b3I8
dW5zaWduZWQsIDMyPiBtX2RpZEV4ZWN1dGVJblBhcmFsbGVsOworICAgIFZlY3Rvcjx1bnNpZ25l
ZCwgMzI+IG1fdG9FeGVjdXRlU2VxdWVudGlhbGx5OworICAgIExvY2sgbV9sb2NrOworICAgIENv
bmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICB1bnNpZ25lZCBtX251bVRocmVhZHNUaGF0TWF5UHJv
ZHVjZVdvcmsgeyAwIH07CisgICAgYm9vbCBtX3BpY2tOZXh0SXNTdGlsbEFjdGl2ZSB7IHRydWUg
fTsKKyAgICBWZWN0b3I8VmlzaXRDb3VudGVyLCAxNj4gbV92aXNpdENvdW50ZXJzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09w
YXF1ZVJvb3RTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9P
cGFxdWVSb290U2V0LmgJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL09wYXF1ZVJvb3RTZXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDkxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIE9wYXF1ZVJvb3RTZXQgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE9wYXF1ZVJvb3RTZXQpOwotcHVibGljOgotICAgIE9wYXF1ZVJvb3RTZXQo
KQotICAgICAgICA6IG1fbGFzdFF1ZXJpZWRSb290KG51bGxwdHIpCi0gICAgICAgICwgbV9jb250
YWluc0xhc3RRdWVyaWVkUm9vdChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjb250
YWlucyh2b2lkKiByb290KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHJvb3QgIT0gbV9sYXN0
UXVlcmllZFJvb3QpIHsKLSAgICAgICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gcm9vdDsKLSAg
ICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3QgPSBtX3Jvb3RzLmNvbnRhaW5zKHJv
b3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2NvbnRhaW5zTGFzdFF1ZXJpZWRSb290
OwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9yb290cy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewot
ICAgICAgICBtX3Jvb3RzLmNsZWFyKCk7Ci0gICAgICAgIG1fbGFzdFF1ZXJpZWRSb290ID0gbnVs
bHB0cjsKLSAgICAgICAgbV9jb250YWluc0xhc3RRdWVyaWVkUm9vdCA9IGZhbHNlOwotICAgIH0K
LQotICAgIGJvb2wgYWRkKHZvaWQqIHJvb3QpCi0gICAgewotICAgICAgICBpZiAocm9vdCA9PSBt
X2xhc3RRdWVyaWVkUm9vdCkKLSAgICAgICAgICAgIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Qg
PSB0cnVlOwotICAgICAgICByZXR1cm4gbV9yb290cy5hZGQocm9vdCkuaXNOZXdFbnRyeTsKLSAg
ICB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yb290
cy5zaXplKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jvb3RzLmJlZ2luKCk7Ci0gICAg
fQotCi0gICAgSGFzaFNldDx2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9yb290cy5lbmQoKTsKLSAgICB9Ci0KLQotcHJpdmF0ZToKLSAg
ICBIYXNoU2V0PHZvaWQqPiBtX3Jvb3RzOwotICAgIG11dGFibGUgdm9pZCogbV9sYXN0UXVlcmll
ZFJvb3Q7Ci0gICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNMYXN0UXVlcmllZFJvb3Q7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bh
cmFsbGVsU291cmNlQWRhcHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1BhcmFsbGVsU291cmNlQWRhcHRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPdXRlclR5cGUsIHR5cGVuYW1lIElubmVyVHlwZSwgdHlwZW5hbWUgVW53cmFwRnVuYz4KK2Ns
YXNzIFBhcmFsbGVsU291cmNlQWRhcHRlciA6IHB1YmxpYyBTaGFyZWRUYXNrPElubmVyVHlwZSgp
PiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxTb3VyY2VBZGFwdGVyKFJlZlB0cjxTaGFyZWRUYXNr
PE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3JhcEZ1bmMmIHVud3JhcEZ1bmMp
CisgICAgICAgIDogbV9vdXRlclNvdXJjZShvdXRlclNvdXJjZSkKKyAgICAgICAgLCBtX3Vud3Jh
cEZ1bmModW53cmFwRnVuYykKKyAgICB7CisgICAgfQorICAgIAorICAgIElubmVyVHlwZSBydW4o
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAobV9pbm5lclNvdXJjZSkgeworICAgICAg
ICAgICAgICAgIGlmIChJbm5lclR5cGUgcmVzdWx0ID0gbV9pbm5lclNvdXJjZS0+cnVuKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgbV9pbm5l
clNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1faW5uZXJTb3VyY2UgPSBtX3Vud3JhcEZ1bmMobV9vdXRlclNvdXJjZS0+cnVuKCkpOwor
ICAgICAgICB9IHdoaWxlIChtX2lubmVyU291cmNlKTsKKyAgICAgICAgcmV0dXJuIElubmVyVHlw
ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVkVGFzazxPdXRlclR5cGUo
KT4+IG1fb3V0ZXJTb3VyY2U7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8SW5uZXJUeXBlKCk+PiBt
X2lubmVyU291cmNlOworICAgIFVud3JhcEZ1bmMgbV91bndyYXBGdW5jOworICAgIExvY2sgbV9s
b2NrOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3V0ZXJUeXBlLCB0eXBlbmFtZSBJbm5lclR5
cGUsIHR5cGVuYW1lIFVud3JhcEZ1bmM+CitSZWY8UGFyYWxsZWxTb3VyY2VBZGFwdGVyPE91dGVy
VHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPj4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVy
KFJlZlB0cjxTaGFyZWRUYXNrPE91dGVyVHlwZSgpPj4gb3V0ZXJTb3VyY2UsIGNvbnN0IFVud3Jh
cEZ1bmMmIHVud3JhcEZ1bmMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFyYWxsZWxT
b3VyY2VBZGFwdGVyPE91dGVyVHlwZSwgSW5uZXJUeXBlLCBVbndyYXBGdW5jPihvdXRlclNvdXJj
ZSwgdW53cmFwRnVuYykpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TaW1wbGVNYXJraW5nQ29uc3Ry
YWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZU1hcmtpbmdDb25zdHJh
aW50OjpTaW1wbGVNYXJraW5nQ29uc3RyYWludCgKKyAgICBDU3RyaW5nIGFiYnJldmlhdGVkTmFt
ZSwgQ1N0cmluZyBuYW1lLAorICAgIDo6RnVuY3Rpb248dm9pZChTbG90VmlzaXRvciYpPiBleGVj
dXRlRnVuY3Rpb24sCisgICAgQ29uc3RyYWludFZvbGF0aWxpdHkgdm9sYXRpbGl0eSwgQ29uc3Ry
YWludENvbmN1cnJlbmN5IGNvbmN1cnJlbmN5KQorICAgIDogTWFya2luZ0NvbnN0cmFpbnQoV1RG
TW92ZShhYmJyZXZpYXRlZE5hbWUpLCBXVEZNb3ZlKG5hbWUpLCB2b2xhdGlsaXR5LCBjb25jdXJy
ZW5jeSwgQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsKQorICAgICwgbV9leGVjdXRl
RnVuY3Rpb24oV1RGTW92ZShleGVjdXRlRnVuY3Rpb24pKQoreworfQorCitTaW1wbGVNYXJraW5n
Q29uc3RyYWludDo6flNpbXBsZU1hcmtpbmdDb25zdHJhaW50KCkKK3sKK30KKworQ29uc3RyYWlu
dFBhcmFsbGVsaXNtIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2V4ZWN1dGVGdW5jdGlvbih2aXNpdG9yKTsKKyAgICBy
ZXR1cm4gQ29uc3RyYWludFBhcmFsbGVsaXNtOjpTZXF1ZW50aWFsOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2ltcGxlTWFya2lu
Z0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
aW1wbGVNYXJraW5nQ29uc3RyYWludC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFy
a2luZ0NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIFRoaXMgYWxsb3dzIGZvciBhbiBpbmZvcm1hbCB3YXkgdG8gZGVmaW5lIGNv
bnN0cmFpbnRzLiBKdXN0IHBhc3MgYSBsYW1iZGEgdG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgb25s
eQorLy8gZG93bnNpZGUgaXMgdGhhdCB0aGlzIG1ha2VzIGl0IGhhcmQgZm9yIGNvbnN0cmFpbnRz
IHRvIGJlIHN0YXRlZnVsLCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gYmUKKy8vIHBh
cmFsbGVsLiBJbiB0aG9zZSBjYXNlcywgaXQncyBlYXNpZXIgdG8ganVzdCBzdWJjbGFzcyBNYXJr
aW5nQ29uc3RyYWludC4KK2NsYXNzIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50IDogcHVibGljIE1h
cmtpbmdDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTaW1wbGVN
YXJraW5nQ29uc3RyYWludCgKKyAgICAgICAgQ1N0cmluZyBhYmJyZXZpYXRlZE5hbWUsIENTdHJp
bmcgbmFtZSwKKyAgICAgICAgOjpGdW5jdGlvbjx2b2lkKFNsb3RWaXNpdG9yJik+LAorICAgICAg
ICBDb25zdHJhaW50Vm9sYXRpbGl0eSwKKyAgICAgICAgQ29uc3RyYWludENvbmN1cnJlbmN5ID0g
Q29uc3RyYWludENvbmN1cnJlbmN5OjpDb25jdXJyZW50KTsKKyAgICAKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB+U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQoKTsKKyAgICAKK3ByaXZhdGU6CisgICAg
Q29uc3RyYWludFBhcmFsbGVsaXNtIGV4ZWN1dGVJbXBsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisKKyAgICA6OkZ1bmN0aW9uPHZvaWQoU2xvdFZpc2l0b3ImKT4gbV9leGVjdXRlRnVuY3Rpb247
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw5ICs5
OCw3IEBAIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpk
aWRTdGFydE1hcmtpbmcoKQogewotICAgIGlmIChoZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09
IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9vcGFxdWVS
b290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkgbm93LgotICAgIGVsc2UK
KyAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVk
ZW4pCiAgICAgICAgIHJlc2V0KCk7CiAKICAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmls
ZXIgPSB2bSgpLmhlYXBQcm9maWxlcigpKQpAQCAtMTExLDcgKzEwOSw2IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5zaXplKCkpOwogICAgIG1fYnl0ZXNW
aXNpdGVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcFNuYXBzaG90QnVp
bGRlciA9IG51bGxwdHI7CkBAIC0yNzcsNyArMjc0LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kVG9NYXJrU3RhY2soSlNDZQogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KIEFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVy
VHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KGNlbGwpKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkp
OwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7CiAgICAgCiAgICAgY29udGFpbmVyLm5v
dGVNYXJrZWQoKTsKQEAgLTM0Niw3ICszNDMsNyBAQCBwcml2YXRlOgogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQogewot
ICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CisgICAgQVNTRVJU
KEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKICAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1
cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwogICAgIApAQCAtNDM1LDcgKzQzMiw3IEBAIHZv
aWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogCiB2b2lkIFNsb3RWaXNpdG9y
Ojp1cGRhdGVNdXRhdG9ySXNTdG9wcGVkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKLSAgICBt
X211dGF0b3JJc1N0b3BwZWQgPSAobV9oZWFwLmNvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxk
SXNTdG9wcGVkKCkgJiBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IpOworICAgIG1fbXV0
YXRvcklzU3RvcHBlZCA9IChtX2hlYXAud29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVG
b3JTdG9wcGVkTXV0YXRvcik7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OnVwZGF0ZU11dGF0b3JJ
c1N0b3BwZWQoKQpAQCAtNDUyLDcgKzQ0OSw3IEBAIGJvb2wgU2xvdFZpc2l0b3I6Omhhc0Fja25v
d2xlZGdlZFRoYXRUaGUKIAogYm9vbCBTbG90VmlzaXRvcjo6bXV0YXRvcklzU3RvcHBlZElzVXBU
b0RhdGUoKSBjb25zdAogewotICAgIHJldHVybiBtX211dGF0b3JJc1N0b3BwZWQgPT0gKG1faGVh
cC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgpICYgbV9jYW5PcHRpbWl6
ZUZvclN0b3BwZWRNdXRhdG9yKTsKKyAgICByZXR1cm4gbV9tdXRhdG9ySXNTdG9wcGVkID09ICht
X2hlYXAud29ybGRJc1N0b3BwZWQoKSAmIG1fY2FuT3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcik7
CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om9wdGltaXplRm9yU3RvcHBlZE11dGF0b3IoKQpAQCAt
NDkwLDggKzQ4Nyw2IEBAIE5FVkVSX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb24K
ICAgICAgICAgbV9yaWdodFRvUnVuLnNhZmVwb2ludCgpOwogICAgICAgICBkb25hdGVLbm93blBh
cmFsbGVsKCk7CiAgICAgfQotICAgIAotICAgIG1lcmdlSWZOZWNlc3NhcnkoKTsKIH0KIAogc2l6
ZV90IFNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyhzaXplX3QgYnl0ZXNS
ZXF1ZXN0ZWQpCkBAIC01NTAsNyArNTQ1LDYgQEAgc2l6ZV90IFNsb3RWaXNpdG9yOjpwZXJmb3Jt
SW5jcmVtZW50T2ZEcgogICAgIH0KIAogICAgIGRvbmF0ZUFsbCgpOwotICAgIG1lcmdlSWZOZWNl
c3NhcnkoKTsKIAogICAgIHJldHVybiBieXRlc1Zpc2l0ZWQoKTsKIH0KQEAgLTU2MSwxNyArNTU1
LDE2IEBAIGJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oKQogICAgIHJldHVy
biBkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcik7CiB9CiAKLWJvb2wgU2xvdFZpc2l0b3I6OmRp
ZFJlYWNoVGVybWluYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImKQorYm9vbCBTbG90VmlzaXRv
cjo6ZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewot
ICAgIHJldHVybiBpc0VtcHR5KCkKLSAgICAgICAgJiYgIW1faGVhcC5tX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtT
dGFjay0+aXNFbXB0eSgpCi0gICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxs
ZWxNYXJrZXJzCisgICAgICAgICYmICFoYXNXb3JrKGxvY2tlcik7CiB9CiAKIGJvb2wgU2xvdFZp
c2l0b3I6Omhhc1dvcmsoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewotICAgIHJldHVybiAhbV9o
ZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICByZXR1cm4gIWlz
RW1wdHkoKQorICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCkKICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlz
RW1wdHkoKTsKIH0KIApAQCAtNTgzLDEyICs1NzYsMTQgQEAgTkVWRVJfSU5MSU5FIFNsb3RWaXNp
dG9yOjpTaGFyZWREcmFpblJlcwogCiAgICAgYm9vbCBpc0FjdGl2ZSA9IGZhbHNlOwogICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3Im
KT4+IGJvbnVzVGFzazsKKyAgICAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CisgICAgICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCk7CiAgICAgICAgICAgICBpZiAoaXNB
Y3RpdmUpCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1h
cmtlcnMtLTsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFy
a2VycysrOwotCisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUg
PT0gTWFzdGVyRHJhaW4pIHsKICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKQEAgLTYyOSwyOCArNjI0LDUx
IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXMKIAogICAgICAgICAg
ICAgICAgIGF1dG8gaXNSZWFkeSA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGhhc1dvcmsobG9ja2VyKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9o
ZWFwLm1fYm9udXNWaXNpdG9yVGFzawogICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFw
Lm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICB9OwogCiAgICAg
ICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbCht
X2hlYXAubV9tYXJraW5nTXV0ZXgsIHRpbWVvdXQsIGlzUmVhZHkpOwogICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmICghaGFzV29yayhsb2NrZXIpCisgICAgICAgICAgICAgICAg
ICAgICYmIG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2spCisgICAgICAgICAgICAgICAgICAgIGJv
bnVzVGFzayA9IG1faGVhcC5tX2JvbnVzVmlzaXRvclRhc2s7CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKLSAgICAgICAgICAgICAg
ICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWJvbnVzVGFzayAm
JiBpc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3JFYWNoTWFya1N0YWNrKAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3Rh
dHVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nR2xvYmFsU3RhY2soc3Rh
Y2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGlu
Z1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0
aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
Kys7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMt
LTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAg
IGlmIChib251c1Rhc2spIHsKKyAgICAgICAgICAgIGJvbnVzVGFzay0+cnVuKCp0aGlzKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIG1haW4gdGhyZWFkIGNvdWxkIHN0aWxsIGJl
IHJ1bm5pbmcsIGFuZCBtYXkgcnVuIGZvciBhIHdoaWxlLiBVbmxlc3Mgd2UgY2xlYXIgdGhlIHRh
c2sKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcywgd2Ugd2lsbCBrZWVwIGxvb3BpbmcgYXJvdW5k
IHRyeWluZyB0byBydW4gdGhlIHRhc2suCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAgICAgICAg
ICAgICAgIGlmIChtX2hlYXAubV9ib251c1Zpc2l0b3JUYXNrID09IGJvbnVzVGFzaykKKyAgICAg
ICAgICAgICAgICAgICAgbV9oZWFwLm1fYm9udXNWaXNpdG9yVGFzayA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgYm9udXNUYXNrID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX2hlYXAu
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNFbXB0eSgpKTsK
KyAgICAgICAgICAgIGRyYWluKHRpbWVvdXQpOworICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBpc0FjdGl2ZSA9IHRydWU7CiAgICAgfQogfQpAQCAtNjcwLDE1ICs2ODgsMTkgQEAgU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgIGlmIChPcHRpb25zOjpudW1i
ZXJPZkdDTWFya2VycygpID09IDEKICAgICAgICAgfHwgKG1faGVhcC5tX3dvcmxkU3RhdGUubG9h
ZCgpICYgSGVhcDo6bXV0YXRvcldhaXRpbmdCaXQpCiAgICAgICAgIHx8ICFtX2hlYXAuaGFzSGVh
cEFjY2VzcygpCi0gICAgICAgIHx8IG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3Js
ZElzU3RvcHBlZCgpKSB7CisgICAgICAgIHx8IG1faGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAg
ICAgICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIG92ZXIgZHJhaW5JblBhcmFsbGVsKCkg
d2hlbiB3ZSBoYXZlIGEgY29uY3VycmVudCBtdXRhdG9yIGJ1dAogICAgICAgICAvLyBvdGhlcndp
c2UgaXQgaXMgbm90IHByb2ZpdGFibGUuCiAgICAgICAgIHJldHVybiBkcmFpbkluUGFyYWxsZWwo
dGltZW91dCk7CiAgICAgfQogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9oZWFwLm1fbWFya2lu
Z011dGV4KTsKLSAgICBkb25hdGVBbGwobG9ja2VyKTsKLSAgICAKKyAgICBkb25hdGVBbGwoaG9s
ZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KSk7CisgICAgcmV0dXJuIHdhaXRGb3JUZXJtaW5h
dGlvbih0aW1lb3V0KTsKK30KKworU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RW
aXNpdG9yOjp3YWl0Rm9yVGVybWluYXRpb24oTW9ub3RvbmljVGltZSB0aW1lb3V0KQoreworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKICAgICBmb3Ig
KDs7KSB7CiAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQogICAgICAgICAgICAgcmV0
dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKQEAgLTcxMSw2MSArNzMzLDYgQEAgdm9p
ZCBTbG90VmlzaXRvcjo6ZG9uYXRlQWxsKGNvbnN0IEFic3RyYQogICAgIG1faGVhcC5tX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6
YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIGlmIChtX2lnbm9yZU5ld09wYXF1ZVJvb3RzKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewot
ICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCi0gICAgICAg
IG1faGVhcC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAvLyBQdXQgaW50byB0aGUgbG9jYWwgc2V0LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVk
IG9uZSBldmVyeSBvbmNlIGluCi0gICAgLy8gYSB3aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUg
bG9jYWwgc2V0cyBkb24ndCBncm93IHRvbyBsYXJnZS4KLSAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQ
cm9maXRhYmxlKCk7Ci0gICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci19Ci0KLWJvb2wgU2xv
dFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25zdAotewotICAgIGlm
ICghcm9vdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVCghbV9pc0lu
UGFyYWxsZWxNb2RlKTsKLSAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMo
cm9vdCk7Ci19Ci0KLVRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlT
dGF0ZSh2b2lkKiByb290KSBjb25zdAotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJu
IEZhbHNlVHJpU3RhdGU7Ci0gICAgCi0gICAgaWYgKG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9v
dCkpCi0gICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7Ci0gICAgaWYgKG1faGVhcC5tX29w
YXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQotICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwot
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjptZXJnZUlm
TmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6
Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQotewotICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdl
VGhyZXNob2xkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19
Ci0gICAgCiB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQogewogICAgIGlmICghbV9pc0luUGFy
YWxsZWxNb2RlKSB7CkBAIC03ODUsMTYgKzc1Miw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZUFuZERyYWluKE1vbm90b24KICAgICBkcmFpbih0aW1lb3V0KTsKIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCi17Ci0gICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4KTsKLSAgICAgICAgZm9yIChh
dXRvKiByb290IDogbV9vcGFxdWVSb290cykKLSAgICAgICAgICAgIG1faGVhcC5tX29wYXF1ZVJv
b3RzLmFkZChyb290KTsKLSAgICB9Ci0gICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotfQotCiB2
b2lkIFNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCiB7CiAgICAgbV9oZWFwLm1fd2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24g
MjI1NTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAj
aW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5j
bHVkZSAiT3BhcXVlUm9vdFNldC5oIgogI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1
ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpA
QCAtOTUsMTAgKzk0LDkgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kSGlkZGVuVW5iYXJyaWVy
ZWQoSlNWYWx1ZSk7CiAgICAgdm9pZCBhcHBlbmRIaWRkZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CisgICAg
Ym9vbCBhZGRPcGFxdWVSb290KHZvaWQqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByb290IHdh
cyBuZXcuCiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJv
b3Qodm9pZCopIGNvbnN0OwotICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRl
KHZvaWQqKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7
CiAKICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHko
KSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KIApAQCAtMTIxLDYgKzExOSw4IEBAIHB1
YmxpYzoKIAogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNU
aW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFp
blJlc3VsdCBkcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgCisgICAgU2hhcmVkRHJhaW5SZXN1bHQg
d2FpdEZvclRlcm1pbmF0aW9uKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOwogCiAgICAgLy8gQXR0ZW1wdHMgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnQg
b2YgZHJhaW5pbmcgdGhhdCBpbnZvbHZlcyBvbmx5IHdhbGtpbmcgYGJ5dGVzYCB3b3J0aCBvZiBk
YXRhLiBUaGlzCiAgICAgLy8gaXMgbGlrZWx5IHRvIGFjY2lkZW50YWxseSB3YWxrIG1vcmUgb3Ig
bGVzcyB0aGFuIHRoYXQuIEl0IHdpbGwgdXN1YWxseSBtYXJrIG1vcmUgdGhhbiBieXRlcy4gSXQg
bWF5CkBAIC0xMjgsOCArMTI4LDYgQEAgcHVibGljOgogICAgIC8vIHJhcmUgY2FzZXMgaGFwcGVu
IHRlbXBvcmFyaWx5IGV2ZW4gaWYgd2UncmUgbm90IHJlYWNoaW5nIHRlcm1pbmF0aW9uKS4KICAg
ICBzaXplX3QgcGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzKTsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlSWZOZWNlc3NhcnkoKTsKLQogICAgIC8v
IFRoaXMgaW5mb3JtcyB0aGUgR0MgYWJvdXQgYXV4aWxpYXJ5IG9mIHNvbWUgc2l6ZSB0aGF0IHdl
IGFyZSBrZWVwaW5nIGFsaXZlLiBJZiB5b3UgZG9uJ3QgZG8KICAgICAvLyB0aGlzIHRoZW4gdGhl
IHNwYWNlIHdpbGwgYmUgZnJlZWQgYXQgZW5kIG9mIEdDLgogICAgIHZvaWQgbWFya0F1eGlsaWFy
eShjb25zdCB2b2lkKiBiYXNlKTsKQEAgLTE5NCwxMCArMTkyLDYgQEAgcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAgIAotICAgIHZv
aWQgbWVyZ2VPcGFxdWVSb290cygpOwotCi0gICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9m
aXRhYmxlKCk7Ci0KICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CiAgICAg
CiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CkBAIC0yMTUsNyArMjA5LDYgQEAgcHJp
dmF0ZToKIAogICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CiAgICAgTWFya1N0
YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7Ci0gICAgT3BhcXVlUm9vdFNldCBtX29wYXF1ZVJvb3Rz
OyAvLyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2Fy
YmFnZSBjb2xsZWN0b3IuCiAgICAgYm9vbCBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzIHsgZmFsc2Ug
fTsgLy8gVXNlZnVsIGFzIGEgZGVidWdnaW5nIG1vZGUuCiAgICAgCiAgICAgc2l6ZV90IG1fYnl0
ZXNWaXNpdGVkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW4KICAgICAKICAgICBE
ZXBlbmRlbmN5IGRlcGVuZGVuY3k7CiAgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzTGFyZ2VBbGxv
Y2F0aW9uKCkpKSB7Ci0gICAgICAgIGRlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpOwogICAg
ICAgICBpZiAoTElLRUxZKGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2VkKCkpKSB7CiAg
ICAgICAgICAgICBpZiAoTElLRUxZKCFtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTg2LDcgKzg1LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRIaQogICAgIAogICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKICAgICBp
ZiAoVU5MSUtFTFkoY2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkpIHsKLSAgICAgICAgZGVwZW5k
ZW5jeSA9IG51bGxEZXBlbmRlbmN5KCk7CiAgICAgICAgIGlmIChMSUtFTFkoY2VsbC0+bGFyZ2VB
bGxvY2F0aW9uKCkuaXNNYXJrZWQoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNl
IHsKQEAgLTEzNiw2ICsxMzQsMjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRWYQogICAgICAgICBhcHBlbmRIaWRkZW4oYmFycmllcnNbaV0pOwogfQogCitpbmxpbmUg
Ym9vbCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBwdHIpCit7CisgICAgaWYgKCFw
dHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9pZ25vcmVOZXdPcGFxdWVSb290
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaGVhcCgpLT5tX29wYXF1ZVJvb3Rz
LmFkZChwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV92aXNpdENvdW50Kys7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09w
YXF1ZVJvb3Qodm9pZCogcHRyKSBjb25zdAoreworICAgIHJldHVybiBoZWFwKCktPm1fb3BhcXVl
Um9vdHMuY29udGFpbnMocHRyKTsKK30KKwogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAobV9pc0ZpcnN0Vmlz
aXQpIHsKQEAgLTE1OSwxMiArMTc0LDEyIEBAIGlubGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVh
cCgpIGNvbnN0CiAKIGlubGluZSBWTSYgU2xvdFZpc2l0b3I6OnZtKCkKIHsKLSAgICByZXR1cm4g
Km1faGVhcC5tX3ZtOworICAgIHJldHVybiAqbV9oZWFwLnZtKCk7CiB9CiAKIGlubGluZSBjb25z
dCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKm1faGVhcC5tX3Zt
OworICAgIHJldHVybiAqbV9oZWFwLnZtKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAy
MjU1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlBhcmFsbGVsU291cmNlQWRhcHRlci5oIgogI2luY2x1ZGUgIlBy
ZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIApA
QCAtODgsNSArODksNDIgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vic3BhY2U6OmZpbmRFbXB0
eQogICAgIHJldHVybiBudWxscHRyOwogfQogCitSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRBbGxv
Y2F0b3IqKCk+PiBTdWJzcGFjZTo6cGFyYWxsZWxBbGxvY2F0b3JTb3VyY2UoKQoreworICAgIGNs
YXNzIFRhc2sgOiBwdWJsaWMgU2hhcmVkVGFzazxNYXJrZWRBbGxvY2F0b3IqKCk+IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFRhc2soTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgICAg
ICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJ1bigpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAg
IE1hcmtlZEFsbG9jYXRvciogcmVzdWx0ID0gbV9hbGxvY2F0b3I7CisgICAgICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yID0gcmVzdWx0LT5uZXh0QWxsb2Nh
dG9ySW5TdWJzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2Nh
dG9yOworICAgICAgICBMb2NrIG1fbG9jazsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGFzayhtX2ZpcnN0QWxsb2NhdG9yKSk7Cit9CisKK1JlZlB0cjxTaGFyZWRUYXNr
PE1hcmtlZEJsb2NrOjpIYW5kbGUqKCk+PiBTdWJzcGFjZTo6cGFyYWxsZWxOb3RFbXB0eU1hcmtl
ZEJsb2NrU291cmNlKCkKK3sKKyAgICByZXR1cm4gY3JlYXRlUGFyYWxsZWxTb3VyY2VBZGFwdGVy
PE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZEJsb2NrOjpIYW5kbGUqPigKKyAgICAgICAgcGFyYWxs
ZWxBbGxvY2F0b3JTb3VyY2UoKSwKKyAgICAgICAgW10gKE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yKSAtPiBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4geworICAg
ICAgICAgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT5wYXJhbGxlbE5vdEVtcHR5QmxvY2tTb3Vy
Y2UoKTsKKyAgICAgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE3
ICs2OSwyNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lk
IGZvckVhY2hBbGxvY2F0b3IoY29uc3QgRnVuYyYpOwogICAgIAorICAgIFJlZlB0cjxTaGFyZWRU
YXNrPE1hcmtlZEFsbG9jYXRvciooKT4+IHBhcmFsbGVsQWxsb2NhdG9yU291cmNlKCk7CisgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hNYXJrZWRCbG9j
ayhjb25zdCBGdW5jJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2
b2lkIGZvckVhY2hOb3RFbXB0eU1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigp
Pj4gcGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJsb2NrU291cmNlKCk7CisgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMYXJnZUFsbG9jYXRpb24oY29uc3Qg
RnVuYyYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JF
YWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+PiBmb3JFYWNo
TWFya2VkQ2VsbEluUGFyYWxsZWwoY29uc3QgRnVuYyYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24g
MjI1NTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDUzIEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hN
YXJrZWRDZWxsKGNvbnN0IEYKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK1JlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoU2xvdFZpc2l0b3ImKT4+IFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2Vs
bEluUGFyYWxsZWwoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBjbGFzcyBUYXNrIDogcHVibGlj
IFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPiB7CisgICAgcHVibGljOgorICAgICAgICBU
YXNrKFN1YnNwYWNlJiBzdWJzcGFjZSwgY29uc3QgRnVuYyYgZnVuYykKKyAgICAgICAgICAgIDog
bV9zdWJzcGFjZShzdWJzcGFjZSkKKyAgICAgICAgICAgICwgbV9ibG9ja1NvdXJjZShzdWJzcGFj
ZS5wYXJhbGxlbE5vdEVtcHR5TWFya2VkQmxvY2tTb3VyY2UoKSkKKyAgICAgICAgICAgICwgbV9m
dW5jKGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBy
dW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IHdoaWxlIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4o
KSkgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+
IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRv
ciwgY2VsbCwga2luZCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFtX25lZWRUb1Zpc2l0
TGFyZ2VBbGxvY2F0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIG1fbmVlZFRvVmlzaXRMYXJnZUFsbG9jYXRpb25zID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3Vic3BhY2UuZm9yRWFjaExhcmdlQWxs
b2NhdGlvbigKKyAgICAgICAgICAgICAgICBbJl0gKExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlv
bikgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbi0+aXNNYXJrZWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZnVuYyh2aXNpdG9yLCBhbGxvY2F0aW9uLT5jZWxsKCks
IG1fc3Vic3BhY2UubV9hdHRyaWJ1dGVzLmNlbGxLaW5kKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBTdWJzcGFjZSYgbV9z
dWJzcGFjZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSoo
KT4+IG1fYmxvY2tTb3VyY2U7CisgICAgICAgIEZ1bmMgbV9mdW5jOworICAgICAgICBMb2NrIG1f
bG9jazsKKyAgICAgICAgYm9vbCBtX25lZWRUb1Zpc2l0TGFyZ2VBbGxvY2F0aW9ucyB7IHRydWUg
fTsKKyAgICB9OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFzaygqdGhpcywgZnVu
YykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogdm9pZCBTdWJzcGFjZTo6Zm9yRWFj
aExpdmVDZWxsKGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgZm9yRWFjaE1hcmtlZEJsb2NrKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVmlzaXRDb3VudGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZpc2l0
Q291bnRlciB7CitwdWJsaWM6CisgICAgVmlzaXRDb3VudGVyKCkgeyB9CisgICAgCisgICAgVmlz
aXRDb3VudGVyKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcigmdmlz
aXRvcikKKyAgICAgICAgLCBtX2luaXRpYWxWaXNpdENvdW50KHZpc2l0b3IudmlzaXRDb3VudCgp
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IoKSBjb25zdCB7
IHJldHVybiAqbV92aXNpdG9yOyB9CisgICAgCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmlzaXRvci0+dmlzaXRDb3VudCgpIC0gbV9pbml0
aWFsVmlzaXRDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFNsb3RWaXNpdG9yKiBt
X3Zpc2l0b3IgeyBudWxscHRyIH07CisgICAgc2l6ZV90IG1faW5pdGlhbFZpc2l0Q291bnQgeyAw
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Zpc2l0aW5nVGltZW91dC5oCShub25leGlzdGVudCkKQEAg
LTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBWaXNpdGluZ1RpbWVvdXQgewotcHVibGljOgotICAg
IFZpc2l0aW5nVGltZW91dCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBWaXNpdGluZ1RpbWVv
dXQoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKLSAgICAgICAgOiBtX2RpZFZpc2l0U29tZXRoaW5nKGRpZFZpc2l0U29t
ZXRoaW5nKQotICAgICAgICAsIG1fdmlzaXRDb3VudEJlZm9yZSh2aXNpdG9yLnZpc2l0Q291bnQo
KSkKLSAgICAgICAgLCBtX3RpbWVvdXQodGltZW91dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IHNpemVfdCB2aXNpdENvdW50KFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb3VudCgpIC0gbV92aXNpdENvdW50QmVmb3JlOwot
ICAgIH0KLQotICAgIGJvb2wgZGlkVmlzaXRTb21ldGhpbmcoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9kaWRWaXNpdFNvbWV0aGluZyB8fCB2aXNp
dENvdW50KHZpc2l0b3IpOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFRpbWVPdXQoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZGlkVmlzaXRT
b21ldGhpbmcodmlzaXRvcikgJiYgaGFzRWxhcHNlZChtX3RpbWVvdXQpOwotICAgIH0KLSAgICAK
LXByaXZhdGU6Ci0gICAgYm9vbCBtX2RpZFZpc2l0U29tZXRoaW5nIHsgZmFsc2UgfTsKLSAgICBz
aXplX3QgbV92aXNpdENvdW50QmVmb3JlIHsgMCB9OwotICAgIE1vbm90b25pY1RpbWUgbV90aW1l
b3V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzEx
MSw3IEBAIHZvaWQgV2Vha0Jsb2NrOjpzcGVjaWFsaXplZFZpc2l0KENvbnRhaW4KICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHdlYWtJbXBsLT5qc1Zh
bHVlKCk7Ci0gICAgICAgIGlmIChjb250YWluZXIuaXNNYXJrZWRDb25jdXJyZW50bHkobWFya2lu
Z1ZlcnNpb24sIGpzVmFsdWUuYXNDZWxsKCkpKQorICAgICAgICBpZiAoY29udGFpbmVyLmlzTWFy
a2VkKG1hcmtpbmdWZXJzaW9uLCBqc1ZhbHVlLmFzQ2VsbCgpKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAKICAgICAgICAgaWYgKCF3ZWFrSGFuZGxlT3duZXItPmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNW
YWx1ZSY+KGpzVmFsdWUpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSwgdmlzaXRvcikpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMjU1
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4Miw3ICszODIsNyBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNP
YmplY3Q6OnZpc2l0CiAgICAgc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlE
KTsKICAgICBsYXN0T2Zmc2V0ID0gc3RydWN0dXJlLT5sYXN0T2Zmc2V0KCk7CiAgICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7Ci0gICAgRGVw
ZW5kZW5jeSBpbmRleGluZ1R5cGVEZXBlbmRlbmN5ID0gZGVwZW5kZW5jeShpbmRleGluZ1R5cGUp
OworICAgIERlcGVuZGVuY3kgaW5kZXhpbmdUeXBlRGVwZW5kZW5jeSA9IERlcGVuZGVuY3k6OmZl
bmNlKGluZGV4aW5nVHlwZSk7CiAgICAgTG9ja2VyPEpTQ2VsbD4gbG9ja2VyKE5vTG9ja2luZ05l
Y2Vzc2FyeSk7CiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgpAQCAtMzk2LDEzICszOTYsMTMgQEAgQUxXQVlTX0lOTElO
RSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBidXR0ZXJmbHkgPSBjb25zdW1lKHRoaXMsIGluZGV4aW5nVHlwZURlcGVu
ZGVuY3kpLT5idXR0ZXJmbHkoKTsKLSAgICBEZXBlbmRlbmN5IGJ1dHRlcmZseURlcGVuZGVuY3kg
PSBkZXBlbmRlbmN5KGJ1dHRlcmZseSk7CisgICAgYnV0dGVyZmx5ID0gaW5kZXhpbmdUeXBlRGVw
ZW5kZW5jeS5jb25zdW1lKHRoaXMpLT5idXR0ZXJmbHkoKTsKKyAgICBEZXBlbmRlbmN5IGJ1dHRl
cmZseURlcGVuZGVuY3kgPSBEZXBlbmRlbmN5OjpmZW5jZShidXR0ZXJmbHkpOwogICAgIGlmICgh
YnV0dGVyZmx5KQogICAgICAgICByZXR1cm4gc3RydWN0dXJlOwotICAgIGlmIChjb25zdW1lKHRo
aXMsIGJ1dHRlcmZseURlcGVuZGVuY3kpLT5zdHJ1Y3R1cmVJRCgpICE9IHN0cnVjdHVyZUlEKQor
ICAgIGlmIChidXR0ZXJmbHlEZXBlbmRlbmN5LmNvbnN1bWUodGhpcyktPnN0cnVjdHVyZUlEKCkg
IT0gc3RydWN0dXJlSUQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChjb25zdW1l
KHN0cnVjdHVyZSwgYnV0dGVyZmx5RGVwZW5kZW5jeSktPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zm
c2V0KQorICAgIGlmIChidXR0ZXJmbHlEZXBlbmRlbmN5LmNvbnN1bWUoc3RydWN0dXJlKS0+bGFz
dE9mZnNldCgpICE9IGxhc3RPZmZzZXQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAog
ICAgIG1hcmtBdXhpbGlhcnlBbmRWaXNpdE91dE9mTGluZVByb3BlcnRpZXModmlzaXRvciwgYnV0
dGVyZmx5LCBzdHJ1Y3R1cmUsIGxhc3RPZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDcg
QEAgY29uc3RleHByIGJvb2wgZW5hYmxlQXN5bmNJdGVyYXRpb24gPSBmYQogICAgIFwKICAgICB2
KHVuc2lnbmVkLCBtaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UsIDEwMCwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbnVtYmVyT2ZHQ01hcmtlcnMsIGNvbXB1
dGVOdW1iZXJPZkdDTWFya2Vycyg4KSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB1
c2VQYXJhbGxlbE1hcmtpbmdDb25zdHJhaW50U29sdmVyLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KHVuc2lnbmVkLCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQsIDEwMDAsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBtaW5IZWFwVXRpbGl6YXRpb24sIDAuOCwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIG1pbk1hcmtlZEJsb2NrVXRpbGl6YXRpb24s
IDAuOSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDEsMTQg
KzExMDEsMTQgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQygpCiAgICAgLy8gaGFz
IGFueSBsYXJnZSBwcm9wZXJ0eSBuYW1lcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MzM0CiAgICAgCi0gICAgcmV0dXJuICghbV9nbG9iYWxPYmpl
Y3QgfHwgSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9nbG9iYWxPYmplY3QuZ2V0KCkpKQot
ICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlwZU9iamVjdCgpIHx8
IEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7Cisg
ICAgcmV0dXJuICghbV9nbG9iYWxPYmplY3QgfHwgSGVhcDo6aXNNYXJrZWQobV9nbG9iYWxPYmpl
Y3QuZ2V0KCkpKQorICAgICAgICAmJiAoaGFzUG9seVByb3RvKCkgfHwgIXN0b3JlZFByb3RvdHlw
ZU9iamVjdCgpIHx8IEhlYXA6OmlzTWFya2VkKHN0b3JlZFByb3RvdHlwZU9iamVjdCgpKSk7CiB9
CiAKIGJvb2wgU3RydWN0dXJlOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
ICAgICBpZiAoIWlzQ2hlYXBEdXJpbmdHQygpKQotICAgICAgICByZXR1cm4gSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkodGhpcyk7CisgICAgICAgIHJldHVybiBIZWFwOjppc01hcmtlZCh0aGlz
KTsKICAgICAKICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXMpOwogICAgIHJldHVy
biB0cnVlOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODMgQEAKKzIwMTctMTItMDEgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBHQyBjb25zdHJhaW50IHNvbHZpbmcgc2hv
dWxkIGJlIHBhcmFsbGVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzk5MzQKKworICAgICAgICBSZXZpZXdlZCBieSBKRiBCYXN0aWVuLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBkb2VzIHNvbWUgY2hhbmdlcyB0byBtYWtlIGl0IGVhc2llciB0byBk
byBwYXJhbGxlbCBjb25zdHJhaW50IHNvbHZpbmc6CisgICAgICAgIAorICAgICAgICAtIEkgZmlu
YWxseSByZW1vdmVkIGRlcGVuZGVuY3lXaXRoLiBUaGlzIHdhcyBhIHNpbGx5IGNvbnN0cnVjdCB3
aG9zZSBvbmx5IHB1cnBvc2UgaXMgdG8gY29uZnVzZQorICAgICAgICAgIHBlb3BsZSBhYm91dCB3
aGF0IGl0IG1lYW5zIHRvIGhhdmUgYSBkZXBlbmRlbmN5IGNoYWluLiBJIHRvb2sgdGhhdCBhcyBh
biBvcHBvcnR1bml0eSB0byBncmVhbHkKKyAgICAgICAgICBzaW1wbGlmeSB0aGUgR0MncyB1c2Ug
b2YgZGVwZW5kZW5jeSBjaGFpbmluZy4KKyAgICAgICAgCisgICAgICAgIC0gQWRkZWQgbW9yZSBs
b2dpYyB0byBEZXF1ZTw+LCBzaW5jZSBJIHVzZSBpdCBmb3IgcGFydCBvZiB0aGUgbG9hZCBiYWxh
bmNlci4KKyAgICAgICAgCisgICAgICAgIC0gTWFkZSBpdCBwb3NzaWJsZSB0byBwcm9maWxlIGxv
Y2sgY29udGVudGlvbi4gU2VlCisgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4MDI1MCNjMCBmb3Igc29tZSBwcmVsaW1pbmFyeSBtZWFzdXJlbWVudHMu
CisgICAgICAgIAorICAgICAgICAtIEludHJvZHVjZWQgaG9sZExvY2tJZiwgd2hpY2ggbWFrZXMg
aXQgZWFzeSB0byBwZXJmb3JtIHByZWRpY2F0ZWQgbG9jayBhY3F1aXNpdGlvbi4gV2UgdXNlIHRo
YXQKKyAgICAgICAgICB0byBwaWNrIGEgbG9jayBpbiBXZWJDb3JlLgorICAgICAgICAKKyAgICAg
ICAgLSBJbnRyb2R1Y2VkIENvdW50aW5nTG9jay4gSXQncyBsaWtlIFdURjo6TG9jayBleGNlcHQg
aXQgYWxzbyBlbmFibGVzIG9wdGltaXN0aWMgcmVhZCB0cmFuc2FjdGlvbnMKKyAgICAgICAgICBz
b3J0YSBsaWtlIEphdmEncyBTdGFtcGVkTG9jay4KKworICAgICAgICAqIFdURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9BdG9taWNzLmg6CisgICAgICAgIChXVEY6
OmRlcGVuZGVuY3kpOgorICAgICAgICAoV1RGOjpEZXBlbmRlbmN5V2l0aDo6RGVwZW5kZW5jeVdp
dGgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXBlbmRlbmN5V2l0aCk6IERlbGV0ZWQuCisg
ICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkNv
bmN1cnJlbnRQdHJIYXNoU2V0OjpDb25jdXJyZW50UHRySGFzaFNldCk6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRQdHJIYXNoU2V0Ojp+Q29uY3VycmVudFB0ckhhc2hTZXQpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6ZGVsZXRlT2xkVGFibGVzKToKKyAgICAgICAgKFdU
Rjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmNsZWFyKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFB0ckhhc2hTZXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFz
aFNldDo6YWRkU2xvdyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNp
emVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpyZXNp
emVBbmRBZGQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6VGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgICogd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0Lmg6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNldDo6Y29udGFpbnMpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50UHRySGFzaFNldDo6YWRkKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0
ckhhc2hTZXQ6OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFzaFNl
dDo6VGFibGU6Om1heExvYWQgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50UHRySGFz
aFNldDo6aGFzaCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjpjYXN0KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFB0ckhhc2hTZXQ6OmNvbnRhaW5zSW1wbCBjb25zdCk6
CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0OjphZGRJbXBsKToKKyAgICAgICAg
KiB3dGYvRGVxdWUuaDoKKyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+Ojp0YWtlRmlyc3Qp
OgorICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmg6CisgICAgICAgICogd3RmL0xvY2suY3BwOgor
ICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9ja1Nsb3cpOgorICAgICAgICAqIHd0Zi9Mb2NrZXIu
aDoKKyAgICAgICAgKFdURjo6aG9sZExvY2tJZik6CisgICAgICAgICogd3RmL1Njb3BlZExhbWJk
YS5oOgorICAgICAgICAqIHd0Zi9TaGFyZWRUYXNrLmg6CisgICAgICAgIChXVEY6OlNoYXJlZFRh
c2s8UGFzc2VkUmVzdWx0VHlwZSk6CisgICAgICAgIChXVEY6OlNoYXJlZFRhc2s8UmVzdWx0VHlw
ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1N0YWNrU2hvdC5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6U3RhY2tTaG90OjpTdGFja1Nob3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdDo6YXJyYXkgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTdGFja1Nob3Q6OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6
Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFja1Nob3Q6Omhhc2ggY29uc3QpOgorICAgICAg
ICAoV1RGOjpTdGFja1Nob3Q6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6U3RhY2tTaG90OjpvcGVyYXRvcj4gY29uc3QpOgorICAgICAgICAoV1RGOjpTdGFj
a1Nob3Q6OmRlbGV0ZWRWYWx1ZUFycmF5KToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90SGFzaDo6
aGFzaCk6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiB3
dGYvU3RhY2tTaG90UHJvZmlsZXIuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrU2hvdFBy
b2ZpbGVyOjpTdGFja1Nob3RQcm9maWxlcik6CisgICAgICAgIChXVEY6OlN0YWNrU2hvdFByb2Zp
bGVyOjpwcm9maWxlKToKKyAgICAgICAgKFdURjo6U3RhY2tTaG90UHJvZmlsZXI6OnJ1bik6CisK
IDIwMTctMTItMDQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgTWlub3IgRGlzcGxheVJlZnJlc2hNb25pdG9yLXJlbGF0ZWQgY2xlYW51cApJbmRleDog
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU1MTYp
CisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMyw3IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwog
CQkwRjBGNTI2QjFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEY1MjY5MUY0MjFGRjgwMDRB
NDUyQyAvKiBTdHJpbmdNYWxsb2MuY3BwICovOyB9OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAyQ0E4
NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5j
cHAgKi87IH07CisJCTBGMzBDQjVBMUZDREYxMzQwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFz
aFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovOyB9
OwogCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDNEOEVGMURCNUFE
REMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICovOyB9OwogCQkwRjVCRjE3NjFGMjNE
NDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNzQxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNw
cCAqLzsgfTsKIAkJMEY2MEYzMkYxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFt
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjBG
MzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi87IH07CkBAIC0z
NCw2ICszNSw3IEBACiAJCTBGNzA3NUY1MUZCRjUzQ0QwMDQ4OUFGMCAvKiBUaW1pbmdTY29wZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwNzVG
NDFGQkY1MzdBMDA0ODlBRjAgLyogVGltaW5nU2NvcGUuY3BwICovOyB9OwogCQkwRjdDNUZCNjFE
ODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZCNTFEODg1Q0YyMDA0NEY1RTIgLyogRmFz
dEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKKwkJMEY4
RTg1REIxRkQ0ODVCMDAwNjkxODg5IC8qIENvdW50aW5nTG9jay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhFODVEQTFGRDQ4NUIwMDA2OTE4ODkg
LyogQ291bnRpbmdMb2NrLmNwcCAqLzsgfTsKIAkJMEY4RjJCOTIxNzJFMDEwMzAwN0RCREE1IC8q
IENvbXBpbGF0aW9uVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVh
ZC5jcHAgKi87IH07CiAJCTBGOUQzMzYwMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJl
YW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBG
OUQzMzYyMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1RDE2NURCQTczMDA1QUQzODcg
LyogUHJpbnRTdHJlYW0uY3BwICovOyB9OwpAQCAtMTg1LDYgKzE4Nyw4IEBACiAJCTBGMzBCQThE
MUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMb2dnaW5nSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjMwQkE4RTFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZ0hhc2hTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMEJBOEYxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNo
VHJhaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmdIYXNoVHJh
aXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzBDQjU4MUZDREYxMzMwMDRC
NTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb25jdXJyZW50UHRySGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMzBDQjU5MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFz
aFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50UHRySGFz
aFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMxREQ3MDFGMTMwOEJDMDA3
MkVCNEEgLyogTG9ja0FsZ29yaXRobUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29y
aXRobUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNDhDN0QxRjQ3
QUE5RDAwM0NGRUYyIC8qIFN0cmluZ1ZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdWZWN0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNTAxNjMxQkIyNThDODAwRjBB
MkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE5LDYgKzIyMyw3IEBA
CiAJCTBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmtpbmdMb3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJraW5nTG90Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2lu
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhd1BvaW50ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4RTg1REExRkQ0ODVCMDAwNjkxODg5IC8qIENv
dW50aW5nTG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3Vu
dGluZ0xvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3MkUw
MEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29tcGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhG
MkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29tcGlsYXRpb25UaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4
RjJCOUIxNzJGMjU5NDAwN0RCREE1IC8qIENvbnZlcnNpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbnZlcnNpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjgsNiAr
MjMzLDggQEAKIAkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlUHJpbnRTdHJlYW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFBy
aW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50
U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUUxNjVEQkE3
MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTA0
MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RhY2tTaG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOURB
QTA1MUZEMUMzN0IwMDc5QzVCMiAvKiBTdGFja1Nob3RQcm9maWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1Nob3RQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIz
MTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFjaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yNTIsNiArMjU5LDcgQEAKIAkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRp
bnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0QjRDNDFFODg5MzlDMDBEQkJFODYg
LyogTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGl2ZW5lc3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdG
IC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkJD
QkZBMUZEMzdFMEYwMDcyQUFGMCAvKiBDb3VudGluZ0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ291bnRpbmdMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRkYxOURBMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkx
IC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYXJhbGxlbEhlbHBlclBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFs
bG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC04MDEsNyArODA5
LDExIEBACiAJCQkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFk
LmggKi8sCiAJCQkJQThBNDcyNzAxNTFBODI1QTAwNDEyM0ZGIC8qIENvbXBpbGVyLmggKi8sCiAJ
CQkJNDZCQTlFQUIxRjRDRDYxRTAwOUEyQkJDIC8qIENvbXBsZXRpb25IYW5kbGVyLmggKi8sCisJ
CQkJMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAq
LywKKwkJCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQu
aCAqLywKIAkJCQkwRkRCNjk4RDFCN0M2NDNBMDAwQzEwNzggLyogQ29uZGl0aW9uLmggKi8sCisJ
CQkJMEZGQkNCRkExRkQzN0UwRjAwNzJBQUYwIC8qIENvdW50aW5nTG9jay5oICovLAorCQkJCTBG
OEU4NURBMUZENDg1QjAwMDY5MTg4OSAvKiBDb3VudGluZ0xvY2suY3BwICovLAogCQkJCUUzOEM0
MTI2MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCAqLywKIAkJCQlFMzhDNDEyNzFFQjRF
MDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5oICovLAogCQkJCTUxNUY3OTRCMUNGQzlGNEEwMENDRUQ5
MyAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8sCkBAIC0xMDE2LDYgKzEwMjgsOCBAQAogCQkJ
CUE4QTQ3MzBEMTUxQTgyNUIwMDQxMjNGRiAvKiBTcGVjdHJ1bS5oICovLAogCQkJCUE4QTQ3MzBF
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5jcHAgKi8sCiAJCQkJQThBNDczMEYxNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmggKi8sCisJCQkJMEY5REFBMDQxRkQxQzM3QjAw
NzlDNUIyIC8qIFN0YWNrU2hvdC5oICovLAorCQkJCTBGOURBQTA1MUZEMUMzN0IwMDc5QzVCMiAv
KiBTdGFja1Nob3RQcm9maWxlci5oICovLAogCQkJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAv
KiBTdGFja1N0YXRzLmNwcCAqLywKIAkJCQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyogU3Rh
Y2tTdGF0cy5oICovLAogCQkJCTMxM0VERUM5Nzc4RTQ5QzlCRUE5MUNGQyAvKiBTdGFja1RyYWNl
LmNwcCAqLywKQEAgLTE0MzksNyArMTQ1Myw5IEBACiAJCQkJMEZGRjE5REMxQkIzMzRFQjAwODg2
RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjgyNEE2
ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MUYxNzUyQjFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudENvZGVycy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjhFODVEQjFGRDQ4NUIwMDA2OTE4ODkgLyogQ291bnRpbmdMb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxRjE3NTJDMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50
RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMwQ0I1QTFGQ0RGMTM0MDA0QjUzMjMg
LyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1MkQx
RjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGOUQzMzYyMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9XVEYv
d3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzM5LDExMyArMzM5LDEwNCBAQCBpbmxp
bmUgdm9pZCBjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpIHsgCiAKICNlbmRpZgogCi10eXBlZGVm
IHVuc2lnbmVkIERlcGVuZGVuY3k7Cit0eXBlZGVmIHVuc2lnbmVkIEludGVybmFsRGVwZW5kZW5j
eVR5cGU7CiAKLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVwZW5kZW5jeSgpCitpbmxp
bmUgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBvcGFxdWVNaXh0dXJlKCkKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNp
emVvZihUKSA9PSA4Pjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5
IGRlcGVuZGVuY3koVCB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cywgdHlw
ZW5hbWUgVD4KK2lubGluZSBJbnRlcm5hbERlcGVuZGVuY3lUeXBlIG9wYXF1ZU1peHR1cmUoVCB2
YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAgICB1bnNpZ25lZCBkZXBlbmRlbmN5
OwotICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKLSNp
ZiBDUFUoQVJNNjQpCi0gICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2gg
aW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgotICAgIC8vIGlzbid0IHZpc2libGUg
dG8gdGhlIG9wdGltaXplci4gVGhpcyB6ZXJvIGlzIHRoZW4gdXNhYmxlIGFzIGFuIG9mZnNldCBp
bgotICAgIC8vIGZ1cnRoZXIgYWRkcmVzcyBjb21wdXRhdGlvbnM6IGFkZGluZyB6ZXJvIGRvZXMg
bm90aGluZywgYnV0IHRoZSBjb21waWxlcgotICAgIC8vIGRvZXNuJ3Qga25vdyBpdC4gSXQncyBt
YWdpY2FsIGJlY2F1c2UgaXQgY3JlYXRlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kKLSAgICAvLyBm
cm9tIHRoZSBsb2FkIG9mIGBsb2NhdGlvbmAgdG8gdGhlIHVzZXMgb2YgdGhlIGRlcGVuZGVuY3ks
IHdoaWNoIHRyaWdnZXJzCi0gICAgLy8gdGhlIEFSTSBJU0EncyBhZGRyZXNzIGRlcGVuZGVuY3kg
cnVsZSwgYS5rLmEuIHRoZSBteXRoaWNhbCBDKysgY29uc3VtZQotICAgIC8vIG9yZGVyaW5nLiBU
aGlzIGZvcmNlcyB3ZWFrIG1lbW9yeSBvcmRlciBDUFVzIHRvIG9ic2VydmUgYGxvY2F0aW9uYCBh
bmQKLSAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIgc3RvcmUgb3JkZXIgd2l0aG91dCB0
aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgotICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4KLSAg
ICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdbaW5dLCAld1tpbl0iCi0gICAgICAgIDogW2Rl
cGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0j
ZWxpZiBDUFUoQVJNKQotICAgIGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIK
LSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0g
InIiKGNvcHkpKTsKLSNlbHNlCi0gICAgLy8gTm8gZGVwZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRo
aXMgYXJjaGl0ZWN0dXJlLgotICAgIGxvYWRMb2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0g
MDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVwZW5kZW5j
eTsKKyAgICB1bmlvbiB7CisgICAgICAgIEludGVybmFsRGVwZW5kZW5jeVR5cGUgY29weTsKKyAg
ICAgICAgVCB2YWx1ZTsKKyAgICB9IHU7CisgICAgdS5jb3B5ID0gMDsKKyAgICB1LnZhbHVlID0g
dmFsdWU7CisgICAgcmV0dXJuIG9wYXF1ZU1peHR1cmUoYXJndW1lbnRzLi4uKSArIHUuY29weTsK
IH0KIAotLy8gRklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhl
ciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY5NDA1Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5F
IERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHVuc2lnbmVkIGRlcGVuZGVu
Y3k7Ci0gICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpOwor
Y2xhc3MgRGVwZW5kZW5jeSB7CitwdWJsaWM6CisgICAgRGVwZW5kZW5jeSgpCisgICAgICAgIDog
bV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gT24gVFNPIGFyY2hpdGVjdHVy
ZXMsIHRoaXMgaXMgYSBsb2FkLWxvYWQgZmVuY2UgYW5kIHRoZSB2YWx1ZSBpdCByZXR1cm5zIGlz
IG5vdCBtZWFuaW5nZnVsIChpdCdzCisgICAgLy8gemVybykuIFRoZSBsb2FkLWxvYWQgZmVuY2Ug
aXMgdXN1YWxseSBqdXN0IGEgY29tcGlsZXIgZmVuY2UuIE9uIEFSTSwgdGhpcyBpcyBhIHNlbGYt
eG9yIHRoYXQKKyAgICAvLyBwcm9kdWNlcyB6ZXJvLCBidXQgaXQncyBjb25jZWFsZWQgZnJvbSB0
aGUgY29tcGlsZXIuIFRoZSBDUFUgdW5kZXJzdGFuZHMgdGhpcyBkdW1teSBvcCB0byBiZSBhCisg
ICAgLy8gcGhhbnRvbSBkZXBlbmRlbmN5LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBzdGF0aWMgRGVwZW5kZW5jeSBmZW5jZShBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBpbnB1dCA9IG9wYXF1ZU1p
eHR1cmUoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgSW50ZXJuYWxEZXBlbmRlbmN5VHlwZSBvdXRw
dXQ7CiAjaWYgQ1BVKEFSTTY0KQotICAgIGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0s
ICV3W2luXSIKLSAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAg
ICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAgICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZh
bHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgorICAgICAgICAv
LyBpc24ndCB2aXNpYmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVzYWJs
ZSBhcyBhbiBvZmZzZXQgaW4KKyAgICAgICAgLy8gZnVydGhlciBhZGRyZXNzIGNvbXB1dGF0aW9u
czogYWRkaW5nIHplcm8gZG9lcyBub3RoaW5nLCBidXQgdGhlIGNvbXBpbGVyCisgICAgICAgIC8v
IGRvZXNuJ3Qga25vdyBpdC4gSXQncyBtYWdpY2FsIGJlY2F1c2UgaXQgY3JlYXRlcyBhbiBhZGRy
ZXNzIGRlcGVuZGVuY3kKKyAgICAgICAgLy8gZnJvbSB0aGUgbG9hZCBvZiBgbG9jYXRpb25gIHRv
IHRoZSB1c2VzIG9mIHRoZSBkZXBlbmRlbmN5LCB3aGljaCB0cmlnZ2VycworICAgICAgICAvLyB0
aGUgQVJNIElTQSdzIGFkZHJlc3MgZGVwZW5kZW5jeSBydWxlLCBhLmsuYS4gdGhlIG15dGhpY2Fs
IEMrKyBjb25zdW1lCisgICAgICAgIC8vIG9yZGVyaW5nLiBUaGlzIGZvcmNlcyB3ZWFrIG1lbW9y
eSBvcmRlciBDUFVzIHRvIG9ic2VydmUgYGxvY2F0aW9uYCBhbmQKKyAgICAgICAgLy8gZGVwZW5k
ZW50IGxvYWRzIGluIHRoZWlyIHN0b3JlIG9yZGVyIHdpdGhvdXQgdGhlIHJlYWRlciB1c2luZyBh
IGJhcnJpZXIKKyAgICAgICAgLy8gb3IgYW4gYWNxdWlyZSBsb2FkLgorICAgICAgICBhc20oImVv
ciAld1tvdXRdLCAld1tpbl0sICV3W2luXSIKKyAgICAgICAgICAgIDogW291dF0gIj1yIihvdXRw
dXQpCisgICAgICAgICAgICA6IFtpbl0gInIiKGlucHV0KSk7CiAjZWxpZiBDUFUoQVJNKQotICAg
IGFzbSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgOiBbZGVwZW5k
ZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKKyAgICAg
ICAgYXNtKCJlb3IgJVtvdXRdLCAlW2luXSwgJVtpbl0iCisgICAgICAgICAgICA6IFtvdXRdICI9
ciIob3V0cHV0KQorICAgICAgICAgICAgOiBbaW5dICJyIihpbnB1dCkpOwogI2Vsc2UKLSAgICBs
b2FkTG9hZEZlbmNlKCk7Ci0gICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNv
cHkpOworICAgICAgICAvLyBObyBkZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgdGhpcyBhcmNoaXRl
Y3R1cmUuCisgICAgICAgIGxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgb3V0cHV0ID0gMDsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKICNlbmRpZgotICAgIHJldHVybiBkZXBlbmRlbmN5
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6
ZW9mKFQpID09IDI+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBlbmRlbmN5KHN0YXRpY19jYXN0
PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDE+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNf
SU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQotewotICAgIHJldHVybiBkZXBl
bmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotc3RydWN0IERlcGVuZGVuY3lXaXRoIHsKLXB1YmxpYzoKLSAgICBEZXBlbmRlbmN5
V2l0aCgpCi0gICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQotICAgICAgICAs
IHZhbHVlKCkKKyAgICAgICAgRGVwZW5kZW5jeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3Zh
bHVlID0gb3V0cHV0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAv
LyBPbiBUU08gYXJjaGl0ZWN0dXJlcywgdGhpcyBqdXN0IHJldHVybnMgdGhlIHBvaW50ZXIgeW91
IHBhc3MgaXQuIE9uIEFSTSwgdGhpcyBwcm9kdWNlcyBhIG5ldworICAgIC8vIHBvaW50ZXIgdGhh
dCBpcyBkZXBlbmRlbnQgb24gdGhpcyBkZXBlbmRlbmN5IGFuZCB0aGUgaW5wdXQgcG9pbnRlci4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGNvbnN1bWUoVCogcG9pbnRlcikKICAg
ICB7CisjaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNKQorICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpICsgbV92YWx1ZSk7CisjZWxzZQor
ICAgICAgICBVTlVTRURfUEFSQU0obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBwb2ludGVyOwor
I2VuZGlmCiAgICAgfQogICAgIAotICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5k
ZW5jeSwgY29uc3QgVCYgdmFsdWUpCi0gICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQor
cHJpdmF0ZToKKyAgICBJbnRlcm5hbERlcGVuZGVuY3lUeXBlIG1fdmFsdWU7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBJbnB1dFR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4KK3N0cnVjdCBJbnB1
dEFuZFZhbHVlIHsKKyAgICBJbnB1dEFuZFZhbHVlKCkgeyB9CisgICAgCisgICAgSW5wdXRBbmRW
YWx1ZShJbnB1dFR5cGUgaW5wdXQsIFZhbHVlVHlwZSB2YWx1ZSkKKyAgICAgICAgOiBpbnB1dChp
bnB1dCkKICAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogICAgIAotICAgIERl
cGVuZGVuY3kgZGVwZW5kZW5jeTsKLSAgICBUIHZhbHVlOworICAgIElucHV0VHlwZSBpbnB1dDsK
KyAgICBWYWx1ZVR5cGUgdmFsdWU7CiB9OwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlu
bGluZSBEZXBlbmRlbmN5V2l0aDxUPiBkZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVu
Y3ksIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBEZXBlbmRlbmN5V2l0aDxUPihkZXBl
bmRlbmN5LCB2YWx1ZSk7Ci19CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogY29u
c3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnB1dFR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4KK0lucHV0QW5kVmFsdWU8SW5wdXRUeXBl
LCBWYWx1ZVR5cGU+IGlucHV0QW5kVmFsdWUoSW5wdXRUeXBlIGlucHV0LCBWYWx1ZVR5cGUgdmFs
dWUpCiB7Ci0jaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNKQotICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VCo+KGJpdHdpc2VfY2FzdDxjaGFyKj4ocG9pbnRlcikgKyBkZXBlbmRlbmN5KTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGRlcGVuZGVuY3kpOwotICAgIHJldHVybiBwb2ludGVyOwotI2Vu
ZGlmCisgICAgcmV0dXJuIElucHV0QW5kVmFsdWU8SW5wdXRUeXBlLCBWYWx1ZVR5cGU+KGlucHV0
LCB2YWx1ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmM+CkBAIC00
NjksMTEgKzQ2MCw5IEBAIEFMV0FZU19JTkxJTkUgVCYgZW5zdXJlUG9pbnRlcihBdG9taWM8VCoK
IAogdXNpbmcgV1RGOjpBdG9taWM7CiB1c2luZyBXVEY6OkRlcGVuZGVuY3k7Ci11c2luZyBXVEY6
OkRlcGVuZGVuY3lXaXRoOwotdXNpbmcgV1RGOjpjb25zdW1lOwotdXNpbmcgV1RGOjpkZXBlbmRl
bmN5OwotdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKK3VzaW5nIFdURjo6SW5wdXRBbmRWYWx1
ZTsKK3VzaW5nIFdURjo6aW5wdXRBbmRWYWx1ZTsKIHVzaW5nIFdURjo6ZW5zdXJlUG9pbnRlcjsK
LXVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7Cit1c2luZyBXVEY6Om9wYXF1ZU1peHR1cmU7CiAK
ICNlbmRpZiAvLyBBdG9taWNzX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAyMjU1MTYp
CisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYg
KzMwOCwxMyBAQCBwdWJsaWM6IAogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9
CiAKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgKysoKnRoaXMpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNBdEVu
ZCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID49IG1fYml0
VmVjdG9yLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNl
L1dURi93dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBiaXRtYXBTaXplOwogICAgIH0KIAotICAgIGJvb2wgZ2V0KHNp
emVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5KCkpIGNvbnN0OworICAgIGJvb2wgZ2V0
KHNpemVfdCwgRGVwZW5kZW5jeSA9IERlcGVuZGVuY3koKSkgY29uc3Q7CiAgICAgdm9pZCBzZXQo
c2l6ZV90KTsKICAgICB2b2lkIHNldChzaXplX3QsIGJvb2wpOwogICAgIGJvb2wgdGVzdEFuZFNl
dChzaXplX3QpOwogICAgIGJvb2wgdGVzdEFuZENsZWFyKHNpemVfdCk7Ci0gICAgYm9vbCBjb25j
dXJyZW50VGVzdEFuZFNldChzaXplX3QsIERlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpKTsK
LSAgICBib29sIGNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIoc2l6ZV90LCBEZXBlbmRlbmN5ID0gbnVs
bERlcGVuZGVuY3koKSk7CisgICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QsIERl
cGVuZGVuY3kgPSBEZXBlbmRlbmN5KCkpOworICAgIGJvb2wgY29uY3VycmVudFRlc3RBbmRDbGVh
cihzaXplX3QsIERlcGVuZGVuY3kgPSBEZXBlbmRlbmN5KCkpOwogICAgIHNpemVfdCBuZXh0UG9z
c2libHlVbnNldChzaXplX3QpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2
b2lkIGNsZWFyQWxsKCk7CkBAIC0xMzgsNyArMTM4LDcgQEAgaW5saW5lIEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT46OkJpdAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1l
IFdvcmRUeXBlPgogaW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Z2V0
KHNpemVfdCBuLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEh
KGJpdHNbbiAvIHdvcmRTaXplICsgZGVwZW5kZW5jeV0gJiAob25lIDw8IChuICUgd29yZFNpemUp
KSk7CisgICAgcmV0dXJuICEhKGRlcGVuZGVuY3kuY29uc3VtZSh0aGlzKS0+Yml0c1tuIC8gd29y
ZFNpemVdICYgKG9uZSA8PCAobiAlIHdvcmRTaXplKSkpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3Qg
Yml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CkBAIC0xODEsNyArMTgxLDcgQEAgQUxXQVlT
X0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXbwogewogICAgIFdvcmRUeXBlIG1hc2sg
PSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7CiAgICAgc2l6ZV90IGluZGV4ID0gbiAvIHdvcmRTaXpl
OwotICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5kYXRhKCkgKyBpbmRleCArIGRlcGVuZGVuY3k7
CisgICAgV29yZFR5cGUqIGRhdGEgPSBkZXBlbmRlbmN5LmNvbnN1bWUoYml0cy5kYXRhKCkpICsg
aW5kZXg7CiAgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRUeXBlPio+KGRhdGEp
LT50cmFuc2FjdGlvblJlbGF4ZWQoCiAgICAgICAgIFsmXSAoV29yZFR5cGUmIHZhbHVlKSAtPiBi
b29sIHsKICAgICAgICAgICAgIGlmICh2YWx1ZSAmIG1hc2spCkBAIC0xOTcsNyArMTk3LDcgQEAg
QUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXbwogewogICAgIFdvcmRUeXBl
IG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7CiAgICAgc2l6ZV90IGluZGV4ID0gbiAvIHdv
cmRTaXplOwotICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5kYXRhKCkgKyBpbmRleCArIGRlcGVu
ZGVuY3k7CisgICAgV29yZFR5cGUqIGRhdGEgPSBkZXBlbmRlbmN5LmNvbnN1bWUoYml0cy5kYXRh
KCkpICsgaW5kZXg7CiAgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRUeXBlPio+
KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCiAgICAgICAgIFsmXSAoV29yZFR5cGUmIHZhbHVl
KSAtPiBib29sIHsKICAgICAgICAgICAgIGlmICghKHZhbHVlICYgbWFzaykpCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDkgQEAgc2V0KFdURl9IRUFERVJT
CiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIu
aAorICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKICAgICBDb25kaXRpb24uaAorICAgIENvdW50
aW5nTG9jay5oCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIuaAogICAgIENyb3NzVGhyZWFkVGFzay5o
CiAgICAgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlci5oCkBAIC0xMzMsNiArMTM1LDggQEAgc2V0KFdU
Rl9IRUFERVJTCiAgICAgU2VnbWVudGVkVmVjdG9yLmgKICAgICBTbWFsbFB0clNldC5oCiAgICAg
U3RhY2tCb3VuZHMuaAorICAgIFN0YWNrU2hvdC5oCisgICAgU3RhY2tTaG90UHJvZmlsZXIuaAog
ICAgIFN0YWNrU3RhdHMuaAogICAgIFN0YWNrVHJhY2UuaAogICAgIFN0ZExpYkV4dHJhcy5oCkBA
IC0yMjAsNiArMjI0LDggQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgQ1BVVGltZS5jcHAKICAgICBD
bG9ja1R5cGUuY3BwCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuY3BwCisgICAgQ29uY3VycmVudFB0
ckhhc2hTZXQuY3BwCisgICAgQ291bnRpbmdMb2NrLmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVy
LmNwcAogICAgIENyb3NzVGhyZWFkVGFza0hhbmRsZXIuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY1V0
aWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
b25jdXJyZW50UHRySGFzaFNldC5oIgorCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK0NvbmN1cnJlbnRQdHJIYXNoU2V0OjpDb25jdXJyZW50UHRySGFzaFNl
dCgpCit7CisgICAgaW5pdGlhbGl6ZSgpOworfQorCitDb25jdXJyZW50UHRySGFzaFNldDo6fkNv
bmN1cnJlbnRQdHJIYXNoU2V0KCkKK3sKK30KKwordm9pZCBDb25jdXJyZW50UHRySGFzaFNldDo6
ZGVsZXRlT2xkVGFibGVzKCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4gY2FzZS4gSXQgZG9l
cyBub3QgbWFrZSBpdCBPSyBmb3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFkZCgpLiBCdXQgaXQg
bWlnaHQgcHJldmVudAorICAgIC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2UgZGlkIG1ha2UgdGhh
dCBtaXN0YWtlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsgCisgICAgCisg
ICAgbV9hbGxUYWJsZXMucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgIFsmXSAoc3RkOjp1bmlx
dWVfcHRyPFRhYmxlPiYgdGFibGUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHRhYmxl
LmdldCgpICE9IG1fdGFibGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQg
Q29uY3VycmVudFB0ckhhc2hTZXQ6OmNsZWFyKCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgaW4g
Y2FzZS4gSXQgZG9lcyBub3QgbWFrZSBpdCBPSyBmb3Igb3RoZXIgdGhyZWFkcyB0byBjYWxsIGFk
ZCgpLiBCdXQgaXQgbWlnaHQgcHJldmVudAorICAgIC8vIHNvbWUgYmFkIGNyYXNoZXMgaWYgd2Ug
ZGlkIG1ha2UgdGhhdCBtaXN0YWtlLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsgCisgICAgCisgICAgbV9hbGxUYWJsZXMuY2xlYXIoKTsKKyAgICBpbml0aWFsaXplKCk7Cit9
CisKK3ZvaWQgQ29uY3VycmVudFB0ckhhc2hTZXQ6OmluaXRpYWxpemUoKQoreworICAgIGNvbnN0
ZXhwciB1bnNpZ25lZCBpbml0aWFsU2l6ZSA9IDMyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJs
ZT4gdGFibGUgPSBUYWJsZTo6Y3JlYXRlKGluaXRpYWxTaXplKTsKKyAgICBtX3RhYmxlLnN0b3Jl
UmVsYXhlZCh0YWJsZS5nZXQoKSk7CisgICAgbV9hbGxUYWJsZXMuYXBwZW5kKFdURk1vdmUodGFi
bGUpKTsKK30KKworYm9vbCBDb25jdXJyZW50UHRySGFzaFNldDo6YWRkU2xvdyhUYWJsZSogdGFi
bGUsIHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4LCB2
b2lkKiBwdHIpCit7CisgICAgaWYgKHRhYmxlLT5sb2FkLmV4Y2hhbmdlQWRkKDEpID49IHRhYmxl
LT5tYXhMb2FkKCkpCisgICAgICAgIHJldHVybiByZXNpemVBbmRBZGQocHRyKTsKKyAgICAKKyAg
ICBmb3IgKDs7KSB7CisgICAgICAgIHZvaWQqIG9sZEVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4
XS5jb21wYXJlRXhjaGFuZ2VTdHJvbmcobnVsbHB0ciwgcHRyKTsKKyAgICAgICAgaWYgKCFvbGRF
bnRyeSkgeworICAgICAgICAgICAgaWYgKG1fdGFibGUubG9hZCgpICE9IHRhYmxlKSB7CisgICAg
ICAgICAgICAgICAgLy8gV2UgYWRkZWQgYW4gZW50cnkgdG8gYW4gb2xkIHRhYmxlISBXZSBuZWVk
IHRvIHJlZXhlY3V0ZSB0aGUgYWRkIG9uIHRoZSBuZXcgdGFibGUuCisgICAgICAgICAgICAgICAg
cmV0dXJuIGFkZChwdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9sZEVudHJ5ID09IHB0cikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IHN0YXJ0SW5kZXgpOworICAgIH0KK30KKwordm9pZCBD
b25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplSWZOZWNlc3NhcnkoKQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBUYWJsZSogdGFibGUgPSBtX3RhYmxlLmxvYWRS
ZWxheGVkKCk7CisgICAgaWYgKHRhYmxlLT5sb2FkLmxvYWRSZWxheGVkKCkgPCB0YWJsZS0+bWF4
TG9hZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxl
PiBuZXdUYWJsZSA9IFRhYmxlOjpjcmVhdGUodGFibGUtPnNpemUgKiAyKTsKKyAgICB1bnNpZ25l
ZCBtYXNrID0gbmV3VGFibGUtPm1hc2s7CisgICAgdW5zaWduZWQgbG9hZCA9IDA7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLT5zaXplOyArK2kpIHsKKyAgICAgICAgdm9pZCog
cHRyID0gdGFibGUtPmFycmF5W2ldLmxvYWRSZWxheGVkKCk7CisgICAgICAgIGlmICghcHRyKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzdGFydElu
ZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGFydElu
ZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBBdG9taWM8dm9pZCo+JiBlbnRy
eVJlZiA9IG5ld1RhYmxlLT5hcnJheVtpbmRleF07CisgICAgICAgICAgICB2b2lkKiBlbnRyeSA9
IGVudHJ5UmVmLmxvYWRSZWxheGVkKCk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAg
ICAgICAgICAgICAgZW50cnlSZWYuc3RvcmVSZWxheGVkKHB0cik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeSAh
PSBwdHIpOworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBzdGFydEluZGV4KTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgbG9hZCsrOworICAgIH0KKyAgICAKKyAgICBuZXdUYWJsZS0+bG9hZC5z
dG9yZVJlbGF4ZWQobG9hZCk7CisgICAgCisgICAgbV90YWJsZS5zdG9yZShuZXdUYWJsZS5nZXQo
KSk7CisgICAgbV9hbGxUYWJsZXMuYXBwZW5kKFdURk1vdmUobmV3VGFibGUpKTsKK30KKworYm9v
bCBDb25jdXJyZW50UHRySGFzaFNldDo6cmVzaXplQW5kQWRkKHZvaWQqIHB0cikKK3sKKyAgICBy
ZXNpemVJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBhZGQocHRyKTsKK30KKworc3RkOjp1bmlx
dWVfcHRyPENvbmN1cnJlbnRQdHJIYXNoU2V0OjpUYWJsZT4gQ29uY3VycmVudFB0ckhhc2hTZXQ6
OlRhYmxlOjpjcmVhdGUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29u
Y3VycmVudFB0ckhhc2hTZXQ6OlRhYmxlPiByZXN1bHQobmV3IChmYXN0TWFsbG9jKE9CSkVDVF9P
RkZTRVRPRihUYWJsZSwgYXJyYXkpICsgc2l6ZW9mKEF0b21pYzx2b2lkKj4pICogc2l6ZSkpIFRh
YmxlKCkpOworICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAgcmVzdWx0LT5tYXNrID0gc2l6
ZSAtIDE7CisgICAgcmVzdWx0LT5sb2FkLnN0b3JlUmVsYXhlZCgwKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICByZXN1bHQtPmFycmF5W2ldLnN0b3Jl
UmVsYXhlZChudWxscHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50UHRySGFzaFNldC5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMg
YSBjb25jdXJyZW50IGhhc2gtYmFzZWQgc2V0IGZvciBwb2ludGVycy4gSXQncyBvcHRpbWl6ZWQg
Zm9yOgorLy8KKy8vIC0gSGlnaCByYXRlIG9mIGNvbnRhaW5zKCkgY2FsbHMuCisvLyAtIEhpZ2gg
cmF0ZSBvZiBhZGQoKSBjYWxscyB0aGF0IGRvbid0IGFkZCBhbnl0aGluZyBuZXcuIGFkZCgpIGNh
bGxzIHRoYXQgZG9uJ3QgYWRkIGFueXRoaW5nIChub3AgYWRkcykKKy8vICAgZG9uJ3QgbXV0YXRl
IHRoZSB0YWJsZSBhdCBhbGwuCisvLyAtIE5vdCB0b28gbWFueSB0aHJlYWRzLiBJIGRvdWJ0IHRo
aXMgc2NhbGVzIGJleW9uZCB+NC4gVGhvdWdoLCBpdCBtYXkgYWN0dWFsbHkgc2NhbGUgYmV0dGVy
IHRoYW4gdGhhdAorLy8gICBpZiB0aGUgcmF0ZSBvZiBub3AgYWRkcyBpcyBhYnN1cmRseSBoaWdo
LgorLy8KKy8vIElmIHdlIHdhbnRlZCB0aGlzIHRvIHNjYWxlIGJldHRlciwgdGhlIG1haW4gY2hh
bmdlIHdlJ2QgaGF2ZSB0byBtYWtlIGlzIGhvdyB0aGlzIHRhYmxlIGRldGVybWluZXMgd2hlbgor
Ly8gdG8gcmVzaXplLiBSaWdodCBub3cgaXQncyBhIHNoYXJlZCBjb3VudGVyLiBXZSBsb2NrO3hh
ZGQgdGhpcyBjb3VudGVyLiBPbmUgZWFzeSB3YXkgdG8gbWFrZSB0aGF0CisvLyBzY2FsYWJsZSBp
cyB0byByZXF1aXJlIGVhY2ggdGhyZWFkIHRoYXQgd29ya3Mgd2l0aCB0aGUgQ29uY3VycmVudFB0
ckhhc2hTZXQgdG8gcmVnaXN0ZXIgaXRzZWxmIGZpcnN0LgorLy8gVGhlbiBlYWNoIHRocmVhZCB3
b3VsZCBoYXZlIHNvbWUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSBjb3VudGVyLiBXZSBjb3Vs
ZCBpbnN0aXR1dGUgdGhlIHBvbGljeSB0aGF0CisvLyBlYWNoIHRocmVhZCBzaW1wbHkgaW5jcmVt
ZW50cyBpdHMgb3duIGxvYWQgY291bnRlciwgaW4gaXRzIG93biBkYXRhIHN0cnVjdHVyZS4gVGhl
biwgaWYgYW55IHNlYXJjaCB0bworLy8gcmVzb2x2ZSBhIGNvbGxpc2lvbiBkb2VzIG1vcmUgdGhh
biBOIGl0ZXJhdGlvbnMsIHdlIGNhbiBjb21wdXRlIGEgY29tYmluZWQgbG9hZCBieSBzdW1taW5n
IHRoZSBsb2FkCisvLyBjb3VudGVycyBvZiBhbGwgb2YgdGhlIHRocmVhZCBkYXRhIHN0cnVjdHVy
ZXMuCisvLworLy8gQ29uY3VycmVudFB0ckhhc2hTZXQncyBtYWluIHVzZXIsIHRoZSBHQywgc2Vl
cyBhIDk4JSBub3AgYWRkIHJhdGUgaW4gU3BlZWRvbWV0ZXIuIFRoYXQncyB3aHkgdGhpcworLy8g
Zm9jdXNlcyBzbyBtdWNoIG9uIGNhc2VzIHdoZXJlIHRoZSB0YWJsZSBkb2VzIG5vdCBjaGFuZ2Uu
CitjbGFzcyBDb25jdXJyZW50UHRySGFzaFNldCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q29uY3VycmVudFB0ckhhc2hTZXQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitw
dWJsaWM6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIENvbmN1cnJlbnRQdHJIYXNoU2V0KCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIH5Db25jdXJyZW50UHRySGFzaFNldCgpOworICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBjb250YWlucyhUIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNvbnRhaW5zSW1wbChjYXN0KHZhbHVlKSk7CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBhZGQoVCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZGRJbXBsKGNhc3QodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFibGUubG9hZFJlbGF4
ZWQoKS0+bG9hZC5sb2FkUmVsYXhlZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBPbmx5IGNhbGwg
d2hlbiB5b3Uga25vdyB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gY2FsbCBhZGQoKS4gVGhpcyBm
cmVlcyB1cCBtZW1vcnkgd2l0aG91dCBjaGFuZ2luZworICAgIC8vIHRoZSBjb250ZW50cyBvZiB0
aGUgdGFibGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlT2xkVGFibGVzKCk7
CisgICAgCisgICAgLy8gT25seSBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBubyBvdGhlciB0aHJl
YWQgY2FuIGNhbGwgYWRkKCkuIFRoaXMgZnJlZXMgdXAgYWxsIG1lbW9yeSBleGNlcHQgZm9yCisg
ICAgLy8gdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGhhc2h0YWJsZS4KKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjbGVhcigpOworICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVGFibGUgewor
ICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIAorICAgICAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBjcmVhdGUodW5zaWduZWQgc2l6ZSk7Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCBtYXhMb2FkKCkgY29uc3QgeyByZXR1cm4gc2l6ZSAv
IDI7IH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHNpemU7IC8vIFRoaXMgaXMgaW1tdXRh
YmxlLgorICAgICAgICB1bnNpZ25lZCBtYXNrOyAvLyBUaGlzIGlzIGltbXV0YWJsZS4KKyAgICAg
ICAgQXRvbWljPHVuc2lnbmVkPiBsb2FkOworICAgICAgICBBdG9taWM8dm9pZCo+IGFycmF5WzFd
OworICAgIH07CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2godm9pZCogcHRyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKHB0cik7CisgICAgfQorICAg
IAorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgdm9pZCogY2FzdChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoVCkgPD0gc2l6ZW9mKHZvaWQqKSwgInR5cGUgdG9vIGJpZyIpOworICAgICAgICB1bmlv
biB7CisgICAgICAgICAgICB2b2lkKiBwdHI7CisgICAgICAgICAgICBUIHZhbHVlOworICAgICAg
ICB9IHU7CisgICAgICAgIHUucHRyID0gbnVsbHB0cjsKKyAgICAgICAgdS52YWx1ZSA9IHZhbHVl
OworICAgICAgICByZXR1cm4gdS5wdHI7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnNJ
bXBsKHZvaWQqIHB0cikgY29uc3QKKyAgICB7CisgICAgICAgIFRhYmxlKiB0YWJsZSA9IG1fdGFi
bGUubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IHRhYmxlLT5tYXNrOwor
ICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaGFzaChwdHIpICYgbWFzazsKKyAgICAgICAg
dW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICB2b2lkKiBlbnRyeSA9IHRhYmxlLT5hcnJheVtpbmRleF0ubG9hZFJlbGF4ZWQoKTsKKyAg
ICAgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaWYgKGVudHJ5ID09IHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaW5kZXggIT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGEgbmV3IGVudHJ5IHdhcyBhZGRlZC4KKyAgICBib29s
IGFkZEltcGwodm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgVGFibGUqIHRhYmxlID0gbV90YWJs
ZS5sb2FkUmVsYXhlZCgpOworICAgICAgICB1bnNpZ25lZCBtYXNrID0gdGFibGUtPm1hc2s7Cisg
ICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBoYXNoKHB0cikgJiBtYXNrOworICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAg
ICAgIHZvaWQqIGVudHJ5ID0gdGFibGUtPmFycmF5W2luZGV4XS5sb2FkUmVsYXhlZCgpOworICAg
ICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkU2xvdyh0YWJs
ZSwgbWFzaywgc3RhcnRJbmRleCwgaW5kZXgsIHB0cik7CisgICAgICAgICAgICBpZiAoZW50cnkg
PT0gcHRyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGluZGV4
ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXgg
IT0gc3RhcnRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgYWRkU2xvdyhUYWJsZSogdGFibGUsIHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGluZGV4LCB2b2lkKiBwdHIpOworCisgICAgdm9pZCByZXNp
emVJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wgcmVzaXplQW5kQWRkKHZvaWQqIHB0cik7CisgICAg
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4sIDQ+IG1fYWxsVGFibGVzOworICAg
IEF0b21pYzxUYWJsZSo+IG1fdGFibGU7IC8vIFRoaXMgaXMgbmV2ZXIgbnVsbC4KKyAgICBMb2Nr
IG1fbG9jazsgLy8gV2UganVzdCB1c2UgdGhpcyB0byBjb250cm9sIHJlc2l6ZSByYWNlcy4KK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNvbmN1cnJlbnRQdHJIYXNoU2V0
OwpJbmRleDogU291cmNlL1dURi93dGYvQ291bnRpbmdMb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9Db3VudGluZ0xvY2suY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NvdW50aW5nTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ291bnRpbmdMb2NrLmgiCisKKyNpbmNsdWRlIDx3dGYvTG9j
a0FsZ29yaXRobUlubGluZXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgQ291bnRpbmdM
b2NrOjpsb2NrU2xvdygpCit7CisgICAgRXhjbHVzaXZlQWxnb3JpdGhtOjpsb2NrU2xvdyhtX3dv
cmQpOworfQorCit2b2lkIENvdW50aW5nTG9jazo6dW5sb2NrU2xvdygpCit7CisgICAgRXhjbHVz
aXZlQWxnb3JpdGhtOjp1bmxvY2tTbG93KG1fd29yZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db3VudGluZ0xvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9Db3VudGluZ0xvY2suaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Db3VudGluZ0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgbW9zdGx5IGp1c3QgYSB3b3JkLXNp
emVkIFdURjo6TG9jay4gSXQgc3VwcG9ydHMgYmFzaWNhbGx5IGV2ZXJ5dGhpbmcgdGhhdCBsb2Nr
IHN1cHBvcnRzLiBCdXQgYXMKKy8vIGEgYm9udXMsIGl0IGF0b21pY2FsbHkgY291bnRzIGxvY2so
KSBjYWxscyBhbmQgYWxsb3dzIHlvdSB0byBwZXJmb3JtIGFuIG9wdGltaXN0aWMgcmVhZCB0cmFu
c2FjdGlvbiBieQorLy8gY29tcGFyaW5nIHRoZSBjb3VudCBiZWZvcmUgYW5kIGFmdGVyIHRoZSB0
cmFuc2FjdGlvbi4gSWYgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0cmFuc2FjdGlvbiB0aGUgbG9jayBp
cworLy8gbm90IGhlbGQgYW5kIHRoZSBjb3VudCByZW1haW5zIHRoZSBzYW1lIHRocm91Z2hvdXQg
dGhlIHRyYW5zYWN0aW9uLCB0aGVuIHlvdSBrbm93IHRoYXQgbm9ib2R5IGNvdWxkCisvLyBoYXZl
IG1vZGlmaWVkIHlvdXIgZGF0YSBzdHJ1Y3R1cmUgd2hpbGUgeW91IHJhbi4gWW91IGNhbiBldmVu
IHVzZSB0aGlzIHRvIG9wdGltaXN0aWNhbGx5IHJlYWQgcG9pbnRlcnMKKy8vIHRoYXQgY291bGQg
YmVjb21lIGRhbmdsaW5nIHVuZGVyIGNvbmN1cnJlbnQgd3JpdGVzLCBpZiB5b3UganVzdCByZXZh
bGlkYXRlIHRoZSBjb3VudCBldmVyeSB0aW1lIHlvdSdyZQorLy8gYWJvdXQgdG8gZG8gc29tZXRo
aW5nIGRhbmdlcm91cy4KKy8vCisvLyBUaGlzIGlzIGxhcmdlbHkgaW5zcGlyZWQgYnkgU3RhbXBl
ZExvY2sgZnJvbSBKYXZhOgorLy8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzgvZG9j
cy9hcGkvamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQ291bnRpbmdMb2NrLmh0bWwKKy8vCisv
LyBUaGlzIGlzIHNpbXBsaWZpZWQgYSBsb3QgY29tcGFyZWQgdG8gU3RhbXBlZExvY2suIFVubGlr
ZSBTdGFtcGVkTG9jaywgaXQgdXNlcyBhbiBleGNsdXNpdmUgbG9jayBhcyBhCisvLyBmYWxsYmFj
ay4gVGhlcmUgaXMgbm8gd2F5IHRvIGFjcXVpcmUgYSBDb3VudGluZ0xvY2sgZm9yIHJlYWQuIFRo
ZSBvbmx5IHJlYWQgYWNjZXNzIGlzIHZpYSBvcHRpbWlzdGljCisvLyByZWFkIHRyYW5zYWN0aW9u
cy4KKy8vCisvLyBDb3VudGluZ0xvY2sgcHJvdmlkZXMgdHdvIHdheXMgb2YgZG9pbmcgb3B0aW1p
c3RpYyByZWFkczoKKy8vCisvLyAtIFRoZSBlYXN5IHdheSwgd2hlcmUgQ291bnRpbmdMb2NrIGRv
ZXMgYWxsIG9mIHRoZSBmZW5jaW5nIGZvciB5b3UuIFRoYXQgZmVuY2luZyBpcyBmcmVlIG9uIHg4
NiBidXQKKy8vICAgc29tZXdoYXQgZXhwZW5zaXZlIG9uIEFSTS4KKy8vIC0gVGhlIGhhcmQgd2F5
LCB3aGVyZSB5b3UgZG8gZmVuY2luZyB5b3Vyc2VsZiB1c2luZyBEZXBlbmRlbmN5LiBUaGlzIGFs
bG93cyB5b3UgdG8gYmUgZmVuY2VsZXNzIG9uIGJvdGgKKy8vICAgeDg2IGFuZCBBUk0uCisvLwor
Ly8gVGhlIGxhdHRlciBpcyBpbXBvcnRhbnQgZm9yIHVzIGJlY2F1c2Ugc29tZSBHQyBwYXRocyBh
cmUga25vd24gdG8gYmUgc2Vuc2l0aXZlIHRvIGZlbmNlcyBvbiBBUk0uCisKK2NsYXNzIENvdW50
aW5nTG9jayB7CisgICAgdHlwZWRlZiB1bnNpZ25lZCBMb2NrVHlwZTsKKyAgICAKKyAgICBzdGF0
aWMgY29uc3RleHByIExvY2tUeXBlIGlzSGVsZEJpdCA9IDE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBMb2NrVHlwZSBoYXNQYXJrZWRCaXQgPSAyOworICAgIHN0YXRpYyBjb25zdGV4cHIgTG9ja1R5
cGUgbWFzayA9IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IExvY2tUeXBlIHNoaWZ0ID0gMjsKKyAgICBzdGF0aWMgY29uc3RleHByIExvY2tUeXBlIGNvdW50
VW5pdCA9IDQ7CisgICAgCisgICAgc3RydWN0IExvY2tIb29rcyB7CisgICAgICAgIHN0YXRpYyBM
b2NrVHlwZSBsb2NrSG9vayhMb2NrVHlwZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHZhbHVlICsgY291bnRVbml0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBz
dGF0aWMgTG9ja1R5cGUgdW5sb2NrSG9vayhMb2NrVHlwZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7
IH0KKyAgICAgICAgc3RhdGljIExvY2tUeXBlIHBhcmtIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZTsgfQorICAgICAgICBzdGF0aWMgTG9ja1R5cGUgaGFuZG9mZkhvb2soTG9ja1R5
cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIExv
Y2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgaGFzUGFya2VkQml0LCBMb2NrSG9va3M+
IEV4Y2x1c2l2ZUFsZ29yaXRobTsKKyAgICAKK3B1YmxpYzoKKyAgICBDb3VudGluZ0xvY2soKQor
ICAgIHsKKyAgICAgICAgbV93b3JkLnN0b3JlUmVsYXhlZCgwKTsKKyAgICB9CisgICAgCisgICAg
fkNvdW50aW5nTG9jaygpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHRyeUxvY2soKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEV4Y2x1c2l2ZUFsZ29yaXRobTo6dHJ5TG9jayhtX3dvcmQp
OworICAgIH0KKworICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFko
IUV4Y2x1c2l2ZUFsZ29yaXRobTo6bG9ja0Zhc3QobV93b3JkKSkpCisgICAgICAgICAgICBsb2Nr
U2xvdygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoIUV4Y2x1c2l2ZUFsZ29yaXRobTo6dW5sb2NrRmFzdChtX3dvcmQpKSkKKyAg
ICAgICAgICAgIHVubG9ja1Nsb3coKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hlbGQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEV4Y2x1c2l2ZUFsZ29yaXRobTo6aXNMb2NrZWQo
bV93b3JkKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNIZWxkKCk7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBvbmx5IHRo
aW5nIHlvdSdyZSBhbGxvd2VkIHRvIGluZmVyIGZyb20gdGhpcyB2YWx1ZSBpcyB0aGF0IGlmIGl0
J3MgemVybywgdGhlbiB5b3UgZGlkbid0IGdldAorICAgIC8vIGEgcmVhbCBjb3VudC4KKyAgICBj
bGFzcyBDb3VudCB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgICAgIAorICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ291bnQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IG90
aGVyLm1fdmFsdWU7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvdW50JiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOyB9CisgICAgICAgIAor
ICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBDb3VudGluZ0xvY2s7CisgICAgICAg
IAorICAgICAgICBMb2NrVHlwZSBtX3ZhbHVlIHsgMCB9OworICAgIH07CisgICAgCisgICAgLy8g
RXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoaXM6CisgICAgLy8KKyAgICAvLyAgICAgaW50IHJlYWQo
KQorICAgIC8vICAgICB7CisgICAgLy8gICAgICAgICBpZiAoQ291bnRpbmdMb2NrOjpDb3VudCBj
b3VudCA9IG1fbG9jay50cnlPcHRpbWlzdGljUmVhZCgpKSB7CisgICAgLy8gICAgICAgICAgICAg
aW50IHZhbHVlID0gbV90aGluZ3M7CisgICAgLy8gICAgICAgICAgICAgaWYgKG1fbG9jay52YWxp
ZGF0ZShjb3VudCkpCisgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsgLy8gc3Vj
Y2VzcyEKKyAgICAvLyAgICAgICAgIH0KKyAgICAvLyAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICAvLyAgICAgICAgIGludCB2YWx1ZSA9IG1fdGhpbmdzOworICAg
IC8vICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIC8vICAgICB9CisgICAgLy8KKyAgICAvLyBJ
ZiB0cnlPcHRpbWlzaXRjUmVhZCgpIHJ1bnMgd2hlbiB0aGUgbG9jayBpcyBub3QgaGVsZCwgdGhp
cyB0aHJlYWQgd2lsbCBydW4gYSBjcml0aWNhbCBzZWN0aW9uCisgICAgLy8gd2l0aG91dCBldmVy
IHdyaXRpbmcgdG8gbWVtb3J5LiBIb3dldmVyLCBvbiBBUk0sIHRoaXMgcmVxdWlyZXMgZmVuY2lu
Zy4gV2UgdXNlIGEgbG9hZC1hY3F1aXJlIGZvcgorICAgIC8vIHRyeU9wdGltaXN0aWNSZWFkKCku
IFdlIGhhdmUgbm8gY2hvaWNlIGJ1dCB0byB1c2UgdGhlIG1vcmUgZXhwZW5zaXZlIGBkbWIgaXNo
YCBpbiB2YWxpZGF0ZSgpLiBJZgorICAgIC8vIHlvdSB3YW50IHRvIGF2b2lkIHRoYXQsIHlvdSBj
b3VsZCB0cnkgdG8gdXNlIHRyeU9wdGltaXN0aWNGZW5jZWxlc3NSZWFkKCkuCisgICAgQ291bnQg
dHJ5T3B0aW1pc3RpY1JlYWQoKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVl
ID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGVsaW1pbmF0ZSB0
aGlzIGNoZWNrLCBpZiB3ZSB0aGluayBpdCdzIE9LIHRvIHByb2NlZWQgd2l0aCB0aGUgb3B0aW1p
c3RpYyByZWFkCisgICAgICAgIC8vIHBhdGggZXZlbiBhZnRlciBrbm93aW5nIHRoYXQgaXQgbXVz
dCBmYWlsLiBUaGF0J3MgcHJvYmFibHkgZ29vZCBmb3IgcGVyZiBzaW5jZSB3ZSBleHBlY3QKKyAg
ICAgICAgLy8gZmFpbHVyZSB0byBiZSBzdXBlciByYXJlLiBXZSB3b3VsZCBnZXQgcmlkIG9mIHRo
aXMgY2hlY2sgYW5kIGluc3RlYWQgb2YgY2FsbGluZyBnZXRDb3VudCBiZWxvdywKKyAgICAgICAg
Ly8gd2Ugd291bGQgcmV0dXJuIGN1cnJlbnRWYWx1ZSBeIG1hc2suIElmIHRoZSBsb2NrIHN0YXRl
IHdhcyBlbXB0eSB0byBiZWdpbiB3aXRoLCB0aGUgcmVzdWx0CisgICAgICAgIC8vIHdvdWxkIGJl
IGEgcHJvcGVybHkgYmxlc3NlZCBjb3VudCAoYm90aCBsb3cgYml0cyBzZXQpLiBJZiB0aGUgbG9j
ayBzdGF0ZSB3YXMgYW55dGhpbmcgZWxzZSwgd2UKKyAgICAgICAgLy8gd291bGQgZ2V0IGFuIGlt
cHJvcGVybHkgYmxlc3NlZCBjb3VudCB0aGF0IHdvdWxkIG5vdCBwb3NzaWJseSBzdWNjZWVkIGlu
IHZhbGlkYXRlLiBXZSBjb3VsZAorICAgICAgICAvLyBhY3R1YWxseSBkbyBzb21ldGhpbmcgbGlr
ZSAicmV0dXJuIChjdXJyZW50VmFsdWUgfCBoYXNQYXJrZWRCaXQpIF4gaXNIZWxkQml0Iiwgd2hp
Y2ggd291bGQgbWVhbgorICAgICAgICAvLyB0aGF0IHdlIGFsbG93IHBhcmtlZC1idXQtbm90LWhl
bGQtbG9ja3MgdGhyb3VnaC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4MDM5NAorICAgICAgICBpZiAoY3VycmVudFZhbHVlICYgaXNIZWxkQml0
KQorICAgICAgICAgICAgcmV0dXJuIENvdW50KCk7CisgICAgICAgIHJldHVybiBnZXRDb3VudChj
dXJyZW50VmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIHZhbGlkYXRlKENvdW50IGNvdW50
KQorICAgIHsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgICAgIExvY2tUeXBl
IGN1cnJlbnRWYWx1ZSA9IG1fd29yZC5sb2FkUmVsYXhlZCgpOworICAgICAgICByZXR1cm4gZ2V0
Q291bnQoY3VycmVudFZhbHVlKSA9PSBjb3VudDsKKyAgICB9CisgICAgCisgICAgLy8gRXhhbXBs
ZSBvZiBob3cgdG8gdXNlIHRoaXM6CisgICAgLy8KKyAgICAvLyAgICAgaW50IHJlYWQoKQorICAg
IC8vICAgICB7CisgICAgLy8gICAgICAgICByZXR1cm4gbV9sb2NrLmRvT3B0aW1pemVkUmVhZCgK
KyAgICAvLyAgICAgICAgICAgICBbJl0gKCkgLT4gaW50IHsKKyAgICAvLyAgICAgICAgICAgICAg
ICAgaW50IHZhbHVlID0gbV90aGluZ3M7CisgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICAvLyAgICAgICAgICAgICB9KTsKKyAgICAvLyAgICAgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgYXV0byBkb09wdGltaXplZFJlYWQoY29uc3QgRnVuYyYgZnVu
YykKKyAgICB7CisgICAgICAgIENvdW50IGNvdW50ID0gdHJ5T3B0aW1pc3RpY1JlYWQoKTsKKyAg
ICAgICAgaWYgKGNvdW50KSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGZ1bmMoKTsKKyAg
ICAgICAgICAgIGlmICh2YWxpZGF0ZShjb3VudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfQorICAgICAgICBsb2NrKCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
ZnVuYygpOworICAgICAgICB1bmxvY2soKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgLy8gRXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoaXM6CisgICAgLy8KKyAgICAv
LyAgICAgaW50IHJlYWQoKQorICAgIC8vICAgICB7CisgICAgLy8gICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fbG9jay50cnlPcHRpbWlzdGljRmVuY2VsZXNzUmVhZCgpOworICAgIC8vICAgICAgICAg
aWYgKENvdW50aW5nTG9jazo6Q291bnQgY291bnQgPSByZXN1bHQudmFsdWUpIHsKKyAgICAvLyAg
ICAgICAgICAgICBEZXBlbmRlbmN5IGZlbmNlQmVmb3JlID0gRGVwZW5kZW5jeTo6ZmVuY2UocmVz
dWx0LmlucHV0KTsKKyAgICAvLyAgICAgICAgICAgICBhdXRvKiBmZW5jZWRUaGlzID0gZmVuY2VC
ZWZvcmUuY29uc3VtZSh0aGlzKTsKKyAgICAvLyAgICAgICAgICAgICBpbnQgdmFsdWUgPSBmZW5j
ZWRUaGlzLT5tX3RoaW5nczsKKyAgICAvLyAgICAgICAgICAgICBpZiAobV9sb2NrLmZlbmNlbGVz
c1ZhbGlkYXRlKGNvdW50LCBEZXBlbmRlbmN5OjpmZW5jZSh2YWx1ZSkpKQorICAgIC8vICAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWU7IC8vIHN1Y2Nlc3MhCisgICAgLy8gICAgICAgICB9Cisg
ICAgLy8gICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgLy8gICAg
ICAgICBpbnQgdmFsdWUgPSBtX3RoaW5nczsKKyAgICAvLyAgICAgICAgIHJldHVybiB2YWx1ZTsK
KyAgICAvLyAgICAgfQorICAgIC8vCisgICAgLy8gVXNlIHRoaXMgdG8gY3JlYXRlIGEgcmVhZCB0
cmFuc2FjdGlvbiB1c2luZyBkZXBlbmRlbmN5IGNoYWlucyBvbmx5LiBZb3UgaGF2ZSB0byBiZSBj
YXJlZnVsIHRvCisgICAgLy8gdGhyZWFkIHRoZSBkZXBlbmRlbmN5IGlucHV0ICh0aGUgYGlucHV0
YCBmaWVsZCB0aGF0IHRoZSByZXR1cm5zKSB0aHJvdWdoIGEgRGVwZW5kZW5jeSwgYW5kIHRoZW4K
KyAgICAvLyB0aHJlYWQgdGhhdCBEZXBlbmRlbmN5IGludG8gZXZlcnkgbG9hZCAoZXhjZXB0IGZv
ciBsb2FkcyB0aGF0IGFyZSBjaGFzaW5nIHBvaW50ZXJzIGxvYWRlZCBmcm9tCisgICAgLy8gbG9h
ZHMgdGhhdCBhbHJlYWR5IHVzZXMgdGhhdCBkZXBlbmRlbmN5KS4gVGhlbiwgdG8gdmFsaWRhdGUg
dGhlIHJlYWQgdHJhbnNhY3Rpb24sIHlvdSBoYXZlIHRvIHBhc3MKKyAgICAvLyBib3RoIHRoZSBj
b3VudCBhbmQgYW5vdGhlciBEZXBlbmRlbmN5IHRoYXQgaXMgYmFzZWQgb24gd2hhdGV2ZXIgbG9h
ZHMgeW91IHVzZWQgdG8gcHJvZHVjZSB0aGUKKyAgICAvLyBvdXRwdXQuCisgICAgLy8KKyAgICAv
LyBPbiBub24tQVJNIHBsYXRmb3JtcywgdGhlIERlcGVuZGVuY3kgb2JqZWN0cyBkb24ndCBkbyBh
bnl0aGluZyBleGNlcHQgZm9yIERlcGVuZGVuY3k6OmZlbmNlLCB3aGljaAorICAgIC8vIGlzIGEg
bG9hZC1sb2FkIGZlbmNlLiBUaGUgaWRpb20gYWJvdmUgZG9lcyB0aGUgcmlnaHQgdGhpbmcgb24g
Ym90aCBBUk0gYW5kIFRTTy4KKyAgICAvLworICAgIC8vIFdBUk5JTkc6IFRoaXMgY2FuIGJlIGhh
cmQgdG8gZ2V0IHJpZ2h0LiBQbGVhc2Ugb25seSB1c2UgdGhpcyBmb3IgdmVyeSBzaG9ydCBjcml0
aWNhbCBzZWN0aW9ucyB0aGF0CisgICAgLy8gYXJlIGtub3duIHRvIGJlIHN1ZmZpY2llbnRseSBw
ZXJmLWNyaXRpY2FsIHRvIGp1c3RpZnkgdGhlIHJpc2suCisgICAgSW5wdXRBbmRWYWx1ZTxMb2Nr
VHlwZSwgQ291bnQ+IHRyeU9wdGltaXN0aWNGZW5jZWxlc3NSZWFkKCkKKyAgICB7CisgICAgICAg
IExvY2tUeXBlIGN1cnJlbnRWYWx1ZSA9IG1fd29yZC5sb2FkUmVsYXhlZCgpOworICAgICAgICBp
ZiAoY3VycmVudFZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgcmV0dXJuIGlucHV0QW5k
VmFsdWUoY3VycmVudFZhbHVlLCBDb3VudCgpKTsKKyAgICAgICAgcmV0dXJuIGlucHV0QW5kVmFs
dWUoY3VycmVudFZhbHVlLCBnZXRDb3VudChjdXJyZW50VmFsdWUpKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBmZW5jZWxlc3NWYWxpZGF0ZShDb3VudCBjb3VudCwgRGVwZW5kZW5jeSBkZXBlbmRl
bmN5KQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgY3VycmVudFZhbHVlID0gZGVwZW5kZW5jeS5j
b25zdW1lKHRoaXMpLT5tX3dvcmQubG9hZFJlbGF4ZWQoKTsKKyAgICAgICAgcmV0dXJuIGdldENv
dW50KGN1cnJlbnRWYWx1ZSkgPT0gY291bnQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wdGltaXN0aWNGdW5jLCB0eXBlbmFtZSBGdW5jPgorICAgIGF1dG8gZG9PcHRpbWl6
ZWRGZW5jZWxlc3NSZWFkKGNvbnN0IE9wdGltaXN0aWNGdW5jJiBvcHRpbWlzdGljRnVuYywgY29u
c3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGF1dG8gY291bnQgPSB0cnlPcHRpbWlzdGlj
RmVuY2VsZXNzUmVhZCgpOworICAgICAgICBpZiAoY291bnQudmFsdWUpIHsKKyAgICAgICAgICAg
IERlcGVuZGVuY3kgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3k6OmZlbmNlKGNvdW50LmlucHV0KTsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gb3B0aW1pc3RpY0Z1bmMoZGVwZW5kZW5jeSwgY291
bnQudmFsdWUpOworICAgICAgICAgICAgaWYgKGZlbmNlbGVzc1ZhbGlkYXRlKGNvdW50LnZhbHVl
LCBkZXBlbmRlbmN5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgICAgIGxvY2soKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jKCk7CisgICAgICAg
IHVubG9jaygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CisgICAgCisgICAgQ291bnQgZ2V0Q291bnQoTG9j
a1R5cGUgdmFsdWUpCisgICAgeworICAgICAgICBDb3VudCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3ZhbHVlID0gdmFsdWUgfCBtYXNrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBBdG9taWM8TG9ja1R5cGU+IG1fd29yZDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCit1c2luZyBXVEY6OkNvdW50aW5nTG9jazsKKwpJbmRleDogU291cmNlL1dURi93dGYv
RGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAy
MjU1MTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAs
NiArMTAwLDExIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgYXBwZW5kQW5kQnViYmxlKFUmJiwgY29uc3QgRnVuYyYpOwogICAgIAor
ICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IGZvciB3aGljaCB0aGUg
Y2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCisgICAgLy8g
VCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRha2VGaXJzdChjb25zdCBGdW5jJik7CisKICAgICAvLyBS
ZW1vdmUgYW5kIHJldHVybiB0aGUgbGFzdCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sg
cmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCiAgICAgLy8gVCBpZiBpdCB0
aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KQEAgLTU3MSw2ICs1NzYsMjUgQEAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2Fw
YWNpdHk+OjphcAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+Ojp0YWtlRmlyc3QoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CisgICAgdW5zaWduZWQgc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICB3aGlsZSAoY291bnQg
PCBzaXplKSB7CisgICAgICAgIFQgY2FuZGlkYXRlID0gdGFrZUZpcnN0KCk7CisgICAgICAgIGlm
IChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAg
ICAgICAgICAgIHByZXBlbmQodGFrZUxhc3QoKSk7CisgICAgICAgICAgICByZXR1cm4gY2FuZGlk
YXRlOworICAgICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIGFwcGVuZChXVEZNb3Zl
KGNhbmRpZGF0ZSkpOworICAgIH0KKyAgICByZXR1cm4gVCgpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgog
aW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlTGFzdChjb25zdCBGdW5jJiBm
dW5jKQogewogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zh
c3RNYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgJKHJl
dmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAkod29ya2luZyBj
b3B5KQpAQCAtMjM0LDggKzIzNCw3IEBAIHVzaW5nIFdURjo6ZmFzdEFsaWduZWRGcmVlOwogI2Rl
ZmluZSBXVEZfUFJJVkFURV9JTkxJTkUgaW5saW5lCiAjZW5kaWYKIAotI2RlZmluZSBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRCBcCi1wdWJsaWM6IFwKKyNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExP
Q0FURURfSU1QTCBcCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCogcCkgeyBy
ZXR1cm4gcDsgfSBcCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBwKSB7
IHJldHVybiBwOyB9IFwKICAgICBcCkBAIC0yNjMsNyArMjYyLDE1IEBAIHB1YmxpYzogXAogICAg
ICAgICBBU1NFUlQobG9jYXRpb24pOyBcCiAgICAgICAgIHJldHVybiBsb2NhdGlvbjsgXAogICAg
IH0gXAorCisjZGVmaW5lIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIFwKK3B1YmxpYzogXAorICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEwgXAogcHJpdmF0ZTogXAogdHlwZWRlZiBpbnQg
X190aGlzSXNIZXJlVG9Gb3JjZUFTZW1pY29sb25BZnRlclRoaXNNYWNybwogCisjZGVmaW5lIFdU
Rl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRCBcCisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfSU1QTCBcCit0eXBlZGVmIGludCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xvbkFmdGVy
VGhpc01hY3JvCisKICNlbmRpZiAvKiBXVEZfRmFzdE1hbGxvY19oICovCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9Mb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAko
cmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL1dURi93dGYvTG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDExICsyNywxNiBAQAogI2luY2x1ZGUgIkxvY2suaCIKIAogI2luY2x1ZGUgPHd0
Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1Nob3RQcm9maWxl
ci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAorc3RhdGljIGNvbnN0ZXhwciBib29sIHByb2ZpbGVM
b2NrQ29udGVudGlvbiA9IGZhbHNlOworCiB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCiB7Cisg
ICAgaWYgKHByb2ZpbGVMb2NrQ29udGVudGlvbikKKyAgICAgICAgU1RBQ0tfU0hPVF9QUk9GSUxF
KDQsIDIsIDUpOwogICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpsb2NrU2xvdyhtX2J5dGUpOwog
fQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCShyZXZpc2lvbiAyMjU1MTYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDE1
IEBAIG5hbWVzcGFjZSBXVEYgewogLy8gZmllbGQuIFRoZSBsaW1pdCBvZiBvbmUgbG9jayBpcyBk
dWUgdG8gdGhlIHVzZSBvZiB0aGUgZmllbGQncyBhZGRyZXNzIGFzIGEga2V5IHRvIGZpbmQgdGhl
IGxvY2sncwogLy8gcXVldWUuCiAKLXRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCBMb2NrVHlw
ZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4KK3RlbXBsYXRlPHR5cGVuYW1lIExv
Y2tUeXBlPgorc3RydWN0IEVtcHR5TG9ja0hvb2tzIHsKKyAgICBzdGF0aWMgTG9ja1R5cGUgbG9j
a0hvb2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgc3RhdGljIExvY2tU
eXBlIHVubG9ja0hvb2soTG9ja1R5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgc3Rh
dGljIExvY2tUeXBlIHBhcmtIb29rKExvY2tUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfQor
ICAgIHN0YXRpYyBMb2NrVHlwZSBoYW5kb2ZmSG9vayhMb2NrVHlwZSB2YWx1ZSkgeyByZXR1cm4g
dmFsdWU7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hl
bGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdCwgdHlwZW5hbWUgSG9va3MgPSBFbXB0eUxvY2tI
b29rczxMb2NrVHlwZT4+CiBjbGFzcyBMb2NrQWxnb3JpdGhtIHsKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0IExvY2tUeXBlIG1hc2sgPSBp
c0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQ7CkBAIC00Myw3ICs1MSw3IEBAIGNsYXNzIExvY2tBbGdv
cml0aG0gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0
b21pYzxMb2NrVHlwZT4mIGxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gbG9jay5jb21wYXJl
RXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Cisg
ICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgSG9va3M6OmxvY2tIb29r
KGlzSGVsZEJpdCksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwogICAgIH0KICAgICAKICAg
ICBzdGF0aWMgYm9vbCBsb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQpAQCAtNTMsNiAr
NjEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYgaXNIZWxkQml0KQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgdmFsdWUg
fD0gaXNIZWxkQml0OworICAgICAgICAgICAgICAgIHZhbHVlID0gSG9va3M6OmxvY2tIb29rKHZh
bHVlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKQEAgLTY3LDE3ICs3NiwxNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgdHJ5TG9jayhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQog
ICAgIHsKICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0
ZVZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgICAgICAg
ICAgaWYgKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICBMb2NrVHlw
ZSBjdXJyZW50VmFsdWUgPSBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Cisg
ICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICYgaXNIZWxkQml0KQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWso
Y3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkpCisgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKGN1cnJlbnRWYWx1ZSwgSG9va3M6OmxvY2tIb29rKGN1cnJlbnRWYWx1ZSB8IGlzSGVsZEJp
dCksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFzdEFzc3Vt
aW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxv
Y2suY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGVhc2UpOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJp
dCwgSG9va3M6OnVubG9ja0hvb2soMCksIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwogICAg
IH0KICAgICAKICAgICBzdGF0aWMgYm9vbCB1bmxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxv
Y2spCkBAIC04Nyw2ICs5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoKHZhbHVl
ICYgbWFzaykgIT0gaXNIZWxkQml0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICAgICAgdmFsdWUgJj0gfmlzSGVsZEJpdDsKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IEhvb2tzOjp1bmxvY2tIb29rKHZhbHVlKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxh
eGVkKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG1JbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaAkocmV2aXNpb24g
MjI1NTE2KQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG0uaD4KICNpbmNsdWRlIDx3
dGYvUGFya2luZ0xvdC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTM1LDggKzM2
LDggQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCBM
b2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4KLXZvaWQgTG9ja0FsZ29y
aXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCBoYXNQYXJrZWRCaXQ+Ojpsb2NrU2xvdyhBdG9taWM8
TG9ja1R5cGU+JiBsb2NrKQordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlz
SGVsZEJpdCwgTG9ja1R5cGUgaGFzUGFya2VkQml0LCB0eXBlbmFtZSBIb29rcz4KK3ZvaWQgTG9j
a0FsZ29yaXRobTxMb2NrVHlwZSwgaXNIZWxkQml0LCBoYXNQYXJrZWRCaXQsIEhvb2tzPjo6bG9j
a1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaykKIHsKICAgICAvLyBUaGlzIG1hZ2ljIG51bWJl
ciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1l
bnRzLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGluTGltaXQgPSA0MDsKQEAgLTQ0LDE1
ICs0NSwxNyBAQCB2b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgCiAgICAg
dW5zaWduZWQgc3BpbkNvdW50ID0gMDsKICAgICAKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVp
bnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICBMb2NrVHlwZSBj
dXJyZW50VmFsdWUgPSBsb2NrLmxvYWQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGFsbG93
IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAm
IGlzSGVsZEJpdCkKLSAgICAgICAgICAgICYmIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJy
ZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKCEoY3VycmVudFZhbHVlICYgaXNIZWxkQml0KSkgeworICAg
ICAgICAgICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50VmFsdWUsIEhvb2tz
Ojpsb2NrSG9vayhjdXJyZW50VmFsdWUgfCBpc0hlbGRCaXQpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2Ug
Y2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZh
bHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAg
aWYgKCEoY3VycmVudFZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGlt
aXQpIHsKICAgICAgICAgICAgIHNwaW5Db3VudCsrOwogICAgICAgICAgICAgVGhyZWFkOjp5aWVs
ZCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC02MCwxMyArNjMsMjUgQEAgdm9pZCBMb2Nr
QWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRCaXQsIAogCiAgICAgICAgIC8vIE5lZWQgdG8gcGFy
ay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBw
YXJraW5nLiBXZSBzcGluIGFyb3VuZAogICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNu
J3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KLSAgICAgICAgaWYgKCEoY3VycmVu
dEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKLSAgICAgICAgICAgICYmICFsb2NrLmNvbXBhcmVF
eGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGhhc1Bhcmtl
ZEJpdCkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCEoY3VycmVudFZhbHVl
ICYgaGFzUGFya2VkQml0KSkgeworICAgICAgICAgICAgTG9ja1R5cGUgbmV3VmFsdWUgPSBIb29r
czo6cGFya0hvb2soY3VycmVudFZhbHVlIHwgaGFzUGFya2VkQml0KTsKKyAgICAgICAgICAgIGlm
ICghbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRWYWx1ZSwgbmV3VmFsdWUpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY3VycmVudFZhbHVlID0gbmV3VmFs
dWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghKGN1cnJlbnRWYWx1ZSAmIGlz
SGVsZEJpdCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkxvY2sgbm90IGhlbGQhXG4iKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCEoY3VycmVudFZhbHVlICYgaGFzUGFya2VkQml0KSkgeworICAgICAgICAgICAgZGF0
YUxvZygiTG9jayBub3QgcGFya2VkIVxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAKICAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUg
dmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2Us
IHdlIGNhbiBwYXJrLgogICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVzdWx0IHBhcmtSZXN1bHQg
PQotICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxvY2ssIGN1cnJlbnRC
eXRlVmFsdWUgfCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAgUGFya2lu
Z0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxvY2ssIGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIGlmIChw
YXJrUmVzdWx0Lndhc1VucGFya2VkKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0
PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgewogICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5k
b2ZmOgpAQCAtODcsOCArMTAyLDggQEAgdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hl
bGRCaXQsIAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBl
IGlzSGVsZEJpdCwgTG9ja1R5cGUgaGFzUGFya2VkQml0Pgotdm9pZCBMb2NrQWxnb3JpdGhtPExv
Y2tUeXBlLCBpc0hlbGRCaXQsIGhhc1BhcmtlZEJpdD46OnVubG9ja1Nsb3coQXRvbWljPExvY2tU
eXBlPiYgbG9jaywgRmFpcm5lc3MgZmFpcm5lc3MpCit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlw
ZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQsIHR5cGVuYW1lIEhv
b2tzPgordm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRCaXQsIGhhc1BhcmtlZEJp
dCwgSG9va3M+Ojp1bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZh
aXJuZXNzKQogewogICAgIC8vIFdlIGNvdWxkIGdldCBoZXJlIGJlY2F1c2UgdGhlIHdlYWsgQ0FT
IGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBvciBiZWNhdXNlIHRoZXJlIGlzCiAgICAg
Ly8gc29tZW9uZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FTIGxvb3A6IGV2ZW4gaWYgcmlnaHQg
bm93IHRoZSBsb2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQKQEAgLTEwMCw3ICsxMTUsNyBAQCB2
b2lkIExvY2tBbGdvcml0aG08TG9ja1R5cGUsIGlzSGVsZEJpdCwgCiAgICAgICAgICAgICB8fCAo
b2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSBpc0hlbGRCaXQpIHsK
LSAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkQnl0ZVZhbHVlLCBv
bGRCeXRlVmFsdWUgJiB+aXNIZWxkQml0KSkKKyAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVF
eGNoYW5nZVdlYWsob2xkQnl0ZVZhbHVlLCBIb29rczo6dW5sb2NrSG9vayhvbGRCeXRlVmFsdWUg
JiB+aXNIZWxkQml0KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KQEAgLTEyMCwxMiArMTM1LDIxIEBAIHZvaWQgTG9ja0FsZ29yaXRo
bTxMb2NrVHlwZSwgaXNIZWxkQml0LCAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRpZFVu
cGFya1RocmVhZCAmJiAoZmFpcm5lc3MgPT0gRmFpciB8fCByZXN1bHQudGltZVRvQmVGYWlyKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB1bmxvY2sgYW55dGhpbmcuIEluc3Rl
YWQsIHdlIGhhbmQgdGhlIGxvY2sgdG8gdGhlIHRocmVhZCB0aGF0IHdhcwogICAgICAgICAgICAg
ICAgICAgICAvLyB3YWl0aW5nLgorICAgICAgICAgICAgICAgICAgICBsb2NrLnRyYW5zYWN0aW9u
KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2tUeXBlIG5ld1ZhbHVlID0gSG9va3M6
OmhhbmRvZmZIb29rKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3
VmFsdWUgPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RIYW5kb2ZmOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBsb2NrLnRy
YW5zYWN0aW9uKAogICAgICAgICAgICAgICAgICAgICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgLT4g
Ym9vbCB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAmPSB+bWFzazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gSG9va3M6OnVubG9ja0hvb2sodmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gaGFzUGFya2VkQml0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrZXIuaAkocmV2aXNpb24gMjI1NTE2KQor
KysgU291cmNlL1dURi93dGYvTG9ja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
NiArMjksNyBAQAogI2RlZmluZSBMb2NrZXJfaAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTY0LDYgKzY1LDcgQEAgcHVibGljOgogCiAgICAgfkxv
Y2tlcigpCiAgICAgeworICAgICAgICBjb21waWxlckZlbmNlKCk7CiAgICAgICAgIGlmIChtX2xv
Y2thYmxlKQogICAgICAgICAgICAgbV9sb2NrYWJsZS0+dW5sb2NrKCk7CiAgICAgfQpAQCAtMTA4
LDYgKzExMCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAobV9sb2NrYWJsZSkKICAg
ICAgICAgICAgIG1fbG9ja2FibGUtPmxvY2soKTsKKyAgICAgICAgY29tcGlsZXJGZW5jZSgpOwog
ICAgIH0KICAgICAKICAgICBUKiBtX2xvY2thYmxlOwpAQCAtMTIyLDYgKzEyNSwxMiBAQCBMb2Nr
ZXI8TG9ja1R5cGU+IGhvbGRMb2NrKExvY2tUeXBlJiBsb2NrCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIExvY2tUeXBlPgorTG9ja2VyPExvY2tUeXBlPiBob2xkTG9ja0lmKExvY2tUeXBlJiBsb2Nr
LCBib29sIHByZWRpY2F0ZSkKK3sKKyAgICByZXR1cm4gTG9ja2VyPExvY2tUeXBlPihwcmVkaWNh
dGUgPyAmbG9jayA6IG51bGxwdHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4K
IExvY2tlcjxMb2NrVHlwZT4gdHJ5SG9sZExvY2soTG9ja1R5cGUmIGxvY2spCiB7CiAgICAgcmV0
dXJuIExvY2tlcjxMb2NrVHlwZT46OnRyeUxvY2sobG9jayk7CkBAIC0xMzQsNSArMTQzLDYgQEAg
dXNpbmcgV1RGOjpMb2NrZXI7CiB1c2luZyBXVEY6Ok5vTG9ja2luZ05lY2Vzc2FyeVRhZzsKIHVz
aW5nIFdURjo6Tm9Mb2NraW5nTmVjZXNzYXJ5OwogdXNpbmcgV1RGOjpob2xkTG9jazsKK3VzaW5n
IFdURjo6aG9sZExvY2tJZjsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRM
YW1iZGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2
aXNpb24gMjI1NTE2KQorKysgU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NCw2ICsxNzQsMTMgQEAgcHJpdmF0ZToKIAogLy8gVGhpcyBpcyBmb3Igd2hl
biB5b3UgYWxyZWFkeSByZWZlciB0byBhIGZ1bmN0b3IgYnkgcmVmZXJlbmNlLCBhbmQgeW91IGtu
b3cgaXRzIGxpZmV0aW1lIGlzCiAvLyBnb29kLiBUaGlzIGp1c3QgY3JlYXRlcyBhIFNjb3BlZExh
bWJkYSB0aGF0IHBvaW50cyB0byB5b3VyIGZ1bmN0b3IuCisvLworLy8gTm90ZSB0aGF0IHRoaXMg
aXMgYWx3YXlzIHdyb25nOgorLy8KKy8vIGF1dG8gcmVmID0gc2NvcGVkTGFtYmRhUmVmKFsuLi5d
ICguLi4pIHsuLi59KTsKKy8vCisvLyBCZWNhdXNlIHRoZSBzY29wZWRMYW1iZGFSZWYgd2lsbCBy
ZWZlciB0byB0aGUgbGFtYmRhIGJ5IHJlZmVyZW5jZSwgYW5kIHRoZSBsYW1iZGEgd2lsbCBkaWUg
YWZ0ZXIgdGhlCisvLyBzZW1pY29sb24uIFVzZSBzY29wZWRMYW1iZGEoKSBpbiB0aGF0IGNhc2Uu
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CiBTY29w
ZWRMYW1iZGFSZWZGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhUmVm
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRU
YXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lv
biAyMjU1MTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDkgKzU5LDExIEBAIG5hbWVzcGFjZSBXVEYgewogLy8gc3RhdGUgaW4gbWVtYmVyIGZp
ZWxkcy4gVGhpcyBjYW4gYmUgbW9yZSBuYXR1cmFsIGlmIHlvdSB3YW50IGZpbmUtZ3JhaW5lZCBj
b250cm9sIG92ZXIgd2hhdAogLy8gc3RhdGUgaXMgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9m
IHRoZSB0YXNrLgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTaGFyZWRU
YXNrOwotdGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRU
eXBlcz4KLWNsYXNzIFNoYXJlZFRhc2s8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UmVzdWx0VHlwZSAoQXJndW1l
bnRUeXBlcy4uLik+PiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNzZWRSZXN1bHRUeXBlLCB0eXBl
bmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2hhcmVkVGFzazxQYXNzZWRSZXN1bHRUeXBl
IChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hhcmVk
VGFzazxQYXNzZWRSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+IHsKIHB1YmxpYzoKKyAg
ICB0eXBlZGVmIFBhc3NlZFJlc3VsdFR5cGUgUmVzdWx0VHlwZTsKKyAgICAKICAgICBTaGFyZWRU
YXNrKCkgeyB9CiAgICAgdmlydHVhbCB+U2hhcmVkVGFzaygpIHsgfQogCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9TdGFja1Nob3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGFja1No
b3QuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFja1Nob3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBTdGFja1Nob3QgeworcHVibGljOgorICAg
IFN0YWNrU2hvdCgpIHsgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgU3RhY2tTaG90KHNpemVf
dCBzaXplKQorICAgICAgICA6IG1fc2l6ZShzaXplKQorICAgIHsKKyAgICAgICAgaWYgKHNpemUp
IHsKKyAgICAgICAgICAgIG1fYXJyYXkgPSBzdGQ6Om1ha2VfdW5pcXVlPHZvaWQqW10+KHNpemUp
OworICAgICAgICAgICAgaW50IGludFNpemUgPSBzaXplOworICAgICAgICAgICAgV1RGR2V0QmFj
a3RyYWNlKG1fYXJyYXkuZ2V0KCksICZpbnRTaXplKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0YXRpY19jYXN0PHNpemVfdD4oaW50U2l6ZSkgPD0gc2l6ZSk7CisgICAgICAgICAgICBt
X3NpemUgPSBpbnRTaXplOworICAgICAgICAgICAgaWYgKCFtX3NpemUpCisgICAgICAgICAgICAg
ICAgbV9hcnJheSA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgU3RhY2tT
aG90KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2FycmF5KGRl
bGV0ZWRWYWx1ZUFycmF5KCkpCisgICAgICAgICwgbV9zaXplKDApCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBTdGFja1Nob3QmIG9wZXJhdG9yPShjb25zdCBTdGFja1Nob3QmIG90aGVyKQorICAg
IHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHZvaWQqW10+IG5ld0FycmF5ID0gc3RkOjptYWtl
X3VuaXF1ZTx2b2lkKltdPihvdGhlci5tX3NpemUpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
b3RoZXIubV9zaXplOyBpLS07KQorICAgICAgICAgICAgbmV3QXJyYXlbaV0gPSBvdGhlci5tX2Fy
cmF5W2ldOworICAgICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgICAgIG1fYXJyYXkg
PSBXVEZNb3ZlKG5ld0FycmF5KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAK
KyAgICBTdGFja1Nob3QoY29uc3QgU3RhY2tTaG90JiBvdGhlcikKKyAgICB7CisgICAgICAgICp0
aGlzID0gb3RoZXI7CisgICAgfQorICAgIAorICAgIHZvaWQqKiBhcnJheSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXJyYXkuZ2V0KCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhIW1fYXJyYXk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RhY2tTaG90
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NpemUgIT0gb3RoZXIubV9zaXpl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IG1fc2l6ZTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fYXJyYXlbaV0gIT0gb3Ro
ZXIubV9hcnJheVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fc2l6ZTsK
KyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX3NpemU7IGktLTspCisgICAgICAg
ICAgICByZXN1bHQgXj0gUHRySGFzaDx2b2lkKj46Omhhc2gobV9hcnJheVtpXSk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zaXplICYm
IG1fYXJyYXkuZ2V0KCkgPT0gZGVsZXRlZFZhbHVlQXJyYXkoKTsKKyAgICB9CisgICAgCisgICAg
Ly8gTWFrZSBTcGVjdHJ1bTw+IGhhcHB5LgorICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFN0YWNr
U2hvdCYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRp
YyB2b2lkKiogZGVsZXRlZFZhbHVlQXJyYXkoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCoq
PihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsgfQorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjx2b2lkKltdPiBtX2FycmF5OworICAgIHNpemVfdCBtX3NpemUgeyAwIH07Cit9OworCitzdHJ1
Y3QgU3RhY2tTaG90SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3RhY2tT
aG90JiBzaG90KSB7IHJldHVybiBzaG90Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IFN0YWNrU2hvdCYgYSwgY29uc3QgU3RhY2tTaG90JiBiKSB7IHJldHVybiBhID09IGI7
IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8U3RhY2tTaG90PiB7CisgICAgdHlwZWRlZiBT
dGFja1Nob3RIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8U3RhY2tTaG90PiA6IFNpbXBs
ZUNsYXNzSGFzaFRyYWl0czxTdGFja1Nob3Q+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNrU2hvdFByb2ZpbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU3RhY2tTaG90UHJvZmlsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TdGFja1Nob3RQcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVt
Lmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2UuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTaG90
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3RhY2tTaG90UHJvZmlsZXIgeworcHVibGlj
OgorICAgIFN0YWNrU2hvdFByb2ZpbGVyKHVuc2lnbmVkIG51bUZyYW1lcywgdW5zaWduZWQgZnJh
bWVzVG9Ta2lwLCB1bnNpZ25lZCBzdGFja3NUb1JlcG9ydCkKKyAgICAgICAgOiBtX251bUZyYW1l
cyhudW1GcmFtZXMpCisgICAgICAgICwgbV9mcmFtZXNUb1NraXAoZnJhbWVzVG9Ta2lwKQorICAg
ICAgICAsIG1fc3RhY2tzVG9SZXBvcnQoc3RhY2tzVG9SZXBvcnQpCisgICAgeworICAgICAgICBU
aHJlYWQ6OmNyZWF0ZSgiU3RhY2tTaG90UHJvZmlsZXIiLCBbdGhpc10gKCkgeyBydW4oKTsgfSk7
CisgICAgfQorCisgICAgLy8gTkVWRVJfSU5MSU5FIHNvIHRoYXQgZnJhbWVzVG9Ta2lwIGlzIHBy
ZWRpY3RhYmxlLgorICAgIE5FVkVSX0lOTElORSB2b2lkIHByb2ZpbGUoKQorICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBtX3Byb2ZpbGUuYWRk
KFN0YWNrU2hvdChtX251bUZyYW1lcyArIG1fZnJhbWVzVG9Ta2lwKSk7CisgICAgICAgIG1fdG90
YWxDb3VudCsrOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOIHZvaWQgcnVu
KCkKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHNsZWVwKDFfcyk7Cisg
ICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBh
dXRvIGxpc3QgPSBtX3Byb2ZpbGUuYnVpbGRMaXN0KCk7CisgICAgICAgICAgICBkYXRhTG9nKCJc
bkhvdHRlc3Qgc3RhY2tzIGluICIsIGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIjpcbiIpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpc3Quc2l6ZSgpLCBjb3VudCA9IDA7IGktLSAmJiBj
b3VudCA8IG1fc3RhY2tzVG9SZXBvcnQ7IGNvdW50KyspIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBlbnRyeSA9IGxpc3RbaV07CisgICAgICAgICAgICAgICAgZGF0YUxvZygiXG5Ub3AgIyIsIGNv
dW50ICsgMSwgIiBzdGFjazogIiwgZW50cnkuY291bnQgKiAxMDAgLyBtX3RvdGFsQ291bnQsICIl
XG4iKTsKKyAgICAgICAgICAgICAgICBTdGFja1RyYWNlIHRyYWNlKGVudHJ5LmtleS5hcnJheSgp
ICsgbV9mcmFtZXNUb1NraXAsIGVudHJ5LmtleS5zaXplKCkgLSBtX2ZyYW1lc1RvU2tpcCk7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZyh0cmFjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBkYXRhTG9nKCJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFdvcmRMb2NrIG1f
bG9jazsKKyAgICBTcGVjdHJ1bTxTdGFja1Nob3QsIGRvdWJsZT4gbV9wcm9maWxlOworICAgIGRv
dWJsZSBtX3RvdGFsQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1GcmFtZXM7CisgICAg
dW5zaWduZWQgbV9mcmFtZXNUb1NraXA7CisgICAgdW5zaWduZWQgbV9zdGFja3NUb1JlcG9ydDsK
K307CisKKyNkZWZpbmUgU1RBQ0tfU0hPVF9QUk9GSUxFKG51bUZyYW1lcywgZnJhbWVzVG9Ta2lw
LCBzdGFja3NUb1JlcG9ydCkgZG8geyBcCisgICAgc3RhdGljIFN0YWNrU2hvdFByb2ZpbGVyKiBz
dGFja1Nob3RQcm9maWxlcjsgXAorICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGFja1Nob3RQ
cm9maWxlck9uY2VGbGFnOyBcCisgICAgc3RkOjpjYWxsX29uY2Uoc3RhY2tTaG90UHJvZmlsZXJP
bmNlRmxhZywgW10geyBzdGFja1Nob3RQcm9maWxlciA9IG5ldyBTdGFja1Nob3RQcm9maWxlcihu
dW1GcmFtZXMsIGZyYW1lc1RvU2tpcCwgc3RhY2tzVG9SZXBvcnQpOyB9KTsgXAorICAgIHN0YWNr
U2hvdFByb2ZpbGVyLT5wcm9maWxlKCk7IFwKK30gd2hpbGUgKGZhbHNlKQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTctMTIt
MDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBHQyBjb25zdHJh
aW50IHNvbHZpbmcgc2hvdWxkIGJlIHBhcmFsbGVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5MzQKKworICAgICAgICBSZXZpZXdlZCBieSBKRiBC
YXN0aWVuLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIGNoYW5nZSBpbiBiZWhh
dmlvci4gVGhpcyBjaGFuZ2UgaXMgYmVzdCB0ZXN0ZWQgdXNpbmcgRE9NLUdDLWludGVuc2l2ZQor
ICAgICAgICBiZW5jaG1hcmtzIGxpa2UgU3BlZWRvbWV0ZXIgYW5kIERyb21hZW8uCisgICAgICAg
IAorICAgICAgICBUaGlzIHBhcmFsbGVsaXplcyB0aGUgRE9NJ3Mgb3V0cHV0IGNvbnN0cmFpbnQs
IGFuZCBtYWtlcyBzb21lIHNtYWxsIGNoYW5nZXMgdG8gbWFrZSB0aGlzIG1vcmUKKyAgICAgICAg
c2NhbGFibGUuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAv
VmlzaXRpbmdUaW1lb3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0RPTUdDT3V0cHV0Q29uc3RyYWludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpET01HQ091dHB1dENvbnN0cmFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50Ojp+RE9NR0NPdXRwdXRDb25zdHJhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUdDT3V0cHV0Q29uc3RyYWludDo6ZXhlY3V0ZUltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50Ojpkb1BhcmFsbGVsV29y
a0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RE9NR0NPdXRwdXRDb25zdHJhaW50OjpmaW5pc2hQ
YXJhbGxlbFdvcmtJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0
cmFpbnQuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxk
KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpldmVu
dFRhcmdldERhdGFDb25jdXJyZW50bHkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZW5zdXJl
RXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyRXZlbnRUYXJn
ZXREYXRhKToKKwogMjAxNy0xMi0wNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFN1cHBvcnQgY29udGFpbmVyLmdldFJlZ2lzdHJhdGlvbigpIC8gZ2V0UmVnaXN0
cmF0aW9ucygpIGluc2lkZSBzZXJ2aWNlIHdvcmtlcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZp
c2lvbiAyMjU1MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMzI3LDYgKzMyNyw3IEBAIGJpbmRpbmdzL2pzL0NhY2hlZE1vZHVsZVNjcmlwdExvYWRl
ci5jcHAKIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdEZldGNoZXIuY3BwCiBiaW5kaW5ncy9qcy9D
YWxsVHJhY2VyLmNwcAogYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCitiaW5kaW5ncy9qcy9ET01H
Q091dHB1dENvbnN0cmFpbnQuY3BwCiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCiBi
aW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL2hlYXAvU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1NpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzIEBACisjcHJhZ21hIG9uY2UK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5oPgorCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Zpc2l0aW5nVGltZW91
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAv
VmlzaXRpbmdUaW1lb3V0LmgJKHJldmlzaW9uIDIyNTUxNikKKysrIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL2hlYXAvVmlzaXRpbmdUaW1lb3V0LmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSwyICswLDAgQEAKLSNwcmFnbWEgb25jZQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Zpc2l0
aW5nVGltZW91dC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEs
NiArMzUxLDcgQEAKIAkJMEY4NzE2NzAxQzg2OUQ4MzAwNEZGMERFIC8qIExlbmd0aFBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTY2RTFD
ODY5RDgzMDA0RkYwREUgLyogTGVuZ3RoUG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjhCNDU3MjFEQzNGQkEzMDA0NDNDM0YgLyogSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4QjQ1NzExREMzRkJBMzAwNDQzQzNGIC8qIEludGVyc2VjdGlv
bk9ic2VydmVyQ2FsbGJhY2suaCAqLzsgfTsKIAkJMEY4QjQ1NzYxREM0MURCQTAwNDQzQzNGIC8q
IEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4QjQ1NzQxREM0MURCQTAwNDQzQzNGIC8qIEpTSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oICovOyB9OworCQkwRjlEQUEwRjFGRDFDNjZBMDA3
OUM1QjIgLyogRE9NR0NPdXRwdXRDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEQUEwRTFGRDFDNjY0MDA3OUM1QjIgLyogRE9NR0NP
dXRwdXRDb25zdHJhaW50LmggKi87IH07CiAJCTBGQTI0RDdBMTYyREY5MTkwMEEzRjRDMCAvKiBH
cmFwaGljc0xheWVyVXBkYXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZBMjRENzgxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRh
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZCNjI1MkYxOERFMUIxNTAwQTA3QzA1IC8qIEdlb21ldHJ5VXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI2MjUyRDE4REUxQjE1MDBB
MDdDMDUgLyogR2VvbWV0cnlVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI4ODkwQTE2N0QyRkExMDAxMENEQTUgLyogU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjg4OTA4MTY3RDJGQTEwMDEwQ0RBNSAvKiBTY3JvbGxpbmdUcmVlU3RpY2t5
Tm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC01NDUwLDYgKzU0NTEsOCBAQAogCQkwRjhCNDU3NDFEQzQxREJBMDA0NDNDM0YgLyogSlNJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjk0QTM5NTFFRjFCMTA1MDBGQkFGRkIgLyogSlNET01RdWFkQ3VzdG9tLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NUXVhZEN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0
QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGOURBQTBDMUZEMUM2NjMwMDc5QzVCMiAvKiBET01HQ091dHB1
dENvbnN0cmFpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9N
R0NPdXRwdXRDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5
REFBMEUxRkQxQzY2NDAwNzlDNUIyIC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01HQ091dHB1dENvbnN0cmFpbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMDg1MkIxRTZGQjU1QTAwOTc1RkREIC8qIENTU1By
b3BlcnRpZXMuanNvbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuanNvbjsgcGF0aCA9IENTU1Byb3BlcnRpZXMuanNvbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMjRENzcxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5
ZXJVcGRhdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBo
aWNzTGF5ZXJVcGRhdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMjRE
NzgxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMzAwMiw2ICsyMzAwNSw4IEBACiAJCQkJOTUyMDc2MDIxRjI2
NzVGOTAwN0QyQUFCIC8qIENhbGxUcmFjZXJUeXBlcy5oICovLAogCQkJCTBGNjBGMzI5MURGQkIx
MDQwMDQxNkQ2QyAvKiBDb21tb25WTS5jcHAgKi8sCiAJCQkJMEY2MEYzMkExREZCQjEwNDAwNDE2
RDZDIC8qIENvbW1vblZNLmggKi8sCisJCQkJMEY5REFBMEMxRkQxQzY2MzAwNzlDNUIyIC8qIERP
TUdDT3V0cHV0Q29uc3RyYWludC5jcHAgKi8sCisJCQkJMEY5REFBMEUxRkQxQzY2NDAwNzlDNUIy
IC8qIERPTUdDT3V0cHV0Q29uc3RyYWludC5oICovLAogCQkJCTdDNTE2QUQyMUYzNTI1MjAwMDM0
QjZCRiAvKiBET01Qcm9taXNlUHJveHkuaCAqLywKIAkJCQlCQzUzREE0NzExNDMxMzREMDAwRDgx
N0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCAqLywKIAkJCQlCQzUzREEyRDExNDMxMjFFMDAwRDgx
N0UgLyogRE9NV3JhcHBlcldvcmxkLmggKi8sCkBAIC0yNzU3MCw2ICsyNzU3NSw3IEBACiAJCQkJ
NTE4RjUwMDQxOTRDQUMzQTAwODFCQUFFIC8qIEpTR2FtZXBhZEJ1dHRvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU4MERBNjQwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFODBEQTY2MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb3Bvc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEQUEwRjFGRDFDNjZBMDA3OUM1QjIgLyogRE9NR0NP
dXRwdXRDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRBN0MxRjE4ODMyMkZDMDBD
OTU0QjUgLyogSlNHZXN0dXJlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0ODJCNzUyMTE5
OENCNkIwMEJGQjAwNSAvKiBKU0hhc2hDaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM5NEQxNEYwQzI3NUM2ODAwNkJDNjE3IC8qIEpTSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUdDT3V0cHV0Q29u
c3RyYWludC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NR0NPdXRwdXRDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJET01HQ091dHB1dENvbnN0cmFpbnQuaCIKKworI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+
CisjaW5jbHVkZSA8aGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVh
cC9NYXJrZWRCbG9ja0lubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5saW5lcy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOworCitET01HQ091dHB1dENvbnN0cmFpbnQ6OkRPTUdDT3V0cHV0Q29u
c3RyYWludChWTSYgdm0sIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhKQorICAgIDogTWFya2lu
Z0NvbnN0cmFpbnQoIkRvbW8iLCAiRE9NIE91dHB1dCIsIENvbnN0cmFpbnRWb2xhdGlsaXR5OjpT
ZWxkb21HcmV5ZWQsIENvbnN0cmFpbnRDb25jdXJyZW5jeTo6Q29uY3VycmVudCwgQ29uc3RyYWlu
dFBhcmFsbGVsaXNtOjpQYXJhbGxlbCkKKyAgICAsIG1fdm0odm0pCisgICAgLCBtX2NsaWVudERh
dGEoY2xpZW50RGF0YSkKKyAgICAsIG1fbGFzdEV4ZWN1dGlvblZlcnNpb24odm0uaGVhcC5tdXRh
dG9yRXhlY3V0aW9uVmVyc2lvbigpKQoreworfQorCitET01HQ091dHB1dENvbnN0cmFpbnQ6On5E
T01HQ091dHB1dENvbnN0cmFpbnQoKQoreworfQorCitDb25zdHJhaW50UGFyYWxsZWxpc20gRE9N
R0NPdXRwdXRDb25zdHJhaW50OjpleGVjdXRlSW1wbChTbG90VmlzaXRvciYpCit7CisgICAgSGVh
cCYgaGVhcCA9IG1fdm0uaGVhcDsKKyAgICAKKyAgICBpZiAoaGVhcC5tdXRhdG9yRXhlY3V0aW9u
VmVyc2lvbigpID09IG1fbGFzdEV4ZWN1dGlvblZlcnNpb24pCisgICAgICAgIHJldHVybiBDb25z
dHJhaW50UGFyYWxsZWxpc206OlNlcXVlbnRpYWw7CisgICAgCisgICAgbV9sYXN0RXhlY3V0aW9u
VmVyc2lvbiA9IGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKTsKKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVChtX3Rhc2tzLmlzRW1wdHkoKSk7CisgICAgbV9jbGllbnREYXRhLmZvckVhY2hP
dXRwdXRDb25zdHJhaW50U3BhY2UoCisgICAgICAgIFsmXSAoU3Vic3BhY2UmIHN1YnNwYWNlKSB7
CisgICAgICAgICAgICBhdXRvIGZ1bmMgPSBbXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEhlYXBD
ZWxsKiBoZWFwQ2VsbCwgSGVhcENlbGw6OktpbmQpIHsKKyAgICAgICAgICAgICAgICBKU0NlbGwq
IGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7CisgICAgICAgICAgICAgICAg
Y2VsbC0+bWV0aG9kVGFibGUodmlzaXRvci52bSgpKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhj
ZWxsLCB2aXNpdG9yKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fdGFza3MuYXBwZW5kKHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsSW5QYXJhbGxlbChmdW5j
KSk7CisgICAgICAgIH0pOworICAgIAorICAgIHJldHVybiBDb25zdHJhaW50UGFyYWxsZWxpc206
OlBhcmFsbGVsOworfQorICAgICAgICAKK3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50Ojpkb1Bh
cmFsbGVsV29ya0ltcGwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChhdXRvJiB0
YXNrIDogbV90YXNrcykKKyAgICAgICAgdGFzay0+cnVuKHZpc2l0b3IpOworfQorICAgICAgICAK
K3ZvaWQgRE9NR0NPdXRwdXRDb25zdHJhaW50OjpmaW5pc2hQYXJhbGxlbFdvcmtJbXBsKFNsb3RW
aXNpdG9yJikKK3sKKyAgICBtX3Rhc2tzLmNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25z
dHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NP
dXRwdXRDb25zdHJhaW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPGhlYXAvTWFya2luZ0NvbnN0cmFpbnQuaD4KKyNpbmNsdWRl
IDx3dGYvU2hhcmVkVGFzay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBKU1ZNQ2xpZW50RGF0YTsKKworY2xhc3MgRE9NR0NPdXRwdXRD
b25zdHJhaW50IDogcHVibGljIEpTQzo6TWFya2luZ0NvbnN0cmFpbnQgeworcHVibGljOgorICAg
IERPTUdDT3V0cHV0Q29uc3RyYWludChKU0M6OlZNJiwgSlNWTUNsaWVudERhdGEmKTsKKyAgICB+
RE9NR0NPdXRwdXRDb25zdHJhaW50KCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNDOjpDb25z
dHJhaW50UGFyYWxsZWxpc20gZXhlY3V0ZUltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92ZXJyaWRl
OworICAgIHZvaWQgZG9QYXJhbGxlbFdvcmtJbXBsKEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGZpbmlzaFBhcmFsbGVsV29ya0ltcGwoSlNDOjpTbG90VmlzaXRvciYpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIEpTQzo6Vk0mIG1fdm07CisgICAgSlNWTUNsaWVudERh
dGEmIG1fY2xpZW50RGF0YTsKKyAgICB1aW50NjRfdCBtX2xhc3RFeGVjdXRpb25WZXJzaW9uOwor
ICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNsb3RWaXNpdG9yJik+Pj4gbV90YXNr
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyMjU1
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogCisjaW5jbHVkZSAiRE9NR0NPdXRw
dXRDb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8aGVh
cC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPGhlYXAvSGVh
cElubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL01hcmtpbmdDb25zdHJhaW50Lmg+Ci0jaW5jbHVk
ZSA8aGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9NYXJrZWRC
bG9ja0lubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5saW5lcy5oPgotI2luY2x1
ZGUgPGhlYXAvVmlzaXRpbmdUaW1lb3V0Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KQEAg
LTc0LDQzICs3Miw3IEBAIHZvaWQgSlNWTUNsaWVudERhdGE6OmluaXROb3JtYWxXb3JsZChWTSoK
ICAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9IG5ldyBKU1ZNQ2xpZW50RGF0YSgqdm0p
OwogICAgIHZtLT5jbGllbnREYXRhID0gY2xpZW50RGF0YTsgLy8gflZNIGRlbGV0ZXMgdGhpcyBw
b2ludGVyLgogICAgIAotICAgIGF1dG8gY29uc3RyYWludCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFy
a2luZ0NvbnN0cmFpbnQ+KAotICAgICAgICAiV2NvYyIsICJXZWJDb3JlIE91dHB1dCBDb25zdHJh
aW50cyIsCi0gICAgICAgIFt2bSwgY2xpZW50RGF0YSwgbGFzdEV4ZWN1dGlvblZlcnNpb24gPSB2
bS0+aGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpXQotICAgICAgICAoU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGluZ1RpbWVvdXQmKSBtdXRhYmxlIHsKLSAgICAgICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS0+aGVhcDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGhlYXAubXV0YXRvckV4ZWN1dGlvblZlcnNpb24oKSA9PSBsYXN0RXhlY3V0aW9uVmVyc2lvbikK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxhc3RF
eGVjdXRpb25WZXJzaW9uID0gaGVhcC5tdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpOwotCi0gICAg
ICAgICAgICAvLyBXZSBoYXZlIHRvIG1hbmFnZSB0aGUgdmlzaXQgY291bnQgaGVyZSBvdXJzZWx2
ZXMuIFdlIG5lZWQgdG8ga25vdyB0aGF0IGlmIHRoaXMgYWRkcwotICAgICAgICAgICAgLy8gb3Bh
cXVlIHJvb3RzIHRoZW4gd2UgY2Fubm90IGRlY2xhcmUgdGVybWluYXRpb24geWV0LiBUaGUgd2F5
IHdlIHNpZ25hbCB0aGlzIHRvIHRoZQotICAgICAgICAgICAgLy8gY29uc3RyYWludCBzb2x2ZXIg
aXMgYnkgYWRkaW5nIHRvIHRoZSB2aXNpdCBjb3VudC4KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc2l6ZV90IG51bU9wYXF1ZVJvb3RzQmVmb3JlID0gaGVhcC5udW1PcGFxdWVSb290cygpOwot
Ci0gICAgICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHBhcmFsbGVsIQotICAgICAgICAgICAg
dW5zaWduZWQgbnVtUmV2aXNpdGVkID0gMDsKLSAgICAgICAgICAgIGNsaWVudERhdGEtPmZvckVh
Y2hPdXRwdXRDb25zdHJhaW50U3BhY2UoCi0gICAgICAgICAgICAgICAgWyZdIChTdWJzcGFjZSYg
c3Vic3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgc3Vic3BhY2UuZm9yRWFjaE1hcmtlZENl
bGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBoZWFwQ2VsbCwgSGVh
cENlbGw6OktpbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwg
PSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwQ2VsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2VsbC0+bWV0aG9kVGFibGUoKnZtKS0+dmlzaXRPdXRwdXRDb25zdHJhaW50cyhjZWxs
LCBzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtUmV2aXNpdGVk
Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgICAgIGRhdGFMb2co
IigiLCBudW1SZXZpc2l0ZWQsICIpIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3RW
aXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xv
dFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KGhlYXAubnVtT3BhcXVlUm9vdHMoKSAtIG51bU9wYXF1
ZVJvb3RzQmVmb3JlKTsKLSAgICAgICAgfSwKLSAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6
OlNlbGRvbUdyZXllZCk7Ci0gICAgdm0tPmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoV1RGTW92
ZShjb25zdHJhaW50KSk7CisgICAgdm0tPmhlYXAuYWRkTWFya2luZ0NvbnN0cmFpbnQoc3RkOjpt
YWtlX3VuaXF1ZTxET01HQ091dHB1dENvbnN0cmFpbnQ+KCp2bSwgKmNsaWVudERhdGEpKTsKICAg
ICAgICAgCiAgICAgY2xpZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6
Y3JlYXRlKCp2bSwgdHJ1ZSk7CiAgICAgdm0tPm1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9w
dFJlZihuZXcgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkocmV2aXNpb24gMjI1NTE2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1
ZGUgIkJlZm9yZUxvYWRFdmVudC5oIgogI2luY2x1ZGUgIkNoaWxkTGlzdE11dGF0aW9uU2NvcGUu
aCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUFuY2VzdG9y
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlQWxnb3JpdGhtcy5oIgogI2luY2x1
ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgpAQCAtMjE2Miw3ICsyMTYzLDE0IEBAIEV2ZW50
VGFyZ2V0RGF0YSogTm9kZTo6ZXZlbnRUYXJnZXREYXRhKCkKIAogRXZlbnRUYXJnZXREYXRhKiBO
b2RlOjpldmVudFRhcmdldERhdGFDb25jdXJyZW50bHkoKQogewotICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2soc19ldmVudFRhcmdldERhdGFNYXBMb2NrKTsKKyAgICAvLyBOb3QgaG9sZGluZyB0
aGUgbG9jayB3aGVuIHRoZSB3b3JsZCBpcyBzdG9wcGVkIGFjY2VsZXJhdGVzIHBhcmFsbGVsIGNv
bnN0cmFpbnQgc29sdmluZywgd2hpY2gKKyAgICAvLyBjYWxscyB0aGlzIGZ1bmN0aW9uIGZyb20g
bWFueSB0aHJlYWRzLiBQYXJhbGxlbCBjb25zdHJhaW50IHNvbHZpbmcgY2FuIGhhcHBlbiB3aXRo
IHRoZSB3b3JsZAorICAgIC8vIHJ1bm5pbmcgb3Igc3RvcHBlZCwgYnV0IGlmIHdlIGRvIGl0IHdp
dGggYSBydW5uaW5nIHdvcmxkLCB0aGVuIHdlJ3JlIHVzdWFsbHkgbWl4aW5nIGNvbnN0cmFpbnQK
KyAgICAvLyBzb2x2aW5nIHdpdGggb3RoZXIgd29yay4gVGhlcmVmb3JlLCB0aGUgbW9zdCBsaWtl
bHkgdGltZSBmb3IgY29udGVudGlvbiBvbiB0aGlzIGxvY2sgaXMgd2hlbiB0aGUKKyAgICAvLyB3
b3JsZCBpcyBzdG9wcGVkLiBXZSBkb24ndCBoYXZlIHRvIGhvbGQgdGhlIGxvY2sgd2hlbiB0aGUg
d29ybGQgaXMgc3RvcHBlZCwgYmVjYXVzZSBhIHN0b3BwZWQgd29ybGQKKyAgICAvLyBtZWFucyB0
aGF0IHdlIHdpbGwgbmV2ZXIgbXV0YXRlIHRoZSBldmVudCB0YXJnZXQgZGF0YSBtYXAuCisgICAg
SlNDOjpWTSogdm0gPSBjb21tb25WTU9yTnVsbCgpOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2tJZihzX2V2ZW50VGFyZ2V0RGF0YU1hcExvY2ssIHZtICYmIHZtLT5oZWFwLndvcmxkSXNSdW5u
aW5nKCkpOwogICAgIHJldHVybiBoYXNFdmVudFRhcmdldERhdGEoKSA/IGV2ZW50VGFyZ2V0RGF0
YU1hcCgpLmdldCh0aGlzKSA6IG51bGxwdHI7CiB9CiAKQEAgLTIxNzEsNiArMjE3OSw5IEBAIEV2
ZW50VGFyZ2V0RGF0YSYgTm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXQKICAgICBpZiAoaGFzRXZlbnRU
YXJnZXREYXRhKCkpCiAgICAgICAgIHJldHVybiAqZXZlbnRUYXJnZXREYXRhTWFwKCkuZ2V0KHRo
aXMpOwogCisgICAgSlNDOjpWTSogdm0gPSBjb21tb25WTU9yTnVsbCgpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCF2bSB8fCB2bS0+aGVhcC53b3JsZElzUnVubmluZygpKTsKKwogICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soc19ldmVudFRhcmdldERhdGFNYXBMb2NrKTsKICAgICBzZXRIYXNFdmVu
dFRhcmdldERhdGEodHJ1ZSk7CiAgICAgcmV0dXJuICpldmVudFRhcmdldERhdGFNYXAoKS5hZGQo
dGhpcywgc3RkOjptYWtlX3VuaXF1ZTxFdmVudFRhcmdldERhdGE+KCkpLml0ZXJhdG9yLT52YWx1
ZTsKQEAgLTIxNzgsNiArMjE4OSw4IEBAIEV2ZW50VGFyZ2V0RGF0YSYgTm9kZTo6ZW5zdXJlRXZl
bnRUYXJnZXQKIAogdm9pZCBOb2RlOjpjbGVhckV2ZW50VGFyZ2V0RGF0YSgpCiB7CisgICAgSlND
OjpWTSogdm0gPSBjb21tb25WTU9yTnVsbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bSB8fCB2
bS0+aGVhcC53b3JsZElzUnVubmluZygpKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHNf
ZXZlbnRUYXJnZXREYXRhTWFwTG9jayk7CiAgICAgZXZlbnRUYXJnZXREYXRhTWFwKCkucmVtb3Zl
KHRoaXMpOwogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1NTE2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMTItMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBHQyBjb25zdHJhaW50IHNvbHZpbmcgc2hvdWxkIGJlIHBhcmFs
bGVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5
MzQKKworICAgICAgICBSZXZpZXdlZCBieSBKRiBCYXN0aWVuLgorCisgICAgICAgICogU2NyaXB0
cy9ydW4tanNjLWJlbmNobWFya3M6IEFkZCBzcGxheS1sYXRlbmN5IHRlc3QsIHNpbmNlIHRoaXMg
Y2hhbmdlIG5lZWRlZCB0byBiZSBjYXJlZnVsbHkgdmFsaWRhdGVkIHdpdGggdGhhdCBiZW5jaG1h
cmsuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNldC5jcHA6
IEFkZGVkLiBUaGlzIGhhcyB1bml0IHRlc3RzIG9mIHRoZSBuZXcgY29uY3VycmVudCBkYXRhIHN0
cnVjdHVyZS4gVGhlIHRlc3RzIGZvY3VzIG9uIGNvcnJlY3RuZXNzIHVuZGVyIHNlcmlhbCBleGVj
dXRpb24sIHdoaWNoIGFwcGVhcnMgdG8gYmUgZW5vdWdoIGZvciBub3cgKGl0J3Mgc28gZWFzeSB0
byBjYXRjaCBhIGNvbmN1cnJlbmN5IGJ1ZyBieSBqdXN0IHJ1bm5pbmcgdGhlIEdDKS4KKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE3LTEyLTA0ICBOYW4gV2FuZyAgPG5fd2Fu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IEFPTTogSW1wbGVtZW50IHJlbGF0aW9uIHR5cGUg
cHJvcGVydGllcwpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MJKHJldmlzaW9uIDIyNTUx
NikKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw4IEBAIExPTkdTUElERVJfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCAK
IFY4X1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU3VuU3BpZGVyIiArICJ0ZXN0cyIg
KyAidjgtdjYiCiBUQUlMQkVOQ0hfUEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJUYWls
QmVuY2g5MDAwIgogTUlDUk9CRU5DSE1BUktTX1BBVEggPSBPUEVOU09VUkNFX1BBVEggKyAiSlNU
ZXN0cyIgKyAibWljcm9iZW5jaG1hcmtzIgotT0NUQU5FX1dSQVBQRVJfUEFUSCA9IFBFUkZPUk1B
TkNFVEVTVFNfUEFUSCArICJPY3RhbmUiICsgIndyYXBwZXJzIgorT1BFTlNPVVJDRV9PQ1RBTkVf
UEFUSCA9IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJPY3RhbmUiCitPQ1RBTkVfV1JBUFBFUl9Q
QVRIID0gT1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCArICJ3cmFwcGVycyIKIEpTQkVOQ0hfUEFUSCA9
IFBFUkZPUk1BTkNFVEVTVFNfUEFUSCArICJKU0JlbmNoIgogU0lYU1BFRURfUEFUSCA9IFBFUkZP
Uk1BTkNFVEVTVFNfUEFUSCArICJTaXhTcGVlZCIgKyAidGVzdHMiCiBTSVhTUEVFRF9XUkFQUEVS
X1BBVEggPSBQRVJGT1JNQU5DRVRFU1RTX1BBVEggKyAiU2l4U3BlZWQiICsgIndyYXBwZXJzIgpA
QCAtODQxLDYgKzg0MiwyMCBAQCBjbGFzcyBTaW5nbGVGaWxlVGltZWRCZW5jaG1hcmtQYXJhbWV0
ZXJzCiAgIGVuZAogZW5kCiAKKyMgQmVuY2htYXJrIHRoYXQgY29uc2lzdHMgb2YgYSBzaW5nbGUg
ZmlsZSBhbmQgbXVzdCBiZSBsb2FkZWQgaW4gaXRzIG93biBnbG9iYWwgb2JqZWN0IGVhY2gKKyMg
dGltZSAoaS5lLiBydW4oKSksIGJ1dCByZXR1cm5zIGl0cyByZXN1bHQgaW4gYSBjdXN0b20gd2F5
LgorY2xhc3MgU2luZ2xlRmlsZUN1c3RvbVRpbWVkQmVuY2htYXJrUGFyYW1ldGVycworICBhdHRy
X3JlYWRlciA6YmVuY2hQYXRoCisgIAorICBkZWYgaW5pdGlhbGl6ZShiZW5jaFBhdGgpCisgICAg
QGJlbmNoUGF0aCA9IGJlbmNoUGF0aAorICBlbmQKKyAgCisgIGRlZiBraW5kCisgICAgOnNpbmds
ZUZpbGVDdXN0b21UaW1lZEJlbmNobWFyaworICBlbmQKK2VuZAorCiAjIEJlbmNobWFyayB0aGF0
IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGRhdGEgZmlsZXMgdGhhdCBzaG91bGQgYmUgbG9hZGVk
IGdsb2JhbGx5LCBmb2xsb3dlZAogIyBieSBhIGNvbW1hbmQgdG8gcnVuIHRoZSBiZW5jaG1hcmsu
CiBjbGFzcyBNdWx0aUZpbGVUaW1lZEJlbmNobWFya1BhcmFtZXRlcnMKQEAgLTk2NSw2ICs5ODAs
MjUgQEAgZGVmIGVtaXRCZW5jaFJ1bkNvZGVGaWxlKG5hbWUsIHBsYW4sIGJlbgogICAgICAgICBk
b3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgIGlmIChfX2JlbmNoZXJfaW5kZXggPj0gI3t3YXJt
dXB9KSBwcmludChcIiN7bmFtZX06ICN7cGxhbi52bX06ICN7cGxhbi5pdGVyYXRpb259OiBcIiAr
IChfX2JlbmNoZXJfaW5kZXggLSAje3dhcm11cH0pICsgXCI6IFRpbWU6IFwiKygoX19hZnRlci1f
X2JlZm9yZSkvX19ydW5zKSk7IikKICAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0i
KQogICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiI3tiZW5jaFBhcmFtcy50ZWFyRG93
bkNvbW1hbmQuanN9IikKKyAgICAgIGVsc2lmIGJlbmNoUGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZp
bGVDdXN0b21UaW1lZEJlbmNobWFyaworICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwi
ZnVuY3Rpb24gX19iZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hhdCkgeyIpCisgICAgICAgIGRvdWJs
ZVB1dHMoJHN0ZGVycixmaWxlLCIgICB2YXIgX19iZW5jaGVyX3Jlc3VsdCA9IHt2YWx1ZTogbnVs
bH07IikKKyAgICAgICAgJHJlcnVuLnRpbWVzIHsKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRl
cnIsZmlsZSwiICAgcnVuKF9fYmVuY2hlcl93aGF0LCBfX2JlbmNoZXJfcmVzdWx0KTsiKQorICAg
ICAgICB9CisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxlLCIgICBpZiAoX19iZW5jaGVy
X3Jlc3VsdC52YWx1ZSA9PSBudWxsKSIpCisgICAgICAgIGRvdWJsZVB1dHMoJHN0ZGVycixmaWxl
LCIgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOdWxsIHJlc3VsdFwiKTsiKQorICAgICAgICBkb3Vi
bGVQdXRzKCRzdGRlcnIsZmlsZSwiICAgcmV0dXJuIF9fYmVuY2hlcl9yZXN1bHQudmFsdWU7IikK
KyAgICAgICAgZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsIn0iKQorICAgICAgICAkd2FybXVwLnRp
bWVzIHsKKyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwiX19iZW5jaGVyX3J1bigj
e2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5pbnNwZWN0fSkiKQorICAgICAgICAgIGRvdWJsZVB1dHMo
JHN0ZGVycixmaWxlLCJnYygpOyIpIHVubGVzcyBwbGFuLnZtLnNob3VsZE1lYXN1cmVHQworICAg
ICAgICB9CisgICAgICAgICRpbm5lci50aW1lcyB7CisgICAgICAgICAgfCBpbm5lckluZGV4IHwK
KyAgICAgICAgICBkb3VibGVQdXRzKCRzdGRlcnIsZmlsZSwicHJpbnQoXCIje25hbWV9OiAje3Bs
YW4udm19OiAje3BsYW4uaXRlcmF0aW9ufTogI3tpbm5lckluZGV4fTogVGltZTogXCIrX19iZW5j
aGVyX3J1bigje2JlbmNoUGFyYW1zLmJlbmNoUGF0aC5pbnNwZWN0fSkpOyIpCisgICAgICAgICAg
ZG91YmxlUHV0cygkc3RkZXJyLGZpbGUsImdjKCk7IikgdW5sZXNzIHBsYW4udm0uc2hvdWxkTWVh
c3VyZUdDCisgICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgICAgcmFpc2UgdW5sZXNzIGJlbmNo
UGFyYW1zLmtpbmQgPT0gOnNpbmdsZUZpbGVUaW1lZEJlbmNobWFyawogICAgICAgICBkb3VibGVQ
dXRzKCRzdGRlcnIsZmlsZSwiZnVuY3Rpb24gX19iZW5jaGVyX3J1bihfX2JlbmNoZXJfd2hhdCkg
eyIpCkBAIC0xNTk0LDYgKzE2MjgsMTkgQEAgY2xhc3MgT2N0YW5lQmVuY2htYXJrCiAgIGVuZAog
ZW5kCiAKK2NsYXNzIEN1c3RvbVRpbWVkQmVuY2htYXJrCisgIGluY2x1ZGUgQmVuY2htYXJrCisg
IAorICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBmdWxsUGF0aCkKKyAgICBAbmFtZSA9IG5hbWUKKyAg
ICBAZnVsbFBhdGggPSBmdWxsUGF0aAorICBlbmQKKyAgCisgIGRlZiBlbWl0UnVuQ29kZShwbGFu
KQorICAgIGVtaXRCZW5jaFJ1bkNvZGUoZnVsbG5hbWUsIHBsYW4sIFNpbmdsZUZpbGVDdXN0b21U
aW1lZEJlbmNobWFya1BhcmFtZXRlcnMubmV3KGVuc3VyZUZpbGUoIkN1c3RvbVRpbWVkLSN7QG5h
bWV9IiwgQGZ1bGxQYXRoKSkpCisgIGVuZAorZW5kCisKIGNsYXNzIEtyYWtlbkJlbmNobWFyawog
ICBpbmNsdWRlIEJlbmNobWFyawogICAKQEAgLTMwMTAsNiArMzA1Nyw3IEBAIGJlZ2luCiAgICAg
fCBhcmdzIHwKICAgICBPQ1RBTkUuYWRkIE9jdGFuZUJlbmNobWFyay5uZXcoKmFyZ3MpCiAgIH0K
KyAgT0NUQU5FLmFkZCBDdXN0b21UaW1lZEJlbmNobWFyay5uZXcoInNwbGF5LWxhdGVuY3kiLCAo
T1BFTlNPVVJDRV9PQ1RBTkVfUEFUSCArICJzcGxheS5qcyIpLnRvX3MpCiAKICAgS1JBS0VOID0g
QmVuY2htYXJrU3VpdGUubmV3KCJLcmFrZW4iLCA6YXJpdGhtZXRpY01lYW4sIC0xKQogICBbImFp
LWFzdGFyIiwgImF1ZGlvLWJlYXQtZGV0ZWN0aW9uIiwgImF1ZGlvLWRmdCIsICJhdWRpby1mZnQi
LApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjU1MTYpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05
Myw2ICs5Myw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL0NTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0No
ZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvQ3Jvc3NUaHJlYWRUYXNrLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dURi9EYXRlTWF0aC5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MjU1MTYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCQkwRjEzOUU3
ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1
OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICovOyB9OwogCQkwRjEzOUU3OTFBNDI0
NTcwMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAv
KiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICovOyB9OwogCQkwRjJDMjBCODFEQ0Q1NDUwMDA1
NDJEOUUgLyogVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJEOUUgLyogVGltZS5jcHAgKi87IH07CisJCTBG
MzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1QjFGQ0UxNzky
MDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovOyB9OwogCQkwRjNCOTRBNzFB
NzcyNjc0MDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjk0QTUxQTc3MjY2QzAw
REUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSAqLzsgfTsKIAkJMEY0RkZB
OUUxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RkZBOUQxRUQzQUE4
NTAwRjcxMTFGIC8qIFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tICovOyB9OwogCQkwRjU2
NTFGNzFGQ0U0RERDMDAzMTBGQkMgLyogTm9IaXN0b3J5SXRlbVNjcm9sbFRvRnJhZ21lbnQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU2NTFGNjFG
Q0U0RERCMDAzMTBGQkMgLyogTm9IaXN0b3J5SXRlbVNjcm9sbFRvRnJhZ21lbnQubW0gKi87IH07
CkBAIC0xMDc1LDYgKzEwNzYsNyBAQAogCQkwRjEzOUU3NTFBNDIzQTUzMDBGNTkwRjUgLyogV2Vh
a09iakNQdHIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWFr
T2JqQ1B0ci5tbTsgcGF0aCA9IGNvY29hL1dlYWtPYmpDUHRyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjE3QkJENDE1QUY2QzREMDA3QUI3NTMgLyogV2ViQ29yZVN0YXRpc3Rp
Y3NXaXRoTm9XZWJQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYkNvcmVTdGF0aXN0aWNzV2l0aE5vV2ViUHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRpbWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjMwQ0I1QjFGQ0UxNzkyMDA0QjUzMjMgLyogQ29uY3VycmVudFB0
ckhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3Vy
cmVudFB0ckhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCOTRB
NTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3RXZhbHVhdGVKYXZh
U2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGRkE5RDFFRDNBQTg1
MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTbmFwc2hvdFZpYVJlbmRlckluQ29udGV4dC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RkZBQTAxRUQzRDBERTAwRjcxMTFGIC8q
IEltYWdlSU8uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBJbWFnZUlPLmZyYW1ld29yazsg
cGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSW1hZ2VJTy5mcmFtZXdvcms7IHNvdXJj
ZVRyZWUgPSBTREtST09UOyB9OwpAQCAtMjYwMCw2ICsyNjAyLDcgQEAKIAkJCQkyNkYxQjQ0MjE1
Q0E0MzRGMDBEMUU0QkYgLyogQXRvbWljU3RyaW5nLmNwcCAqLywKIAkJCQlFNDAwMTkzMDFBQ0U5
QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIuY3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgw
MDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAorCQkJCTBGMzBD
QjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCiAJCQkJ
MEZFQUUzNjcxQjdEMTlDQjAwQ0UxN0YyIC8qIENvbmRpdGlvbi5jcHAgKi8sCiAJCQkJNTE3MTRF
QjkxRDA4NzQxNjAwNDcyM0M0IC8qIENyb3NzVGhyZWFkVGFzay5jcHAgKi8sCiAJCQkJMjZBMkM3
MkUxNUUyRTczQzAwNUIxQTE0IC8qIENTdHJpbmcuY3BwICovLApAQCAtMzE4OSw2ICszMTkyLDcg
QEAKIAkJCQk3QzgzREVGNjFEMEE1OTBDMDBGRUJDRjMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3QzgzREVGRTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQdHIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDU0RjMxRjMzOEMzNjAwQTk3QUE3IC8qIE5ldmVyRGVz
dHJveWVkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAv
KiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMTFE
MEE1OTBDMDBGRUJDRjMgLyogT3B0aW9uYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3N0JB
QTMxRDlBRkZGQzAwNUZDNTY4IC8qIE9wdGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMgLyogT1NPYmplY3RQdHIuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25jdXJyZW50UHRySGFzaFNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uY3Vy
cmVudFB0ckhhc2hTZXQuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0NvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3
dGYvQ29uY3VycmVudFB0ckhhc2hTZXQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCituYW1lc3BhY2UgeworCisvLyBgY29tbWFuZHNgIGlz
IGEgc3RyaW5nIHRoYXQgdGVsbHMgdGhpcyB0aGluZyB3aGF0IHRvIGRvLiBJdCBoYXMgdG8gaGF2
ZSBhbiBldmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzLgorLy8gVGhlIGNoYXJhY3RlciBwYWlycyBh
cmUgY29tbWFuZHMuIENvbW1hbmRzOgorLy8KKy8vICt4ICAgICBBZGRzICd4JyB0byB0aGUgc2V0
IChjYXN0cyAneCcgdG8gYSB2b2lkKikgYW5kIGFzc2VydHMgdGhhdCBpdCdzIG5ldy4KKy8vICF4
ICAgICBBZGRzICd4JyB0byB0aGUgc2V0IGFuZCBhc3NlcnRzIHRoYXQgaXQgd2FzIHRoZXJlIGFs
cmVhZHkuCisvLyA9eCAgICAgQXNzZXJ0cyB0aGF0ICd4JyBpcyBpbiB0aGUgc2V0CisvLyAteCAg
ICAgQXNzZXJ0cyB0aGF0ICd4JyBpcyBub3QgaW4gdGhlIHNldAordm9pZCBkb1Rlc3QoY29uc3Qg
Y2hhciogY29tbWFuZHMpCit7CisgICAgQ29uY3VycmVudFB0ckhhc2hTZXQgc2V0OworICAgIGZv
ciAoY29uc3QgY2hhciogY29tbWFuZCA9IGNvbW1hbmRzOyBjb21tYW5kWzBdICYmIGNvbW1hbmRb
MV07IGNvbW1hbmQgKz0gMikgeworICAgICAgICB2b2lkKiBwdHIgPSBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29tbWFuZFsxXSkpOworICAgICAgICBzd2l0Y2gg
KGNvbW1hbmRbMF0pIHsKKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgICBFWFBFQ1RfVFJV
RShzZXQuYWRkKHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyEnOgor
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHNldC5hZGQocHRyKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnPSc6CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFp
bnMocHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAg
ICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKHB0cikpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNldCwgRW1wdHkp
Cit7CisgICAgZG9UZXN0KCIiKTsKK30KKworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQs
IEFkZE9uZUVsZW1lbnQpCit7CisgICAgZG9UZXN0KCIreD14LXktMCIpOworfQorCitURVNUKFdU
Rl9Db25jdXJyZW50UHRySGFzaFNldCwgQWRkT25lRWxlbWVudE11bHRpcGxlVGltZXMpCit7Cisg
ICAgZG9UZXN0KCIreCF4IXgheCF4IXgheCF4IXgheCF4PXgteS0wIik7Cit9CisKK1RFU1QoV1RG
X0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRPbmVFbGVtZW50TWFueVRpbWVzKQoreworICAgIGRv
VGVzdCgiK3gheCF4IXgheCF4IXgheCF4IXgheD14LXktMCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4
IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgh
eCF4IXgheCF4Iik7Cit9CisKK1RFU1QoV1RGX0NvbmN1cnJlbnRQdHJIYXNoU2V0LCBBZGRMb3Rz
T2ZFbGVtZW50cykKK3sKKyAgICBkb1Rlc3QoIisxKzIrMys0KzUrNis3KzgrOSswK3ErdytlK3Ir
dCt5K3UraStvK3ArYStzK2QrZitnK2graitrK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStV
K0krTytQK0ErUytEK0YrRytIK0orSytMK1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9
MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1X
PUU9Uj1UPVk9VT1JPU89UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30K
KworVEVTVChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZExvdHNPZkVsZW1lbnRzTWFueVRp
bWVzKQoreworICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStp
K28rcCthK3MrZCtmK2craCtqK2srbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStPK1Ar
QStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1l
PXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1SPVQ9
WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiExITIhMyE0ITUhNiE3
ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4h
bSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEy
ITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoh
eCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFW
IUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWch
aCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFL
IUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUhNiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAh
YSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFiIW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFE
IUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0hMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQh
eSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFsIXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJ
IU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVghQyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAh
cSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFmIWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFF
IVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUghSiFLIUwhWiFYIUMhViFCIU4hTSExITIhMyE0ITUh
NiE3ITghOSEwIXEhdyFlIXIhdCF5IXUhaSFvIXAhYSFzIWQhZiFnIWghaiFrIWwheiF4IWMhdiFi
IW4hbSFRIVchRSFSIVQhWSFVIUkhTyFQIUEhUyFEIUYhRyFIIUohSyFMIVohWCFDIVYhQiFOIU0h
MSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQheSF1IWkhbyFwIWEhcyFkIWYhZyFoIWohayFs
IXoheCFjIXYhYiFuIW0hUSFXIUUhUiFUIVkhVSFJIU8hUCFBIVMhRCFGIUchSCFKIUshTCFaIVgh
QyFWIUIhTiFNITEhMiEzITQhNSE2ITchOCE5ITAhcSF3IWUhciF0IXkhdSFpIW8hcCFhIXMhZCFm
IWchaCFqIWshbCF6IXghYyF2IWIhbiFtIVEhVyFFIVIhVCFZIVUhSSFPIVAhQSFTIUQhRiFHIUgh
SiFLIUwhWiFYIUMhViFCIU4hTSIpOworfQorCitURVNUKFdURl9Db25jdXJyZW50UHRySGFzaFNl
dCwgQWRkTG90c09mRWxlbWVudHNBbmRRdWVyeVNvbWVCZWZvcmVBZGRpbmdUaGVSZXN0KQorewor
ICAgIGRvVGVzdCgiKzErMiszKzQrNSs2KzcrOCs5KzArcSt3K2Urcit0K3krdStpK28rcCthK3Mr
ZCtmK2craCtqK2s9MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9ZT1yPXQ9eT11PWk9bz1wPWE9cz1k
PWY9Zz1oPWo9ay1sLXoteC1jLXYtYi1uLW0tUS1XLUUtUi1ULVktVS1JLU8tUC1BLVMtRC1GLUct
SC1KLUstTC1aLVgtQy1WLUItTi1NK2wreit4K2MrditiK24rbStRK1crRStSK1QrWStVK0krTytQ
K0ErUytEK0YrRytIK0orSytMK1orWCtDK1YrQitOK009MT0yPTM9ND01PTY9Nz04PTk9MD1xPXc9
ZT1yPXQ9eT11PWk9bz1wPWE9cz1kPWY9Zz1oPWo9az1sPXo9eD1jPXY9Yj1uPW09UT1XPUU9Uj1U
PVk9VT1JPU89UD1BPVM9RD1GPUc9SD1KPUs9TD1aPVg9Qz1WPUI9Tj1NLS4iKTsKK30KKworVEVT
VChXVEZfQ29uY3VycmVudFB0ckhhc2hTZXQsIEFkZFNvbWVFbGVtZW50c011bHRpcGxlVGltZXNU
aGVuQWRkVGhlUmVzdEFuZFF1ZXJ5U29tZUJlZm9yZUFkZGluZ1RoZVJlc3QpCit7CisgICAgZG9U
ZXN0KCIrMSsyKzMrNCs1KzYrNys4KzkrMCtxK3crZStyK3QhMSEyITMhNCE1ITYhNyE4ITkhMCFx
IXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkh
MCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4
ITkhMCFxIXchZSFyIXQhMSEyITMhNCE1ITYhNyE4ITkhMCFxIXchZSFyIXQreSt1K2krbytwK2Er
cytkK2YrZytoK2oraz0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9dz1lPXI9dD15PXU9aT1vPXA9YT1z
PWQ9Zj1nPWg9aj1rLWwtei14LWMtdi1iLW4tbS1RLVctRS1SLVQtWS1VLUktTy1QLUEtUy1ELUYt
Ry1ILUotSy1MLVotWC1DLVYtQi1OLU0rbCt6K3grYyt2K2IrbittK1ErVytFK1IrVCtZK1UrSStP
K1ArQStTK0QrRitHK0grSitLK0wrWitYK0MrVitCK04rTT0xPTI9Mz00PTU9Nj03PTg9OT0wPXE9
dz1lPXI9dD15PXU9aT1vPXA9YT1zPWQ9Zj1nPWg9aj1rPWw9ej14PWM9dj1iPW49bT1RPVc9RT1S
PVQ9WT1VPUk9Tz1QPUE9Uz1EPUY9Rz1IPUo9Sz1MPVo9WD1DPVY9Qj1OPU0tLiIpOworfQorCit9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisK
</data>

          </attachment>
      

    </bug>

</bugzilla>